mirror of https://github.com/mpv-player/mpv
vd_lavc: continue decoding properly after decoding failure
Commit 12cd48a8
started setting the hwdec_failed field even if hwdec was
not active, and because it also checked this field even if hwdec was not
active, broke decoding forever.
Fix this, and also avoid a memory leak or API misuse by releasing the
decoded picture. Passing an unreleased frame to the decoder has as far
as I know no defined effects.
This commit is contained in:
parent
667b968939
commit
0ab6031d76
|
@ -625,9 +625,8 @@ static void decode(struct dec_video *vd, struct demux_packet *packet,
|
|||
ret = avcodec_decode_video2(avctx, ctx->pic, &got_picture, &pkt);
|
||||
hwdec_unlock(ctx);
|
||||
|
||||
if (ctx->hwdec_failed || ret < 0) {
|
||||
if (ret < 0)
|
||||
MP_WARN(vd, "Error while decoding frame!\n");
|
||||
if (ret < 0) {
|
||||
MP_WARN(vd, "Error while decoding frame!\n");
|
||||
ctx->hwdec_failed = true;
|
||||
return;
|
||||
}
|
||||
|
@ -636,6 +635,11 @@ static void decode(struct dec_video *vd, struct demux_packet *packet,
|
|||
if (!got_picture)
|
||||
return;
|
||||
|
||||
if (ctx->hwdec && ctx->hwdec_failed) {
|
||||
av_frame_unref(ctx->pic);
|
||||
return;
|
||||
}
|
||||
|
||||
struct mp_image_params params;
|
||||
update_image_params(vd, ctx->pic, ¶ms);
|
||||
vd->codec_pts = mp_pts_from_av(ctx->pic->pkt_pts, NULL);
|
||||
|
|
Loading…
Reference in New Issue