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:
wm4 2015-10-19 17:49:30 +02:00
parent 667b968939
commit 0ab6031d76
1 changed files with 7 additions and 3 deletions

View File

@ -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, &params);
vd->codec_pts = mp_pts_from_av(ctx->pic->pkt_pts, NULL);