mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-02 03:06:28 +02:00
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:
parent
b697326a68
commit
e6b990e25d
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user