libavcodec/qsvdec.c: using queue count to unref frame

MSDK vc1 and av1 sometimes output frame into the same suface, but
ffmpeg-qsv assume the surface will be used only once, so it will
unref the frame when it receives the output surface. Now change
it to unref frame according to queue count.

Signed-off-by: Wenbin Chen <wenbin.chen@intel.com>
Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
Chen,Wenbin 2021-03-12 10:44:06 +08:00 committed by Haihao Xiang
parent b697326a68
commit e6b990e25d
1 changed files with 2 additions and 2 deletions

View File

@ -570,7 +570,7 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q,
return AVERROR_BUG;
}
out_frame->queued = 1;
out_frame->queued += 1;
av_fifo_generic_write(q->async_fifo, &out_frame, sizeof(out_frame), NULL);
av_fifo_generic_write(q->async_fifo, &sync, sizeof(sync), NULL);
} else {
@ -583,7 +583,7 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q,
av_fifo_generic_read(q->async_fifo, &out_frame, sizeof(out_frame), NULL);
av_fifo_generic_read(q->async_fifo, &sync, sizeof(sync), NULL);
out_frame->queued = 0;
out_frame->queued -= 1;
if (avctx->pix_fmt != AV_PIX_FMT_QSV) {
do {