mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-22 07:20:45 +00:00
lavc/vaapi_decode: Use dynamic frame pool if possible
libva2 doesn't require a fixed surface-array any more, so we may use dynamic frame pool for decoding when libva2 is available, which allows a downstream element stores more frames from VAAPI decoders and fixes the error below: $ ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi \ -i input.mp4 -c:v hevc_vaapi -f null - ... [h264 @ 0x557a075a1400] get_buffer() failed [h264 @ 0x557a075a1400] thread_get_buffer() failed [h264 @ 0x557a075a1400] decode_slice_header error [h264 @ 0x557a075a1400] no frame! Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
parent
1abba59738
commit
41e3d36a39
@ -599,22 +599,26 @@ static int vaapi_decode_make_config(AVCodecContext *avctx,
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
frames->initial_pool_size = 1;
|
if (CONFIG_VAAPI_1)
|
||||||
// Add per-codec number of surfaces used for storing reference frames.
|
frames->initial_pool_size = 0;
|
||||||
switch (avctx->codec_id) {
|
else {
|
||||||
case AV_CODEC_ID_H264:
|
frames->initial_pool_size = 1;
|
||||||
case AV_CODEC_ID_HEVC:
|
// Add per-codec number of surfaces used for storing reference frames.
|
||||||
case AV_CODEC_ID_AV1:
|
switch (avctx->codec_id) {
|
||||||
frames->initial_pool_size += 16;
|
case AV_CODEC_ID_H264:
|
||||||
break;
|
case AV_CODEC_ID_HEVC:
|
||||||
case AV_CODEC_ID_VP9:
|
case AV_CODEC_ID_AV1:
|
||||||
frames->initial_pool_size += 8;
|
frames->initial_pool_size += 16;
|
||||||
break;
|
break;
|
||||||
case AV_CODEC_ID_VP8:
|
case AV_CODEC_ID_VP9:
|
||||||
frames->initial_pool_size += 3;
|
frames->initial_pool_size += 8;
|
||||||
break;
|
break;
|
||||||
default:
|
case AV_CODEC_ID_VP8:
|
||||||
frames->initial_pool_size += 2;
|
frames->initial_pool_size += 3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
frames->initial_pool_size += 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user