Commit 2d9d4440 authored by Clément Bœsch's avatar Clément Bœsch

lavfi: convert remaining input/output list compound literals to named objects.

This is following 568c70e7.
parent bff576c7
...@@ -154,6 +154,25 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamplesref) ...@@ -154,6 +154,25 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamplesref)
return ret; return ret;
} }
static const AVFilterPad aconvert_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ,
},
{ NULL }
};
static const AVFilterPad aconvert_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output,
},
{ NULL }
};
AVFilter avfilter_af_aconvert = { AVFilter avfilter_af_aconvert = {
.name = "aconvert", .name = "aconvert",
.description = NULL_IF_CONFIG_SMALL("Convert the input audio to sample_fmt:channel_layout."), .description = NULL_IF_CONFIG_SMALL("Convert the input audio to sample_fmt:channel_layout."),
...@@ -161,14 +180,6 @@ AVFilter avfilter_af_aconvert = { ...@@ -161,14 +180,6 @@ AVFilter avfilter_af_aconvert = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = aconvert_inputs,
.inputs = (const AVFilterPad[]) {{ .name = "default", .outputs = aconvert_outputs,
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ, },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output, },
{ .name = NULL}},
}; };
...@@ -323,6 +323,16 @@ static av_cold int init(AVFilterContext *ctx, const char *args) ...@@ -323,6 +323,16 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
return 0; return 0;
} }
static const AVFilterPad amerge_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output,
.request_frame = request_frame,
},
{ NULL }
};
AVFilter avfilter_af_amerge = { AVFilter avfilter_af_amerge = {
.name = "amerge", .name = "amerge",
.description = NULL_IF_CONFIG_SMALL("Merge two audio streams into " .description = NULL_IF_CONFIG_SMALL("Merge two audio streams into "
...@@ -331,14 +341,7 @@ AVFilter avfilter_af_amerge = { ...@@ -331,14 +341,7 @@ AVFilter avfilter_af_amerge = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = NULL,
.inputs = (const AVFilterPad[]) { { .name = NULL } }, .outputs = amerge_outputs,
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output,
.request_frame = request_frame, },
{ .name = NULL }
},
.priv_class = &amerge_class, .priv_class = &amerge_class,
}; };
...@@ -253,6 +253,26 @@ static int request_frame(AVFilterLink *outlink) ...@@ -253,6 +253,26 @@ static int request_frame(AVFilterLink *outlink)
return ret; return ret;
} }
static const AVFilterPad aresample_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ,
},
{ NULL },
};
static const AVFilterPad aresample_outputs[] = {
{
.name = "default",
.config_props = config_output,
.request_frame = request_frame,
.type = AVMEDIA_TYPE_AUDIO,
},
{ NULL },
};
AVFilter avfilter_af_aresample = { AVFilter avfilter_af_aresample = {
.name = "aresample", .name = "aresample",
.description = NULL_IF_CONFIG_SMALL("Resample audio data."), .description = NULL_IF_CONFIG_SMALL("Resample audio data."),
...@@ -260,15 +280,6 @@ AVFilter avfilter_af_aresample = { ...@@ -260,15 +280,6 @@ AVFilter avfilter_af_aresample = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.priv_size = sizeof(AResampleContext), .priv_size = sizeof(AResampleContext),
.inputs = aresample_inputs,
.inputs = (const AVFilterPad[]) {{ .name = "default", .outputs = aresample_outputs,
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ, },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.config_props = config_output,
.request_frame = request_frame,
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL}},
}; };
...@@ -175,31 +175,33 @@ static int request_frame(AVFilterLink *outlink) ...@@ -175,31 +175,33 @@ static int request_frame(AVFilterLink *outlink)
return ret; return ret;
} }
AVFilter avfilter_af_asetnsamples = { static const AVFilterPad asetnsamples_inputs[] = {
.name = "asetnsamples",
.description = NULL_IF_CONFIG_SMALL("Set the number of samples for each output audio frames."),
.priv_size = sizeof(ASNSContext),
.init = init,
.uninit = uninit,
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ|AV_PERM_WRITE .min_perms = AV_PERM_READ | AV_PERM_WRITE,
},
{ .name = NULL }
}, },
{ NULL }
};
.outputs = (const AVFilterPad[]) { static const AVFilterPad asetnsamples_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.request_frame = request_frame, .request_frame = request_frame,
.config_props = config_props_output, .config_props = config_props_output,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_af_asetnsamples = {
.name = "asetnsamples",
.description = NULL_IF_CONFIG_SMALL("Set the number of samples for each output audio frames."),
.priv_size = sizeof(ASNSContext),
.init = init,
.uninit = uninit,
.inputs = asetnsamples_inputs,
.outputs = asetnsamples_outputs,
.priv_class = &asetnsamples_class, .priv_class = &asetnsamples_class,
}; };
...@@ -180,34 +180,43 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -180,34 +180,43 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
return 0; return 0;
} }
AVFilter avfilter_af_astreamsync = { static const AVFilterPad astreamsync_inputs[] = {
.name = "astreamsync", {
.description = NULL_IF_CONFIG_SMALL("Copy two streams of audio data " .name = "in1",
"in a configurable order."),
.priv_size = sizeof(AStreamSyncContext),
.init = init,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "in1",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
{ .name = "in2", },{
.name = "in2",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
{ .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "out1", };
static const AVFilterPad astreamsync_outputs[] = {
{
.name = "out1",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output, .config_props = config_output,
.request_frame = request_frame, }, .request_frame = request_frame,
{ .name = "out2", },{
.name = "out2",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output, .config_props = config_output,
.request_frame = request_frame, }, .request_frame = request_frame,
{ .name = NULL }
}, },
{ NULL }
};
AVFilter avfilter_af_astreamsync = {
.name = "astreamsync",
.description = NULL_IF_CONFIG_SMALL("Copy two streams of audio data "
"in a configurable order."),
.priv_size = sizeof(AStreamSyncContext),
.init = init,
.query_formats = query_formats,
.inputs = astreamsync_inputs,
.outputs = astreamsync_outputs,
}; };
...@@ -1136,6 +1136,26 @@ static int process_command(AVFilterContext *ctx, ...@@ -1136,6 +1136,26 @@ static int process_command(AVFilterContext *ctx,
return !strcmp(cmd, "tempo") ? yae_set_tempo(ctx, arg) : AVERROR(ENOSYS); return !strcmp(cmd, "tempo") ? yae_set_tempo(ctx, arg) : AVERROR(ENOSYS);
} }
static const AVFilterPad atempo_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.config_props = config_props,
.min_perms = AV_PERM_READ,
},
{ NULL }
};
static const AVFilterPad atempo_outputs[] = {
{
.name = "default",
.request_frame = request_frame,
.type = AVMEDIA_TYPE_AUDIO,
},
{ NULL }
};
AVFilter avfilter_af_atempo = { AVFilter avfilter_af_atempo = {
.name = "atempo", .name = "atempo",
.description = NULL_IF_CONFIG_SMALL("Adjust audio tempo."), .description = NULL_IF_CONFIG_SMALL("Adjust audio tempo."),
...@@ -1144,20 +1164,6 @@ AVFilter avfilter_af_atempo = { ...@@ -1144,20 +1164,6 @@ AVFilter avfilter_af_atempo = {
.query_formats = query_formats, .query_formats = query_formats,
.process_command = process_command, .process_command = process_command,
.priv_size = sizeof(ATempoContext), .priv_size = sizeof(ATempoContext),
.inputs = atempo_inputs,
.inputs = (const AVFilterPad[]) { .outputs = atempo_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.config_props = config_props,
.min_perms = AV_PERM_READ, },
{ .name = NULL}
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.request_frame = request_frame,
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL}
},
}; };
...@@ -153,19 +153,30 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -153,19 +153,30 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
return ret; return ret;
} }
static const AVFilterPad earwax_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.config_props = config_input,
.min_perms = AV_PERM_READ,
},
{ NULL }
};
static const AVFilterPad earwax_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
},
{ NULL }
};
AVFilter avfilter_af_earwax = { AVFilter avfilter_af_earwax = {
.name = "earwax", .name = "earwax",
.description = NULL_IF_CONFIG_SMALL("Widen the stereo image."), .description = NULL_IF_CONFIG_SMALL("Widen the stereo image."),
.query_formats = query_formats, .query_formats = query_formats,
.priv_size = sizeof(EarwaxContext), .priv_size = sizeof(EarwaxContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = earwax_inputs,
.type = AVMEDIA_TYPE_AUDIO, .outputs = earwax_outputs,
.filter_frame = filter_frame,
.config_props = config_input,
.min_perms = AV_PERM_READ, },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL}},
}; };
...@@ -376,6 +376,25 @@ static av_cold void uninit(AVFilterContext *ctx) ...@@ -376,6 +376,25 @@ static av_cold void uninit(AVFilterContext *ctx)
swr_free(&pan->swr); swr_free(&pan->swr);
} }
static const AVFilterPad pan_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ,
},
{ NULL }
};
static const AVFilterPad pan_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
},
{ NULL }
};
AVFilter avfilter_af_pan = { AVFilter avfilter_af_pan = {
.name = "pan", .name = "pan",
.description = NULL_IF_CONFIG_SMALL("Remix channels with coefficients (panning)."), .description = NULL_IF_CONFIG_SMALL("Remix channels with coefficients (panning)."),
...@@ -383,18 +402,6 @@ AVFilter avfilter_af_pan = { ...@@ -383,18 +402,6 @@ AVFilter avfilter_af_pan = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = pan_inputs,
.inputs = (const AVFilterPad[]) { .outputs = pan_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ, },
{ .name = NULL}
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL}
},
}; };
...@@ -162,24 +162,31 @@ static int query_formats(AVFilterContext *ctx) ...@@ -162,24 +162,31 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static const AVFilterPad silencedetect_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame,
},
{ NULL }
};
static const AVFilterPad silencedetect_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
},
{ NULL }
};
AVFilter avfilter_af_silencedetect = { AVFilter avfilter_af_silencedetect = {
.name = "silencedetect", .name = "silencedetect",
.description = NULL_IF_CONFIG_SMALL("Detect silence."), .description = NULL_IF_CONFIG_SMALL("Detect silence."),
.priv_size = sizeof(SilenceDetectContext), .priv_size = sizeof(SilenceDetectContext),
.init = init, .init = init,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = silencedetect_inputs,
.inputs = (const AVFilterPad[]) { .outputs = silencedetect_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame, },
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL }
},
.priv_class = &silencedetect_class, .priv_class = &silencedetect_class,
}; };
...@@ -172,20 +172,30 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -172,20 +172,30 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
return ff_filter_frame(outlink, insamples); return ff_filter_frame(outlink, insamples);
} }
static const AVFilterPad volume_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_WRITE,
},
{ NULL },
};
static const AVFilterPad volume_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
},
{ NULL },
};
AVFilter avfilter_af_volume = { AVFilter avfilter_af_volume = {
.name = "volume", .name = "volume",
.description = NULL_IF_CONFIG_SMALL("Change input volume."), .description = NULL_IF_CONFIG_SMALL("Change input volume."),
.query_formats = query_formats, .query_formats = query_formats,
.priv_size = sizeof(VolumeContext), .priv_size = sizeof(VolumeContext),
.init = init, .init = init,
.inputs = volume_inputs,
.inputs = (const AVFilterPad[]) {{ .name = "default", .outputs = volume_outputs,
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ|AV_PERM_WRITE},
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL}},
}; };
...@@ -131,6 +131,25 @@ static void uninit(AVFilterContext *ctx) ...@@ -131,6 +131,25 @@ static void uninit(AVFilterContext *ctx)
print_stats(ctx); print_stats(ctx);
} }
static const AVFilterPad volumedetect_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ,
},
{ NULL }
};
static const AVFilterPad volumedetect_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
},
{ NULL }
};
AVFilter avfilter_af_volumedetect = { AVFilter avfilter_af_volumedetect = {
.name = "volumedetect", .name = "volumedetect",
.description = NULL_IF_CONFIG_SMALL("Detect audio volume."), .description = NULL_IF_CONFIG_SMALL("Detect audio volume."),
...@@ -138,18 +157,6 @@ AVFilter avfilter_af_volumedetect = { ...@@ -138,18 +157,6 @@ AVFilter avfilter_af_volumedetect = {
.priv_size = sizeof(VolDetectContext), .priv_size = sizeof(VolDetectContext),
.query_formats = query_formats, .query_formats = query_formats,
.uninit = uninit, .uninit = uninit,
.inputs = volumedetect_inputs,
.inputs = (const AVFilterPad[]) { .outputs = volumedetect_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ, },
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL }
},
}; };
...@@ -242,6 +242,16 @@ static int request_frame(AVFilterLink *outlink) ...@@ -242,6 +242,16 @@ static int request_frame(AVFilterLink *outlink)
return 0; return 0;
} }
static const AVFilterPad aevalsrc_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props,
.request_frame = request_frame,
},
{ NULL }
};
AVFilter avfilter_asrc_aevalsrc = { AVFilter avfilter_asrc_aevalsrc = {
.name = "aevalsrc", .name = "aevalsrc",
.description = NULL_IF_CONFIG_SMALL("Generate an audio signal generated by an expression."), .description = NULL_IF_CONFIG_SMALL("Generate an audio signal generated by an expression."),
...@@ -250,13 +260,7 @@ AVFilter avfilter_asrc_aevalsrc = { ...@@ -250,13 +260,7 @@ AVFilter avfilter_asrc_aevalsrc = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.priv_size = sizeof(EvalContext), .priv_size = sizeof(EvalContext),
.inputs = NULL,
.inputs = (const AVFilterPad[]) {{ .name = NULL}}, .outputs = aevalsrc_outputs,
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props,
.request_frame = request_frame, },
{ .name = NULL}},
.priv_class = &aevalsrc_class, .priv_class = &aevalsrc_class,
}; };
...@@ -268,25 +268,24 @@ static int request_frame(AVFilterLink *outlink) ...@@ -268,25 +268,24 @@ static int request_frame(AVFilterLink *outlink)
return ff_filter_frame(outlink, samplesref); return ff_filter_frame(outlink, samplesref);
} }
AVFilter avfilter_asrc_flite = { static const AVFilterPad flite_outputs[] = {
.name = "flite",
.description = NULL_IF_CONFIG_SMALL("Synthesize voice from text using libflite."),
.query_formats = query_formats,
.init = init,
.uninit = uninit,
.priv_size = sizeof(FliteContext),
.inputs = (const AVFilterPad[]) {{ .name = NULL}},
.outputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props, .config_props = config_props,
.request_frame = request_frame, .request_frame = request_frame,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_asrc_flite = {
.name = "flite",
.description = NULL_IF_CONFIG_SMALL("Synthesize voice from text using libflite."),
.query_formats = query_formats,
.init = init,
.uninit = uninit,
.priv_size = sizeof(FliteContext),
.inputs = NULL,
.outputs = flite_outputs,
.priv_class = &flite_class, .priv_class = &flite_class,
}; };
...@@ -445,7 +445,7 @@ AVFilter avfilter_avf_concat = { ...@@ -445,7 +445,7 @@ AVFilter avfilter_avf_concat = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.priv_size = sizeof(ConcatContext), .priv_size = sizeof(ConcatContext),
.inputs = (const AVFilterPad[]) { { .name = NULL } }, .inputs = NULL,
.outputs = (const AVFilterPad[]) { { .name = NULL } }, .outputs = NULL,
.priv_class = &concat_class, .priv_class = &concat_class,
}; };
...@@ -298,33 +298,34 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -298,33 +298,34 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
return 0; return 0;
} }
AVFilter avfilter_avf_showspectrum = { static const AVFilterPad showspectrum_inputs[] = {
.name = "showspectrum",
.description = NULL_IF_CONFIG_SMALL("Convert input audio to a spectrum video output."),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.priv_size = sizeof(ShowSpectrumContext),
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) { static const AVFilterPad showspectrum_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_output, .config_props = config_output,
.request_frame = request_frame, .request_frame = request_frame,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_avf_showspectrum = {
.name = "showspectrum",
.description = NULL_IF_CONFIG_SMALL("Convert input audio to a spectrum video output."),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.priv_size = sizeof(ShowSpectrumContext),
.inputs = showspectrum_inputs,
.outputs = showspectrum_outputs,
.priv_class = &showspectrum_class, .priv_class = &showspectrum_class,
}; };
...@@ -228,33 +228,34 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) ...@@ -228,33 +228,34 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
return 0; return 0;
} }
AVFilter avfilter_avf_showwaves = { static const AVFilterPad showwaves_inputs[] = {
.name = "showwaves",
.description = NULL_IF_CONFIG_SMALL("Convert input audio to a video output."),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.priv_size = sizeof(ShowWavesContext),
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) { static const AVFilterPad showwaves_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_output, .config_props = config_output,
.request_frame = request_frame, .request_frame = request_frame,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_avf_showwaves = {
.name = "showwaves",
.description = NULL_IF_CONFIG_SMALL("Convert input audio to a video output."),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.priv_size = sizeof(ShowWavesContext),
.inputs = showwaves_inputs,
.outputs = showwaves_outputs,
.priv_class = &showwaves_class, .priv_class = &showwaves_class,
}; };
...@@ -728,6 +728,16 @@ static av_cold void uninit(AVFilterContext *ctx) ...@@ -728,6 +728,16 @@ static av_cold void uninit(AVFilterContext *ctx)
avfilter_unref_bufferp(&ebur128->outpicref); avfilter_unref_bufferp(&ebur128->outpicref);
} }
static const AVFilterPad ebur128_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame,
},
{ NULL }
};
AVFilter avfilter_af_ebur128 = { AVFilter avfilter_af_ebur128 = {
.name = "ebur128", .name = "ebur128",
.description = NULL_IF_CONFIG_SMALL("EBU R128 scanner."), .description = NULL_IF_CONFIG_SMALL("EBU R128 scanner."),
...@@ -735,13 +745,6 @@ AVFilter avfilter_af_ebur128 = { ...@@ -735,13 +745,6 @@ AVFilter avfilter_af_ebur128 = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = ebur128_inputs,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame, },
{ .name = NULL }
},
.outputs = NULL, .outputs = NULL,
}; };
...@@ -518,15 +518,7 @@ end: ...@@ -518,15 +518,7 @@ end:
#if CONFIG_SENDCMD_FILTER #if CONFIG_SENDCMD_FILTER
AVFilter avfilter_vf_sendcmd = { static const AVFilterPad sendcmd_inputs[] = {
.name = "sendcmd",
.description = NULL_IF_CONFIG_SMALL("Send commands to filters."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(SendCmdContext),
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
...@@ -534,45 +526,59 @@ AVFilter avfilter_vf_sendcmd = { ...@@ -534,45 +526,59 @@ AVFilter avfilter_vf_sendcmd = {
.start_frame = process_frame, .start_frame = process_frame,
.end_frame = ff_null_end_frame, .end_frame = ff_null_end_frame,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) {
static const AVFilterPad sendcmd_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
}, },
{ .name = NULL } { NULL }
},
}; };
#endif AVFilter avfilter_vf_sendcmd = {
.name = "sendcmd",
#if CONFIG_ASENDCMD_FILTER
AVFilter avfilter_af_asendcmd = {
.name = "asendcmd",
.description = NULL_IF_CONFIG_SMALL("Send commands to filters."), .description = NULL_IF_CONFIG_SMALL("Send commands to filters."),
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.priv_size = sizeof(SendCmdContext), .priv_size = sizeof(SendCmdContext),
.inputs = sendcmd_inputs,
.outputs = sendcmd_outputs,
};
#endif
#if CONFIG_ASENDCMD_FILTER
.inputs = (const AVFilterPad[]) { static const AVFilterPad asendcmd_inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, .get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = process_frame, .filter_frame = process_frame,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) {
static const AVFilterPad asendcmd_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_af_asendcmd = {
.name = "asendcmd",
.description = NULL_IF_CONFIG_SMALL("Send commands to filters."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(SendCmdContext),
.inputs = asendcmd_inputs,
.outputs = asendcmd_outputs,
}; };
#endif #endif
...@@ -183,15 +183,7 @@ static av_cold void uninit(AVFilterContext *ctx) ...@@ -183,15 +183,7 @@ static av_cold void uninit(AVFilterContext *ctx)
} }
#if CONFIG_ASETPTS_FILTER #if CONFIG_ASETPTS_FILTER
AVFilter avfilter_af_asetpts = { static const AVFilterPad avfilter_af_asetpts_inputs[] = {
.name = "asetpts",
.description = NULL_IF_CONFIG_SMALL("Set PTS for the output audio frame."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(SetPTSContext),
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
...@@ -199,15 +191,25 @@ AVFilter avfilter_af_asetpts = { ...@@ -199,15 +191,25 @@ AVFilter avfilter_af_asetpts = {
.config_props = config_input, .config_props = config_input,
.filter_frame = filter_frame, .filter_frame = filter_frame,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) {
static const AVFilterPad avfilter_af_asetpts_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_af_asetpts = {
.name = "asetpts",
.description = NULL_IF_CONFIG_SMALL("Set PTS for the output audio frame."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(SetPTSContext),
.inputs = avfilter_af_asetpts_inputs,
.outputs = avfilter_af_asetpts_outputs,
}; };
#endif /* CONFIG_ASETPTS_FILTER */ #endif /* CONFIG_ASETPTS_FILTER */
......
...@@ -152,25 +152,32 @@ AVFilter avfilter_vf_settb = { ...@@ -152,25 +152,32 @@ AVFilter avfilter_vf_settb = {
#endif #endif
#if CONFIG_ASETTB_FILTER #if CONFIG_ASETTB_FILTER
static const AVFilterPad avfilter_af_asettb_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame,
},
{ NULL }
};
static const AVFilterPad avfilter_af_asettb_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output_props,
},
{ NULL }
};
AVFilter avfilter_af_asettb = { AVFilter avfilter_af_asettb = {
.name = "asettb", .name = "asettb",
.description = NULL_IF_CONFIG_SMALL("Set timebase for the audio output link."), .description = NULL_IF_CONFIG_SMALL("Set timebase for the audio output link."),
.init = init, .init = init,
.priv_size = sizeof(SetTBContext), .priv_size = sizeof(SetTBContext),
.inputs = avfilter_af_asettb_inputs,
.inputs = (const AVFilterPad[]) { .outputs = avfilter_af_asettb_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_frame = filter_frame, },
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output_props, },
{ .name = NULL}
},
}; };
#endif #endif
...@@ -234,6 +234,16 @@ static int vsink_query_formats(AVFilterContext *ctx) ...@@ -234,6 +234,16 @@ static int vsink_query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static const AVFilterPad ffbuffersink_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.end_frame = end_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
},
{ NULL },
};
AVFilter avfilter_vsink_ffbuffersink = { AVFilter avfilter_vsink_ffbuffersink = {
.name = "ffbuffersink", .name = "ffbuffersink",
.description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them available to the end of the filter graph."), .description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them available to the end of the filter graph."),
...@@ -242,13 +252,18 @@ AVFilter avfilter_vsink_ffbuffersink = { ...@@ -242,13 +252,18 @@ AVFilter avfilter_vsink_ffbuffersink = {
.uninit = vsink_uninit, .uninit = vsink_uninit,
.query_formats = vsink_query_formats, .query_formats = vsink_query_formats,
.inputs = ffbuffersink_inputs,
.outputs = NULL,
};
.inputs = (const AVFilterPad[]) {{ .name = "default", static const AVFilterPad buffersink_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
{ .name = NULL }}, },
.outputs = (const AVFilterPad[]) {{ .name = NULL }}, { NULL },
}; };
AVFilter avfilter_vsink_buffersink = { AVFilter avfilter_vsink_buffersink = {
...@@ -259,13 +274,8 @@ AVFilter avfilter_vsink_buffersink = { ...@@ -259,13 +274,8 @@ AVFilter avfilter_vsink_buffersink = {
.uninit = vsink_uninit, .uninit = vsink_uninit,
.query_formats = vsink_query_formats, .query_formats = vsink_query_formats,
.inputs = buffersink_inputs,
.inputs = (const AVFilterPad[]) {{ .name = "default", .outputs = NULL,
.type = AVMEDIA_TYPE_VIDEO,
.end_frame = end_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, },
{ .name = NULL }},
.outputs = (const AVFilterPad[]) {{ .name = NULL }},
}; };
static int filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref) static int filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref)
...@@ -328,6 +338,16 @@ static int asink_query_formats(AVFilterContext *ctx) ...@@ -328,6 +338,16 @@ static int asink_query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static const AVFilterPad ffabuffersink_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
},
{ NULL },
};
AVFilter avfilter_asink_ffabuffersink = { AVFilter avfilter_asink_ffabuffersink = {
.name = "ffabuffersink", .name = "ffabuffersink",
.description = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them available to the end of the filter graph."), .description = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them available to the end of the filter graph."),
...@@ -335,13 +355,18 @@ AVFilter avfilter_asink_ffabuffersink = { ...@@ -335,13 +355,18 @@ AVFilter avfilter_asink_ffabuffersink = {
.uninit = asink_uninit, .uninit = asink_uninit,
.priv_size = sizeof(BufferSinkContext), .priv_size = sizeof(BufferSinkContext),
.query_formats = asink_query_formats, .query_formats = asink_query_formats,
.inputs = ffabuffersink_inputs,
.outputs = NULL,
};
.inputs = (const AVFilterPad[]) {{ .name = "default", static const AVFilterPad abuffersink_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
{ .name = NULL }}, },
.outputs = (const AVFilterPad[]) {{ .name = NULL }}, { NULL },
}; };
AVFilter avfilter_asink_abuffersink = { AVFilter avfilter_asink_abuffersink = {
...@@ -351,13 +376,8 @@ AVFilter avfilter_asink_abuffersink = { ...@@ -351,13 +376,8 @@ AVFilter avfilter_asink_abuffersink = {
.uninit = asink_uninit, .uninit = asink_uninit,
.priv_size = sizeof(BufferSinkContext), .priv_size = sizeof(BufferSinkContext),
.query_formats = asink_query_formats, .query_formats = asink_query_formats,
.inputs = abuffersink_inputs,
.inputs = (const AVFilterPad[]) {{ .name = "default", .outputs = NULL,
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, },
{ .name = NULL }},
.outputs = (const AVFilterPad[]) {{ .name = NULL }},
}; };
/* Libav compatibility API */ /* Libav compatibility API */
......
...@@ -612,7 +612,7 @@ AVFilter avfilter_avsrc_movie = { ...@@ -612,7 +612,7 @@ AVFilter avfilter_avsrc_movie = {
.query_formats = movie_query_formats, .query_formats = movie_query_formats,
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = NULL }}, .outputs = NULL,
.priv_class = &movie_class, .priv_class = &movie_class,
}; };
...@@ -636,8 +636,8 @@ AVFilter avfilter_avsrc_amovie = { ...@@ -636,8 +636,8 @@ AVFilter avfilter_avsrc_amovie = {
.uninit = movie_uninit, .uninit = movie_uninit,
.query_formats = movie_query_formats, .query_formats = movie_query_formats,
.inputs = (const AVFilterPad[]) {{ .name = NULL }}, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = NULL }}, .outputs = NULL,
.priv_class = &amovie_class, .priv_class = &amovie_class,
}; };
......
...@@ -94,24 +94,31 @@ static int draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir) ...@@ -94,24 +94,31 @@ static int draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir)
return ff_draw_slice(inlink->dst->outputs[0], y0, h, slice_dir); return ff_draw_slice(inlink->dst->outputs[0], y0, h, slice_dir);
} }
static const AVFilterPad alphaextract_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input,
.draw_slice = draw_slice,
.min_perms = AV_PERM_READ,
},
{ NULL }
};
static const AVFilterPad alphaextract_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
},
{ NULL }
};
AVFilter avfilter_vf_alphaextract = { AVFilter avfilter_vf_alphaextract = {
.name = "alphaextract", .name = "alphaextract",
.description = NULL_IF_CONFIG_SMALL("Extract an alpha channel as a " .description = NULL_IF_CONFIG_SMALL("Extract an alpha channel as a "
"grayscale image component."), "grayscale image component."),
.priv_size = sizeof(AlphaExtractContext), .priv_size = sizeof(AlphaExtractContext),
.query_formats = query_formats, .query_formats = query_formats,
.inputs = alphaextract_inputs,
.inputs = (const AVFilterPad[]) { .outputs = alphaextract_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input,
.draw_slice = draw_slice,
.min_perms = AV_PERM_READ },
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL }
},
}; };
...@@ -176,36 +176,44 @@ static int request_frame(AVFilterLink *outlink) ...@@ -176,36 +176,44 @@ static int request_frame(AVFilterLink *outlink)
return 0; return 0;
} }
AVFilter avfilter_vf_alphamerge = { static const AVFilterPad alphamerge_inputs[] = {
.name = "alphamerge", {
.description = NULL_IF_CONFIG_SMALL("Copy the luma value of the second " .name = "main",
"input into the alpha channel of the first input."),
.uninit = uninit,
.priv_size = sizeof(AlphaMergeContext),
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "main",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input_main, .config_props = config_input_main,
.get_video_buffer = ff_null_get_video_buffer, .get_video_buffer = ff_null_get_video_buffer,
.start_frame = start_frame, .start_frame = start_frame,
.draw_slice = draw_slice, .draw_slice = draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE }, .min_perms = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE,
{ .name = "alpha", },{
.name = "alpha",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.start_frame = start_frame, .start_frame = start_frame,
.draw_slice = draw_slice, .draw_slice = draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
{ .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "default", };
static const AVFilterPad alphamerge_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_output, .config_props = config_output,
.request_frame = request_frame }, .request_frame = request_frame,
{ .name = NULL }
}, },
{ NULL }
};
AVFilter avfilter_vf_alphamerge = {
.name = "alphamerge",
.description = NULL_IF_CONFIG_SMALL("Copy the luma value of the second "
"input into the alpha channel of the first input."),
.uninit = uninit,
.priv_size = sizeof(AlphaMergeContext),
.query_formats = query_formats,
.inputs = alphamerge_inputs,
.outputs = alphamerge_outputs,
}; };
...@@ -200,29 +200,36 @@ static int end_frame(AVFilterLink *inlink) ...@@ -200,29 +200,36 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(outlink); return ff_end_frame(outlink);
} }
AVFilter avfilter_vf_ass = { static const AVFilterPad ass_inputs[] = {
.name = "ass", {
.description = NULL_IF_CONFIG_SMALL("Render subtitles onto input video using the libass library."), .name = "default",
.priv_size = sizeof(AssContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer, .get_video_buffer = ff_null_get_video_buffer,
.start_frame = ff_null_start_frame, .start_frame = ff_null_start_frame,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.config_props = config_input, .config_props = config_input,
.min_perms = AV_PERM_WRITE | AV_PERM_READ }, .min_perms = AV_PERM_WRITE | AV_PERM_READ,
{ .name = NULL}
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "default", };
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL} static const AVFilterPad ass_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
}, },
{ NULL }
};
AVFilter avfilter_vf_ass = {
.name = "ass",
.description = NULL_IF_CONFIG_SMALL("Render subtitles onto input video using the libass library."),
.priv_size = sizeof(AssContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = ass_inputs,
.outputs = ass_outputs,
.priv_class = &ass_class, .priv_class = &ass_class,
}; };
...@@ -89,26 +89,32 @@ static int end_frame(AVFilterLink *inlink) ...@@ -89,26 +89,32 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(inlink->dst->outputs[0]); return ff_end_frame(inlink->dst->outputs[0]);
} }
AVFilter avfilter_vf_bbox = { static const AVFilterPad bbox_inputs[] = {
.name = "bbox", {
.description = NULL_IF_CONFIG_SMALL("Compute bounding box for each frame."), .name = "default",
.priv_size = sizeof(BBoxContext),
.query_formats = query_formats,
.init = init,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer, .get_video_buffer = ff_null_get_video_buffer,
.start_frame = ff_null_start_frame, .start_frame = ff_null_start_frame,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ,
{ .name = NULL }
}, },
{ NULL }
};
.outputs = (const AVFilterPad[]) { static const AVFilterPad bbox_outputs[] = {
{ .name = "default", {
.type = AVMEDIA_TYPE_VIDEO }, .name = "default",
{ .name = NULL } .type = AVMEDIA_TYPE_VIDEO,
}, },
{ NULL }
};
AVFilter avfilter_vf_bbox = {
.name = "bbox",
.description = NULL_IF_CONFIG_SMALL("Compute bounding box for each frame."),
.priv_size = sizeof(BBoxContext),
.query_formats = query_formats,
.init = init,
.inputs = bbox_inputs,
.outputs = bbox_outputs,
}; };
...@@ -197,29 +197,35 @@ static int end_frame(AVFilterLink *inlink) ...@@ -197,29 +197,35 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(inlink->dst->outputs[0]); return ff_end_frame(inlink->dst->outputs[0]);
} }
AVFilter avfilter_vf_blackdetect = { static const AVFilterPad blackdetect_inputs[] = {
.name = "blackdetect", {
.description = NULL_IF_CONFIG_SMALL("Detect video intervals that are (almost) black."), .name = "default",
.priv_size = sizeof(BlackDetectContext),
.init = init,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input, .config_props = config_input,
.draw_slice = draw_slice, .draw_slice = draw_slice,
.get_video_buffer = ff_null_get_video_buffer, .get_video_buffer = ff_null_get_video_buffer,
.start_frame = ff_null_start_frame, .start_frame = ff_null_start_frame,
.end_frame = end_frame, }, .end_frame = end_frame,
{ .name = NULL }
}, },
{ NULL }
};
.outputs = (const AVFilterPad[]) { static const AVFilterPad blackdetect_outputs[] = {
{ .name = "default", {
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame, }, .request_frame = request_frame,
{ .name = NULL }
}, },
{ NULL }
};
AVFilter avfilter_vf_blackdetect = {
.name = "blackdetect",
.description = NULL_IF_CONFIG_SMALL("Detect video intervals that are (almost) black."),
.priv_size = sizeof(BlackDetectContext),
.init = init,
.query_formats = query_formats,
.inputs = blackdetect_inputs,
.outputs = blackdetect_outputs,
.priv_class = &blackdetect_class, .priv_class = &blackdetect_class,
}; };
...@@ -369,25 +369,35 @@ static int end_frame(AVFilterLink *link) ...@@ -369,25 +369,35 @@ static int end_frame(AVFilterLink *link)
static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; } static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; }
AVFilter avfilter_vf_colormatrix = { static const AVFilterPad colormatrix_inputs[] = {
.name = "colormatrix", {
.description = NULL_IF_CONFIG_SMALL("Color matrix conversion"), .name = "default",
.priv_size = sizeof(ColorMatrixContext),
.init = init,
.query_formats = query_formats,
.inputs = (AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input, .config_props = config_input,
.min_perms = AV_PERM_READ | AV_PERM_WRITE, .min_perms = AV_PERM_READ | AV_PERM_WRITE,
.start_frame = start_frame, .start_frame = start_frame,
.get_video_buffer = get_video_buffer, .get_video_buffer = get_video_buffer,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.end_frame = end_frame, }, .end_frame = end_frame,
{ .name = NULL }}, },
{ NULL }
};
.outputs = (AVFilterPad[]) {{ .name = "default", static const AVFilterPad colormatrix_outputs[] = {
.type = AVMEDIA_TYPE_VIDEO, }, {
{ .name = NULL }}, .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
},
{ NULL }
};
AVFilter avfilter_vf_colormatrix = {
.name = "colormatrix",
.description = NULL_IF_CONFIG_SMALL("Color matrix conversion"),
.priv_size = sizeof(ColorMatrixContext),
.init = init,
.query_formats = query_formats,
.inputs = colormatrix_inputs,
.outputs = colormatrix_outputs,
}; };
...@@ -235,16 +235,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -235,16 +235,7 @@ static int request_frame(AVFilterLink *outlink)
return ret; return ret;
} }
AVFilter avfilter_vf_decimate = { static const AVFilterPad decimate_inputs[] = {
.name = "decimate",
.description = NULL_IF_CONFIG_SMALL("Remove near-duplicate frames."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(DecimateContext),
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
...@@ -255,14 +246,26 @@ AVFilter avfilter_vf_decimate = { ...@@ -255,14 +246,26 @@ AVFilter avfilter_vf_decimate = {
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) {
static const AVFilterPad decimate_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame, .request_frame = request_frame,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_vf_decimate = {
.name = "decimate",
.description = NULL_IF_CONFIG_SMALL("Remove near-duplicate frames."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(DecimateContext),
.query_formats = query_formats,
.inputs = decimate_inputs,
.outputs = decimate_outputs,
}; };
...@@ -538,6 +538,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) ...@@ -538,6 +538,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
return 0; return 0;
} }
static const AVFilterPad deshake_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.draw_slice = draw_slice,
.end_frame = end_frame,
.config_props = config_props,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
},
{ NULL }
};
static const AVFilterPad deshake_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
},
{ NULL }
};
AVFilter avfilter_vf_deshake = { AVFilter avfilter_vf_deshake = {
.name = "deshake", .name = "deshake",
.description = NULL_IF_CONFIG_SMALL("Stabilize shaky video."), .description = NULL_IF_CONFIG_SMALL("Stabilize shaky video."),
...@@ -547,16 +567,6 @@ AVFilter avfilter_vf_deshake = { ...@@ -547,16 +567,6 @@ AVFilter avfilter_vf_deshake = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = deshake_inputs,
.inputs = (const AVFilterPad[]) {{ .name = "default", .outputs = deshake_outputs,
.type = AVMEDIA_TYPE_VIDEO,
.draw_slice = draw_slice,
.end_frame = end_frame,
.config_props = config_props,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE, },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
...@@ -299,29 +299,32 @@ static av_cold void uninit(AVFilterContext *ctx) ...@@ -299,29 +299,32 @@ static av_cold void uninit(AVFilterContext *ctx)
av_freep(&edgedetect->directions); av_freep(&edgedetect->directions);
} }
AVFilter avfilter_vf_edgedetect = { static const AVFilterPad edgedetect_inputs[] = {
.name = "edgedetect",
.description = NULL_IF_CONFIG_SMALL("Detect and draw edge."),
.priv_size = sizeof(EdgeDetectContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_props, .config_props = config_props,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.min_perms = AV_PERM_READ .min_perms = AV_PERM_READ,
},
{ .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { { NULL }
};
static const AVFilterPad edgedetect_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_vf_edgedetect = {
.name = "edgedetect",
.description = NULL_IF_CONFIG_SMALL("Detect and draw edge."),
.priv_size = sizeof(EdgeDetectContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = edgedetect_inputs,
.outputs = edgedetect_outputs,
}; };
...@@ -111,13 +111,7 @@ static int request_frame(AVFilterLink *outlink) ...@@ -111,13 +111,7 @@ static int request_frame(AVFilterLink *outlink)
return ret; return ret;
} }
AVFilter avfilter_vf_framestep = { static const AVFilterPad framestep_inputs[] = {
.name = "framestep",
.description = NULL_IF_CONFIG_SMALL("Select one frame every N frames."),
.init = init,
.priv_size = sizeof(FrameStepContext),
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
...@@ -126,15 +120,24 @@ AVFilter avfilter_vf_framestep = { ...@@ -126,15 +120,24 @@ AVFilter avfilter_vf_framestep = {
.draw_slice = draw_slice, .draw_slice = draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) {
static const AVFilterPad framestep_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_output_props, .config_props = config_output_props,
.request_frame = request_frame, .request_frame = request_frame,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_vf_framestep = {
.name = "framestep",
.description = NULL_IF_CONFIG_SMALL("Select one frame every N frames."),
.init = init,
.priv_size = sizeof(FrameStepContext),
.inputs = framestep_inputs,
.outputs = framestep_outputs,
}; };
...@@ -396,18 +396,7 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar ...@@ -396,18 +396,7 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
} }
AVFilter avfilter_vf_hue = { static const AVFilterPad hue_inputs[] = {
.name = "hue",
.description = NULL_IF_CONFIG_SMALL("Adjust the hue and saturation of the input video."),
.priv_size = sizeof(HueContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.process_command = process_command,
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
...@@ -416,14 +405,28 @@ AVFilter avfilter_vf_hue = { ...@@ -416,14 +405,28 @@ AVFilter avfilter_vf_hue = {
.config_props = config_props, .config_props = config_props,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) {
static const AVFilterPad hue_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
}, },
{ .name = NULL } { NULL }
}, };
AVFilter avfilter_vf_hue = {
.name = "hue",
.description = NULL_IF_CONFIG_SMALL("Adjust the hue and saturation of the input video."),
.priv_size = sizeof(HueContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.process_command = process_command,
.inputs = hue_inputs,
.outputs = hue_outputs,
.priv_class = &hue_class, .priv_class = &hue_class,
}; };
...@@ -310,27 +310,37 @@ static av_cold int init(AVFilterContext *ctx, const char *args) ...@@ -310,27 +310,37 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; } static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; }
AVFilter avfilter_vf_idet = { static const AVFilterPad idet_inputs[] = {
.name = "idet", {
.description = NULL_IF_CONFIG_SMALL("Interlace detect Filter."), .name = "default",
.priv_size = sizeof(IDETContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.start_frame = start_frame, .start_frame = start_frame,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_PRESERVE }, .min_perms = AV_PERM_PRESERVE,
{ .name = NULL}}, },
{ NULL }
};
.outputs = (const AVFilterPad[]) {{ .name = "default", static const AVFilterPad idet_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.rej_perms = AV_PERM_WRITE, .rej_perms = AV_PERM_WRITE,
.poll_frame = poll_frame, .poll_frame = poll_frame,
.request_frame = request_frame, }, .request_frame = request_frame,
{ .name = NULL}}, },
{ NULL }
};
AVFilter avfilter_vf_idet = {
.name = "idet",
.description = NULL_IF_CONFIG_SMALL("Interlace detect Filter."),
.priv_size = sizeof(IDETContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = idet_inputs,
.outputs = idet_outputs,
}; };
...@@ -863,25 +863,36 @@ static int end_frame(AVFilterLink *inlink) ...@@ -863,25 +863,36 @@ static int end_frame(AVFilterLink *inlink)
return 0; return 0;
} }
AVFilter avfilter_vf_mp = { static const AVFilterPad mp_inputs[] = {
.name = "mp", {
.description = NULL_IF_CONFIG_SMALL("Apply a libmpcodecs filter to the input video."), .name = "default",
.init = init,
.uninit = uninit,
.priv_size = sizeof(MPContext),
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.start_frame = start_frame, .start_frame = start_frame,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.config_props = config_inprops, .config_props = config_inprops,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ,
{ .name = NULL}}, },
.outputs = (const AVFilterPad[]) {{ .name = "default", { NULL }
};
static const AVFilterPad mp_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame, .request_frame = request_frame,
.config_props = config_outprops, }, .config_props = config_outprops,
{ .name = NULL}}, },
{ NULL }
};
AVFilter avfilter_vf_mp = {
.name = "mp",
.description = NULL_IF_CONFIG_SMALL("Apply a libmpcodecs filter to the input video."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(MPContext),
.query_formats = query_formats,
.inputs = mp_inputs,
.outputs = mp_outputs,
}; };
...@@ -535,28 +535,35 @@ static void uninit(AVFilterContext *ctx) ...@@ -535,28 +535,35 @@ static void uninit(AVFilterContext *ctx)
static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; } static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; }
AVFilter avfilter_vf_removelogo = { static const AVFilterPad removelogo_inputs[] = {
.name = "removelogo", {
.description = NULL_IF_CONFIG_SMALL("Remove a TV logo based on a mask image."), .name = "default",
.priv_size = sizeof(RemovelogoContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer, .get_video_buffer = ff_null_get_video_buffer,
.config_props = config_props_input, .config_props = config_props_input,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.start_frame = start_frame, .start_frame = start_frame,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_WRITE | AV_PERM_READ }, .min_perms = AV_PERM_WRITE | AV_PERM_READ,
{ .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "default", };
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL } static const AVFilterPad removelogo_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
}, },
{ NULL }
};
AVFilter avfilter_vf_removelogo = {
.name = "removelogo",
.description = NULL_IF_CONFIG_SMALL("Remove a TV logo based on a mask image."),
.priv_size = sizeof(RemovelogoContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = removelogo_inputs,
.outputs = removelogo_outputs,
}; };
...@@ -83,23 +83,30 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) ...@@ -83,23 +83,30 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
return ff_start_frame(inlink->dst->outputs[0], outpicref); return ff_start_frame(inlink->dst->outputs[0], outpicref);
} }
static const AVFilterPad setfield_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer,
.start_frame = start_frame,
},
{ NULL }
};
static const AVFilterPad setfield_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
},
{ NULL }
};
AVFilter avfilter_vf_setfield = { AVFilter avfilter_vf_setfield = {
.name = "setfield", .name = "setfield",
.description = NULL_IF_CONFIG_SMALL("Force field for the output video frame."), .description = NULL_IF_CONFIG_SMALL("Force field for the output video frame."),
.init = init, .init = init,
.priv_size = sizeof(SetFieldContext), .priv_size = sizeof(SetFieldContext),
.inputs = setfield_inputs,
.inputs = (const AVFilterPad[]) { .outputs = setfield_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer,
.start_frame = start_frame, },
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL }
},
}; };
...@@ -277,17 +277,7 @@ static int end_frame(AVFilterLink *inlink) ...@@ -277,17 +277,7 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(outlink); return ff_end_frame(outlink);
} }
AVFilter avfilter_vf_smartblur = { static const AVFilterPad smartblur_inputs[] = {
.name = "smartblur",
.description = NULL_IF_CONFIG_SMALL("Blur the input video without impacting the outlines."),
.priv_size = sizeof(SmartblurContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
...@@ -295,13 +285,26 @@ AVFilter avfilter_vf_smartblur = { ...@@ -295,13 +285,26 @@ AVFilter avfilter_vf_smartblur = {
.config_props = config_props, .config_props = config_props,
.min_perms = AV_PERM_READ, .min_perms = AV_PERM_READ,
}, },
{ .name = NULL } { NULL }
}, };
.outputs = (const AVFilterPad[]) {
static const AVFilterPad smartblur_outputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
}, },
{ .name = NULL } { NULL }
} };
AVFilter avfilter_vf_smartblur = {
.name = "smartblur",
.description = NULL_IF_CONFIG_SMALL("Blur the input video without impacting the outlines."),
.priv_size = sizeof(SmartblurContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = smartblur_inputs,
.outputs = smartblur_outputs,
}; };
...@@ -318,25 +318,32 @@ static int end_frame(AVFilterLink *inlink) ...@@ -318,25 +318,32 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(outlink); return ff_end_frame(outlink);
} }
AVFilter avfilter_vf_super2xsai = { static const AVFilterPad super2xsai_inputs[] = {
.name = "super2xsai", {
.description = NULL_IF_CONFIG_SMALL("Scale the input by 2x using the Super2xSaI pixel art algorithm."), .name = "default",
.priv_size = sizeof(Super2xSaIContext),
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input, .config_props = config_input,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ }, .min_perms = AV_PERM_READ,
{ .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "default", };
static const AVFilterPad super2xsai_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_output }, .config_props = config_output,
{ .name = NULL }
}, },
{ NULL }
};
AVFilter avfilter_vf_super2xsai = {
.name = "super2xsai",
.description = NULL_IF_CONFIG_SMALL("Scale the input by 2x using the Super2xSaI pixel art algorithm."),
.priv_size = sizeof(Super2xSaIContext),
.query_formats = query_formats,
.inputs = super2xsai_inputs,
.outputs = super2xsai_outputs,
}; };
...@@ -74,22 +74,29 @@ static int query_formats(AVFilterContext *ctx) ...@@ -74,22 +74,29 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static const AVFilterPad swapuv_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.start_frame = start_frame,
},
{ NULL }
};
static const AVFilterPad swapuv_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
},
{ NULL }
};
AVFilter avfilter_vf_swapuv = { AVFilter avfilter_vf_swapuv = {
.name = "swapuv", .name = "swapuv",
.description = NULL_IF_CONFIG_SMALL("Swap U and V components."), .description = NULL_IF_CONFIG_SMALL("Swap U and V components."),
.priv_size = 0, .priv_size = 0,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = swapuv_inputs,
.inputs = (const AVFilterPad[]) { .outputs = swapuv_outputs,
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = get_video_buffer,
.start_frame = start_frame, },
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL }
},
}; };
...@@ -219,28 +219,36 @@ static int query_formats(AVFilterContext *ctx) ...@@ -219,28 +219,36 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
AVFilter avfilter_vf_thumbnail = { static const AVFilterPad thumbnail_inputs[] = {
.name = "thumbnail", {
.description = NULL_IF_CONFIG_SMALL("Select the most representative frame in a given sequence of consecutive frames."), .name = "default",
.priv_size = sizeof(ThumbContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer, .get_video_buffer = ff_null_get_video_buffer,
.min_perms = AV_PERM_PRESERVE, .min_perms = AV_PERM_PRESERVE,
.start_frame = null_start_frame, .start_frame = null_start_frame,
.draw_slice = draw_slice, .draw_slice = draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
},{ .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "default", };
static const AVFilterPad thumbnail_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame, .request_frame = request_frame,
.poll_frame = poll_frame, .poll_frame = poll_frame,
},{ .name = NULL }
}, },
{ NULL }
};
AVFilter avfilter_vf_thumbnail = {
.name = "thumbnail",
.description = NULL_IF_CONFIG_SMALL("Select the most representative frame in a given sequence of consecutive frames."),
.priv_size = sizeof(ThumbContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = thumbnail_inputs,
.outputs = thumbnail_outputs,
}; };
...@@ -240,28 +240,35 @@ static int request_frame(AVFilterLink *outlink) ...@@ -240,28 +240,35 @@ static int request_frame(AVFilterLink *outlink)
return 0; return 0;
} }
static const AVFilterPad tile_inputs[] = {
AVFilter avfilter_vf_tile = { {
.name = "tile", .name = "default",
.description = NULL_IF_CONFIG_SMALL("Tile several successive frames together."),
.init = init,
.query_formats = query_formats,
.priv_size = sizeof(TileContext),
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.start_frame = start_frame, .start_frame = start_frame,
.draw_slice = draw_slice, .draw_slice = draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ, }, .min_perms = AV_PERM_READ,
{ .name = NULL }
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "default", };
static const AVFilterPad tile_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_props, .config_props = config_props,
.request_frame = request_frame }, .request_frame = request_frame,
{ .name = NULL }
}, },
{ NULL }
};
AVFilter avfilter_vf_tile = {
.name = "tile",
.description = NULL_IF_CONFIG_SMALL("Tile several successive frames together."),
.init = init,
.query_formats = query_formats,
.priv_size = sizeof(TileContext),
.inputs = tile_inputs,
.outputs = tile_outputs,
.priv_class = &tile_class, .priv_class = &tile_class,
}; };
...@@ -351,27 +351,34 @@ static int request_frame(AVFilterLink *outlink) ...@@ -351,27 +351,34 @@ static int request_frame(AVFilterLink *outlink)
static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; } static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; }
AVFilter avfilter_vf_tinterlace = { static const AVFilterPad tinterlace_inputs[] = {
.name = "tinterlace", {
.description = NULL_IF_CONFIG_SMALL("Perform temporal field interlacing."), .name = "default",
.priv_size = sizeof(TInterlaceContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.start_frame = start_frame, .start_frame = start_frame,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.end_frame = end_frame, }, .end_frame = end_frame,
{ .name = NULL}
}, },
.outputs = (const AVFilterPad[]) { { NULL }
{ .name = "default", };
static const AVFilterPad tinterlace_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_out_props, .config_props = config_out_props,
.request_frame = request_frame }, .request_frame = request_frame,
{ .name = NULL}
}, },
{ NULL }
};
AVFilter avfilter_vf_tinterlace = {
.name = "tinterlace",
.description = NULL_IF_CONFIG_SMALL("Perform temporal field interlacing."),
.priv_size = sizeof(TInterlaceContext),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.inputs = tinterlace_inputs,
.outputs = tinterlace_outputs,
}; };
...@@ -335,6 +335,16 @@ static int query_formats(AVFilterContext *ctx) ...@@ -335,6 +335,16 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static const AVFilterPad cellauto_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props,
},
{ NULL }
};
AVFilter avfilter_vsrc_cellauto = { AVFilter avfilter_vsrc_cellauto = {
.name = "cellauto", .name = "cellauto",
.description = NULL_IF_CONFIG_SMALL("Create pattern generated by an elementary cellular automaton."), .description = NULL_IF_CONFIG_SMALL("Create pattern generated by an elementary cellular automaton."),
...@@ -342,16 +352,7 @@ AVFilter avfilter_vsrc_cellauto = { ...@@ -342,16 +352,7 @@ AVFilter avfilter_vsrc_cellauto = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = NULL,
.inputs = (const AVFilterPad[]) { .outputs = cellauto_outputs,
{ .name = NULL}
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props },
{ .name = NULL}
},
.priv_class = &cellauto_class, .priv_class = &cellauto_class,
}; };
...@@ -464,6 +464,16 @@ static int query_formats(AVFilterContext *ctx) ...@@ -464,6 +464,16 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static const AVFilterPad life_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props,
},
{ NULL}
};
AVFilter avfilter_vsrc_life = { AVFilter avfilter_vsrc_life = {
.name = "life", .name = "life",
.description = NULL_IF_CONFIG_SMALL("Create life."), .description = NULL_IF_CONFIG_SMALL("Create life."),
...@@ -471,16 +481,7 @@ AVFilter avfilter_vsrc_life = { ...@@ -471,16 +481,7 @@ AVFilter avfilter_vsrc_life = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = NULL,
.inputs = (const AVFilterPad[]) { .outputs = life_outputs,
{ .name = NULL}
},
.outputs = (const AVFilterPad[]) {
{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props },
{ .name = NULL}
},
.priv_class = &life_class, .priv_class = &life_class,
}; };
...@@ -396,6 +396,16 @@ static int request_frame(AVFilterLink *link) ...@@ -396,6 +396,16 @@ static int request_frame(AVFilterLink *link)
return 0; return 0;
} }
static const AVFilterPad mandelbrot_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props,
},
{ NULL },
};
AVFilter avfilter_vsrc_mandelbrot = { AVFilter avfilter_vsrc_mandelbrot = {
.name = "mandelbrot", .name = "mandelbrot",
.description = NULL_IF_CONFIG_SMALL("Render a Mandelbrot fractal."), .description = NULL_IF_CONFIG_SMALL("Render a Mandelbrot fractal."),
...@@ -405,12 +415,6 @@ AVFilter avfilter_vsrc_mandelbrot = { ...@@ -405,12 +415,6 @@ AVFilter avfilter_vsrc_mandelbrot = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = NULL,
.inputs = (const AVFilterPad[]) {{ .name = NULL}}, .outputs = mandelbrot_outputs,
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props },
{ .name = NULL}},
}; };
...@@ -364,6 +364,16 @@ static int request_frame(AVFilterLink *outlink) ...@@ -364,6 +364,16 @@ static int request_frame(AVFilterLink *outlink)
return 0; return 0;
} }
static const AVFilterPad mptestsrc_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props,
},
{ NULL }
};
AVFilter avfilter_vsrc_mptestsrc = { AVFilter avfilter_vsrc_mptestsrc = {
.name = "mptestsrc", .name = "mptestsrc",
.description = NULL_IF_CONFIG_SMALL("Generate various test pattern."), .description = NULL_IF_CONFIG_SMALL("Generate various test pattern."),
...@@ -372,11 +382,6 @@ AVFilter avfilter_vsrc_mptestsrc = { ...@@ -372,11 +382,6 @@ AVFilter avfilter_vsrc_mptestsrc = {
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = NULL}}, .inputs = NULL,
.outputs = mptestsrc_outputs,
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props, },
{ .name = NULL }},
}; };
...@@ -256,6 +256,16 @@ static int color_config_props(AVFilterLink *inlink) ...@@ -256,6 +256,16 @@ static int color_config_props(AVFilterLink *inlink)
return 0; return 0;
} }
static const AVFilterPad color_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = color_config_props,
},
{ NULL }
};
AVFilter avfilter_vsrc_color = { AVFilter avfilter_vsrc_color = {
.name = "color", .name = "color",
.description = NULL_IF_CONFIG_SMALL("Provide an uniformly colored input."), .description = NULL_IF_CONFIG_SMALL("Provide an uniformly colored input."),
...@@ -265,21 +275,8 @@ AVFilter avfilter_vsrc_color = { ...@@ -265,21 +275,8 @@ AVFilter avfilter_vsrc_color = {
.uninit = uninit, .uninit = uninit,
.query_formats = color_query_formats, .query_formats = color_query_formats,
.inputs = NULL,
.inputs = (const AVFilterPad[]) { .outputs = color_outputs,
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = color_config_props,
},
{ .name = NULL }
},
.priv_class = &color_class, .priv_class = &color_class,
}; };
...@@ -301,19 +298,24 @@ static av_cold int nullsrc_init(AVFilterContext *ctx, const char *args) ...@@ -301,19 +298,24 @@ static av_cold int nullsrc_init(AVFilterContext *ctx, const char *args)
return init(ctx, args); return init(ctx, args);
} }
static const AVFilterPad nullsrc_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props,
},
{ NULL },
};
AVFilter avfilter_vsrc_nullsrc = { AVFilter avfilter_vsrc_nullsrc = {
.name = "nullsrc", .name = "nullsrc",
.description = NULL_IF_CONFIG_SMALL("Null video source, return unprocessed video frames."), .description = NULL_IF_CONFIG_SMALL("Null video source, return unprocessed video frames."),
.init = nullsrc_init, .init = nullsrc_init,
.uninit = uninit, .uninit = uninit,
.priv_size = sizeof(TestSourceContext), .priv_size = sizeof(TestSourceContext),
.inputs = NULL,
.inputs = (const AVFilterPad[]) {{ .name = NULL}}, .outputs = nullsrc_outputs,
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props, },
{ .name = NULL}},
.priv_class = &nullsrc_class, .priv_class = &nullsrc_class,
}; };
...@@ -767,6 +769,16 @@ static int smptebars_config_props(AVFilterLink *outlink) ...@@ -767,6 +769,16 @@ static int smptebars_config_props(AVFilterLink *outlink)
return config_props(outlink); return config_props(outlink);
} }
static const AVFilterPad smptebars_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = smptebars_config_props,
},
{ NULL }
};
AVFilter avfilter_vsrc_smptebars = { AVFilter avfilter_vsrc_smptebars = {
.name = "smptebars", .name = "smptebars",
.description = NULL_IF_CONFIG_SMALL("Generate SMPTE color bars."), .description = NULL_IF_CONFIG_SMALL("Generate SMPTE color bars."),
...@@ -775,21 +787,8 @@ AVFilter avfilter_vsrc_smptebars = { ...@@ -775,21 +787,8 @@ AVFilter avfilter_vsrc_smptebars = {
.uninit = uninit, .uninit = uninit,
.query_formats = smptebars_query_formats, .query_formats = smptebars_query_formats,
.inputs = NULL,
.inputs = (const AVFilterPad[]) { .outputs = smptebars_outputs,
{ .name = NULL }
},
.outputs = (const AVFilterPad[]) {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = smptebars_config_props,
},
{ .name = NULL }
},
.priv_class = &smptebars_class, .priv_class = &smptebars_class,
}; };
......
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