mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-09-19 21:06:42 +00:00
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:
parent
90550856e5
commit
1aa640c7d7
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 }
|
||||
};
|
||||
|
@ -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 }
|
||||
|
@ -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 }
|
||||
|
@ -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 }
|
||||
};
|
||||
|
@ -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 }
|
||||
|
@ -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 }
|
||||
|
@ -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,
|
||||
},
|
||||
|
@ -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 }
|
||||
|
@ -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,
|
||||
},
|
||||
|
@ -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 }
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user