summaryrefslogtreecommitdiffstats
path: root/libavcodec/decode.c
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2018-01-29 22:18:00 +0000
committerMark Thompson <sw@jkqxz.net>2018-02-11 22:00:33 +0000
commit5b145290df2998a9836a93eb925289c6c8b63af0 (patch)
treed198e8d728ecdbcfc7eee78c22ac703538d48b29 /libavcodec/decode.c
parentfd36cf6bf6524247a8ff6788c028836fe7d9fd20 (diff)
downloadffmpeg-streaming-5b145290df2998a9836a93eb925289c6c8b63af0.zip
ffmpeg-streaming-5b145290df2998a9836a93eb925289c6c8b63af0.tar.gz
lavc: Add support for increasing hardware frame pool sizes
AVCodecContext.extra_hw_frames is added to the size of hardware frame pools created by libavcodec for APIs which require fixed-size pools. This allows the user to keep references to a greater number of frames after decode, which may be necessary for some use-cases. It is also added to the initial_pool_size value returned by avcodec_get_hw_frames_parameters() if a fixed-size pool is required.
Diffstat (limited to 'libavcodec/decode.c')
-rw-r--r--libavcodec/decode.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index 12a95d4..e024a32 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -791,6 +791,15 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
ret = hwa->frame_params(avctx, frames_ref);
if (ret >= 0) {
+ AVHWFramesContext *frames_ctx = (AVHWFramesContext*)frames_ref->data;
+
+ if (frames_ctx->initial_pool_size) {
+ // If the user has requested that extra output surfaces be
+ // available then add them here.
+ if (avctx->extra_hw_frames > 0)
+ frames_ctx->initial_pool_size += avctx->extra_hw_frames;
+ }
+
*out_frames_ref = frames_ref;
} else {
av_buffer_unref(&frames_ref);
OpenPOWER on IntegriCloud