avfilter/internal: Combine get_(audio|video)_buffer into union

These fields are mutually exclusive, so putting them in a union
is possible and makes AVFilterPad smaller.

Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2021-08-17 05:48:27 +02:00
parent 90550856e5
commit 1aa640c7d7
15 changed files with 31 additions and 31 deletions

View File

@ -88,8 +88,8 @@ AVFrame *ff_get_audio_buffer(AVFilterLink *link, int nb_samples)
{
AVFrame *ret = NULL;
if (link->dstpad->get_audio_buffer)
ret = link->dstpad->get_audio_buffer(link, nb_samples);
if (link->dstpad->get_buffer.audio)
ret = link->dstpad->get_buffer.audio(link, nb_samples);
if (!ret)
ret = ff_default_get_audio_buffer(link, nb_samples);

View File

@ -313,9 +313,11 @@ static av_cold int init(AVFilterContext *ctx)
for (str = 0; str < cat->nb_streams[type]; str++) {
AVFilterPad pad = {
.type = type,
.get_video_buffer = get_video_buffer,
.get_audio_buffer = get_audio_buffer,
};
if (type == AVMEDIA_TYPE_VIDEO)
pad.get_buffer.video = get_video_buffer;
else
pad.get_buffer.audio = get_audio_buffer;
pad.name = av_asprintf("in%d:%c%d", seg, "va"[type], str);
if ((ret = ff_insert_inpad(ctx, ctx->nb_inputs, &pad)) < 0) {
av_freep(&pad.name);

View File

@ -167,9 +167,9 @@ static av_cold int init(AVFilterContext *ctx)
switch (outpad->type) {
case AVMEDIA_TYPE_VIDEO:
inpad.get_video_buffer = ff_null_get_video_buffer; break;
inpad.get_buffer.video = ff_null_get_video_buffer; break;
case AVMEDIA_TYPE_AUDIO:
inpad.get_audio_buffer = ff_null_get_audio_buffer; break;
inpad.get_buffer.audio = ff_null_get_audio_buffer; break;
default:
av_assert0(0);
}

View File

@ -61,20 +61,18 @@ struct AVFilterPad {
enum AVMediaType type;
/**
* Callback function to get a video buffer. If NULL, the filter system will
* use ff_default_get_video_buffer().
* Callback functions to get a video/audio buffers. If NULL,
* the filter system will use ff_default_get_video_buffer() for video
* and ff_default_get_audio_buffer() for audio.
*
* Input video pads only.
*/
AVFrame *(*get_video_buffer)(AVFilterLink *link, int w, int h);
/**
* Callback function to get an audio buffer. If NULL, the filter system will
* use ff_default_get_audio_buffer().
* The state of the union is determined by type.
*
* Input audio pads only.
* Input pads only.
*/
AVFrame *(*get_audio_buffer)(AVFilterLink *link, int nb_samples);
union {
AVFrame *(*video)(AVFilterLink *link, int w, int h);
AVFrame *(*audio)(AVFilterLink *link, int nb_samples);
} get_buffer;
/**
* Filtering callback. This is where a filter receives a frame with

View File

@ -149,7 +149,7 @@ static const AVFilterPad avfilter_vf_format_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer,
.get_buffer.video = ff_null_get_video_buffer,
},
{ NULL }
};
@ -188,7 +188,7 @@ static const AVFilterPad avfilter_vf_noformat_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer,
.get_buffer.video = ff_null_get_video_buffer,
},
{ NULL }
};

View File

@ -404,7 +404,7 @@ static const AVFilterPad hwmap_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = hwmap_get_buffer,
.get_buffer.video = hwmap_get_buffer,
.filter_frame = hwmap_filter_frame,
},
{ NULL }

View File

@ -438,7 +438,7 @@ static const AVFilterPad avfilter_vf_pad_inputs[] = {
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.filter_frame = filter_frame,
},
{ NULL }

View File

@ -623,7 +623,7 @@ static const AVFilterPad cudascale_inputs[] = {
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.filter_frame = cudascale_filter_frame,
.get_video_buffer = cudascale_get_video_buffer,
.get_buffer.video = cudascale_get_video_buffer,
},
{ NULL }
};

View File

@ -97,7 +97,7 @@ static const AVFilterPad swapuv_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.filter_frame = filter_frame,
},
{ NULL }

View File

@ -383,7 +383,7 @@ static const AVFilterPad avfilter_vf_transpose_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.filter_frame = filter_frame,
},
{ NULL }

View File

@ -256,7 +256,7 @@ static const AVFilterPad transpose_opencl_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.filter_frame = &transpose_opencl_filter_frame,
.config_props = &ff_opencl_filter_config_input,
},

View File

@ -257,7 +257,7 @@ static const AVFilterPad transpose_vaapi_inputs[] = {
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.filter_frame = &transpose_vaapi_filter_frame,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.config_props = &ff_vaapi_vpp_config_input,
},
{ NULL }

View File

@ -129,7 +129,7 @@ static const AVFilterPad avfilter_vf_vflip_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.filter_frame = filter_frame,
.config_props = config_input,
},

View File

@ -402,13 +402,13 @@ static const AVFilterPad xfade_opencl_inputs[] = {
{
.name = "main",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.config_props = &ff_opencl_filter_config_input,
},
{
.name = "xfade",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.get_buffer.video = get_video_buffer,
.config_props = &ff_opencl_filter_config_input,
},
{ NULL }

View File

@ -101,8 +101,8 @@ AVFrame *ff_get_video_buffer(AVFilterLink *link, int w, int h)
FF_TPRINTF_START(NULL, get_video_buffer); ff_tlog_link(NULL, link, 0);
if (link->dstpad->get_video_buffer)
ret = link->dstpad->get_video_buffer(link, w, h);
if (link->dstpad->get_buffer.video)
ret = link->dstpad->get_buffer.video(link, w, h);
if (!ret)
ret = ff_default_get_video_buffer(link, w, h);