lavfi: Add support for increasing hardware frame pool sizes
AVFilterContext.extra_hw_frames functions identically to the field of the same name in AVCodecContext.
This commit is contained in:
parent
cad739dace
commit
6d86cef06b
@ -13,6 +13,9 @@ libavutil: 2017-03-23
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2018-02-xx - xxxxxxx - lavfi 7.1.0 - avfilter.h
|
||||||
|
Add AVFilterContext.extra_hw_frames.
|
||||||
|
|
||||||
2018-02-xx - xxxxxxx - lavc 58.9.0 - avcodec.h
|
2018-02-xx - xxxxxxx - lavc 58.9.0 - avcodec.h
|
||||||
Add AVCodecContext.extra_hw_frames.
|
Add AVCodecContext.extra_hw_frames.
|
||||||
|
|
||||||
|
@ -368,6 +368,8 @@ static const AVOption avfilter_options[] = {
|
|||||||
{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,
|
{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,
|
||||||
{ .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, FLAGS, "thread_type" },
|
{ .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, FLAGS, "thread_type" },
|
||||||
{ "slice", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVFILTER_THREAD_SLICE }, .unit = "thread_type" },
|
{ "slice", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVFILTER_THREAD_SLICE }, .unit = "thread_type" },
|
||||||
|
{ "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, FLAGS },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -707,3 +709,24 @@ const AVClass *avfilter_get_class(void)
|
|||||||
{
|
{
|
||||||
return &avfilter_class;
|
return &avfilter_class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ff_filter_init_hw_frames(AVFilterContext *avctx, AVFilterLink *link,
|
||||||
|
int default_pool_size)
|
||||||
|
{
|
||||||
|
AVHWFramesContext *frames;
|
||||||
|
|
||||||
|
// Must already be set by caller.
|
||||||
|
av_assert0(link->hw_frames_ctx);
|
||||||
|
|
||||||
|
frames = (AVHWFramesContext*)link->hw_frames_ctx->data;
|
||||||
|
|
||||||
|
if (frames->initial_pool_size == 0) {
|
||||||
|
// Dynamic allocation is necessarily supported.
|
||||||
|
} else if (avctx->extra_hw_frames >= 0) {
|
||||||
|
frames->initial_pool_size += avctx->extra_hw_frames;
|
||||||
|
} else {
|
||||||
|
frames->initial_pool_size = default_pool_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -311,6 +311,22 @@ struct AVFilterContext {
|
|||||||
* hardware context information.
|
* hardware context information.
|
||||||
*/
|
*/
|
||||||
AVBufferRef *hw_device_ctx;
|
AVBufferRef *hw_device_ctx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the number of extra hardware frames which the filter will
|
||||||
|
* allocate on its output links for use in following filters or by
|
||||||
|
* the caller.
|
||||||
|
*
|
||||||
|
* Some hardware filters require all frames that they will use for
|
||||||
|
* output to be defined in advance before filtering starts. For such
|
||||||
|
* filters, any hardware frame pools used for output must therefore be
|
||||||
|
* of fixed size. The extra frames set here are on top of any number
|
||||||
|
* that the filter needs internally in order to operate normally.
|
||||||
|
*
|
||||||
|
* This field must be set before the graph containing this filter is
|
||||||
|
* configured.
|
||||||
|
*/
|
||||||
|
int extra_hw_frames;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -226,4 +226,21 @@ void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter
|
|||||||
*/
|
*/
|
||||||
#define FF_FILTER_FLAG_HWFRAME_AWARE (1 << 0)
|
#define FF_FILTER_FLAG_HWFRAME_AWARE (1 << 0)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform any additional setup required for hardware frames.
|
||||||
|
*
|
||||||
|
* link->hw_frames_ctx must be set before calling this function.
|
||||||
|
* Inside link->hw_frames_ctx, the fields format, sw_format, width and
|
||||||
|
* height must be set. If dynamically allocated pools are not supported,
|
||||||
|
* then initial_pool_size must also be set, to the minimum hardware frame
|
||||||
|
* pool size necessary for the filter to work (taking into account any
|
||||||
|
* frames which need to stored for use in operations as appropriate). If
|
||||||
|
* default_pool_size is nonzero, then it will be used as the pool size if
|
||||||
|
* no other modification takes place (this can be used to preserve
|
||||||
|
* compatibility).
|
||||||
|
*/
|
||||||
|
int ff_filter_init_hw_frames(AVFilterContext *avctx, AVFilterLink *link,
|
||||||
|
int default_pool_size);
|
||||||
|
|
||||||
|
|
||||||
#endif /* AVFILTER_INTERNAL_H */
|
#endif /* AVFILTER_INTERNAL_H */
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 7
|
#define LIBAVFILTER_VERSION_MAJOR 7
|
||||||
#define LIBAVFILTER_VERSION_MINOR 0
|
#define LIBAVFILTER_VERSION_MINOR 1
|
||||||
#define LIBAVFILTER_VERSION_MICRO 0
|
#define LIBAVFILTER_VERSION_MICRO 0
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user