mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
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.
This commit is contained in:
parent
fd36cf6bf6
commit
5b145290df
@ -13,6 +13,9 @@ libavutil: 2017-03-23
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2018-02-xx - xxxxxxx - lavc 58.9.0 - avcodec.h
|
||||||
|
Add AVCodecContext.extra_hw_frames.
|
||||||
|
|
||||||
2017-xx-xx - xxxxxxx - lavc 58.8.0 - avcodec.h
|
2017-xx-xx - xxxxxxx - lavc 58.8.0 - avcodec.h
|
||||||
Add const to AVCodecContext.hwaccel.
|
Add const to AVCodecContext.hwaccel.
|
||||||
|
|
||||||
|
@ -2739,6 +2739,20 @@ typedef struct AVCodecContext {
|
|||||||
* AVCodecContext.get_format callback)
|
* AVCodecContext.get_format callback)
|
||||||
*/
|
*/
|
||||||
int hwaccel_flags;
|
int hwaccel_flags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Video decoding only. Sets the number of extra hardware frames which
|
||||||
|
* the decoder will allocate for use by the caller. This must be set
|
||||||
|
* before avcodec_open2() is called.
|
||||||
|
*
|
||||||
|
* Some hardware decoders require all frames that they will use for
|
||||||
|
* output to be defined in advance before decoding starts. For such
|
||||||
|
* decoders, the hardware frame pool must therefore be of a fixed size.
|
||||||
|
* The extra frames set here are on top of any number that the decoder
|
||||||
|
* needs internally in order to operate normally (for example, frames
|
||||||
|
* used as reference pictures).
|
||||||
|
*/
|
||||||
|
int extra_hw_frames;
|
||||||
} AVCodecContext;
|
} AVCodecContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -791,6 +791,15 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
|
|||||||
|
|
||||||
ret = hwa->frame_params(avctx, frames_ref);
|
ret = hwa->frame_params(avctx, frames_ref);
|
||||||
if (ret >= 0) {
|
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;
|
*out_frames_ref = frames_ref;
|
||||||
} else {
|
} else {
|
||||||
av_buffer_unref(&frames_ref);
|
av_buffer_unref(&frames_ref);
|
||||||
|
@ -419,6 +419,7 @@ static const AVOption avcodec_options[] = {
|
|||||||
{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, A|V|E },
|
{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, A|V|E },
|
||||||
#endif
|
#endif
|
||||||
{"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, V | D },
|
{"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, V | D },
|
||||||
|
{"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D },
|
||||||
{NULL},
|
{NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
#define LIBAVCODEC_VERSION_MAJOR 58
|
||||||
#define LIBAVCODEC_VERSION_MINOR 8
|
#define LIBAVCODEC_VERSION_MINOR 9
|
||||||
#define LIBAVCODEC_VERSION_MICRO 0
|
#define LIBAVCODEC_VERSION_MICRO 0
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user