Commit 1aa640c7 authored by Andreas Rheinhardt's avatar Andreas Rheinhardt

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: 's avatarNicolas George <george@nsup.org>
Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@outlook.com>
parent 90550856
...@@ -88,8 +88,8 @@ AVFrame *ff_get_audio_buffer(AVFilterLink *link, int nb_samples) ...@@ -88,8 +88,8 @@ AVFrame *ff_get_audio_buffer(AVFilterLink *link, int nb_samples)
{ {
AVFrame *ret = NULL; AVFrame *ret = NULL;
if (link->dstpad->get_audio_buffer) if (link->dstpad->get_buffer.audio)
ret = link->dstpad->get_audio_buffer(link, nb_samples); ret = link->dstpad->get_buffer.audio(link, nb_samples);
if (!ret) if (!ret)
ret = ff_default_get_audio_buffer(link, nb_samples); ret = ff_default_get_audio_buffer(link, nb_samples);
......
...@@ -313,9 +313,11 @@ static av_cold int init(AVFilterContext *ctx) ...@@ -313,9 +313,11 @@ static av_cold int init(AVFilterContext *ctx)
for (str = 0; str < cat->nb_streams[type]; str++) { for (str = 0; str < cat->nb_streams[type]; str++) {
AVFilterPad pad = { AVFilterPad pad = {
.type = type, .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); pad.name = av_asprintf("in%d:%c%d", seg, "va"[type], str);
if ((ret = ff_insert_inpad(ctx, ctx->nb_inputs, &pad)) < 0) { if ((ret = ff_insert_inpad(ctx, ctx->nb_inputs, &pad)) < 0) {
av_freep(&pad.name); av_freep(&pad.name);
......
...@@ -167,9 +167,9 @@ static av_cold int init(AVFilterContext *ctx) ...@@ -167,9 +167,9 @@ static av_cold int init(AVFilterContext *ctx)
switch (outpad->type) { switch (outpad->type) {
case AVMEDIA_TYPE_VIDEO: 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: 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: default:
av_assert0(0); av_assert0(0);
} }
......
...@@ -61,20 +61,18 @@ struct AVFilterPad { ...@@ -61,20 +61,18 @@ struct AVFilterPad {
enum AVMediaType type; enum AVMediaType type;
/** /**
* Callback function to get a video buffer. If NULL, the filter system will * Callback functions to get a video/audio buffers. If NULL,
* use ff_default_get_video_buffer(). * the filter system will use ff_default_get_video_buffer() for video
* and ff_default_get_audio_buffer() for audio.
* *
* Input video pads only. * The state of the union is determined by type.
*/
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().
* *
* 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 * Filtering callback. This is where a filter receives a frame with
......
...@@ -149,7 +149,7 @@ static const AVFilterPad avfilter_vf_format_inputs[] = { ...@@ -149,7 +149,7 @@ static const AVFilterPad avfilter_vf_format_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer, .get_buffer.video = ff_null_get_video_buffer,
}, },
{ NULL } { NULL }
}; };
...@@ -188,7 +188,7 @@ static const AVFilterPad avfilter_vf_noformat_inputs[] = { ...@@ -188,7 +188,7 @@ static const AVFilterPad avfilter_vf_noformat_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer, .get_buffer.video = ff_null_get_video_buffer,
}, },
{ NULL } { NULL }
}; };
......
...@@ -404,7 +404,7 @@ static const AVFilterPad hwmap_inputs[] = { ...@@ -404,7 +404,7 @@ static const AVFilterPad hwmap_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = hwmap_get_buffer, .get_buffer.video = hwmap_get_buffer,
.filter_frame = hwmap_filter_frame, .filter_frame = hwmap_filter_frame,
}, },
{ NULL } { NULL }
......
...@@ -438,7 +438,7 @@ static const AVFilterPad avfilter_vf_pad_inputs[] = { ...@@ -438,7 +438,7 @@ static const AVFilterPad avfilter_vf_pad_inputs[] = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input, .config_props = config_input,
.get_video_buffer = get_video_buffer, .get_buffer.video = get_video_buffer,
.filter_frame = filter_frame, .filter_frame = filter_frame,
}, },
{ NULL } { NULL }
......
...@@ -623,7 +623,7 @@ static const AVFilterPad cudascale_inputs[] = { ...@@ -623,7 +623,7 @@ static const AVFilterPad cudascale_inputs[] = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.filter_frame = cudascale_filter_frame, .filter_frame = cudascale_filter_frame,
.get_video_buffer = cudascale_get_video_buffer, .get_buffer.video = cudascale_get_video_buffer,
}, },
{ NULL } { NULL }
}; };
......
...@@ -97,7 +97,7 @@ static const AVFilterPad swapuv_inputs[] = { ...@@ -97,7 +97,7 @@ static const AVFilterPad swapuv_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer, .get_buffer.video = get_video_buffer,
.filter_frame = filter_frame, .filter_frame = filter_frame,
}, },
{ NULL } { NULL }
......
...@@ -383,7 +383,7 @@ static const AVFilterPad avfilter_vf_transpose_inputs[] = { ...@@ -383,7 +383,7 @@ static const AVFilterPad avfilter_vf_transpose_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer, .get_buffer.video = get_video_buffer,
.filter_frame = filter_frame, .filter_frame = filter_frame,
}, },
{ NULL } { NULL }
......
...@@ -256,7 +256,7 @@ static const AVFilterPad transpose_opencl_inputs[] = { ...@@ -256,7 +256,7 @@ static const AVFilterPad transpose_opencl_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer, .get_buffer.video = get_video_buffer,
.filter_frame = &transpose_opencl_filter_frame, .filter_frame = &transpose_opencl_filter_frame,
.config_props = &ff_opencl_filter_config_input, .config_props = &ff_opencl_filter_config_input,
}, },
......
...@@ -257,7 +257,7 @@ static const AVFilterPad transpose_vaapi_inputs[] = { ...@@ -257,7 +257,7 @@ static const AVFilterPad transpose_vaapi_inputs[] = {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.filter_frame = &transpose_vaapi_filter_frame, .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, .config_props = &ff_vaapi_vpp_config_input,
}, },
{ NULL } { NULL }
......
...@@ -129,7 +129,7 @@ static const AVFilterPad avfilter_vf_vflip_inputs[] = { ...@@ -129,7 +129,7 @@ static const AVFilterPad avfilter_vf_vflip_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer, .get_buffer.video = get_video_buffer,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.config_props = config_input, .config_props = config_input,
}, },
......
...@@ -402,13 +402,13 @@ static const AVFilterPad xfade_opencl_inputs[] = { ...@@ -402,13 +402,13 @@ static const AVFilterPad xfade_opencl_inputs[] = {
{ {
.name = "main", .name = "main",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer, .get_buffer.video = get_video_buffer,
.config_props = &ff_opencl_filter_config_input, .config_props = &ff_opencl_filter_config_input,
}, },
{ {
.name = "xfade", .name = "xfade",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer, .get_buffer.video = get_video_buffer,
.config_props = &ff_opencl_filter_config_input, .config_props = &ff_opencl_filter_config_input,
}, },
{ NULL } { NULL }
......
...@@ -101,8 +101,8 @@ AVFrame *ff_get_video_buffer(AVFilterLink *link, int w, int h) ...@@ -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); FF_TPRINTF_START(NULL, get_video_buffer); ff_tlog_link(NULL, link, 0);
if (link->dstpad->get_video_buffer) if (link->dstpad->get_buffer.video)
ret = link->dstpad->get_video_buffer(link, w, h); ret = link->dstpad->get_buffer.video(link, w, h);
if (!ret) if (!ret)
ret = ff_default_get_video_buffer(link, w, h); ret = ff_default_get_video_buffer(link, w, h);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment