lavc/hevcdec: do not unref current frame on frame_end() failure

It's a race with frame threading.
release/7.1
Anton Khirnov 8 months ago
parent d725c737fe
commit ccd391d6a3
  1. 5
      libavcodec/hevc/hevcdec.c

@ -3135,17 +3135,14 @@ static int hevc_frame_end(HEVCContext *s)
if (ret < 0) { if (ret < 0) {
av_log(s->avctx, AV_LOG_ERROR, av_log(s->avctx, AV_LOG_ERROR,
"hardware accelerator failed to decode picture\n"); "hardware accelerator failed to decode picture\n");
ff_hevc_unref_frame(s->cur_frame, ~0);
return ret; return ret;
} }
} else { } else {
if (s->avctx->err_recognition & AV_EF_CRCCHECK && if (s->avctx->err_recognition & AV_EF_CRCCHECK &&
s->sei.picture_hash.is_md5) { s->sei.picture_hash.is_md5) {
ret = verify_md5(s, s->cur_frame->f); ret = verify_md5(s, s->cur_frame->f);
if (ret < 0 && s->avctx->err_recognition & AV_EF_EXPLODE) { if (ret < 0 && s->avctx->err_recognition & AV_EF_EXPLODE)
ff_hevc_unref_frame(s->cur_frame, ~0);
return ret; return ret;
}
} }
} }
s->sei.picture_hash.is_md5 = 0; s->sei.picture_hash.is_md5 = 0;

Loading…
Cancel
Save