vd_lavc: fix broken assert()

This assert() sometimes triggered (and still triggers) with lavc API
bugs. It tries to check that at least 1 plane is set to a non-NULL
value. Obviously, a valid frame returned by successful decoding should
never have it.

The problem is that some hwdecs use integer surface IDs cast to a
pointer. Recently, it happened that newer Intel drivers started using
surface ID 0 under certain circumstances (for unknown reasons), which
triggers this assert.

Just get rid of it.

For the sake of #7185, add an assert() specifically for nvdec. That
failure needs to be further analyzed, is probably a FFmpeg bug, and
without this assert() would just crash somewhere further down the video
chain.

Fixes: #7261
This commit is contained in:
wm4 2019-12-15 23:40:11 +01:00
parent 2c6d42e704
commit 4ae43a1c40
1 changed files with 2 additions and 1 deletions

View File

@ -1062,7 +1062,8 @@ static int decode_frame(struct mp_filter *vd)
av_frame_unref(ctx->pic); av_frame_unref(ctx->pic);
return ret; return ret;
} }
assert(mpi->planes[0] || mpi->planes[3]); if (mpi->imgfmt == IMGFMT_CUDA)
assert(mpi->planes[0]);
mpi->pts = mp_pts_from_av(ctx->pic->pts, &ctx->codec_timebase); mpi->pts = mp_pts_from_av(ctx->pic->pts, &ctx->codec_timebase);
mpi->dts = mp_pts_from_av(ctx->pic->pkt_dts, &ctx->codec_timebase); mpi->dts = mp_pts_from_av(ctx->pic->pkt_dts, &ctx->codec_timebase);