diff options
author | Mark Thompson <sw@jkqxz.net> | 2018-01-29 22:18:00 +0000 |
---|---|---|
committer | Mark Thompson <sw@jkqxz.net> | 2018-02-11 22:00:33 +0000 |
commit | 5b145290df2998a9836a93eb925289c6c8b63af0 (patch) | |
tree | d198e8d728ecdbcfc7eee78c22ac703538d48b29 /libavcodec/decode.c | |
parent | fd36cf6bf6524247a8ff6788c028836fe7d9fd20 (diff) | |
download | ffmpeg-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.c | 9 |
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); |