You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	lavfi: convert remaining input/output list compound literals to named objects.
This is following 568c70e79e.
			
			
This commit is contained in:
		| @@ -154,6 +154,25 @@ static int  filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamplesref) | ||||
|     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 = { | ||||
|     .name          = "aconvert", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Convert the input audio to sample_fmt:channel_layout."), | ||||
| @@ -161,14 +180,6 @@ AVFilter avfilter_af_aconvert = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name      = "default", | ||||
|                                     .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}}, | ||||
|     .inputs        = aconvert_inputs, | ||||
|     .outputs       = aconvert_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -323,6 +323,16 @@ static av_cold int init(AVFilterContext *ctx, const char *args) | ||||
|     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 = { | ||||
|     .name          = "amerge", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Merge two audio streams into " | ||||
| @@ -331,14 +341,7 @@ AVFilter avfilter_af_amerge = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { { .name = NULL } }, | ||||
|     .outputs   = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_AUDIO, | ||||
|           .config_props     = config_output, | ||||
|           .request_frame    = request_frame, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .priv_class = &amerge_class, | ||||
|     .inputs        = NULL, | ||||
|     .outputs       = amerge_outputs, | ||||
|     .priv_class    = &amerge_class, | ||||
| }; | ||||
|   | ||||
| @@ -253,6 +253,26 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     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 = { | ||||
|     .name          = "aresample", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Resample audio data."), | ||||
| @@ -260,15 +280,6 @@ AVFilter avfilter_af_aresample = { | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|     .priv_size     = sizeof(AResampleContext), | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name      = "default", | ||||
|                                     .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}}, | ||||
|     .inputs        = aresample_inputs, | ||||
|     .outputs       = aresample_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -175,31 +175,33 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad asetnsamples_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_AUDIO, | ||||
|         .filter_frame = filter_frame, | ||||
|         .min_perms    = AV_PERM_READ | AV_PERM_WRITE, | ||||
|     }, | ||||
|     {  NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad asetnsamples_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_AUDIO, | ||||
|         .request_frame = request_frame, | ||||
|         .config_props  = config_props_output, | ||||
|     }, | ||||
|     { 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  = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name           = "default", | ||||
|             .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, | ||||
|             .request_frame  = request_frame, | ||||
|             .config_props   = config_props_output, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .priv_class = &asetnsamples_class, | ||||
|     .inputs         = asetnsamples_inputs, | ||||
|     .outputs        = asetnsamples_outputs, | ||||
|     .priv_class     = &asetnsamples_class, | ||||
| }; | ||||
|   | ||||
| @@ -180,6 +180,36 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad astreamsync_inputs[] = { | ||||
|     { | ||||
|         .name         = "in1", | ||||
|         .type         = AVMEDIA_TYPE_AUDIO, | ||||
|         .filter_frame = filter_frame, | ||||
|         .min_perms    = AV_PERM_READ | AV_PERM_PRESERVE, | ||||
|     },{ | ||||
|         .name         = "in2", | ||||
|         .type         = AVMEDIA_TYPE_AUDIO, | ||||
|         .filter_frame = filter_frame, | ||||
|         .min_perms    = AV_PERM_READ | AV_PERM_PRESERVE, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad astreamsync_outputs[] = { | ||||
|     { | ||||
|         .name          = "out1", | ||||
|         .type          = AVMEDIA_TYPE_AUDIO, | ||||
|         .config_props  = config_output, | ||||
|         .request_frame = request_frame, | ||||
|     },{ | ||||
|         .name          = "out2", | ||||
|         .type          = AVMEDIA_TYPE_AUDIO, | ||||
|         .config_props  = config_output, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_af_astreamsync = { | ||||
|     .name          = "astreamsync", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Copy two streams of audio data " | ||||
| @@ -187,27 +217,6 @@ AVFilter avfilter_af_astreamsync = { | ||||
|     .priv_size     = sizeof(AStreamSyncContext), | ||||
|     .init          = init, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .name             = "in1", | ||||
|           .type             = AVMEDIA_TYPE_AUDIO, | ||||
|           .filter_frame     = filter_frame, | ||||
|           .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE, }, | ||||
|         { .name             = "in2", | ||||
|           .type             = AVMEDIA_TYPE_AUDIO, | ||||
|           .filter_frame     = filter_frame, | ||||
|           .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs   = (const AVFilterPad[]) { | ||||
|         { .name             = "out1", | ||||
|           .type             = AVMEDIA_TYPE_AUDIO, | ||||
|           .config_props     = config_output, | ||||
|           .request_frame    = request_frame, }, | ||||
|         { .name             = "out2", | ||||
|           .type             = AVMEDIA_TYPE_AUDIO, | ||||
|           .config_props     = config_output, | ||||
|           .request_frame    = request_frame, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs        = astreamsync_inputs, | ||||
|     .outputs       = astreamsync_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -1136,6 +1136,26 @@ static int process_command(AVFilterContext *ctx, | ||||
|     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 = { | ||||
|     .name            = "atempo", | ||||
|     .description     = NULL_IF_CONFIG_SMALL("Adjust audio tempo."), | ||||
| @@ -1144,20 +1164,6 @@ AVFilter avfilter_af_atempo = { | ||||
|     .query_formats   = query_formats, | ||||
|     .process_command = process_command, | ||||
|     .priv_size       = sizeof(ATempoContext), | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .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} | ||||
|     }, | ||||
|     .inputs          = atempo_inputs, | ||||
|     .outputs         = atempo_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -153,19 +153,30 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) | ||||
|     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 = { | ||||
|     .name           = "earwax", | ||||
|     .description    = NULL_IF_CONFIG_SMALL("Widen the stereo image."), | ||||
|     .query_formats  = query_formats, | ||||
|     .priv_size      = sizeof(EarwaxContext), | ||||
|     .inputs  = (const AVFilterPad[])  {{  .name     = "default", | ||||
|                                     .type           = AVMEDIA_TYPE_AUDIO, | ||||
|                                     .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}}, | ||||
|     .inputs         = earwax_inputs, | ||||
|     .outputs        = earwax_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -376,6 +376,25 @@ static av_cold void uninit(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name          = "pan", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Remix channels with coefficients (panning)."), | ||||
| @@ -383,18 +402,6 @@ AVFilter avfilter_af_pan = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .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} | ||||
|     }, | ||||
|     .inputs        = pan_inputs, | ||||
|     .outputs       = pan_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -162,24 +162,31 @@ static int query_formats(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name          = "silencedetect", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Detect silence."), | ||||
|     .priv_size     = sizeof(SilenceDetectContext), | ||||
|     .init          = init, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .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, | ||||
|     .inputs        = silencedetect_inputs, | ||||
|     .outputs       = silencedetect_outputs, | ||||
|     .priv_class    = &silencedetect_class, | ||||
| }; | ||||
|   | ||||
| @@ -172,20 +172,30 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *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 = { | ||||
|     .name           = "volume", | ||||
|     .description    = NULL_IF_CONFIG_SMALL("Change input volume."), | ||||
|     .query_formats  = query_formats, | ||||
|     .priv_size      = sizeof(VolumeContext), | ||||
|     .init           = init, | ||||
|  | ||||
|     .inputs  = (const AVFilterPad[])  {{ .name     = "default", | ||||
|                                    .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}}, | ||||
|     .inputs         = volume_inputs, | ||||
|     .outputs        = volume_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -131,6 +131,25 @@ static void uninit(AVFilterContext *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 = { | ||||
|     .name          = "volumedetect", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Detect audio volume."), | ||||
| @@ -138,18 +157,6 @@ AVFilter avfilter_af_volumedetect = { | ||||
|     .priv_size     = sizeof(VolDetectContext), | ||||
|     .query_formats = query_formats, | ||||
|     .uninit        = uninit, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .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 } | ||||
|     }, | ||||
|     .inputs        = volumedetect_inputs, | ||||
|     .outputs       = volumedetect_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -242,6 +242,16 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     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 = { | ||||
|     .name        = "aevalsrc", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Generate an audio signal generated by an expression."), | ||||
| @@ -250,13 +260,7 @@ AVFilter avfilter_asrc_aevalsrc = { | ||||
|     .init        = init, | ||||
|     .uninit      = uninit, | ||||
|     .priv_size   = sizeof(EvalContext), | ||||
|  | ||||
|     .inputs      = (const AVFilterPad[]) {{ .name = NULL}}, | ||||
|  | ||||
|     .outputs     = (const AVFilterPad[]) {{ .name = "default", | ||||
|                                       .type = AVMEDIA_TYPE_AUDIO, | ||||
|                                       .config_props = config_props, | ||||
|                                       .request_frame = request_frame, }, | ||||
|                                     { .name = NULL}}, | ||||
|     .priv_class = &aevalsrc_class, | ||||
|     .inputs      = NULL, | ||||
|     .outputs     = aevalsrc_outputs, | ||||
|     .priv_class  = &aevalsrc_class, | ||||
| }; | ||||
|   | ||||
| @@ -268,6 +268,16 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     return ff_filter_frame(outlink, samplesref); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad flite_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_AUDIO, | ||||
|         .config_props  = config_props, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_asrc_flite = { | ||||
|     .name        = "flite", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Synthesize voice from text using libflite."), | ||||
| @@ -275,18 +285,7 @@ AVFilter avfilter_asrc_flite = { | ||||
|     .init        = init, | ||||
|     .uninit      = uninit, | ||||
|     .priv_size   = sizeof(FliteContext), | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) {{ .name = NULL}}, | ||||
|  | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name = "default", | ||||
|             .type = AVMEDIA_TYPE_AUDIO, | ||||
|             .config_props = config_props, | ||||
|             .request_frame = request_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|  | ||||
|     .priv_class = &flite_class, | ||||
|     .inputs      = NULL, | ||||
|     .outputs     = flite_outputs, | ||||
|     .priv_class  = &flite_class, | ||||
| }; | ||||
|   | ||||
| @@ -445,7 +445,7 @@ AVFilter avfilter_avf_concat = { | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|     .priv_size     = sizeof(ConcatContext), | ||||
|     .inputs        = (const AVFilterPad[]) { { .name = NULL } }, | ||||
|     .outputs       = (const AVFilterPad[]) { { .name = NULL } }, | ||||
|     .inputs        = NULL, | ||||
|     .outputs       = NULL, | ||||
|     .priv_class    = &concat_class, | ||||
| }; | ||||
|   | ||||
| @@ -298,6 +298,26 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad showspectrum_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_AUDIO, | ||||
|         .filter_frame = filter_frame, | ||||
|         .min_perms    = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad showspectrum_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props  = config_output, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_avf_showspectrum = { | ||||
|     .name           = "showspectrum", | ||||
|     .description    = NULL_IF_CONFIG_SMALL("Convert input audio to a spectrum video output."), | ||||
| @@ -305,26 +325,7 @@ AVFilter avfilter_avf_showspectrum = { | ||||
|     .uninit         = uninit, | ||||
|     .query_formats  = query_formats, | ||||
|     .priv_size      = sizeof(ShowSpectrumContext), | ||||
|  | ||||
|     .inputs  = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name           = "default", | ||||
|             .type           = AVMEDIA_TYPE_AUDIO, | ||||
|             .filter_frame   = filter_frame, | ||||
|             .min_perms      = AV_PERM_READ, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|  | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name           = "default", | ||||
|             .type           = AVMEDIA_TYPE_VIDEO, | ||||
|             .config_props   = config_output, | ||||
|             .request_frame  = request_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|  | ||||
|     .priv_class = &showspectrum_class, | ||||
|     .inputs         = showspectrum_inputs, | ||||
|     .outputs        = showspectrum_outputs, | ||||
|     .priv_class     = &showspectrum_class, | ||||
| }; | ||||
|   | ||||
| @@ -228,6 +228,26 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad showwaves_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_AUDIO, | ||||
|         .filter_frame = filter_frame, | ||||
|         .min_perms    = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad showwaves_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props  = config_output, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_avf_showwaves = { | ||||
|     .name           = "showwaves", | ||||
|     .description    = NULL_IF_CONFIG_SMALL("Convert input audio to a video output."), | ||||
| @@ -235,26 +255,7 @@ AVFilter avfilter_avf_showwaves = { | ||||
|     .uninit         = uninit, | ||||
|     .query_formats  = query_formats, | ||||
|     .priv_size      = sizeof(ShowWavesContext), | ||||
|  | ||||
|     .inputs  = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name           = "default", | ||||
|             .type           = AVMEDIA_TYPE_AUDIO, | ||||
|             .filter_frame   = filter_frame, | ||||
|             .min_perms      = AV_PERM_READ, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|  | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name           = "default", | ||||
|             .type           = AVMEDIA_TYPE_VIDEO, | ||||
|             .config_props   = config_output, | ||||
|             .request_frame  = request_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|  | ||||
|     .priv_class = &showwaves_class, | ||||
|     .inputs         = showwaves_inputs, | ||||
|     .outputs        = showwaves_outputs, | ||||
|     .priv_class     = &showwaves_class, | ||||
| }; | ||||
|   | ||||
| @@ -728,6 +728,16 @@ static av_cold void uninit(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name          = "ebur128", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("EBU R128 scanner."), | ||||
| @@ -735,13 +745,6 @@ AVFilter avfilter_af_ebur128 = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .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, | ||||
|     .inputs        = ebur128_inputs, | ||||
|     .outputs       = NULL, | ||||
| }; | ||||
|   | ||||
| @@ -518,6 +518,25 @@ end: | ||||
|  | ||||
| #if CONFIG_SENDCMD_FILTER | ||||
|  | ||||
| static const AVFilterPad sendcmd_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .start_frame      = process_frame, | ||||
|         .end_frame        = ff_null_end_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad sendcmd_outputs[] = { | ||||
|     { | ||||
|         .name = "default", | ||||
|         .type = AVMEDIA_TYPE_VIDEO, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_sendcmd = { | ||||
|     .name      = "sendcmd", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Send commands to filters."), | ||||
| @@ -525,30 +544,32 @@ AVFilter avfilter_vf_sendcmd = { | ||||
|     .init = init, | ||||
|     .uninit = uninit, | ||||
|     .priv_size = sizeof(SendCmdContext), | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_VIDEO, | ||||
|             .get_video_buffer = ff_null_get_video_buffer, | ||||
|             .start_frame      = process_frame, | ||||
|             .end_frame        = ff_null_end_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs    = sendcmd_inputs, | ||||
|     .outputs   = sendcmd_outputs, | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_ASENDCMD_FILTER | ||||
|  | ||||
| static const AVFilterPad asendcmd_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_AUDIO, | ||||
|         .get_audio_buffer = ff_null_get_audio_buffer, | ||||
|         .filter_frame     = process_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad asendcmd_outputs[] = { | ||||
|     { | ||||
|         .name = "default", | ||||
|         .type = AVMEDIA_TYPE_AUDIO, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_af_asendcmd = { | ||||
|     .name      = "asendcmd", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Send commands to filters."), | ||||
| @@ -556,23 +577,8 @@ AVFilter avfilter_af_asendcmd = { | ||||
|     .init = init, | ||||
|     .uninit = uninit, | ||||
|     .priv_size = sizeof(SendCmdContext), | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_AUDIO, | ||||
|             .get_audio_buffer = ff_null_get_audio_buffer, | ||||
|             .filter_frame     = process_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_AUDIO, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs    = asendcmd_inputs, | ||||
|     .outputs   = asendcmd_outputs, | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -183,31 +183,33 @@ static av_cold void uninit(AVFilterContext *ctx) | ||||
| } | ||||
|  | ||||
| #if CONFIG_ASETPTS_FILTER | ||||
| static const AVFilterPad avfilter_af_asetpts_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_AUDIO, | ||||
|         .get_audio_buffer = ff_null_get_audio_buffer, | ||||
|         .config_props     = config_input, | ||||
|         .filter_frame     = filter_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad avfilter_af_asetpts_outputs[] = { | ||||
|     { | ||||
|         .name = "default", | ||||
|         .type = AVMEDIA_TYPE_AUDIO, | ||||
|     }, | ||||
|     { 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 = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_AUDIO, | ||||
|             .get_audio_buffer = ff_null_get_audio_buffer, | ||||
|             .config_props     = config_input, | ||||
|             .filter_frame     = filter_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_AUDIO, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs    = avfilter_af_asetpts_inputs, | ||||
|     .outputs   = avfilter_af_asetpts_outputs, | ||||
| }; | ||||
| #endif /* CONFIG_ASETPTS_FILTER */ | ||||
|  | ||||
|   | ||||
| @@ -152,25 +152,32 @@ AVFilter avfilter_vf_settb = { | ||||
| #endif | ||||
|  | ||||
| #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 = { | ||||
|     .name      = "asettb", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Set timebase for the audio output link."), | ||||
|     .init      = init, | ||||
|  | ||||
|     .priv_size = sizeof(SetTBContext), | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .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} | ||||
|     }, | ||||
|     .inputs    = avfilter_af_asettb_inputs, | ||||
|     .outputs   = avfilter_af_asettb_outputs, | ||||
| }; | ||||
| #endif | ||||
|   | ||||
| @@ -234,6 +234,16 @@ static int vsink_query_formats(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name      = "ffbuffersink", | ||||
|     .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 = { | ||||
|     .uninit    = vsink_uninit, | ||||
|  | ||||
|     .query_formats = vsink_query_formats, | ||||
|     .inputs        = ffbuffersink_inputs, | ||||
|     .outputs       = NULL, | ||||
| }; | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name    = "default", | ||||
|                                     .type          = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .end_frame     = end_frame, | ||||
|                                     .min_perms     = AV_PERM_READ | AV_PERM_PRESERVE, }, | ||||
|                                   { .name = NULL }}, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = NULL }}, | ||||
| static const AVFilterPad buffersink_inputs[] = { | ||||
|     { | ||||
|         .name      = "default", | ||||
|         .type      = AVMEDIA_TYPE_VIDEO, | ||||
|         .end_frame = end_frame, | ||||
|         .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, | ||||
|     }, | ||||
|     { NULL }, | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vsink_buffersink = { | ||||
| @@ -259,13 +274,8 @@ AVFilter avfilter_vsink_buffersink = { | ||||
|     .uninit    = vsink_uninit, | ||||
|  | ||||
|     .query_formats = vsink_query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name    = "default", | ||||
|                                     .type          = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .end_frame     = end_frame, | ||||
|                                     .min_perms     = AV_PERM_READ | AV_PERM_PRESERVE, }, | ||||
|                                   { .name = NULL }}, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = NULL }}, | ||||
|     .inputs        = buffersink_inputs, | ||||
|     .outputs       = NULL, | ||||
| }; | ||||
|  | ||||
| static int filter_frame(AVFilterLink *link, AVFilterBufferRef *samplesref) | ||||
| @@ -328,6 +338,16 @@ static int asink_query_formats(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name      = "ffabuffersink", | ||||
|     .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 = { | ||||
|     .uninit    = asink_uninit, | ||||
|     .priv_size = sizeof(BufferSinkContext), | ||||
|     .query_formats = asink_query_formats, | ||||
|     .inputs        = ffabuffersink_inputs, | ||||
|     .outputs       = NULL, | ||||
| }; | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name     = "default", | ||||
|                                     .type           = AVMEDIA_TYPE_AUDIO, | ||||
|                                     .filter_frame   = filter_frame, | ||||
|                                     .min_perms      = AV_PERM_READ | AV_PERM_PRESERVE, }, | ||||
|                                   { .name = NULL }}, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = NULL }}, | ||||
| static const AVFilterPad abuffersink_inputs[] = { | ||||
|     { | ||||
|         .name           = "default", | ||||
|         .type           = AVMEDIA_TYPE_AUDIO, | ||||
|         .filter_frame   = filter_frame, | ||||
|         .min_perms      = AV_PERM_READ | AV_PERM_PRESERVE, | ||||
|     }, | ||||
|     { NULL }, | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_asink_abuffersink = { | ||||
| @@ -351,13 +376,8 @@ AVFilter avfilter_asink_abuffersink = { | ||||
|     .uninit    = asink_uninit, | ||||
|     .priv_size = sizeof(BufferSinkContext), | ||||
|     .query_formats = asink_query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name     = "default", | ||||
|                                     .type           = AVMEDIA_TYPE_AUDIO, | ||||
|                                     .filter_frame   = filter_frame, | ||||
|                                     .min_perms      = AV_PERM_READ | AV_PERM_PRESERVE, }, | ||||
|                                   { .name = NULL }}, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = NULL }}, | ||||
|     .inputs        = abuffersink_inputs, | ||||
|     .outputs       = NULL, | ||||
| }; | ||||
|  | ||||
| /* Libav compatibility API */ | ||||
|   | ||||
| @@ -612,7 +612,7 @@ AVFilter avfilter_avsrc_movie = { | ||||
|     .query_formats = movie_query_formats, | ||||
|  | ||||
|     .inputs    = NULL, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = NULL }}, | ||||
|     .outputs   = NULL, | ||||
|     .priv_class = &movie_class, | ||||
| }; | ||||
|  | ||||
| @@ -636,8 +636,8 @@ AVFilter avfilter_avsrc_amovie = { | ||||
|     .uninit        = movie_uninit, | ||||
|     .query_formats = movie_query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name = NULL }}, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = NULL }}, | ||||
|     .inputs     = NULL, | ||||
|     .outputs    = NULL, | ||||
|     .priv_class = &amovie_class, | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
| } | ||||
|  | ||||
| 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 = { | ||||
|     .name           = "alphaextract", | ||||
|     .description    = NULL_IF_CONFIG_SMALL("Extract an alpha channel as a " | ||||
|                       "grayscale image component."), | ||||
|     .priv_size      = sizeof(AlphaExtractContext), | ||||
|     .query_formats  = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .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 } | ||||
|     }, | ||||
|     .inputs         = alphaextract_inputs, | ||||
|     .outputs        = alphaextract_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -176,6 +176,37 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad alphamerge_inputs[] = { | ||||
|     { | ||||
|         .name             = "main", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props     = config_input_main, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .start_frame      = start_frame, | ||||
|         .draw_slice       = draw_slice, | ||||
|         .end_frame        = end_frame, | ||||
|         .min_perms        = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE, | ||||
|     },{ | ||||
|         .name             = "alpha", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .start_frame      = start_frame, | ||||
|         .draw_slice       = draw_slice, | ||||
|         .end_frame        = end_frame, | ||||
|         .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad alphamerge_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props  = config_output, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_alphamerge = { | ||||
|     .name           = "alphamerge", | ||||
|     .description    = NULL_IF_CONFIG_SMALL("Copy the luma value of the second " | ||||
| @@ -183,29 +214,6 @@ AVFilter avfilter_vf_alphamerge = { | ||||
|     .uninit         = uninit, | ||||
|     .priv_size      = sizeof(AlphaMergeContext), | ||||
|     .query_formats  = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .name             = "main", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .config_props     = config_input_main, | ||||
|           .get_video_buffer = ff_null_get_video_buffer, | ||||
|           .start_frame      = start_frame, | ||||
|           .draw_slice       = draw_slice, | ||||
|           .end_frame        = end_frame, | ||||
|           .min_perms        = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE }, | ||||
|         { .name             = "alpha", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .start_frame      = start_frame, | ||||
|           .draw_slice       = draw_slice, | ||||
|           .end_frame        = end_frame, | ||||
|           .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs   = (const AVFilterPad[]) { | ||||
|       { .name               = "default", | ||||
|         .type               = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props       = config_output, | ||||
|         .request_frame      = request_frame }, | ||||
|       { .name = NULL } | ||||
|     }, | ||||
|     .inputs         = alphamerge_inputs, | ||||
|     .outputs        = alphamerge_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -200,6 +200,28 @@ static int end_frame(AVFilterLink *inlink) | ||||
|     return ff_end_frame(outlink); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad ass_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .start_frame      = ff_null_start_frame, | ||||
|         .draw_slice       = null_draw_slice, | ||||
|         .end_frame        = end_frame, | ||||
|         .config_props     = config_input, | ||||
|         .min_perms        = AV_PERM_WRITE | AV_PERM_READ, | ||||
|     }, | ||||
|     { 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."), | ||||
| @@ -207,22 +229,7 @@ AVFilter avfilter_vf_ass = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .get_video_buffer = ff_null_get_video_buffer, | ||||
|           .start_frame      = ff_null_start_frame, | ||||
|           .draw_slice       = null_draw_slice, | ||||
|           .end_frame        = end_frame, | ||||
|           .config_props     = config_input, | ||||
|           .min_perms        = AV_PERM_WRITE | AV_PERM_READ }, | ||||
|         { .name = NULL} | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, }, | ||||
|         { .name = NULL} | ||||
|     }, | ||||
|     .priv_class = &ass_class, | ||||
|     .inputs        = ass_inputs, | ||||
|     .outputs       = ass_outputs, | ||||
|     .priv_class    = &ass_class, | ||||
| }; | ||||
|   | ||||
| @@ -89,26 +89,32 @@ static int end_frame(AVFilterLink *inlink) | ||||
|     return ff_end_frame(inlink->dst->outputs[0]); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad bbox_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .start_frame      = ff_null_start_frame, | ||||
|         .end_frame        = end_frame, | ||||
|         .min_perms        = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad bbox_outputs[] = { | ||||
|     { | ||||
|         .name = "default", | ||||
|         .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 = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .get_video_buffer = ff_null_get_video_buffer, | ||||
|           .start_frame      = ff_null_start_frame, | ||||
|           .end_frame        = end_frame, | ||||
|           .min_perms        = AV_PERM_READ, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|  | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs        = bbox_inputs, | ||||
|     .outputs       = bbox_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -197,29 +197,35 @@ static int end_frame(AVFilterLink *inlink) | ||||
|     return ff_end_frame(inlink->dst->outputs[0]); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad blackdetect_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props     = config_input, | ||||
|         .draw_slice       = draw_slice, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .start_frame      = ff_null_start_frame, | ||||
|         .end_frame        = end_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad blackdetect_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { 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 = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .config_props     = config_input, | ||||
|           .draw_slice       = draw_slice, | ||||
|           .get_video_buffer = ff_null_get_video_buffer, | ||||
|           .start_frame      = ff_null_start_frame, | ||||
|           .end_frame        = end_frame, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|  | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .request_frame    = request_frame, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .priv_class = &blackdetect_class, | ||||
|     .inputs        = blackdetect_inputs, | ||||
|     .outputs       = blackdetect_outputs, | ||||
|     .priv_class    = &blackdetect_class, | ||||
| }; | ||||
|   | ||||
| @@ -369,6 +369,28 @@ static int end_frame(AVFilterLink *link) | ||||
|  | ||||
| static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; } | ||||
|  | ||||
| static const AVFilterPad colormatrix_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props     = config_input, | ||||
|         .min_perms        = AV_PERM_READ | AV_PERM_WRITE, | ||||
|         .start_frame      = start_frame, | ||||
|         .get_video_buffer = get_video_buffer, | ||||
|         .draw_slice       = null_draw_slice, | ||||
|         .end_frame        = end_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad colormatrix_outputs[] = { | ||||
|     { | ||||
|         .name = "default", | ||||
|         .type = AVMEDIA_TYPE_VIDEO, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_colormatrix = { | ||||
|     .name          = "colormatrix", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Color matrix conversion"), | ||||
| @@ -376,18 +398,6 @@ AVFilter avfilter_vf_colormatrix = { | ||||
|     .priv_size     = sizeof(ColorMatrixContext), | ||||
|     .init          = init, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (AVFilterPad[]) {{ .name             = "default", | ||||
|                                     .type             = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .config_props     = config_input, | ||||
|                                     .min_perms        = AV_PERM_READ | AV_PERM_WRITE, | ||||
|                                     .start_frame      = start_frame, | ||||
|                                     .get_video_buffer = get_video_buffer, | ||||
|                                     .draw_slice       = null_draw_slice, | ||||
|                                     .end_frame        = end_frame, }, | ||||
|                                   { .name = NULL }}, | ||||
|  | ||||
|     .outputs   = (AVFilterPad[]) {{ .name             = "default", | ||||
|                                     .type             = AVMEDIA_TYPE_VIDEO, }, | ||||
|                                   { .name = NULL }}, | ||||
|     .inputs        = colormatrix_inputs, | ||||
|     .outputs       = colormatrix_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -235,6 +235,29 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad decimate_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .config_props     = config_input, | ||||
|         .start_frame      = start_frame, | ||||
|         .draw_slice       = draw_slice, | ||||
|         .end_frame        = end_frame, | ||||
|         .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad decimate_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_decimate = { | ||||
|     .name        = "decimate", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Remove near-duplicate frames."), | ||||
| @@ -243,26 +266,6 @@ AVFilter avfilter_vf_decimate = { | ||||
|  | ||||
|     .priv_size = sizeof(DecimateContext), | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_VIDEO, | ||||
|             .get_video_buffer = ff_null_get_video_buffer, | ||||
|             .config_props     = config_input, | ||||
|             .start_frame      = start_frame, | ||||
|             .draw_slice       = draw_slice, | ||||
|             .end_frame        = end_frame, | ||||
|             .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name          = "default", | ||||
|             .type          = AVMEDIA_TYPE_VIDEO, | ||||
|             .request_frame = request_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs        = decimate_inputs, | ||||
|     .outputs       = decimate_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -538,6 +538,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) | ||||
|     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 = { | ||||
|     .name      = "deshake", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Stabilize shaky video."), | ||||
| @@ -547,16 +567,6 @@ AVFilter avfilter_vf_deshake = { | ||||
|     .init = init, | ||||
|     .uninit = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .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, }, | ||||
|                                   { .name = NULL}}, | ||||
|  | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name       = "default", | ||||
|                                     .type             = AVMEDIA_TYPE_VIDEO, }, | ||||
|                                   { .name = NULL}}, | ||||
|     .inputs        = deshake_inputs, | ||||
|     .outputs       = deshake_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -299,6 +299,25 @@ static av_cold void uninit(AVFilterContext *ctx) | ||||
|     av_freep(&edgedetect->directions); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad edgedetect_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props = config_props, | ||||
|         .filter_frame = filter_frame, | ||||
|         .min_perms    = AV_PERM_READ, | ||||
|      }, | ||||
|      { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad edgedetect_outputs[] = { | ||||
|      { | ||||
|          .name = "default", | ||||
|          .type = AVMEDIA_TYPE_VIDEO, | ||||
|      }, | ||||
|      { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_edgedetect = { | ||||
|     .name          = "edgedetect", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Detect and draw edge."), | ||||
| @@ -306,22 +325,6 @@ AVFilter avfilter_vf_edgedetect = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|        { | ||||
|            .name             = "default", | ||||
|            .type             = AVMEDIA_TYPE_VIDEO, | ||||
|            .config_props     = config_props, | ||||
|            .filter_frame     = filter_frame, | ||||
|            .min_perms        = AV_PERM_READ | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs   = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name            = "default", | ||||
|             .type            = AVMEDIA_TYPE_VIDEO, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs        = edgedetect_inputs, | ||||
|     .outputs       = edgedetect_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -111,30 +111,33 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad framestep_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .start_frame      = start_frame, | ||||
|         .draw_slice       = draw_slice, | ||||
|         .end_frame        = end_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad framestep_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props  = config_output_props, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { 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 = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_VIDEO, | ||||
|             .get_video_buffer = ff_null_get_video_buffer, | ||||
|             .start_frame      = start_frame, | ||||
|             .draw_slice       = draw_slice, | ||||
|             .end_frame        = end_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_VIDEO, | ||||
|             .config_props     = config_output_props, | ||||
|             .request_frame    = request_frame, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs    = framestep_inputs, | ||||
|     .outputs   = framestep_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -396,6 +396,26 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar | ||||
|         return AVERROR(ENOSYS); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad hue_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .start_frame  = start_frame, | ||||
|         .draw_slice   = draw_slice, | ||||
|         .config_props = config_props, | ||||
|         .min_perms    = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad hue_outputs[] = { | ||||
|     { | ||||
|         .name = "default", | ||||
|         .type = AVMEDIA_TYPE_VIDEO, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_hue = { | ||||
|     .name        = "hue", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Adjust the hue and saturation of the input video."), | ||||
| @@ -406,24 +426,7 @@ AVFilter avfilter_vf_hue = { | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|     .process_command = process_command, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name         = "default", | ||||
|             .type         = AVMEDIA_TYPE_VIDEO, | ||||
|             .start_frame  = start_frame, | ||||
|             .draw_slice   = draw_slice, | ||||
|             .config_props = config_props, | ||||
|             .min_perms    = AV_PERM_READ, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name         = "default", | ||||
|             .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .priv_class = &hue_class, | ||||
|     .inputs          = hue_inputs, | ||||
|     .outputs         = hue_outputs, | ||||
|     .priv_class      = &hue_class, | ||||
| }; | ||||
|   | ||||
| @@ -310,6 +310,29 @@ 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 const AVFilterPad idet_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .start_frame  = start_frame, | ||||
|         .draw_slice   = null_draw_slice, | ||||
|         .end_frame    = end_frame, | ||||
|         .min_perms    = AV_PERM_PRESERVE, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad idet_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .rej_perms     = AV_PERM_WRITE, | ||||
|         .poll_frame    = poll_frame, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_idet = { | ||||
|     .name          = "idet", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Interlace detect Filter."), | ||||
| @@ -318,19 +341,6 @@ AVFilter avfilter_vf_idet = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name       = "default", | ||||
|                                           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|                                           .start_frame      = start_frame, | ||||
|                                           .draw_slice       = null_draw_slice, | ||||
|                                           .end_frame        = end_frame, | ||||
|                                           .min_perms        = AV_PERM_PRESERVE }, | ||||
|                                         { .name = NULL}}, | ||||
|  | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name       = "default", | ||||
|                                           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|                                           .rej_perms        = AV_PERM_WRITE, | ||||
|                                           .poll_frame       = poll_frame, | ||||
|                                           .request_frame    = request_frame, }, | ||||
|                                         { .name = NULL}}, | ||||
|     .inputs        = idet_inputs, | ||||
|     .outputs       = idet_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -863,6 +863,29 @@ static int end_frame(AVFilterLink *inlink) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad mp_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .start_frame  = start_frame, | ||||
|         .draw_slice   = null_draw_slice, | ||||
|         .end_frame    = end_frame, | ||||
|         .config_props = config_inprops, | ||||
|         .min_perms    = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad mp_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .request_frame = request_frame, | ||||
|         .config_props  = config_outprops, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_mp = { | ||||
|     .name      = "mp", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Apply a libmpcodecs filter to the input video."), | ||||
| @@ -870,18 +893,6 @@ AVFilter avfilter_vf_mp = { | ||||
|     .uninit = uninit, | ||||
|     .priv_size = sizeof(MPContext), | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name      = "default", | ||||
|                                     .type            = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .start_frame     = start_frame, | ||||
|                                     .draw_slice      = null_draw_slice, | ||||
|                                     .end_frame       = end_frame, | ||||
|                                     .config_props    = config_inprops, | ||||
|                                     .min_perms       = AV_PERM_READ, }, | ||||
|                                   { .name = NULL}}, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name      = "default", | ||||
|                                     .type            = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .request_frame   = request_frame, | ||||
|                                     .config_props    = config_outprops, }, | ||||
|                                   { .name = NULL}}, | ||||
|     .inputs        = mp_inputs, | ||||
|     .outputs       = mp_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -535,6 +535,28 @@ static void uninit(AVFilterContext *ctx) | ||||
|  | ||||
| static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; } | ||||
|  | ||||
| static const AVFilterPad removelogo_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .config_props     = config_props_input, | ||||
|         .draw_slice       = null_draw_slice, | ||||
|         .start_frame      = start_frame, | ||||
|         .end_frame        = end_frame, | ||||
|         .min_perms        = AV_PERM_WRITE | AV_PERM_READ, | ||||
|     }, | ||||
|     { 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."), | ||||
| @@ -542,21 +564,6 @@ AVFilter avfilter_vf_removelogo = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .get_video_buffer = ff_null_get_video_buffer, | ||||
|           .config_props     = config_props_input, | ||||
|           .draw_slice       = null_draw_slice, | ||||
|           .start_frame      = start_frame, | ||||
|           .end_frame        = end_frame, | ||||
|           .min_perms        = AV_PERM_WRITE | AV_PERM_READ }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs        = removelogo_inputs, | ||||
|     .outputs       = removelogo_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -83,23 +83,30 @@ static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) | ||||
|     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 = { | ||||
|     .name      = "setfield", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Force field for the output video frame."), | ||||
|     .init      = init, | ||||
|  | ||||
|     .priv_size = sizeof(SetFieldContext), | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .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 } | ||||
|     }, | ||||
|     .inputs    = setfield_inputs, | ||||
|     .outputs   = setfield_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -277,6 +277,25 @@ static int end_frame(AVFilterLink *inlink) | ||||
|     return ff_end_frame(outlink); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad smartblur_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .end_frame    = end_frame, | ||||
|         .config_props = config_props, | ||||
|         .min_perms    = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad smartblur_outputs[] = { | ||||
|     { | ||||
|         .name = "default", | ||||
|         .type = AVMEDIA_TYPE_VIDEO, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_smartblur = { | ||||
|     .name        = "smartblur", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Blur the input video without impacting the outlines."), | ||||
| @@ -286,22 +305,6 @@ AVFilter avfilter_vf_smartblur = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name         = "default", | ||||
|             .type         = AVMEDIA_TYPE_VIDEO, | ||||
|             .end_frame    = end_frame, | ||||
|             .config_props = config_props, | ||||
|             .min_perms    = AV_PERM_READ, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { | ||||
|             .name         = "default", | ||||
|             .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         }, | ||||
|         { .name = NULL } | ||||
|     } | ||||
|     .inputs        = smartblur_inputs, | ||||
|     .outputs       = smartblur_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -318,25 +318,32 @@ static int end_frame(AVFilterLink *inlink) | ||||
|     return ff_end_frame(outlink); | ||||
| } | ||||
|  | ||||
| static const AVFilterPad super2xsai_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props = config_input, | ||||
|         .draw_slice   = null_draw_slice, | ||||
|         .end_frame    = end_frame, | ||||
|         .min_perms    = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad super2xsai_outputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props = config_output, | ||||
|     }, | ||||
|     { 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 = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .config_props     = config_input, | ||||
|           .draw_slice       = null_draw_slice, | ||||
|           .end_frame        = end_frame, | ||||
|           .min_perms        = AV_PERM_READ }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { .name             = "default", | ||||
|           .type             = AVMEDIA_TYPE_VIDEO, | ||||
|           .config_props     = config_output }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .inputs        = super2xsai_inputs, | ||||
|     .outputs       = super2xsai_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -74,22 +74,29 @@ static int query_formats(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name      = "swapuv", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Swap U and V components."), | ||||
|     .priv_size = 0, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .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 } | ||||
|     }, | ||||
|     .inputs        = swapuv_inputs, | ||||
|     .outputs       = swapuv_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -219,6 +219,29 @@ static int query_formats(AVFilterContext *ctx) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad thumbnail_inputs[] = { | ||||
|     { | ||||
|         .name             = "default", | ||||
|         .type             = AVMEDIA_TYPE_VIDEO, | ||||
|         .get_video_buffer = ff_null_get_video_buffer, | ||||
|         .min_perms        = AV_PERM_PRESERVE, | ||||
|         .start_frame      = null_start_frame, | ||||
|         .draw_slice       = draw_slice, | ||||
|         .end_frame        = end_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad thumbnail_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .request_frame = request_frame, | ||||
|         .poll_frame    = poll_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_thumbnail = { | ||||
|     .name          = "thumbnail", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Select the most representative frame in a given sequence of consecutive frames."), | ||||
| @@ -226,21 +249,6 @@ AVFilter avfilter_vf_thumbnail = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|     .inputs        = (const AVFilterPad[]) { | ||||
|         {   .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_VIDEO, | ||||
|             .get_video_buffer = ff_null_get_video_buffer, | ||||
|             .min_perms        = AV_PERM_PRESERVE, | ||||
|             .start_frame      = null_start_frame, | ||||
|             .draw_slice       = draw_slice, | ||||
|             .end_frame        = end_frame, | ||||
|         },{ .name = NULL } | ||||
|     }, | ||||
|     .outputs       = (const AVFilterPad[]) { | ||||
|         {   .name             = "default", | ||||
|             .type             = AVMEDIA_TYPE_VIDEO, | ||||
|             .request_frame    = request_frame, | ||||
|             .poll_frame       = poll_frame, | ||||
|         },{ .name = NULL } | ||||
|     }, | ||||
|     .inputs        = thumbnail_inputs, | ||||
|     .outputs       = thumbnail_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -240,6 +240,27 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static const AVFilterPad tile_inputs[] = { | ||||
|     { | ||||
|         .name        = "default", | ||||
|         .type        = AVMEDIA_TYPE_VIDEO, | ||||
|         .start_frame = start_frame, | ||||
|         .draw_slice  = draw_slice, | ||||
|         .end_frame   = end_frame, | ||||
|         .min_perms   = AV_PERM_READ, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad tile_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props  = config_props, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_tile = { | ||||
|     .name          = "tile", | ||||
| @@ -247,21 +268,7 @@ AVFilter avfilter_vf_tile = { | ||||
|     .init          = init, | ||||
|     .query_formats = query_formats, | ||||
|     .priv_size     = sizeof(TileContext), | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .name        = "default", | ||||
|           .type        = AVMEDIA_TYPE_VIDEO, | ||||
|           .start_frame = start_frame, | ||||
|           .draw_slice  = draw_slice, | ||||
|           .end_frame   = end_frame, | ||||
|           .min_perms   = AV_PERM_READ, }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { .name          = "default", | ||||
|           .type          = AVMEDIA_TYPE_VIDEO, | ||||
|           .config_props  = config_props, | ||||
|           .request_frame = request_frame }, | ||||
|         { .name = NULL } | ||||
|     }, | ||||
|     .priv_class = &tile_class, | ||||
|     .inputs        = tile_inputs, | ||||
|     .outputs       = tile_outputs, | ||||
|     .priv_class    = &tile_class, | ||||
| }; | ||||
|   | ||||
| @@ -351,6 +351,27 @@ static int request_frame(AVFilterLink *outlink) | ||||
|  | ||||
| static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; } | ||||
|  | ||||
| static const AVFilterPad tinterlace_inputs[] = { | ||||
|     { | ||||
|         .name         = "default", | ||||
|         .type         = AVMEDIA_TYPE_VIDEO, | ||||
|         .start_frame  = start_frame, | ||||
|         .draw_slice   = null_draw_slice, | ||||
|         .end_frame    = end_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| static const AVFilterPad tinterlace_outputs[] = { | ||||
|     { | ||||
|         .name          = "default", | ||||
|         .type          = AVMEDIA_TYPE_VIDEO, | ||||
|         .config_props  = config_out_props, | ||||
|         .request_frame = request_frame, | ||||
|     }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| AVFilter avfilter_vf_tinterlace = { | ||||
|     .name          = "tinterlace", | ||||
|     .description   = NULL_IF_CONFIG_SMALL("Perform temporal field interlacing."), | ||||
| @@ -358,20 +379,6 @@ AVFilter avfilter_vf_tinterlace = { | ||||
|     .init          = init, | ||||
|     .uninit        = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .name          = "default", | ||||
|           .type          = AVMEDIA_TYPE_VIDEO, | ||||
|           .start_frame   = start_frame, | ||||
|           .draw_slice    = null_draw_slice, | ||||
|           .end_frame     = end_frame, }, | ||||
|         { .name = NULL} | ||||
|     }, | ||||
|     .outputs = (const AVFilterPad[]) { | ||||
|         { .name          = "default", | ||||
|           .type          = AVMEDIA_TYPE_VIDEO, | ||||
|           .config_props  = config_out_props, | ||||
|           .request_frame = request_frame }, | ||||
|         { .name = NULL} | ||||
|     }, | ||||
|     .inputs        = tinterlace_inputs, | ||||
|     .outputs       = tinterlace_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -335,6 +335,16 @@ static int query_formats(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name        = "cellauto", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Create pattern generated by an elementary cellular automaton."), | ||||
| @@ -342,16 +352,7 @@ AVFilter avfilter_vsrc_cellauto = { | ||||
|     .init      = init, | ||||
|     .uninit    = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .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, | ||||
|     .inputs        = NULL, | ||||
|     .outputs       = cellauto_outputs, | ||||
|     .priv_class    = &cellauto_class, | ||||
| }; | ||||
|   | ||||
| @@ -464,6 +464,16 @@ static int query_formats(AVFilterContext *ctx) | ||||
|     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 = { | ||||
|     .name        = "life", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Create life."), | ||||
| @@ -471,16 +481,7 @@ AVFilter avfilter_vsrc_life = { | ||||
|     .init      = init, | ||||
|     .uninit    = uninit, | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) { | ||||
|         { .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, | ||||
|     .inputs        = NULL, | ||||
|     .outputs       = life_outputs, | ||||
|     .priv_class    = &life_class, | ||||
| }; | ||||
|   | ||||
| @@ -396,6 +396,16 @@ static int request_frame(AVFilterLink *link) | ||||
|     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 = { | ||||
|     .name        = "mandelbrot", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Render a Mandelbrot fractal."), | ||||
| @@ -405,12 +415,6 @@ AVFilter avfilter_vsrc_mandelbrot = { | ||||
|     .uninit    = uninit, | ||||
|  | ||||
|     .query_formats = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name = NULL}}, | ||||
|  | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name      = "default", | ||||
|                                     .type            = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .request_frame   = request_frame, | ||||
|                                     .config_props    = config_props }, | ||||
|                                   { .name = NULL}}, | ||||
|     .inputs        = NULL, | ||||
|     .outputs       = mandelbrot_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -364,6 +364,16 @@ static int request_frame(AVFilterLink *outlink) | ||||
|     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 = { | ||||
|     .name      = "mptestsrc", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Generate various test pattern."), | ||||
| @@ -372,11 +382,6 @@ AVFilter avfilter_vsrc_mptestsrc = { | ||||
|  | ||||
|     .query_formats   = query_formats, | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name = NULL}}, | ||||
|  | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = "default", | ||||
|                                     .type = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .request_frame = request_frame, | ||||
|                                     .config_props  = config_props, }, | ||||
|                                   { .name = NULL }}, | ||||
|     .inputs         = NULL, | ||||
|     .outputs        = mptestsrc_outputs, | ||||
| }; | ||||
|   | ||||
| @@ -256,6 +256,16 @@ static int color_config_props(AVFilterLink *inlink) | ||||
|     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 = { | ||||
|     .name        = "color", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Provide an uniformly colored input."), | ||||
| @@ -265,22 +275,9 @@ AVFilter avfilter_vsrc_color = { | ||||
|     .uninit    = uninit, | ||||
|  | ||||
|     .query_formats = color_query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .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, | ||||
|     .inputs        = NULL, | ||||
|     .outputs       = color_outputs, | ||||
|     .priv_class    = &color_class, | ||||
| }; | ||||
|  | ||||
| #endif /* CONFIG_COLOR_FILTER */ | ||||
| @@ -301,19 +298,24 @@ static av_cold int nullsrc_init(AVFilterContext *ctx, const char *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 = { | ||||
|     .name        = "nullsrc", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Null video source, return unprocessed video frames."), | ||||
|     .init       = nullsrc_init, | ||||
|     .uninit     = uninit, | ||||
|     .priv_size  = sizeof(TestSourceContext), | ||||
|  | ||||
|     .inputs    = (const AVFilterPad[]) {{ .name = NULL}}, | ||||
|     .outputs   = (const AVFilterPad[]) {{ .name = "default", | ||||
|                                     .type = AVMEDIA_TYPE_VIDEO, | ||||
|                                     .request_frame = request_frame, | ||||
|                                     .config_props  = config_props, }, | ||||
|                                   { .name = NULL}}, | ||||
|     .inputs     = NULL, | ||||
|     .outputs    = nullsrc_outputs, | ||||
|     .priv_class = &nullsrc_class, | ||||
| }; | ||||
|  | ||||
| @@ -767,6 +769,16 @@ static int smptebars_config_props(AVFilterLink *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 = { | ||||
|     .name      = "smptebars", | ||||
|     .description = NULL_IF_CONFIG_SMALL("Generate SMPTE color bars."), | ||||
| @@ -775,22 +787,9 @@ AVFilter avfilter_vsrc_smptebars = { | ||||
|     .uninit    = uninit, | ||||
|  | ||||
|     .query_formats = smptebars_query_formats, | ||||
|  | ||||
|     .inputs = (const AVFilterPad[]) { | ||||
|         { .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, | ||||
|     .inputs        = NULL, | ||||
|     .outputs       = smptebars_outputs, | ||||
|     .priv_class    = &smptebars_class, | ||||
| }; | ||||
|  | ||||
| #endif  /* CONFIG_SMPTEBARS_FILTER */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user