diff options
60 files changed, 1158 insertions, 564 deletions
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 23dbb3eba0..fba7cb4f0b 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -2160,7 +2160,7 @@ void show_help_default(const char *opt, const char *arg) const int per_file = OPT_SPEC | OPT_OFFSET | OPT_PERFILE; int show_advanced = 0, show_avoptions = 0; - if (opt) { + if (opt && *opt) { if (!strcmp(opt, "long")) show_advanced = 1; else if (!strcmp(opt, "full")) diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c index 367d189bee..8d6f39d97a 100644 --- a/libavcodec/flashsv.c +++ b/libavcodec/flashsv.c @@ -122,10 +122,11 @@ static av_cold int flashsv_decode_init(AVCodecContext *avctx) } -static void flashsv2_prime(FlashSVContext *s, uint8_t *src, - int size, int unp_size) +static int flashsv2_prime(FlashSVContext *s, uint8_t *src, + int size, int unp_size) { z_stream zs; + int zret; // Zlib return code zs.zalloc = NULL; zs.zfree = NULL; @@ -145,13 +146,18 @@ static void flashsv2_prime(FlashSVContext *s, uint8_t *src, deflate(&zs, Z_SYNC_FLUSH); deflateEnd(&zs); - inflateReset(&s->zstream); + if ((zret = inflateReset(&s->zstream)) != Z_OK) { + av_log(s->avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret); + return AVERROR_UNKNOWN; + } s->zstream.next_in = s->deflate_block; s->zstream.avail_in = s->deflate_block_size - zs.avail_out; s->zstream.next_out = s->tmpblock; s->zstream.avail_out = s->block_size * 3; inflate(&s->zstream, Z_SYNC_FLUSH); + + return 0; } static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, @@ -164,11 +170,14 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, int k; int ret = inflateReset(&s->zstream); if (ret != Z_OK) { - //return -1; + av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret); + return AVERROR_UNKNOWN; } if (s->zlibprime_curr || s->zlibprime_prev) { - flashsv2_prime(s, s->blocks[blk_idx].pos, s->blocks[blk_idx].size, + ret = flashsv2_prime(s, s->blocks[blk_idx].pos, s->blocks[blk_idx].size, s->blocks[blk_idx].unp_size); + if (ret < 0) + return ret; } s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8; s->zstream.avail_in = block_size; diff --git a/libavcodec/ivi_common.c b/libavcodec/ivi_common.c index 9ecf9cdf2c..ff2a1a87ee 100644 --- a/libavcodec/ivi_common.c +++ b/libavcodec/ivi_common.c @@ -830,9 +830,9 @@ int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *data_size, if (ctx->is_scalable) { if (avctx->codec_id == AV_CODEC_ID_INDEO4) - ff_ivi_recompose_haar(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0], 4); + ff_ivi_recompose_haar(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]); else - ff_ivi_recompose53 (&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0], 4); + ff_ivi_recompose53 (&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]); } else { ff_ivi_output_plane(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]); } diff --git a/libavcodec/ivi_dsp.c b/libavcodec/ivi_dsp.c index bedd5dc93c..52cd402cb1 100644 --- a/libavcodec/ivi_dsp.c +++ b/libavcodec/ivi_dsp.c @@ -33,7 +33,7 @@ #include "ivi_dsp.h" void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands) + const int dst_pitch) { int x, y, indx; int32_t p0, p1, p2, p3, tmp0, tmp1, tmp2; @@ -41,6 +41,7 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, int32_t b3_1, b3_2, b3_3, b3_4, b3_5, b3_6, b3_7, b3_8, b3_9; int32_t pitch, back_pitch; const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr; + const int num_bands = 4; /* all bands should have the same pitch */ pitch = plane->bands[0].pitch; @@ -189,7 +190,7 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, } void ff_ivi_recompose_haar(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands) + const int dst_pitch) { int x, y, indx, b0, b1, b2, b3, p0, p1, p2, p3; const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr; diff --git a/libavcodec/ivi_dsp.h b/libavcodec/ivi_dsp.h index 5a3441764c..e95bb117d9 100644 --- a/libavcodec/ivi_dsp.h +++ b/libavcodec/ivi_dsp.h @@ -38,10 +38,9 @@ * @param[in] plane pointer to the descriptor of the plane being processed * @param[out] dst pointer to the destination buffer * @param[in] dst_pitch pitch of the destination buffer - * @param[in] num_bands number of wavelet bands to be processed */ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands); + const int dst_pitch); /** * Haar wavelet recomposition filter for Indeo 4 @@ -49,10 +48,9 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, * @param[in] plane pointer to the descriptor of the plane being processed * @param[out] dst pointer to the destination buffer * @param[in] dst_pitch pitch of the destination buffer - * @param[in] num_bands number of wavelet bands to be processed */ void ff_ivi_recompose_haar(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands); + const int dst_pitch); /** * two-dimensional inverse Haar 8x8 transform for Indeo 4 diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 56c5bf9932..ae07d177cb 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -1274,6 +1274,11 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) break; } + if (v->fcm != PROGRESSIVE && !v->s.quarter_sample) { + v->range_x <<= 1; + v->range_y <<= 1; + } + /* AC Syntax */ v->c_ac_table_index = decode012(gb); if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI) { diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index c87bd51881..7aae8cc926 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -1575,10 +1575,6 @@ static inline void vc1_pred_mv(VC1Context *v, int n, int dmv_x, int dmv_y, } } - if (v->field_mode && !s->quarter_sample) { - r_x <<= 1; - r_y <<= 1; - } if (v->field_mode && v->numref) r_y >>= 1; if (v->field_mode && v->cur_field_type && v->ref_field_type[dir] == 0) diff --git a/libavfilter/af_aformat.c b/libavfilter/af_aformat.c index 9bc6f5bc58..79e0db2e20 100644 --- a/libavfilter/af_aformat.c +++ b/libavfilter/af_aformat.c @@ -126,6 +126,22 @@ static int query_formats(AVFilterContext *ctx) return 0; } +static const AVFilterPad avfilter_af_aformat_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + }, + { NULL } +}; + +static const AVFilterPad avfilter_af_aformat_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO + }, + { NULL } +}; + AVFilter avfilter_af_aformat = { .name = "aformat", .description = NULL_IF_CONFIG_SMALL("Convert the input audio to one of the specified formats."), @@ -133,11 +149,7 @@ AVFilter avfilter_af_aformat = { .query_formats = query_formats, .priv_size = sizeof(AFormatContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO}, - { .name = NULL}}, - .priv_class = &aformat_class, + .inputs = avfilter_af_aformat_inputs, + .outputs = avfilter_af_aformat_outputs, + .priv_class = &aformat_class, }; diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c index c804cece49..a93adddf34 100644 --- a/libavfilter/af_amix.c +++ b/libavfilter/af_amix.c @@ -542,6 +542,16 @@ static int query_formats(AVFilterContext *ctx) return 0; } +static const AVFilterPad avfilter_af_amix_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .config_props = config_output, + .request_frame = request_frame + }, + { NULL } +}; + AVFilter avfilter_af_amix = { .name = "amix", .description = NULL_IF_CONFIG_SMALL("Audio mixing."), @@ -552,10 +562,6 @@ AVFilter avfilter_af_amix = { .query_formats = query_formats, .inputs = NULL, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .config_props = config_output, - .request_frame = request_frame }, - { .name = NULL}}, + .outputs = avfilter_af_amix_outputs, .priv_class = &amix_class, }; diff --git a/libavfilter/af_anull.c b/libavfilter/af_anull.c index 355dff637c..40af7b8bc7 100644 --- a/libavfilter/af_anull.c +++ b/libavfilter/af_anull.c @@ -27,18 +27,30 @@ #include "internal.h" #include "libavutil/internal.h" +static const AVFilterPad avfilter_af_anull_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .get_audio_buffer = ff_null_get_audio_buffer, + }, + { NULL } +}; + +static const AVFilterPad avfilter_af_anull_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + }, + { NULL } +}; + AVFilter avfilter_af_anull = { .name = "anull", .description = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."), .priv_size = 0, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .get_audio_buffer = ff_null_get_audio_buffer, }, - { .name = NULL}}, + .inputs = avfilter_af_anull_inputs, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, }, - { .name = NULL}}, + .outputs = avfilter_af_anull_outputs, }; diff --git a/libavfilter/af_asyncts.c b/libavfilter/af_asyncts.c index 41cb47565e..6288433a74 100644 --- a/libavfilter/af_asyncts.c +++ b/libavfilter/af_asyncts.c @@ -233,6 +233,25 @@ fail: return ret; } +static const AVFilterPad avfilter_af_asyncts_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .filter_samples = filter_samples + }, + { NULL } +}; + +static const AVFilterPad avfilter_af_asyncts_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .config_props = config_props, + .request_frame = request_frame + }, + { NULL } +}; + AVFilter avfilter_af_asyncts = { .name = "asyncts", .description = NULL_IF_CONFIG_SMALL("Sync audio data to timestamps"), @@ -242,14 +261,7 @@ AVFilter avfilter_af_asyncts = { .priv_size = sizeof(ASyncContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .filter_samples = filter_samples }, - { NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .config_props = config_props, - .request_frame = request_frame }, - { NULL }}, + .inputs = avfilter_af_asyncts_inputs, + .outputs = avfilter_af_asyncts_outputs, .priv_class = &asyncts_class, }; diff --git a/libavfilter/af_channelmap.c b/libavfilter/af_channelmap.c index 211abd752d..6e3f021f10 100644 --- a/libavfilter/af_channelmap.c +++ b/libavfilter/af_channelmap.c @@ -385,6 +385,25 @@ static int channelmap_config_input(AVFilterLink *inlink) return err; } +static const AVFilterPad avfilter_af_channelmap_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .min_perms = AV_PERM_READ | AV_PERM_WRITE, + .filter_samples = channelmap_filter_samples, + .config_props = channelmap_config_input + }, + { NULL } +}; + +static const AVFilterPad avfilter_af_channelmap_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO + }, + { NULL } +}; + AVFilter avfilter_af_channelmap = { .name = "channelmap", .description = NULL_IF_CONFIG_SMALL("Remap audio channels."), @@ -392,14 +411,7 @@ AVFilter avfilter_af_channelmap = { .query_formats = channelmap_query_formats, .priv_size = sizeof(ChannelMapContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .min_perms = AV_PERM_READ | AV_PERM_WRITE, - .filter_samples = channelmap_filter_samples, - .config_props = channelmap_config_input }, - { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO }, - { .name = NULL }}, - .priv_class = &channelmap_class, + .inputs = avfilter_af_channelmap_inputs, + .outputs = avfilter_af_channelmap_outputs, + .priv_class = &channelmap_class, }; diff --git a/libavfilter/af_channelsplit.c b/libavfilter/af_channelsplit.c index 81f91ad393..56950c8fd4 100644 --- a/libavfilter/af_channelsplit.c +++ b/libavfilter/af_channelsplit.c @@ -130,6 +130,15 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) return ret; } +static const AVFilterPad avfilter_af_channelsplit_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .filter_samples = filter_samples, + }, + { NULL } +}; + AVFilter avfilter_af_channelsplit = { .name = "channelsplit", .description = NULL_IF_CONFIG_SMALL("Split audio into per-channel streams"), @@ -138,10 +147,7 @@ AVFilter avfilter_af_channelsplit = { .init = init, .query_formats = query_formats, - .inputs = (const AVFilterPad[]){{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .filter_samples = filter_samples, }, - { NULL }}, + .inputs = avfilter_af_channelsplit_inputs, .outputs = NULL, .priv_class = &channelsplit_class, }; diff --git a/libavfilter/af_join.c b/libavfilter/af_join.c index 5e338f0efb..210c844524 100644 --- a/libavfilter/af_join.c +++ b/libavfilter/af_join.c @@ -484,6 +484,16 @@ fail: return AVERROR(ENOMEM); } +static const AVFilterPad avfilter_af_join_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .config_props = join_config_output, + .request_frame = join_request_frame, + }, + { NULL } +}; + AVFilter avfilter_af_join = { .name = "join", .description = NULL_IF_CONFIG_SMALL("Join multiple audio streams into " @@ -495,10 +505,6 @@ AVFilter avfilter_af_join = { .query_formats = join_query_formats, .inputs = NULL, - .outputs = (const AVFilterPad[]){{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .config_props = join_config_output, - .request_frame = join_request_frame, }, - { NULL }}, + .outputs = avfilter_af_join_outputs, .priv_class = &join_class, }; diff --git a/libavfilter/af_resample.c b/libavfilter/af_resample.c index c43d260610..a0c7e0e4a9 100644 --- a/libavfilter/af_resample.c +++ b/libavfilter/af_resample.c @@ -239,6 +239,26 @@ fail: return ret; } +static const AVFilterPad avfilter_af_resample_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .filter_samples = filter_samples, + .min_perms = AV_PERM_READ + }, + { NULL } +}; + +static const AVFilterPad avfilter_af_resample_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .config_props = config_output, + .request_frame = request_frame + }, + { NULL } +}; + AVFilter avfilter_af_resample = { .name = "resample", .description = NULL_IF_CONFIG_SMALL("Audio resampling and conversion."), @@ -247,14 +267,6 @@ AVFilter avfilter_af_resample = { .uninit = uninit, .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .filter_samples = filter_samples, - .min_perms = AV_PERM_READ }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .config_props = config_output, - .request_frame = request_frame }, - { .name = NULL}}, + .inputs = avfilter_af_resample_inputs, + .outputs = avfilter_af_resample_outputs, }; diff --git a/libavfilter/asink_anullsink.c b/libavfilter/asink_anullsink.c index 4eee5041df..7b337e630e 100644 --- a/libavfilter/asink_anullsink.c +++ b/libavfilter/asink_anullsink.c @@ -27,19 +27,21 @@ static int null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref return 0; } +static const AVFilterPad avfilter_asink_anullsink_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .filter_samples = null_filter_samples, + }, + { NULL }, +}; + AVFilter avfilter_asink_anullsink = { .name = "anullsink", .description = NULL_IF_CONFIG_SMALL("Do absolutely nothing with the input audio."), .priv_size = 0, - .inputs = (const AVFilterPad[]) { - { - .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .filter_samples = null_filter_samples, - }, - { .name = NULL}, - }, + .inputs = avfilter_asink_anullsink_inputs, .outputs = NULL, }; diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c index 4e28e294af..3b20acaaf9 100644 --- a/libavfilter/asrc_anullsrc.c +++ b/libavfilter/asrc_anullsrc.c @@ -119,6 +119,16 @@ static int request_frame(AVFilterLink *outlink) return 0; } +static const AVFilterPad avfilter_asrc_anullsrc_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .config_props = config_props, + .request_frame = request_frame, + }, + { NULL } +}; + AVFilter avfilter_asrc_anullsrc = { .name = "anullsrc", .description = NULL_IF_CONFIG_SMALL("Null audio source, return empty audio frames."), @@ -128,10 +138,6 @@ AVFilter avfilter_asrc_anullsrc = { .inputs = NULL, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .config_props = config_props, - .request_frame = request_frame, }, - { .name = NULL}}, + .outputs = avfilter_asrc_anullsrc_outputs, .priv_class = &anullsrc_class, }; diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c index 5cd0924666..9a9aaf1d38 100644 --- a/libavfilter/buffersink.c +++ b/libavfilter/buffersink.c @@ -140,6 +140,17 @@ int ff_buffersink_read_samples_compat(AVFilterContext *ctx, AVFilterBufferRef ** return ret; } +static const AVFilterPad avfilter_vsink_buffer_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .start_frame = start_frame, + .min_perms = AV_PERM_READ, + .needs_fifo = 1 + }, + { NULL } +}; + AVFilter avfilter_vsink_buffer = { #if AV_HAVE_INCOMPATIBLE_FORK_ABI .name = "buffersink", @@ -150,15 +161,21 @@ AVFilter avfilter_vsink_buffer = { .priv_size = sizeof(BufferSinkContext), .uninit = uninit, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .start_frame = start_frame, - .min_perms = AV_PERM_READ, - .needs_fifo = 1 }, - { .name = NULL }}, + .inputs = avfilter_vsink_buffer_inputs, .outputs = NULL, }; +static const AVFilterPad avfilter_asink_abuffer_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .filter_samples = start_frame, + .min_perms = AV_PERM_READ, + .needs_fifo = 1 + }, + { NULL } +}; + AVFilter avfilter_asink_abuffer = { #if AV_HAVE_INCOMPATIBLE_FORK_ABI .name = "abuffersink", @@ -169,11 +186,6 @@ AVFilter avfilter_asink_abuffer = { .priv_size = sizeof(BufferSinkContext), .uninit = uninit, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .filter_samples = start_frame, - .min_perms = AV_PERM_READ, - .needs_fifo = 1 }, - { .name = NULL }}, + .inputs = avfilter_asink_abuffer_inputs, .outputs = NULL, }; diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index 85f7063669..e660d80a14 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -400,6 +400,17 @@ static int poll_frame(AVFilterLink *link) return size/sizeof(AVFilterBufferRef*); } +static const AVFilterPad avfilter_vsrc_buffer_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .request_frame = request_frame, + .poll_frame = poll_frame, + .config_props = config_props, + }, + { NULL } +}; + AVFilter avfilter_vsrc_buffer = { .name = "buffer", .description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them accessible to the filterchain."), @@ -410,15 +421,21 @@ AVFilter avfilter_vsrc_buffer = { .uninit = uninit, .inputs = NULL, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .request_frame = request_frame, - .poll_frame = poll_frame, - .config_props = config_props, }, - { .name = NULL}}, + .outputs = avfilter_vsrc_buffer_outputs, .priv_class = &buffer_class, }; +static const AVFilterPad avfilter_asrc_abuffer_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .request_frame = request_frame, + .poll_frame = poll_frame, + .config_props = config_props, + }, + { NULL } +}; + AVFilter avfilter_asrc_abuffer = { .name = "abuffer", .description = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them accessible to the filterchain."), @@ -429,11 +446,6 @@ AVFilter avfilter_asrc_abuffer = { .uninit = uninit, .inputs = NULL, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .request_frame = request_frame, - .poll_frame = poll_frame, - .config_props = config_props, }, - { .name = NULL}}, + .outputs = avfilter_asrc_abuffer_outputs, .priv_class = &abuffer_class, }; diff --git a/libavfilter/f_setpts.c b/libavfilter/f_setpts.c index 023dc1e672..5a58ce3366 100644 --- a/libavfilter/f_setpts.c +++ b/libavfilter/f_setpts.c @@ -216,6 +216,25 @@ AVFilter avfilter_af_asetpts = { #endif /* CONFIG_ASETPTS_FILTER */ #if CONFIG_SETPTS_FILTER +static const AVFilterPad avfilter_vf_setpts_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .config_props = config_input, + .start_frame = filter_frame, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_setpts_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_setpts = { .name = "setpts", .description = NULL_IF_CONFIG_SMALL("Set PTS for the output video frame."), @@ -224,14 +243,7 @@ AVFilter avfilter_vf_setpts = { .priv_size = sizeof(SetPTSContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer = ff_null_get_video_buffer, - .config_props = config_input, - .start_frame = filter_frame, }, - { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_setpts_inputs, + .outputs = avfilter_vf_setpts_outputs, }; #endif /* CONFIG_SETPTS_FILTER */ diff --git a/libavfilter/f_settb.c b/libavfilter/f_settb.c index e6c16aa2f9..f42a15c78d 100644 --- a/libavfilter/f_settb.c +++ b/libavfilter/f_settb.c @@ -137,6 +137,26 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) } #if CONFIG_SETTB_FILTER +static const AVFilterPad avfilter_vf_settb_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = start_frame, + .end_frame = ff_null_end_frame + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_settb_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_output_props, + }, + { NULL } +}; + AVFilter avfilter_vf_settb = { .name = "settb", .description = NULL_IF_CONFIG_SMALL("Set timebase for the video output link."), @@ -144,20 +164,8 @@ AVFilter avfilter_vf_settb = { .priv_size = sizeof(SetTBContext), - .inputs = (const AVFilterPad[]) { - { .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer = ff_null_get_video_buffer, - .start_frame = start_frame, - .end_frame = ff_null_end_frame }, - { .name = NULL } - }, - .outputs = (const AVFilterPad[]) { - { .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_output_props, }, - { .name = NULL} - }, + .inputs = avfilter_vf_settb_inputs, + .outputs = avfilter_vf_settb_outputs, }; #endif diff --git a/libavfilter/fifo.c b/libavfilter/fifo.c index 8c978cc93c..e05f9827e3 100644 --- a/libavfilter/fifo.c +++ b/libavfilter/fifo.c @@ -267,6 +267,28 @@ static int request_frame(AVFilterLink *outlink) return ret; } +static const AVFilterPad avfilter_vf_fifo_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = add_to_queue, + .draw_slice = draw_slice, + .end_frame = end_frame, + .min_perms = AV_PERM_PRESERVE, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_fifo_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .request_frame = request_frame, + }, + { NULL } +}; + AVFilter avfilter_vf_fifo = { .name = "fifo", .description = NULL_IF_CONFIG_SMALL("Buffer input images and send them when they are requested."), @@ -276,18 +298,28 @@ AVFilter avfilter_vf_fifo = { .priv_size = sizeof(FifoContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer= ff_null_get_video_buffer, - .start_frame = add_to_queue, - .draw_slice = draw_slice, - .end_frame = end_frame, - .min_perms = AV_PERM_PRESERVE, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .request_frame = request_frame, }, - { .name = NULL}}, + .inputs = avfilter_vf_fifo_inputs, + .outputs = avfilter_vf_fifo_outputs, +}; + +static const AVFilterPad avfilter_af_afifo_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .get_audio_buffer = ff_null_get_audio_buffer, + .filter_samples = add_to_queue, + .min_perms = AV_PERM_PRESERVE, + }, + { NULL } +}; + +static const AVFilterPad avfilter_af_afifo_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .request_frame = request_frame, + }, + { NULL } }; AVFilter avfilter_af_afifo = { @@ -299,14 +331,6 @@ AVFilter avfilter_af_afifo = { .priv_size = sizeof(FifoContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .get_audio_buffer = ff_null_get_audio_buffer, - .filter_samples = add_to_queue, - .min_perms = AV_PERM_PRESERVE, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .request_frame = request_frame, }, - { .name = NULL}}, + .inputs = avfilter_af_afifo_inputs, + .outputs = avfilter_af_afifo_outputs, }; diff --git a/libavfilter/split.c b/libavfilter/split.c index e036a93f21..30cc3e5c00 100644 --- a/libavfilter/split.c +++ b/libavfilter/split.c @@ -119,6 +119,18 @@ static int end_frame(AVFilterLink *inlink) return ret; } +static const AVFilterPad avfilter_vf_split_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 } +}; + AVFilter avfilter_vf_split = { .name = "split", .description = NULL_IF_CONFIG_SMALL("Pass on the input video to N outputs."), @@ -126,13 +138,7 @@ AVFilter avfilter_vf_split = { .init = split_init, .uninit = split_uninit, - .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}}, + .inputs = avfilter_vf_split_inputs, .outputs = NULL, }; @@ -157,6 +163,16 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) return ret; } +static const AVFilterPad avfilter_af_asplit_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .get_audio_buffer = ff_null_get_audio_buffer, + .filter_samples = filter_samples + }, + { NULL } +}; + AVFilter avfilter_af_asplit = { .name = "asplit", .description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."), @@ -164,10 +180,6 @@ AVFilter avfilter_af_asplit = { .init = split_init, .uninit = split_uninit, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_AUDIO, - .get_audio_buffer = ff_null_get_audio_buffer, - .filter_samples = filter_samples }, - { .name = NULL }}, + .inputs = avfilter_af_asplit_inputs, .outputs = NULL, }; diff --git a/libavfilter/vf_aspect.c b/libavfilter/vf_aspect.c index 1d0c22b600..4e5ba77b39 100644 --- a/libavfilter/vf_aspect.c +++ b/libavfilter/vf_aspect.c @@ -79,6 +79,26 @@ static int setdar_config_props(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_setdar_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = setdar_config_props, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = start_frame, + .end_frame = ff_null_end_frame + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_setdar_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_setdar = { .name = "setdar", .description = NULL_IF_CONFIG_SMALL("Set the frame display aspect ratio."), @@ -87,17 +107,9 @@ AVFilter avfilter_vf_setdar = { .priv_size = sizeof(AspectContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = setdar_config_props, - .get_video_buffer = ff_null_get_video_buffer, - .start_frame = start_frame, - .end_frame = ff_null_end_frame }, - { .name = NULL}}, - - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_setdar_inputs, + + .outputs = avfilter_vf_setdar_outputs, }; #endif /* CONFIG_SETDAR_FILTER */ @@ -111,6 +123,26 @@ static int setsar_config_props(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_setsar_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = setsar_config_props, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = start_frame, + .end_frame = ff_null_end_frame + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_setsar_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_setsar = { .name = "setsar", .description = NULL_IF_CONFIG_SMALL("Set the pixel sample aspect ratio."), @@ -119,16 +151,8 @@ AVFilter avfilter_vf_setsar = { .priv_size = sizeof(AspectContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = setsar_config_props, - .get_video_buffer = ff_null_get_video_buffer, - .start_frame = start_frame, - .end_frame = ff_null_end_frame }, - { .name = NULL}}, - - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_setsar_inputs, + + .outputs = avfilter_vf_setsar_outputs, }; #endif /* CONFIG_SETSAR_FILTER */ diff --git a/libavfilter/vf_blackframe.c b/libavfilter/vf_blackframe.c index 59beab94d3..fbc59781f7 100644 --- a/libavfilter/vf_blackframe.c +++ b/libavfilter/vf_blackframe.c @@ -121,6 +121,26 @@ static int end_frame(AVFilterLink *inlink) return ff_end_frame(inlink->dst->outputs[0]); } +static const AVFilterPad avfilter_vf_blackframe_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .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 avfilter_vf_blackframe_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO + }, + { NULL } +}; + AVFilter avfilter_vf_blackframe = { .name = "blackframe", .description = NULL_IF_CONFIG_SMALL("Detect frames that are (almost) black."), @@ -130,15 +150,7 @@ AVFilter avfilter_vf_blackframe = { .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .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 }, - { .name = NULL}}, + .inputs = avfilter_vf_blackframe_inputs, + + .outputs = avfilter_vf_blackframe_outputs, }; diff --git a/libavfilter/vf_boxblur.c b/libavfilter/vf_boxblur.c index 4f1a52471a..2862fdb641 100644 --- a/libavfilter/vf_boxblur.c +++ b/libavfilter/vf_boxblur.c @@ -332,6 +332,26 @@ static int end_frame(AVFilterLink *inlink) return ff_end_frame(outlink); } +static const AVFilterPad avfilter_vf_boxblur_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 avfilter_vf_boxblur_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_boxblur = { .name = "boxblur", .description = NULL_IF_CONFIG_SMALL("Blur the input."), @@ -340,14 +360,6 @@ AVFilter avfilter_vf_boxblur = { .uninit = uninit, .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, }, - { .name = NULL}}, + .inputs = avfilter_vf_boxblur_inputs, + .outputs = avfilter_vf_boxblur_outputs, }; diff --git a/libavfilter/vf_copy.c b/libavfilter/vf_copy.c index d62108ad19..43fdc9a9a2 100644 --- a/libavfilter/vf_copy.c +++ b/libavfilter/vf_copy.c @@ -26,18 +26,30 @@ #include "internal.h" #include "video.h" +static const AVFilterPad avfilter_vf_copy_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_null_start_frame, + .end_frame = ff_null_end_frame, + .rej_perms = ~0 + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_copy_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_copy = { .name = "copy", .description = NULL_IF_CONFIG_SMALL("Copy the input video unchanged to the output."), - .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 = ff_null_end_frame, - .rej_perms = ~0 }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_copy_inputs, + .outputs = avfilter_vf_copy_outputs, }; diff --git a/libavfilter/vf_crop.c b/libavfilter/vf_crop.c index 40970b1266..7218e1756e 100644 --- a/libavfilter/vf_crop.c +++ b/libavfilter/vf_crop.c @@ -345,6 +345,28 @@ static int end_frame(AVFilterLink *link) return ff_end_frame(link->dst->outputs[0]); } +static const AVFilterPad avfilter_vf_crop_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .start_frame = start_frame, + .draw_slice = draw_slice, + .end_frame = end_frame, + .get_video_buffer = ff_null_get_video_buffer, + .config_props = config_input, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_crop_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_output, + }, + { NULL } +}; + AVFilter avfilter_vf_crop = { .name = "crop", .description = NULL_IF_CONFIG_SMALL("Crop the input video to width:height:x:y."), @@ -355,16 +377,6 @@ AVFilter avfilter_vf_crop = { .init = init, .uninit = uninit, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .start_frame = start_frame, - .draw_slice = draw_slice, - .end_frame = end_frame, - .get_video_buffer = ff_null_get_video_buffer, - .config_props = config_input, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_output, }, - { .name = NULL}}, + .inputs = avfilter_vf_crop_inputs, + .outputs = avfilter_vf_crop_outputs, }; diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c index f0f1270af0..ecf1692fcf 100644 --- a/libavfilter/vf_cropdetect.c +++ b/libavfilter/vf_cropdetect.c @@ -197,6 +197,26 @@ static int end_frame(AVFilterLink *inlink) return ff_end_frame(inlink->dst->outputs[0]); } +static const AVFilterPad avfilter_vf_cropdetect_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_input, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_null_start_frame, + .end_frame = end_frame, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_cropdetect_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO + }, + { NULL } +}; + AVFilter avfilter_vf_cropdetect = { .name = "cropdetect", .description = NULL_IF_CONFIG_SMALL("Auto-detect crop size."), @@ -206,15 +226,7 @@ AVFilter avfilter_vf_cropdetect = { .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_input, - .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 }, - { .name = NULL}}, + .inputs = avfilter_vf_cropdetect_inputs, + + .outputs = avfilter_vf_cropdetect_outputs, }; diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c index ca9a05ee6e..c4b2c7fd98 100644 --- a/libavfilter/vf_delogo.c +++ b/libavfilter/vf_delogo.c @@ -245,6 +245,27 @@ static int end_frame(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_delogo_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_inplace_start_frame, + .draw_slice = null_draw_slice, + .end_frame = end_frame, + .min_perms = AV_PERM_WRITE | AV_PERM_READ, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_delogo_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_delogo = { .name = "delogo", .description = NULL_IF_CONFIG_SMALL("Remove logo from input video."), @@ -252,15 +273,6 @@ AVFilter avfilter_vf_delogo = { .init = init, .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer = ff_null_get_video_buffer, - .start_frame = ff_inplace_start_frame, - .draw_slice = null_draw_slice, - .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 = avfilter_vf_delogo_inputs, + .outputs = avfilter_vf_delogo_outputs, }; diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c index a7d21928c1..94e573cb5f 100644 --- a/libavfilter/vf_drawbox.c +++ b/libavfilter/vf_drawbox.c @@ -124,6 +124,28 @@ static int draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir) return ff_draw_slice(inlink->dst->outputs[0], y0, h, 1); } +static const AVFilterPad avfilter_vf_drawbox_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_input, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_null_start_frame, + .draw_slice = draw_slice, + .end_frame = ff_null_end_frame, + .min_perms = AV_PERM_WRITE | AV_PERM_READ, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_drawbox_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_drawbox = { .name = "drawbox", .description = NULL_IF_CONFIG_SMALL("Draw a colored box on the input video."), @@ -131,16 +153,6 @@ AVFilter avfilter_vf_drawbox = { .init = init, .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_input, - .get_video_buffer = ff_null_get_video_buffer, - .start_frame = ff_null_start_frame, - .draw_slice = draw_slice, - .end_frame = ff_null_end_frame, - .min_perms = AV_PERM_WRITE | AV_PERM_READ }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_drawbox_inputs, + .outputs = avfilter_vf_drawbox_outputs, }; diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index 729f1522ac..9b7f8ee9bf 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -810,6 +810,29 @@ static int end_frame(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_drawtext_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 avfilter_vf_drawtext_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_drawtext = { .name = "drawtext", .description = NULL_IF_CONFIG_SMALL("Draw text on top of video frames using libfreetype library."), @@ -818,19 +841,8 @@ AVFilter avfilter_vf_drawtext = { .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}}, + .inputs = avfilter_vf_drawtext_inputs, + .outputs = avfilter_vf_drawtext_outputs, .process_command = command, .priv_class = &drawtext_class, }; diff --git a/libavfilter/vf_fade.c b/libavfilter/vf_fade.c index d80b4205cc..2d83a999df 100644 --- a/libavfilter/vf_fade.c +++ b/libavfilter/vf_fade.c @@ -276,6 +276,28 @@ static int end_frame(AVFilterLink *inlink) return ret; } +static const AVFilterPad avfilter_vf_fade_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_props, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_null_start_frame, + .draw_slice = draw_slice, + .end_frame = end_frame, + .min_perms = AV_PERM_READ | AV_PERM_WRITE, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_fade_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_fade = { .name = "fade", .description = NULL_IF_CONFIG_SMALL("Fade in/out input video."), @@ -284,17 +306,7 @@ AVFilter avfilter_vf_fade = { .priv_size = sizeof(FadeContext), .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_props, - .get_video_buffer = ff_null_get_video_buffer, - .start_frame = ff_null_start_frame, - .draw_slice = draw_slice, - .end_frame = end_frame, - .min_perms = AV_PERM_READ | AV_PERM_WRITE }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_fade_inputs, + .outputs = avfilter_vf_fade_outputs, .priv_class = &fade_class, }; diff --git a/libavfilter/vf_fieldorder.c b/libavfilter/vf_fieldorder.c index a722731dcf..a98eb825ca 100644 --- a/libavfilter/vf_fieldorder.c +++ b/libavfilter/vf_fieldorder.c @@ -234,22 +234,34 @@ static int end_frame(AVFilterLink *inlink) return ff_end_frame(outlink); } +static const AVFilterPad avfilter_vf_fieldorder_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_input, + .start_frame = start_frame, + .get_video_buffer = get_video_buffer, + .draw_slice = draw_slice, + .end_frame = end_frame, + .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_fieldorder_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_fieldorder = { .name = "fieldorder", .description = NULL_IF_CONFIG_SMALL("Set the field order."), .init = init, .priv_size = sizeof(FieldOrderContext), .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_input, - .start_frame = start_frame, - .get_video_buffer = get_video_buffer, - .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, }, - { .name = NULL}}, + .inputs = avfilter_vf_fieldorder_inputs, + .outputs = avfilter_vf_fieldorder_outputs, }; diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c index 56dacdb1da..e33c25e6af 100644 --- a/libavfilter/vf_format.c +++ b/libavfilter/vf_format.c @@ -97,6 +97,26 @@ static int query_formats_format(AVFilterContext *ctx) return 0; } +static const AVFilterPad avfilter_vf_format_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_null_start_frame, + .draw_slice = ff_null_draw_slice, + .end_frame = ff_null_end_frame, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_format_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO + }, + { NULL } +}; + AVFilter avfilter_vf_format = { .name = "format", .description = NULL_IF_CONFIG_SMALL("Convert the input video to one of the specified pixel formats."), @@ -107,16 +127,8 @@ AVFilter avfilter_vf_format = { .priv_size = sizeof(FormatContext), - .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 = ff_null_draw_slice, - .end_frame = ff_null_end_frame, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO }, - { .name = NULL}}, + .inputs = avfilter_vf_format_inputs, + .outputs = avfilter_vf_format_outputs, }; #endif /* CONFIG_FORMAT_FILTER */ @@ -127,6 +139,26 @@ static int query_formats_noformat(AVFilterContext *ctx) return 0; } +static const AVFilterPad avfilter_vf_noformat_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_null_start_frame, + .draw_slice = ff_null_draw_slice, + .end_frame = ff_null_end_frame, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_noformat_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO + }, + { NULL } +}; + AVFilter avfilter_vf_noformat = { .name = "noformat", .description = NULL_IF_CONFIG_SMALL("Force libavfilter not to use any of the specified pixel formats for the input to the next filter."), @@ -137,15 +169,7 @@ AVFilter avfilter_vf_noformat = { .priv_size = sizeof(FormatContext), - .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 = ff_null_draw_slice, - .end_frame = ff_null_end_frame, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO }, - { .name = NULL}}, + .inputs = avfilter_vf_noformat_inputs, + .outputs = avfilter_vf_noformat_outputs, }; #endif /* CONFIG_NOFORMAT_FILTER */ diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c index c13b1bd385..114b06241f 100644 --- a/libavfilter/vf_fps.c +++ b/libavfilter/vf_fps.c @@ -279,6 +279,29 @@ static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) return 0; } +static const AVFilterPad avfilter_vf_fps_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, + .start_frame = null_start_frame, + .draw_slice = null_draw_slice, + .end_frame = end_frame, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_fps_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .rej_perms = AV_PERM_WRITE, + .request_frame = request_frame, + .config_props = config_props + }, + { NULL } +}; + AVFilter avfilter_vf_fps = { .name = "fps", .description = NULL_IF_CONFIG_SMALL("Force constant framerate"), @@ -288,18 +311,7 @@ AVFilter avfilter_vf_fps = { .priv_size = sizeof(FPSContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, - .start_frame = null_start_frame, - .draw_slice = null_draw_slice, - .end_frame = end_frame, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .rej_perms = AV_PERM_WRITE, - .request_frame = request_frame, - .config_props = config_props}, - { .name = NULL}}, + .inputs = avfilter_vf_fps_inputs, + .outputs = avfilter_vf_fps_outputs, .priv_class = &fps_class, }; diff --git a/libavfilter/vf_frei0r.c b/libavfilter/vf_frei0r.c index 0845702238..119e7f3538 100644 --- a/libavfilter/vf_frei0r.c +++ b/libavfilter/vf_frei0r.c @@ -368,6 +368,26 @@ static int end_frame(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_frei0r_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .draw_slice = null_draw_slice, + .config_props = config_input_props, + .end_frame = end_frame, + .min_perms = AV_PERM_READ + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_frei0r_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_frei0r = { .name = "frei0r", .description = NULL_IF_CONFIG_SMALL("Apply a frei0r effect."), @@ -378,17 +398,9 @@ AVFilter avfilter_vf_frei0r = { .priv_size = sizeof(Frei0rContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .draw_slice = null_draw_slice, - .config_props = config_input_props, - .end_frame = end_frame, - .min_perms = AV_PERM_READ }, - { .name = NULL}}, - - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_frei0r_inputs, + + .outputs = avfilter_vf_frei0r_outputs, }; static av_cold int source_init(AVFilterContext *ctx, const char *args) @@ -478,6 +490,16 @@ fail: return ret; } +static const AVFilterPad avfilter_vsrc_frei0r_src_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .request_frame = source_request_frame, + .config_props = source_config_props + }, + { NULL } +}; + AVFilter avfilter_vsrc_frei0r_src = { .name = "frei0r_src", .description = NULL_IF_CONFIG_SMALL("Generate a frei0r source."), @@ -490,9 +512,5 @@ AVFilter avfilter_vsrc_frei0r_src = { .inputs = NULL, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .request_frame = source_request_frame, - .config_props = source_config_props }, - { .name = NULL}}, + .outputs = avfilter_vsrc_frei0r_src_outputs, }; diff --git a/libavfilter/vf_gradfun.c b/libavfilter/vf_gradfun.c index c403331972..d97bc09e5b 100644 --- a/libavfilter/vf_gradfun.c +++ b/libavfilter/vf_gradfun.c @@ -216,6 +216,27 @@ static int end_frame(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_gradfun_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_input, + .start_frame = ff_inplace_start_frame, + .draw_slice = null_draw_slice, + .end_frame = end_frame, + .min_perms = AV_PERM_READ, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_gradfun_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_gradfun = { .name = "gradfun", .description = NULL_IF_CONFIG_SMALL("Debands video quickly using gradients."), @@ -224,15 +245,6 @@ AVFilter avfilter_vf_gradfun = { .uninit = uninit, .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_input, - .start_frame = ff_inplace_start_frame, - .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, }, - { .name = NULL}}, + .inputs = avfilter_vf_gradfun_inputs, + .outputs = avfilter_vf_gradfun_outputs, }; diff --git a/libavfilter/vf_hflip.c b/libavfilter/vf_hflip.c index ed42f9298c..4b4b838318 100644 --- a/libavfilter/vf_hflip.c +++ b/libavfilter/vf_hflip.c @@ -165,20 +165,32 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) return ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir); } +static const AVFilterPad avfilter_vf_hflip_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 avfilter_vf_hflip_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_hflip = { .name = "hflip", .description = NULL_IF_CONFIG_SMALL("Horizontally flip the input video."), .priv_size = sizeof(FlipContext), .query_formats = query_formats, - .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}}, + .inputs = avfilter_vf_hflip_inputs, + .outputs = avfilter_vf_hflip_outputs, }; diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c index a454207b61..c899ecf52a 100644 --- a/libavfilter/vf_hqdn3d.c +++ b/libavfilter/vf_hqdn3d.c @@ -348,6 +348,26 @@ static int end_frame(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_hqdn3d_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .start_frame = ff_inplace_start_frame, + .draw_slice = null_draw_slice, + .config_props = config_input, + .end_frame = end_frame + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_hqdn3d_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO + }, + { NULL } +}; + AVFilter avfilter_vf_hqdn3d = { .name = "hqdn3d", .description = NULL_IF_CONFIG_SMALL("Apply a High Quality 3D Denoiser."), @@ -357,15 +377,7 @@ AVFilter avfilter_vf_hqdn3d = { .uninit = uninit, .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .start_frame = ff_inplace_start_frame, - .draw_slice = null_draw_slice, - .config_props = config_input, - .end_frame = end_frame }, - { .name = NULL}}, - - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO }, - { .name = NULL}}, + .inputs = avfilter_vf_hqdn3d_inputs, + + .outputs = avfilter_vf_hqdn3d_outputs, }; diff --git a/libavfilter/vf_libopencv.c b/libavfilter/vf_libopencv.c index 62c79de946..819200779c 100644 --- a/libavfilter/vf_libopencv.c +++ b/libavfilter/vf_libopencv.c @@ -376,6 +376,25 @@ static int end_frame(AVFilterLink *inlink) return 0; } +static const AVFilterPad avfilter_vf_ocv_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .draw_slice = null_draw_slice, + .end_frame = end_frame, + .min_perms = AV_PERM_READ + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_ocv_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_ocv = { .name = "ocv", .description = NULL_IF_CONFIG_SMALL("Apply transform using libopencv."), @@ -386,14 +405,7 @@ AVFilter avfilter_vf_ocv = { .init = init, .uninit = uninit, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .draw_slice = null_draw_slice, - .end_frame = end_frame, - .min_perms = AV_PERM_READ }, - { .name = NULL}}, + .inputs = avfilter_vf_ocv_inputs, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .outputs = avfilter_vf_ocv_outputs, }; diff --git a/libavfilter/vf_null.c b/libavfilter/vf_null.c index 9ab2767e8d..b22779d358 100644 --- a/libavfilter/vf_null.c +++ b/libavfilter/vf_null.c @@ -26,20 +26,32 @@ #include "internal.h" #include "video.h" +static const AVFilterPad avfilter_vf_null_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = ff_null_start_frame, + .end_frame = ff_null_end_frame + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_null_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_null = { .name = "null", .description = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."), .priv_size = 0, - .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 = ff_null_end_frame }, - { .name = NULL}}, + .inputs = avfilter_vf_null_inputs, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .outputs = avfilter_vf_null_outputs, }; diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c index b44c9f2b3e..e4f243f160 100644 --- a/libavfilter/vf_overlay.c +++ b/libavfilter/vf_overlay.c @@ -607,6 +607,40 @@ static int null_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) return 0; } +static const AVFilterPad avfilter_vf_overlay_inputs[] = { + { + .name = "main", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer= get_video_buffer, + .config_props = config_input_main, + .start_frame = start_frame_main, + .draw_slice = draw_slice_main, + .end_frame = end_frame_main, + .min_perms = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE, + }, + { + .name = "overlay", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_input_overlay, + .start_frame = start_frame_over, + .draw_slice = null_draw_slice, + .end_frame = end_frame_over, + .min_perms = AV_PERM_READ | AV_PERM_PRESERVE, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_overlay_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .rej_perms = AV_PERM_WRITE, + .config_props = config_output, + .request_frame = request_frame, + }, + { NULL } +}; + AVFilter avfilter_vf_overlay = { .name = "overlay", .description = NULL_IF_CONFIG_SMALL("Overlay a video source on top of the input."), @@ -618,27 +652,7 @@ AVFilter avfilter_vf_overlay = { .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "main", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer= get_video_buffer, - .config_props = config_input_main, - .start_frame = start_frame_main, - .draw_slice = draw_slice_main, - .end_frame = end_frame_main, - .min_perms = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE }, - { .name = "overlay", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_input_overlay, - .start_frame = start_frame_over, - .draw_slice = null_draw_slice, - .end_frame = end_frame_over, - .min_perms = AV_PERM_READ | AV_PERM_PRESERVE }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .rej_perms = AV_PERM_WRITE, - .config_props = config_output, - .request_frame = request_frame, }, - { .name = NULL}}, + .inputs = avfilter_vf_overlay_inputs, + .outputs = avfilter_vf_overlay_outputs, .priv_class = &overlay_class, }; diff --git a/libavfilter/vf_pad.c b/libavfilter/vf_pad.c index 9918272924..059ca5b612 100644 --- a/libavfilter/vf_pad.c +++ b/libavfilter/vf_pad.c @@ -388,6 +388,27 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) return draw_send_bar_slice(link, y, h, slice_dir, -1); } +static const AVFilterPad avfilter_vf_pad_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_input, + .get_video_buffer = get_video_buffer, + .start_frame = start_frame, + .draw_slice = draw_slice, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_pad_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_output, + }, + { NULL } +}; + AVFilter avfilter_vf_pad = { .name = "pad", .description = NULL_IF_CONFIG_SMALL("Pad input image to width:height[:x:y[:color]] (default x and y: 0, default color: black)."), @@ -396,16 +417,7 @@ AVFilter avfilter_vf_pad = { .init = init, .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_input, - .get_video_buffer = get_video_buffer, - .start_frame = start_frame, - .draw_slice = draw_slice, }, - { .name = NULL}}, - - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_output, }, - { .name = NULL}}, + .inputs = avfilter_vf_pad_inputs, + + .outputs = avfilter_vf_pad_outputs, }; diff --git a/libavfilter/vf_pixdesctest.c b/libavfilter/vf_pixdesctest.c index f8c54327ad..74a41633a6 100644 --- a/libavfilter/vf_pixdesctest.c +++ b/libavfilter/vf_pixdesctest.c @@ -126,6 +126,26 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) return ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir); } +static const AVFilterPad avfilter_vf_pixdesctest_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 avfilter_vf_pixdesctest_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_pixdesctest = { .name = "pixdesctest", .description = NULL_IF_CONFIG_SMALL("Test pixel format definitions."), @@ -133,15 +153,7 @@ AVFilter avfilter_vf_pixdesctest = { .priv_size = sizeof(PixdescTestContext), .uninit = uninit, - .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}}, + .inputs = avfilter_vf_pixdesctest_inputs, + + .outputs = avfilter_vf_pixdesctest_outputs, }; diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 5bc00d52a5..66f4f2fa93 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -395,6 +395,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) return ret; } +static const AVFilterPad avfilter_vf_scale_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .start_frame = start_frame, + .draw_slice = draw_slice, + .min_perms = AV_PERM_READ, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_scale_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .config_props = config_props, + }, + { NULL } +}; + AVFilter avfilter_vf_scale = { .name = "scale", .description = NULL_IF_CONFIG_SMALL("Scale the input video to width:height size and/or convert the image format."), @@ -406,14 +426,6 @@ AVFilter avfilter_vf_scale = { .priv_size = sizeof(ScaleContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .start_frame = start_frame, - .draw_slice = draw_slice, - .min_perms = AV_PERM_READ, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_props, }, - { .name = NULL}}, + .inputs = avfilter_vf_scale_inputs, + .outputs = avfilter_vf_scale_outputs, }; diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c index c68618f002..143e8cce9e 100644 --- a/libavfilter/vf_select.c +++ b/libavfilter/vf_select.c @@ -417,6 +417,30 @@ static int query_formats(AVFilterContext *ctx) return 0; } +static const AVFilterPad avfilter_vf_select_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .min_perms = AV_PERM_PRESERVE, + .config_props = config_input, + .start_frame = start_frame, + .draw_slice = draw_slice, + .end_frame = end_frame + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_select_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .poll_frame = poll_frame, + .request_frame = request_frame, + }, + { NULL } +}; + AVFilter avfilter_vf_select = { .name = "select", .description = NULL_IF_CONFIG_SMALL("Select frames to pass in output."), @@ -426,18 +450,6 @@ AVFilter avfilter_vf_select = { .priv_size = sizeof(SelectContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer = ff_null_get_video_buffer, - .min_perms = AV_PERM_PRESERVE, - .config_props = config_input, - .start_frame = start_frame, - .draw_slice = draw_slice, - .end_frame = end_frame }, - { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .poll_frame = poll_frame, - .request_frame = request_frame, }, - { .name = NULL}}, + .inputs = avfilter_vf_select_inputs, + .outputs = avfilter_vf_select_outputs, }; diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c index 9d20b4831f..c476f18ac5 100644 --- a/libavfilter/vf_showinfo.c +++ b/libavfilter/vf_showinfo.c @@ -85,6 +85,26 @@ static int end_frame(AVFilterLink *inlink) return ff_end_frame(inlink->dst->outputs[0]); } +static const AVFilterPad avfilter_vf_showinfo_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 avfilter_vf_showinfo_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO + }, + { NULL } +}; + AVFilter avfilter_vf_showinfo = { .name = "showinfo", .description = NULL_IF_CONFIG_SMALL("Show textual information for each video frame."), @@ -92,15 +112,7 @@ AVFilter avfilter_vf_showinfo = { .priv_size = sizeof(ShowInfoContext), .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 = avfilter_vf_showinfo_inputs, + + .outputs = avfilter_vf_showinfo_outputs, }; diff --git a/libavfilter/vf_slicify.c b/libavfilter/vf_slicify.c index 347943098b..43f7f4bb40 100644 --- a/libavfilter/vf_slicify.c +++ b/libavfilter/vf_slicify.c @@ -106,6 +106,27 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) return 0; } +static const AVFilterPad avfilter_vf_slicify_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = ff_null_get_video_buffer, + .start_frame = start_frame, + .draw_slice = draw_slice, + .config_props = config_props, + .end_frame = ff_null_end_frame, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_slicify_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_slicify = { .name = "slicify", .description = NULL_IF_CONFIG_SMALL("Pass the images of input video on to next video filter as multiple slices."), @@ -114,15 +135,6 @@ AVFilter avfilter_vf_slicify = { .priv_size = sizeof(SliceContext), - .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, - .config_props = config_props, - .end_frame = ff_null_end_frame, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_slicify_inputs, + .outputs = avfilter_vf_slicify_outputs, }; diff --git a/libavfilter/vf_transpose.c b/libavfilter/vf_transpose.c index dab5cc6030..1c9ccf5ac6 100644 --- a/libavfilter/vf_transpose.c +++ b/libavfilter/vf_transpose.c @@ -266,6 +266,28 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) return trans->passthrough ? ff_null_draw_slice(inlink, y, h, slice_dir) : 0; } +static const AVFilterPad avfilter_vf_transpose_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer= get_video_buffer, + .start_frame = start_frame, + .draw_slice = draw_slice, + .end_frame = end_frame, + .min_perms = AV_PERM_READ, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_transpose_outputs[] = { + { + .name = "default", + .config_props = config_props_output, + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_transpose = { .name = "transpose", .description = NULL_IF_CONFIG_SMALL("Transpose input video."), @@ -275,17 +297,7 @@ AVFilter avfilter_vf_transpose = { .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer= get_video_buffer, - .start_frame = start_frame, - .draw_slice = draw_slice, - .end_frame = end_frame, - .min_perms = AV_PERM_READ, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .config_props = config_props_output, - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_transpose_inputs, + .outputs = avfilter_vf_transpose_outputs, .priv_class = &transpose_class, }; diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c index 6943c65579..15c91699d5 100644 --- a/libavfilter/vf_unsharp.c +++ b/libavfilter/vf_unsharp.c @@ -237,6 +237,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) return 0; } +static const AVFilterPad avfilter_vf_unsharp_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .draw_slice = draw_slice, + .end_frame = end_frame, + .config_props = config_props, + .min_perms = AV_PERM_READ, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_unsharp_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_unsharp = { .name = "unsharp", .description = NULL_IF_CONFIG_SMALL("Sharpen or blur the input video."), @@ -247,15 +267,7 @@ AVFilter avfilter_vf_unsharp = { .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, }, - { .name = NULL}}, - - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_unsharp_inputs, + + .outputs = avfilter_vf_unsharp_outputs, }; diff --git a/libavfilter/vf_vflip.c b/libavfilter/vf_vflip.c index 686cd8f357..e14342cb50 100644 --- a/libavfilter/vf_vflip.c +++ b/libavfilter/vf_vflip.c @@ -96,20 +96,32 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) return ff_draw_slice(ctx->outputs[0], link->h - (y+h), h, -1 * slice_dir); } +static const AVFilterPad avfilter_vf_vflip_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .get_video_buffer = get_video_buffer, + .start_frame = start_frame, + .draw_slice = draw_slice, + .config_props = config_input, + }, + { NULL } +}; + +static const AVFilterPad avfilter_vf_vflip_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + }, + { NULL } +}; + AVFilter avfilter_vf_vflip = { .name = "vflip", .description = NULL_IF_CONFIG_SMALL("Flip the input video vertically."), .priv_size = sizeof(FlipContext), - .inputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .get_video_buffer = get_video_buffer, - .start_frame = start_frame, - .draw_slice = draw_slice, - .config_props = config_input, }, - { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, }, - { .name = NULL}}, + .inputs = avfilter_vf_vflip_inputs, + .outputs = avfilter_vf_vflip_outputs, }; diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c index f14d9d7a29..74358e523f 100644 --- a/libavfilter/vf_yadif.c +++ b/libavfilter/vf_yadif.c @@ -441,6 +441,29 @@ static int config_props(AVFilterLink *link) return 0; } +static const AVFilterPad avfilter_vf_yadif_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 avfilter_vf_yadif_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .poll_frame = poll_frame, + .request_frame = request_frame, + .config_props = config_props, + }, + { NULL } +}; + AVFilter avfilter_vf_yadif = { .name = "yadif", .description = NULL_IF_CONFIG_SMALL("Deinterlace the input image."), @@ -450,18 +473,7 @@ AVFilter avfilter_vf_yadif = { .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, - .poll_frame = poll_frame, - .request_frame = request_frame, - .config_props = config_props, }, - { .name = NULL}}, + .inputs = avfilter_vf_yadif_inputs, + + .outputs = avfilter_vf_yadif_outputs, }; diff --git a/libavfilter/vsink_nullsink.c b/libavfilter/vsink_nullsink.c index 148b250f58..89bf29ae56 100644 --- a/libavfilter/vsink_nullsink.c +++ b/libavfilter/vsink_nullsink.c @@ -30,20 +30,22 @@ static int end_frame(AVFilterLink *link) return 0; } +static const AVFilterPad avfilter_vsink_nullsink_inputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .start_frame = start_frame, + .end_frame = end_frame, + }, + { NULL }, +}; + AVFilter avfilter_vsink_nullsink = { .name = "nullsink", .description = NULL_IF_CONFIG_SMALL("Do absolutely nothing with the input video."), .priv_size = 0, - .inputs = (const AVFilterPad[]) { - { - .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .start_frame = start_frame, - .end_frame = end_frame, - }, - { .name = NULL}, - }, + .inputs = avfilter_vsink_nullsink_inputs, .outputs = NULL, }; diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index 38824b59d4..6ba55a7634 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -525,6 +525,16 @@ static int test_query_formats(AVFilterContext *ctx) return 0; } +static const AVFilterPad avfilter_vsrc_testsrc_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .request_frame = request_frame, + .config_props = config_props, + }, + { NULL } +}; + AVFilter avfilter_vsrc_testsrc = { .name = "testsrc", .description = NULL_IF_CONFIG_SMALL("Generate test pattern."), @@ -535,12 +545,7 @@ AVFilter avfilter_vsrc_testsrc = { .query_formats = test_query_formats, .inputs = NULL, - - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .request_frame = request_frame, - .config_props = config_props, }, - { .name = NULL }}, + .outputs = avfilter_vsrc_testsrc_outputs, .priv_class = &testsrc_class, }; @@ -639,6 +644,16 @@ static int rgbtest_config_props(AVFilterLink *outlink) return config_props(outlink); } +static const AVFilterPad avfilter_vsrc_rgbtestsrc_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_VIDEO, + .request_frame = request_frame, + .config_props = rgbtest_config_props, + }, + { NULL } +}; + AVFilter avfilter_vsrc_rgbtestsrc = { .name = "rgbtestsrc", .description = NULL_IF_CONFIG_SMALL("Generate RGB test pattern."), @@ -650,11 +665,7 @@ AVFilter avfilter_vsrc_rgbtestsrc = { .inputs = NULL, - .outputs = (const AVFilterPad[]) {{ .name = "default", - .type = AVMEDIA_TYPE_VIDEO, - .request_frame = request_frame, - .config_props = rgbtest_config_props, }, - { .name = NULL }}, + .outputs = avfilter_vsrc_rgbtestsrc_outputs, .priv_class = &rgbtestsrc_class, }; diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index bee368ee96..b7c082605a 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -951,6 +951,9 @@ static int mxf_get_sorted_table_segments(MXFContext *mxf, int *nb_sorted_segment if (mxf->metadata_sets[i]->type == IndexTableSegment) nb_segments++; + if (!nb_segments) + return AVERROR_INVALIDDATA; + if (!(unsorted_segments = av_calloc(nb_segments, sizeof(*unsorted_segments))) || !(*sorted_segments = av_calloc(nb_segments, sizeof(**sorted_segments)))) { av_freep(sorted_segments); diff --git a/library.mak b/library.mak index 1c37d0ac14..d9e81aeb2e 100644 --- a/library.mak +++ b/library.mak @@ -25,7 +25,7 @@ $(TESTOBJS): CPPFLAGS += -DTEST $(SUBDIR)$(LIBNAME): $(OBJS) $(RM) $@ - $(AR) $(ARFLAGS) $(AR_O) $^ $(EXTRAOBJS) + $(AR) $(ARFLAGS) $(AR_O) $^ $(RANLIB) $@ install-headers: install-lib$(NAME)-headers install-lib$(NAME)-pkgconfig @@ -45,7 +45,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_CMD) - $$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS) $(EXTRAOBJS) + $$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS) $(SLIB_EXTRA_CMD) ifdef SUBDIR diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak index f4e39b8ce7..e895499c62 100644 --- a/tests/fate/vcodec.mak +++ b/tests/fate/vcodec.mak @@ -79,6 +79,9 @@ fate-vsynth%-h261: ENCOPTS = -qscale 11 FATE_VCODEC += h263 fate-vsynth%-h263: ENCOPTS = -qscale 10 +FATE_VCODEC += h263-obmc +fate-vsynth%-h263-obmc: ENCOPTS = -qscale 10 -obmc 1 + FATE_VCODEC += h263p fate-vsynth%-h263p: ENCOPTS = -qscale 2 -flags +aic -umv 1 -aiv 1 -ps 300 diff --git a/tests/ref/fate/vsynth1-h263-obmc b/tests/ref/fate/vsynth1-h263-obmc new file mode 100644 index 0000000000..d82c425f5a --- /dev/null +++ b/tests/ref/fate/vsynth1-h263-obmc @@ -0,0 +1,4 @@ +bdd8f9cafa39df97f2e395110f4419e0 *tests/data/fate/vsynth1-h263-obmc.avi +657328 tests/data/fate/vsynth1-h263-obmc.avi +844f7ee27fa122e199fe20987b41a15c *tests/data/fate/vsynth1-h263-obmc.out.rawvideo +stddev: 8.16 PSNR: 29.89 MAXDIFF: 113 bytes: 7603200/ 7603200 diff --git a/tests/ref/fate/vsynth2-h263-obmc b/tests/ref/fate/vsynth2-h263-obmc new file mode 100644 index 0000000000..d8a65db4dc --- /dev/null +++ b/tests/ref/fate/vsynth2-h263-obmc @@ -0,0 +1,4 @@ +482d48074d94ed72b0c7057b9c129b45 *tests/data/fate/vsynth2-h263-obmc.avi +154738 tests/data/fate/vsynth2-h263-obmc.avi +588d992d9d8096da8bdc5027268da914 *tests/data/fate/vsynth2-h263-obmc.out.rawvideo +stddev: 5.39 PSNR: 33.49 MAXDIFF: 82 bytes: 7603200/ 7603200 |