Commit 526cb36e authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '4436f25a'

* commit '4436f25a':
  build: remove references to unused EXTRAOBJS variable
  lavfi: convert input/ouput list compound literals to named objects
  fate: add h263 obmc vsynth tests
  avconv: remove bogus warning when using avconv -h without parameter
  averror: explicitly define AVERROR_* values
  flashsv: propagate inflateReset() errors
  indeo4/5: remove constant parameter num_bands from wavelet recomposition
  mxfdec: return error if no segments are available in mxf_get_sorted_table_segments
  Double motion vector range for HPEL interlaced picture in proper place

Conflicts:
	libavcodec/v210dec.h
	libavfilter/af_aformat.c
	libavfilter/af_amix.c
	libavfilter/af_asyncts.c
	libavfilter/af_channelmap.c
	libavfilter/af_join.c
	libavfilter/asrc_anullsrc.c
	libavfilter/buffersrc.c
	libavfilter/f_setpts.c
	libavfilter/f_settb.c
	libavfilter/fifo.c
	libavfilter/src_movie.c
	libavfilter/vf_ass.c
	libavfilter/vf_blackframe.c
	libavfilter/vf_boxblur.c
	libavfilter/vf_delogo.c
	libavfilter/vf_drawbox.c
	libavfilter/vf_drawtext.c
	libavfilter/vf_fade.c
	libavfilter/vf_fieldorder.c
	libavfilter/vf_fps.c
	libavfilter/vf_hflip.c
	libavfilter/vf_overlay.c
	libavfilter/vf_pad.c
	libavfilter/vf_select.c
	libavfilter/vf_transpose.c
	libavfilter/vf_yadif.c
	libavfilter/vsrc_testsrc.c
	libavformat/mxfdec.c
	libavutil/error.h
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents a75dd13b 4436f25a
...@@ -2160,7 +2160,7 @@ void show_help_default(const char *opt, const char *arg) ...@@ -2160,7 +2160,7 @@ void show_help_default(const char *opt, const char *arg)
const int per_file = OPT_SPEC | OPT_OFFSET | OPT_PERFILE; const int per_file = OPT_SPEC | OPT_OFFSET | OPT_PERFILE;
int show_advanced = 0, show_avoptions = 0; int show_advanced = 0, show_avoptions = 0;
if (opt) { if (opt && *opt) {
if (!strcmp(opt, "long")) if (!strcmp(opt, "long"))
show_advanced = 1; show_advanced = 1;
else if (!strcmp(opt, "full")) else if (!strcmp(opt, "full"))
......
...@@ -122,10 +122,11 @@ static av_cold int flashsv_decode_init(AVCodecContext *avctx) ...@@ -122,10 +122,11 @@ static av_cold int flashsv_decode_init(AVCodecContext *avctx)
} }
static void flashsv2_prime(FlashSVContext *s, uint8_t *src, static int flashsv2_prime(FlashSVContext *s, uint8_t *src,
int size, int unp_size) int size, int unp_size)
{ {
z_stream zs; z_stream zs;
int zret; // Zlib return code
zs.zalloc = NULL; zs.zalloc = NULL;
zs.zfree = NULL; zs.zfree = NULL;
...@@ -145,13 +146,18 @@ static void flashsv2_prime(FlashSVContext *s, uint8_t *src, ...@@ -145,13 +146,18 @@ static void flashsv2_prime(FlashSVContext *s, uint8_t *src,
deflate(&zs, Z_SYNC_FLUSH); deflate(&zs, Z_SYNC_FLUSH);
deflateEnd(&zs); 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.next_in = s->deflate_block;
s->zstream.avail_in = s->deflate_block_size - zs.avail_out; s->zstream.avail_in = s->deflate_block_size - zs.avail_out;
s->zstream.next_out = s->tmpblock; s->zstream.next_out = s->tmpblock;
s->zstream.avail_out = s->block_size * 3; s->zstream.avail_out = s->block_size * 3;
inflate(&s->zstream, Z_SYNC_FLUSH); inflate(&s->zstream, Z_SYNC_FLUSH);
return 0;
} }
static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
...@@ -164,11 +170,14 @@ 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 k;
int ret = inflateReset(&s->zstream); int ret = inflateReset(&s->zstream);
if (ret != Z_OK) { 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) { 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); s->blocks[blk_idx].unp_size);
if (ret < 0)
return ret;
} }
s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8; s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8;
s->zstream.avail_in = block_size; s->zstream.avail_in = block_size;
......
...@@ -830,9 +830,9 @@ int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *data_size, ...@@ -830,9 +830,9 @@ int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
if (ctx->is_scalable) { if (ctx->is_scalable) {
if (avctx->codec_id == AV_CODEC_ID_INDEO4) 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 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 { } else {
ff_ivi_output_plane(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]); ff_ivi_output_plane(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]);
} }
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include "ivi_dsp.h" #include "ivi_dsp.h"
void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, 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; int x, y, indx;
int32_t p0, p1, p2, p3, tmp0, tmp1, tmp2; int32_t p0, p1, p2, p3, tmp0, tmp1, tmp2;
...@@ -41,6 +41,7 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, ...@@ -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 b3_1, b3_2, b3_3, b3_4, b3_5, b3_6, b3_7, b3_8, b3_9;
int32_t pitch, back_pitch; int32_t pitch, back_pitch;
const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr; const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr;
const int num_bands = 4;
/* all bands should have the same pitch */ /* all bands should have the same pitch */
pitch = plane->bands[0].pitch; pitch = plane->bands[0].pitch;
...@@ -189,7 +190,7 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, ...@@ -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, 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; int x, y, indx, b0, b1, b2, b3, p0, p1, p2, p3;
const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr; const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr;
......
...@@ -38,10 +38,9 @@ ...@@ -38,10 +38,9 @@
* @param[in] plane pointer to the descriptor of the plane being processed * @param[in] plane pointer to the descriptor of the plane being processed
* @param[out] dst pointer to the destination buffer * @param[out] dst pointer to the destination buffer
* @param[in] dst_pitch pitch of 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, 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 * Haar wavelet recomposition filter for Indeo 4
...@@ -49,10 +48,9 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, ...@@ -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[in] plane pointer to the descriptor of the plane being processed
* @param[out] dst pointer to the destination buffer * @param[out] dst pointer to the destination buffer
* @param[in] dst_pitch pitch of 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, 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 * two-dimensional inverse Haar 8x8 transform for Indeo 4
......
...@@ -1274,6 +1274,11 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) ...@@ -1274,6 +1274,11 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
break; break;
} }
if (v->fcm != PROGRESSIVE && !v->s.quarter_sample) {
v->range_x <<= 1;
v->range_y <<= 1;
}
/* AC Syntax */ /* AC Syntax */
v->c_ac_table_index = decode012(gb); v->c_ac_table_index = decode012(gb);
if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI) { if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI) {
......
...@@ -1575,10 +1575,6 @@ static inline void vc1_pred_mv(VC1Context *v, int n, int dmv_x, int dmv_y, ...@@ -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) if (v->field_mode && v->numref)
r_y >>= 1; r_y >>= 1;
if (v->field_mode && v->cur_field_type && v->ref_field_type[dir] == 0) if (v->field_mode && v->cur_field_type && v->ref_field_type[dir] == 0)
......
...@@ -126,6 +126,22 @@ static int query_formats(AVFilterContext *ctx) ...@@ -126,6 +126,22 @@ static int query_formats(AVFilterContext *ctx)
return 0; 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 = { AVFilter avfilter_af_aformat = {
.name = "aformat", .name = "aformat",
.description = NULL_IF_CONFIG_SMALL("Convert the input audio to one of the specified formats."), .description = NULL_IF_CONFIG_SMALL("Convert the input audio to one of the specified formats."),
...@@ -133,11 +149,7 @@ AVFilter avfilter_af_aformat = { ...@@ -133,11 +149,7 @@ AVFilter avfilter_af_aformat = {
.query_formats = query_formats, .query_formats = query_formats,
.priv_size = sizeof(AFormatContext), .priv_size = sizeof(AFormatContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_af_aformat_inputs,
.type = AVMEDIA_TYPE_AUDIO, }, .outputs = avfilter_af_aformat_outputs,
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO},
{ .name = NULL}},
.priv_class = &aformat_class, .priv_class = &aformat_class,
}; };
...@@ -542,6 +542,16 @@ static int query_formats(AVFilterContext *ctx) ...@@ -542,6 +542,16 @@ static int query_formats(AVFilterContext *ctx)
return 0; 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 = { AVFilter avfilter_af_amix = {
.name = "amix", .name = "amix",
.description = NULL_IF_CONFIG_SMALL("Audio mixing."), .description = NULL_IF_CONFIG_SMALL("Audio mixing."),
...@@ -552,10 +562,6 @@ AVFilter avfilter_af_amix = { ...@@ -552,10 +562,6 @@ AVFilter avfilter_af_amix = {
.query_formats = query_formats, .query_formats = query_formats,
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_af_amix_outputs,
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output,
.request_frame = request_frame },
{ .name = NULL}},
.priv_class = &amix_class, .priv_class = &amix_class,
}; };
...@@ -27,18 +27,30 @@ ...@@ -27,18 +27,30 @@
#include "internal.h" #include "internal.h"
#include "libavutil/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 = { AVFilter avfilter_af_anull = {
.name = "anull", .name = "anull",
.description = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."), .description = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."),
.priv_size = 0, .priv_size = 0,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_af_anull_inputs,
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer, },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_af_anull_outputs,
.type = AVMEDIA_TYPE_AUDIO, },
{ .name = NULL}},
}; };
...@@ -233,6 +233,25 @@ fail: ...@@ -233,6 +233,25 @@ fail:
return ret; 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 = { AVFilter avfilter_af_asyncts = {
.name = "asyncts", .name = "asyncts",
.description = NULL_IF_CONFIG_SMALL("Sync audio data to timestamps"), .description = NULL_IF_CONFIG_SMALL("Sync audio data to timestamps"),
...@@ -242,14 +261,7 @@ AVFilter avfilter_af_asyncts = { ...@@ -242,14 +261,7 @@ AVFilter avfilter_af_asyncts = {
.priv_size = sizeof(ASyncContext), .priv_size = sizeof(ASyncContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_af_asyncts_inputs,
.type = AVMEDIA_TYPE_AUDIO, .outputs = avfilter_af_asyncts_outputs,
.filter_samples = filter_samples },
{ NULL }},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props,
.request_frame = request_frame },
{ NULL }},
.priv_class = &asyncts_class, .priv_class = &asyncts_class,
}; };
...@@ -385,6 +385,25 @@ static int channelmap_config_input(AVFilterLink *inlink) ...@@ -385,6 +385,25 @@ static int channelmap_config_input(AVFilterLink *inlink)
return err; 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 = { AVFilter avfilter_af_channelmap = {
.name = "channelmap", .name = "channelmap",
.description = NULL_IF_CONFIG_SMALL("Remap audio channels."), .description = NULL_IF_CONFIG_SMALL("Remap audio channels."),
...@@ -392,14 +411,7 @@ AVFilter avfilter_af_channelmap = { ...@@ -392,14 +411,7 @@ AVFilter avfilter_af_channelmap = {
.query_formats = channelmap_query_formats, .query_formats = channelmap_query_formats,
.priv_size = sizeof(ChannelMapContext), .priv_size = sizeof(ChannelMapContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_af_channelmap_inputs,
.type = AVMEDIA_TYPE_AUDIO, .outputs = avfilter_af_channelmap_outputs,
.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, .priv_class = &channelmap_class,
}; };
...@@ -130,6 +130,15 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) ...@@ -130,6 +130,15 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
return ret; return ret;
} }
static const AVFilterPad avfilter_af_channelsplit_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples,
},
{ NULL }
};
AVFilter avfilter_af_channelsplit = { AVFilter avfilter_af_channelsplit = {
.name = "channelsplit", .name = "channelsplit",
.description = NULL_IF_CONFIG_SMALL("Split audio into per-channel streams"), .description = NULL_IF_CONFIG_SMALL("Split audio into per-channel streams"),
...@@ -138,10 +147,7 @@ AVFilter avfilter_af_channelsplit = { ...@@ -138,10 +147,7 @@ AVFilter avfilter_af_channelsplit = {
.init = init, .init = init,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]){{ .name = "default", .inputs = avfilter_af_channelsplit_inputs,
.type = AVMEDIA_TYPE_AUDIO,
.filter_samples = filter_samples, },
{ NULL }},
.outputs = NULL, .outputs = NULL,
.priv_class = &channelsplit_class, .priv_class = &channelsplit_class,
}; };
...@@ -484,6 +484,16 @@ fail: ...@@ -484,6 +484,16 @@ fail:
return AVERROR(ENOMEM); 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 = { AVFilter avfilter_af_join = {
.name = "join", .name = "join",
.description = NULL_IF_CONFIG_SMALL("Join multiple audio streams into " .description = NULL_IF_CONFIG_SMALL("Join multiple audio streams into "
...@@ -495,10 +505,6 @@ AVFilter avfilter_af_join = { ...@@ -495,10 +505,6 @@ AVFilter avfilter_af_join = {
.query_formats = join_query_formats, .query_formats = join_query_formats,
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]){{ .name = "default", .outputs = avfilter_af_join_outputs,
.type = AVMEDIA_TYPE_AUDIO,
.config_props = join_config_output,
.request_frame = join_request_frame, },
{ NULL }},
.priv_class = &join_class, .priv_class = &join_class,
}; };
...@@ -239,6 +239,26 @@ fail: ...@@ -239,6 +239,26 @@ fail:
return ret; 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 = { AVFilter avfilter_af_resample = {
.name = "resample", .name = "resample",
.description = NULL_IF_CONFIG_SMALL("Audio resampling and conversion."), .description = NULL_IF_CONFIG_SMALL("Audio resampling and conversion."),
...@@ -247,14 +267,6 @@ AVFilter avfilter_af_resample = { ...@@ -247,14 +267,6 @@ AVFilter avfilter_af_resample = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_af_resample_inputs,
.type = AVMEDIA_TYPE_AUDIO, .outputs = avfilter_af_resample_outputs,
.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}},
}; };
...@@ -27,19 +27,21 @@ static int null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref ...@@ -27,19 +27,21 @@ static int null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref
return 0; 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 = { AVFilter avfilter_asink_anullsink = {
.name = "anullsink", .name = "anullsink",
.description = NULL_IF_CONFIG_SMALL("Do absolutely nothing with the input audio."), .description = NULL_IF_CONFIG_SMALL("Do absolutely nothing with the input audio."),
.priv_size = 0, .priv_size = 0,
.inputs = (const AVFilterPad[]) { .inputs = avfilter_asink_anullsink_inputs,
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_samples = null_filter_samples,
},
{ .name = NULL},
},
.outputs = NULL, .outputs = NULL,
}; };
...@@ -119,6 +119,16 @@ static int request_frame(AVFilterLink *outlink) ...@@ -119,6 +119,16 @@ static int request_frame(AVFilterLink *outlink)
return 0; 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 = { AVFilter avfilter_asrc_anullsrc = {
.name = "anullsrc", .name = "anullsrc",
.description = NULL_IF_CONFIG_SMALL("Null audio source, return empty audio frames."), .description = NULL_IF_CONFIG_SMALL("Null audio source, return empty audio frames."),
...@@ -128,10 +138,6 @@ AVFilter avfilter_asrc_anullsrc = { ...@@ -128,10 +138,6 @@ AVFilter avfilter_asrc_anullsrc = {
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_asrc_anullsrc_outputs,
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_props,
.request_frame = request_frame, },
{ .name = NULL}},
.priv_class = &anullsrc_class, .priv_class = &anullsrc_class,
}; };
...@@ -140,6 +140,17 @@ int ff_buffersink_read_samples_compat(AVFilterContext *ctx, AVFilterBufferRef ** ...@@ -140,6 +140,17 @@ int ff_buffersink_read_samples_compat(AVFilterContext *ctx, AVFilterBufferRef **
return ret; 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 = { AVFilter avfilter_vsink_buffer = {
#if AV_HAVE_INCOMPATIBLE_FORK_ABI #if AV_HAVE_INCOMPATIBLE_FORK_ABI
.name = "buffersink", .name = "buffersink",
...@@ -150,15 +161,21 @@ AVFilter avfilter_vsink_buffer = { ...@@ -150,15 +161,21 @@ AVFilter avfilter_vsink_buffer = {
.priv_size = sizeof(BufferSinkContext), .priv_size = sizeof(BufferSinkContext),
.uninit = uninit, .uninit = uninit,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vsink_buffer_inputs,
.type = AVMEDIA_TYPE_VIDEO,
.start_frame = start_frame,
.min_perms = AV_PERM_READ,
.needs_fifo = 1 },
{ .name = NULL }},
.outputs = NULL, .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 = { AVFilter avfilter_asink_abuffer = {
#if AV_HAVE_INCOMPATIBLE_FORK_ABI #if AV_HAVE_INCOMPATIBLE_FORK_ABI
.name = "abuffersink", .name = "abuffersink",
...@@ -169,11 +186,6 @@ AVFilter avfilter_asink_abuffer = { ...@@ -169,11 +186,6 @@ AVFilter avfilter_asink_abuffer = {
.priv_size = sizeof(BufferSinkContext), .priv_size = sizeof(BufferSinkContext),
.uninit = uninit, .uninit = uninit,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_asink_abuffer_inputs,
.type = AVMEDIA_TYPE_AUDIO,
.filter_samples = start_frame,
.min_perms = AV_PERM_READ,
.needs_fifo = 1 },
{ .name = NULL }},
.outputs = NULL, .outputs = NULL,
}; };
...@@ -400,6 +400,17 @@ static int poll_frame(AVFilterLink *link) ...@@ -400,6 +400,17 @@ static int poll_frame(AVFilterLink *link)
return size/sizeof(AVFilterBufferRef*); 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 = { AVFilter avfilter_vsrc_buffer = {
.name = "buffer", .name = "buffer",
.description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them accessible to the filterchain."), .description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them accessible to the filterchain."),
...@@ -410,13 +421,19 @@ AVFilter avfilter_vsrc_buffer = { ...@@ -410,13 +421,19 @@ AVFilter avfilter_vsrc_buffer = {
.uninit = uninit, .uninit = uninit,
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_vsrc_buffer_outputs,
.type = AVMEDIA_TYPE_VIDEO, .priv_class = &buffer_class,
};
static const AVFilterPad avfilter_asrc_abuffer_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.request_frame = request_frame, .request_frame = request_frame,
.poll_frame = poll_frame, .poll_frame = poll_frame,
.config_props = config_props, }, .config_props = config_props,
{ .name = NULL}}, },
.priv_class = &buffer_class, { NULL }
}; };
AVFilter avfilter_asrc_abuffer = { AVFilter avfilter_asrc_abuffer = {
...@@ -429,11 +446,6 @@ AVFilter avfilter_asrc_abuffer = { ...@@ -429,11 +446,6 @@ AVFilter avfilter_asrc_abuffer = {
.uninit = uninit, .uninit = uninit,
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_asrc_abuffer_outputs,
.type = AVMEDIA_TYPE_AUDIO,
.request_frame = request_frame,
.poll_frame = poll_frame,
.config_props = config_props, },
{ .name = NULL}},
.priv_class = &abuffer_class, .priv_class = &abuffer_class,
}; };
...@@ -216,6 +216,25 @@ AVFilter avfilter_af_asetpts = { ...@@ -216,6 +216,25 @@ AVFilter avfilter_af_asetpts = {
#endif /* CONFIG_ASETPTS_FILTER */ #endif /* CONFIG_ASETPTS_FILTER */
#if CONFIG_SETPTS_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 = { AVFilter avfilter_vf_setpts = {
.name = "setpts", .name = "setpts",
.description = NULL_IF_CONFIG_SMALL("Set PTS for the output video frame."), .description = NULL_IF_CONFIG_SMALL("Set PTS for the output video frame."),
...@@ -224,14 +243,7 @@ AVFilter avfilter_vf_setpts = { ...@@ -224,14 +243,7 @@ AVFilter avfilter_vf_setpts = {
.priv_size = sizeof(SetPTSContext), .priv_size = sizeof(SetPTSContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_setpts_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_setpts_outputs,
.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}},
}; };
#endif /* CONFIG_SETPTS_FILTER */ #endif /* CONFIG_SETPTS_FILTER */
...@@ -137,6 +137,26 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) ...@@ -137,6 +137,26 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
} }
#if CONFIG_SETTB_FILTER #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 = { AVFilter avfilter_vf_settb = {
.name = "settb", .name = "settb",
.description = NULL_IF_CONFIG_SMALL("Set timebase for the video output link."), .description = NULL_IF_CONFIG_SMALL("Set timebase for the video output link."),
...@@ -144,20 +164,8 @@ AVFilter avfilter_vf_settb = { ...@@ -144,20 +164,8 @@ AVFilter avfilter_vf_settb = {
.priv_size = sizeof(SetTBContext), .priv_size = sizeof(SetTBContext),
.inputs = (const AVFilterPad[]) { .inputs = avfilter_vf_settb_inputs,
{ .name = "default", .outputs = avfilter_vf_settb_outputs,
.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}
},
}; };
#endif #endif
......
...@@ -267,6 +267,28 @@ static int request_frame(AVFilterLink *outlink) ...@@ -267,6 +267,28 @@ static int request_frame(AVFilterLink *outlink)
return ret; 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 = { AVFilter avfilter_vf_fifo = {
.name = "fifo", .name = "fifo",
.description = NULL_IF_CONFIG_SMALL("Buffer input images and send them when they are requested."), .description = NULL_IF_CONFIG_SMALL("Buffer input images and send them when they are requested."),
...@@ -276,18 +298,28 @@ AVFilter avfilter_vf_fifo = { ...@@ -276,18 +298,28 @@ AVFilter avfilter_vf_fifo = {
.priv_size = sizeof(FifoContext), .priv_size = sizeof(FifoContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_fifo_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_fifo_outputs,
.get_video_buffer= ff_null_get_video_buffer, };
.start_frame = add_to_queue,
.draw_slice = draw_slice, static const AVFilterPad avfilter_af_afifo_inputs[] = {
.end_frame = end_frame, {
.min_perms = AV_PERM_PRESERVE, }, .name = "default",
{ .name = NULL}}, .type = AVMEDIA_TYPE_AUDIO,
.outputs = (const AVFilterPad[]) {{ .name = "default", .get_audio_buffer = ff_null_get_audio_buffer,
.type = AVMEDIA_TYPE_VIDEO, .filter_samples = add_to_queue,
.request_frame = request_frame, }, .min_perms = AV_PERM_PRESERVE,
{ .name = NULL}}, },
{ NULL }
};
static const AVFilterPad avfilter_af_afifo_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.request_frame = request_frame,
},
{ NULL }
}; };
AVFilter avfilter_af_afifo = { AVFilter avfilter_af_afifo = {
...@@ -299,14 +331,6 @@ AVFilter avfilter_af_afifo = { ...@@ -299,14 +331,6 @@ AVFilter avfilter_af_afifo = {
.priv_size = sizeof(FifoContext), .priv_size = sizeof(FifoContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_af_afifo_inputs,
.type = AVMEDIA_TYPE_AUDIO, .outputs = avfilter_af_afifo_outputs,
.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}},
}; };
...@@ -119,6 +119,18 @@ static int end_frame(AVFilterLink *inlink) ...@@ -119,6 +119,18 @@ static int end_frame(AVFilterLink *inlink)
return ret; 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 = { AVFilter avfilter_vf_split = {
.name = "split", .name = "split",
.description = NULL_IF_CONFIG_SMALL("Pass on the input video to N outputs."), .description = NULL_IF_CONFIG_SMALL("Pass on the input video to N outputs."),
...@@ -126,13 +138,7 @@ AVFilter avfilter_vf_split = { ...@@ -126,13 +138,7 @@ AVFilter avfilter_vf_split = {
.init = split_init, .init = split_init,
.uninit = split_uninit, .uninit = split_uninit,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_split_inputs,
.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 = NULL, .outputs = NULL,
}; };
...@@ -157,6 +163,16 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) ...@@ -157,6 +163,16 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
return ret; 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 = { AVFilter avfilter_af_asplit = {
.name = "asplit", .name = "asplit",
.description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."), .description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."),
...@@ -164,10 +180,6 @@ AVFilter avfilter_af_asplit = { ...@@ -164,10 +180,6 @@ AVFilter avfilter_af_asplit = {
.init = split_init, .init = split_init,
.uninit = split_uninit, .uninit = split_uninit,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_af_asplit_inputs,
.type = AVMEDIA_TYPE_AUDIO,
.get_audio_buffer = ff_null_get_audio_buffer,
.filter_samples = filter_samples },
{ .name = NULL }},
.outputs = NULL, .outputs = NULL,
}; };
...@@ -79,6 +79,26 @@ static int setdar_config_props(AVFilterLink *inlink) ...@@ -79,6 +79,26 @@ static int setdar_config_props(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_setdar = {
.name = "setdar", .name = "setdar",
.description = NULL_IF_CONFIG_SMALL("Set the frame display aspect ratio."), .description = NULL_IF_CONFIG_SMALL("Set the frame display aspect ratio."),
...@@ -87,17 +107,9 @@ AVFilter avfilter_vf_setdar = { ...@@ -87,17 +107,9 @@ AVFilter avfilter_vf_setdar = {
.priv_size = sizeof(AspectContext), .priv_size = sizeof(AspectContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_setdar_inputs,
.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", .outputs = avfilter_vf_setdar_outputs,
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
#endif /* CONFIG_SETDAR_FILTER */ #endif /* CONFIG_SETDAR_FILTER */
...@@ -111,6 +123,26 @@ static int setsar_config_props(AVFilterLink *inlink) ...@@ -111,6 +123,26 @@ static int setsar_config_props(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_setsar = {
.name = "setsar", .name = "setsar",
.description = NULL_IF_CONFIG_SMALL("Set the pixel sample aspect ratio."), .description = NULL_IF_CONFIG_SMALL("Set the pixel sample aspect ratio."),
...@@ -119,16 +151,8 @@ AVFilter avfilter_vf_setsar = { ...@@ -119,16 +151,8 @@ AVFilter avfilter_vf_setsar = {
.priv_size = sizeof(AspectContext), .priv_size = sizeof(AspectContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_setsar_inputs,
.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", .outputs = avfilter_vf_setsar_outputs,
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
#endif /* CONFIG_SETSAR_FILTER */ #endif /* CONFIG_SETSAR_FILTER */
...@@ -121,6 +121,26 @@ static int end_frame(AVFilterLink *inlink) ...@@ -121,6 +121,26 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(inlink->dst->outputs[0]); 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 = { AVFilter avfilter_vf_blackframe = {
.name = "blackframe", .name = "blackframe",
.description = NULL_IF_CONFIG_SMALL("Detect frames that are (almost) black."), .description = NULL_IF_CONFIG_SMALL("Detect frames that are (almost) black."),
...@@ -130,15 +150,7 @@ AVFilter avfilter_vf_blackframe = { ...@@ -130,15 +150,7 @@ AVFilter avfilter_vf_blackframe = {
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_blackframe_inputs,
.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", .outputs = avfilter_vf_blackframe_outputs,
.type = AVMEDIA_TYPE_VIDEO },
{ .name = NULL}},
}; };
...@@ -332,6 +332,26 @@ static int end_frame(AVFilterLink *inlink) ...@@ -332,6 +332,26 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(outlink); 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 = { AVFilter avfilter_vf_boxblur = {
.name = "boxblur", .name = "boxblur",
.description = NULL_IF_CONFIG_SMALL("Blur the input."), .description = NULL_IF_CONFIG_SMALL("Blur the input."),
...@@ -340,14 +360,6 @@ AVFilter avfilter_vf_boxblur = { ...@@ -340,14 +360,6 @@ AVFilter avfilter_vf_boxblur = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_boxblur_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_boxblur_outputs,
.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}},
}; };
...@@ -26,18 +26,30 @@ ...@@ -26,18 +26,30 @@
#include "internal.h" #include "internal.h"
#include "video.h" #include "video.h"
AVFilter avfilter_vf_copy = { static const AVFilterPad avfilter_vf_copy_inputs[] = {
.name = "copy", {
.description = NULL_IF_CONFIG_SMALL("Copy the input video unchanged to the output."), .name = "default",
.inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer = ff_null_get_video_buffer, .get_video_buffer = ff_null_get_video_buffer,
.start_frame = ff_null_start_frame, .start_frame = ff_null_start_frame,
.end_frame = ff_null_end_frame, .end_frame = ff_null_end_frame,
.rej_perms = ~0 }, .rej_perms = ~0
{ .name = NULL}}, },
.outputs = (const AVFilterPad[]) {{ .name = "default", { NULL }
.type = AVMEDIA_TYPE_VIDEO, }, };
{ .name = 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 = avfilter_vf_copy_inputs,
.outputs = avfilter_vf_copy_outputs,
}; };
...@@ -345,6 +345,28 @@ static int end_frame(AVFilterLink *link) ...@@ -345,6 +345,28 @@ static int end_frame(AVFilterLink *link)
return ff_end_frame(link->dst->outputs[0]); 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 = { AVFilter avfilter_vf_crop = {
.name = "crop", .name = "crop",
.description = NULL_IF_CONFIG_SMALL("Crop the input video to width:height:x:y."), .description = NULL_IF_CONFIG_SMALL("Crop the input video to width:height:x:y."),
...@@ -355,16 +377,6 @@ AVFilter avfilter_vf_crop = { ...@@ -355,16 +377,6 @@ AVFilter avfilter_vf_crop = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_crop_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_crop_outputs,
.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}},
}; };
...@@ -197,6 +197,26 @@ static int end_frame(AVFilterLink *inlink) ...@@ -197,6 +197,26 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(inlink->dst->outputs[0]); 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 = { AVFilter avfilter_vf_cropdetect = {
.name = "cropdetect", .name = "cropdetect",
.description = NULL_IF_CONFIG_SMALL("Auto-detect crop size."), .description = NULL_IF_CONFIG_SMALL("Auto-detect crop size."),
...@@ -206,15 +226,7 @@ AVFilter avfilter_vf_cropdetect = { ...@@ -206,15 +226,7 @@ AVFilter avfilter_vf_cropdetect = {
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_cropdetect_inputs,
.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", .outputs = avfilter_vf_cropdetect_outputs,
.type = AVMEDIA_TYPE_VIDEO },
{ .name = NULL}},
}; };
...@@ -245,6 +245,27 @@ static int end_frame(AVFilterLink *inlink) ...@@ -245,6 +245,27 @@ static int end_frame(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_delogo = {
.name = "delogo", .name = "delogo",
.description = NULL_IF_CONFIG_SMALL("Remove logo from input video."), .description = NULL_IF_CONFIG_SMALL("Remove logo from input video."),
...@@ -252,15 +273,6 @@ AVFilter avfilter_vf_delogo = { ...@@ -252,15 +273,6 @@ AVFilter avfilter_vf_delogo = {
.init = init, .init = init,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_delogo_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_delogo_outputs,
.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}},
}; };
...@@ -124,6 +124,28 @@ static int draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir) ...@@ -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); 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 = { AVFilter avfilter_vf_drawbox = {
.name = "drawbox", .name = "drawbox",
.description = NULL_IF_CONFIG_SMALL("Draw a colored box on the input video."), .description = NULL_IF_CONFIG_SMALL("Draw a colored box on the input video."),
...@@ -131,16 +153,6 @@ AVFilter avfilter_vf_drawbox = { ...@@ -131,16 +153,6 @@ AVFilter avfilter_vf_drawbox = {
.init = init, .init = init,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_drawbox_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_drawbox_outputs,
.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}},
}; };
...@@ -810,6 +810,29 @@ static int end_frame(AVFilterLink *inlink) ...@@ -810,6 +810,29 @@ static int end_frame(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_drawtext = {
.name = "drawtext", .name = "drawtext",
.description = NULL_IF_CONFIG_SMALL("Draw text on top of video frames using libfreetype library."), .description = NULL_IF_CONFIG_SMALL("Draw text on top of video frames using libfreetype library."),
...@@ -818,19 +841,8 @@ AVFilter avfilter_vf_drawtext = { ...@@ -818,19 +841,8 @@ AVFilter avfilter_vf_drawtext = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_drawtext_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_drawtext_outputs,
.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}},
.process_command = command, .process_command = command,
.priv_class = &drawtext_class, .priv_class = &drawtext_class,
}; };
...@@ -276,6 +276,28 @@ static int end_frame(AVFilterLink *inlink) ...@@ -276,6 +276,28 @@ static int end_frame(AVFilterLink *inlink)
return ret; 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 = { AVFilter avfilter_vf_fade = {
.name = "fade", .name = "fade",
.description = NULL_IF_CONFIG_SMALL("Fade in/out input video."), .description = NULL_IF_CONFIG_SMALL("Fade in/out input video."),
...@@ -284,17 +306,7 @@ AVFilter avfilter_vf_fade = { ...@@ -284,17 +306,7 @@ AVFilter avfilter_vf_fade = {
.priv_size = sizeof(FadeContext), .priv_size = sizeof(FadeContext),
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_fade_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_fade_outputs,
.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}},
.priv_class = &fade_class, .priv_class = &fade_class,
}; };
...@@ -234,22 +234,34 @@ static int end_frame(AVFilterLink *inlink) ...@@ -234,22 +234,34 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(outlink); return ff_end_frame(outlink);
} }
AVFilter avfilter_vf_fieldorder = { static const AVFilterPad avfilter_vf_fieldorder_inputs[] = {
.name = "fieldorder", {
.description = NULL_IF_CONFIG_SMALL("Set the field order."), .name = "default",
.init = init,
.priv_size = sizeof(FieldOrderContext),
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input, .config_props = config_input,
.start_frame = start_frame, .start_frame = start_frame,
.get_video_buffer = get_video_buffer, .get_video_buffer = get_video_buffer,
.draw_slice = draw_slice, .draw_slice = draw_slice,
.end_frame = end_frame, .end_frame = end_frame,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
{ .name = NULL}}, },
.outputs = (const AVFilterPad[]) {{ .name = "default", { NULL }
.type = AVMEDIA_TYPE_VIDEO, }, };
{ .name = 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 = avfilter_vf_fieldorder_inputs,
.outputs = avfilter_vf_fieldorder_outputs,
}; };
...@@ -97,6 +97,26 @@ static int query_formats_format(AVFilterContext *ctx) ...@@ -97,6 +97,26 @@ static int query_formats_format(AVFilterContext *ctx)
return 0; 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 = { AVFilter avfilter_vf_format = {
.name = "format", .name = "format",
.description = NULL_IF_CONFIG_SMALL("Convert the input video to one of the specified pixel formats."), .description = NULL_IF_CONFIG_SMALL("Convert the input video to one of the specified pixel formats."),
...@@ -107,16 +127,8 @@ AVFilter avfilter_vf_format = { ...@@ -107,16 +127,8 @@ AVFilter avfilter_vf_format = {
.priv_size = sizeof(FormatContext), .priv_size = sizeof(FormatContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_format_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_format_outputs,
.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}},
}; };
#endif /* CONFIG_FORMAT_FILTER */ #endif /* CONFIG_FORMAT_FILTER */
...@@ -127,6 +139,26 @@ static int query_formats_noformat(AVFilterContext *ctx) ...@@ -127,6 +139,26 @@ static int query_formats_noformat(AVFilterContext *ctx)
return 0; 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 = { AVFilter avfilter_vf_noformat = {
.name = "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."), .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 = { ...@@ -137,15 +169,7 @@ AVFilter avfilter_vf_noformat = {
.priv_size = sizeof(FormatContext), .priv_size = sizeof(FormatContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_noformat_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_noformat_outputs,
.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}},
}; };
#endif /* CONFIG_NOFORMAT_FILTER */ #endif /* CONFIG_NOFORMAT_FILTER */
...@@ -279,6 +279,29 @@ static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) ...@@ -279,6 +279,29 @@ static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
return 0; 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 = { AVFilter avfilter_vf_fps = {
.name = "fps", .name = "fps",
.description = NULL_IF_CONFIG_SMALL("Force constant framerate"), .description = NULL_IF_CONFIG_SMALL("Force constant framerate"),
...@@ -288,18 +311,7 @@ AVFilter avfilter_vf_fps = { ...@@ -288,18 +311,7 @@ AVFilter avfilter_vf_fps = {
.priv_size = sizeof(FPSContext), .priv_size = sizeof(FPSContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_fps_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_fps_outputs,
.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}},
.priv_class = &fps_class, .priv_class = &fps_class,
}; };
...@@ -368,6 +368,26 @@ static int end_frame(AVFilterLink *inlink) ...@@ -368,6 +368,26 @@ static int end_frame(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_frei0r = {
.name = "frei0r", .name = "frei0r",
.description = NULL_IF_CONFIG_SMALL("Apply a frei0r effect."), .description = NULL_IF_CONFIG_SMALL("Apply a frei0r effect."),
...@@ -378,17 +398,9 @@ AVFilter avfilter_vf_frei0r = { ...@@ -378,17 +398,9 @@ AVFilter avfilter_vf_frei0r = {
.priv_size = sizeof(Frei0rContext), .priv_size = sizeof(Frei0rContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_frei0r_inputs,
.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", .outputs = avfilter_vf_frei0r_outputs,
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
static av_cold int source_init(AVFilterContext *ctx, const char *args) static av_cold int source_init(AVFilterContext *ctx, const char *args)
...@@ -478,6 +490,16 @@ fail: ...@@ -478,6 +490,16 @@ fail:
return ret; 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 = { AVFilter avfilter_vsrc_frei0r_src = {
.name = "frei0r_src", .name = "frei0r_src",
.description = NULL_IF_CONFIG_SMALL("Generate a frei0r source."), .description = NULL_IF_CONFIG_SMALL("Generate a frei0r source."),
...@@ -490,9 +512,5 @@ AVFilter avfilter_vsrc_frei0r_src = { ...@@ -490,9 +512,5 @@ AVFilter avfilter_vsrc_frei0r_src = {
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_vsrc_frei0r_src_outputs,
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = source_request_frame,
.config_props = source_config_props },
{ .name = NULL}},
}; };
...@@ -216,6 +216,27 @@ static int end_frame(AVFilterLink *inlink) ...@@ -216,6 +216,27 @@ static int end_frame(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_gradfun = {
.name = "gradfun", .name = "gradfun",
.description = NULL_IF_CONFIG_SMALL("Debands video quickly using gradients."), .description = NULL_IF_CONFIG_SMALL("Debands video quickly using gradients."),
...@@ -224,15 +245,6 @@ AVFilter avfilter_vf_gradfun = { ...@@ -224,15 +245,6 @@ AVFilter avfilter_vf_gradfun = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_gradfun_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_gradfun_outputs,
.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}},
}; };
...@@ -165,20 +165,32 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) ...@@ -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); 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 = { AVFilter avfilter_vf_hflip = {
.name = "hflip", .name = "hflip",
.description = NULL_IF_CONFIG_SMALL("Horizontally flip the input video."), .description = NULL_IF_CONFIG_SMALL("Horizontally flip the input video."),
.priv_size = sizeof(FlipContext), .priv_size = sizeof(FlipContext),
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_hflip_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_hflip_outputs,
.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}},
}; };
...@@ -348,6 +348,26 @@ static int end_frame(AVFilterLink *inlink) ...@@ -348,6 +348,26 @@ static int end_frame(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_hqdn3d = {
.name = "hqdn3d", .name = "hqdn3d",
.description = NULL_IF_CONFIG_SMALL("Apply a High Quality 3D Denoiser."), .description = NULL_IF_CONFIG_SMALL("Apply a High Quality 3D Denoiser."),
...@@ -357,15 +377,7 @@ AVFilter avfilter_vf_hqdn3d = { ...@@ -357,15 +377,7 @@ AVFilter avfilter_vf_hqdn3d = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_hqdn3d_inputs,
.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", .outputs = avfilter_vf_hqdn3d_outputs,
.type = AVMEDIA_TYPE_VIDEO },
{ .name = NULL}},
}; };
...@@ -376,6 +376,25 @@ static int end_frame(AVFilterLink *inlink) ...@@ -376,6 +376,25 @@ static int end_frame(AVFilterLink *inlink)
return 0; 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 = { AVFilter avfilter_vf_ocv = {
.name = "ocv", .name = "ocv",
.description = NULL_IF_CONFIG_SMALL("Apply transform using libopencv."), .description = NULL_IF_CONFIG_SMALL("Apply transform using libopencv."),
...@@ -386,14 +405,7 @@ AVFilter avfilter_vf_ocv = { ...@@ -386,14 +405,7 @@ AVFilter avfilter_vf_ocv = {
.init = init, .init = init,
.uninit = uninit, .uninit = uninit,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_ocv_inputs,
.type = AVMEDIA_TYPE_VIDEO,
.draw_slice = null_draw_slice,
.end_frame = end_frame,
.min_perms = AV_PERM_READ },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_vf_ocv_outputs,
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
...@@ -26,20 +26,32 @@ ...@@ -26,20 +26,32 @@
#include "internal.h" #include "internal.h"
#include "video.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 = { AVFilter avfilter_vf_null = {
.name = "null", .name = "null",
.description = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."), .description = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."),
.priv_size = 0, .priv_size = 0,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_null_inputs,
.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}},
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_vf_null_outputs,
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
...@@ -607,38 +607,52 @@ static int null_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) ...@@ -607,38 +607,52 @@ static int null_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
return 0; return 0;
} }
AVFilter avfilter_vf_overlay = { static const AVFilterPad avfilter_vf_overlay_inputs[] = {
.name = "overlay", {
.description = NULL_IF_CONFIG_SMALL("Overlay a video source on top of the input."), .name = "main",
.init = init,
.uninit = uninit,
.priv_size = sizeof(OverlayContext),
.query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "main",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.get_video_buffer= get_video_buffer, .get_video_buffer= get_video_buffer,
.config_props = config_input_main, .config_props = config_input_main,
.start_frame = start_frame_main, .start_frame = start_frame_main,
.draw_slice = draw_slice_main, .draw_slice = draw_slice_main,
.end_frame = end_frame_main, .end_frame = end_frame_main,
.min_perms = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE }, .min_perms = AV_PERM_READ | AV_PERM_WRITE | AV_PERM_PRESERVE,
{ .name = "overlay", },
{
.name = "overlay",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.config_props = config_input_overlay, .config_props = config_input_overlay,
.start_frame = start_frame_over, .start_frame = start_frame_over,
.draw_slice = null_draw_slice, .draw_slice = null_draw_slice,
.end_frame = end_frame_over, .end_frame = end_frame_over,
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE }, .min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
{ .name = NULL}}, },
.outputs = (const AVFilterPad[]) {{ .name = "default", { NULL }
};
static const AVFilterPad avfilter_vf_overlay_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.rej_perms = AV_PERM_WRITE, .rej_perms = AV_PERM_WRITE,
.config_props = config_output, .config_props = config_output,
.request_frame = request_frame, }, .request_frame = request_frame,
{ .name = NULL}}, },
{ NULL }
};
AVFilter avfilter_vf_overlay = {
.name = "overlay",
.description = NULL_IF_CONFIG_SMALL("Overlay a video source on top of the input."),
.init = init,
.uninit = uninit,
.priv_size = sizeof(OverlayContext),
.query_formats = query_formats,
.inputs = avfilter_vf_overlay_inputs,
.outputs = avfilter_vf_overlay_outputs,
.priv_class = &overlay_class, .priv_class = &overlay_class,
}; };
...@@ -388,6 +388,27 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) ...@@ -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); 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 = { AVFilter avfilter_vf_pad = {
.name = "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)."), .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 = { ...@@ -396,16 +417,7 @@ AVFilter avfilter_vf_pad = {
.init = init, .init = init,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_pad_inputs,
.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", .outputs = avfilter_vf_pad_outputs,
.type = AVMEDIA_TYPE_VIDEO,
.config_props = config_output, },
{ .name = NULL}},
}; };
...@@ -126,6 +126,26 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) ...@@ -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); 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 = { AVFilter avfilter_vf_pixdesctest = {
.name = "pixdesctest", .name = "pixdesctest",
.description = NULL_IF_CONFIG_SMALL("Test pixel format definitions."), .description = NULL_IF_CONFIG_SMALL("Test pixel format definitions."),
...@@ -133,15 +153,7 @@ AVFilter avfilter_vf_pixdesctest = { ...@@ -133,15 +153,7 @@ AVFilter avfilter_vf_pixdesctest = {
.priv_size = sizeof(PixdescTestContext), .priv_size = sizeof(PixdescTestContext),
.uninit = uninit, .uninit = uninit,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_pixdesctest_inputs,
.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", .outputs = avfilter_vf_pixdesctest_outputs,
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
...@@ -395,6 +395,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) ...@@ -395,6 +395,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
return ret; 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 = { AVFilter avfilter_vf_scale = {
.name = "scale", .name = "scale",
.description = NULL_IF_CONFIG_SMALL("Scale the input video to width:height size and/or convert the image format."), .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 = { ...@@ -406,14 +426,6 @@ AVFilter avfilter_vf_scale = {
.priv_size = sizeof(ScaleContext), .priv_size = sizeof(ScaleContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_scale_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_scale_outputs,
.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}},
}; };
...@@ -417,6 +417,30 @@ static int query_formats(AVFilterContext *ctx) ...@@ -417,6 +417,30 @@ static int query_formats(AVFilterContext *ctx)
return 0; 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 = { AVFilter avfilter_vf_select = {
.name = "select", .name = "select",
.description = NULL_IF_CONFIG_SMALL("Select frames to pass in output."), .description = NULL_IF_CONFIG_SMALL("Select frames to pass in output."),
...@@ -426,18 +450,6 @@ AVFilter avfilter_vf_select = { ...@@ -426,18 +450,6 @@ AVFilter avfilter_vf_select = {
.priv_size = sizeof(SelectContext), .priv_size = sizeof(SelectContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_select_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_select_outputs,
.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}},
}; };
...@@ -85,6 +85,26 @@ static int end_frame(AVFilterLink *inlink) ...@@ -85,6 +85,26 @@ static int end_frame(AVFilterLink *inlink)
return ff_end_frame(inlink->dst->outputs[0]); 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 = { AVFilter avfilter_vf_showinfo = {
.name = "showinfo", .name = "showinfo",
.description = NULL_IF_CONFIG_SMALL("Show textual information for each video frame."), .description = NULL_IF_CONFIG_SMALL("Show textual information for each video frame."),
...@@ -92,15 +112,7 @@ AVFilter avfilter_vf_showinfo = { ...@@ -92,15 +112,7 @@ AVFilter avfilter_vf_showinfo = {
.priv_size = sizeof(ShowInfoContext), .priv_size = sizeof(ShowInfoContext),
.init = init, .init = init,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_showinfo_inputs,
.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", .outputs = avfilter_vf_showinfo_outputs,
.type = AVMEDIA_TYPE_VIDEO },
{ .name = NULL}},
}; };
...@@ -106,6 +106,27 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) ...@@ -106,6 +106,27 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
return 0; 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 = { AVFilter avfilter_vf_slicify = {
.name = "slicify", .name = "slicify",
.description = NULL_IF_CONFIG_SMALL("Pass the images of input video on to next video filter as multiple slices."), .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 = { ...@@ -114,15 +135,6 @@ AVFilter avfilter_vf_slicify = {
.priv_size = sizeof(SliceContext), .priv_size = sizeof(SliceContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_slicify_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_slicify_outputs,
.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}},
}; };
...@@ -266,6 +266,28 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) ...@@ -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; 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 = { AVFilter avfilter_vf_transpose = {
.name = "transpose", .name = "transpose",
.description = NULL_IF_CONFIG_SMALL("Transpose input video."), .description = NULL_IF_CONFIG_SMALL("Transpose input video."),
...@@ -275,17 +297,7 @@ AVFilter avfilter_vf_transpose = { ...@@ -275,17 +297,7 @@ AVFilter avfilter_vf_transpose = {
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_transpose_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_transpose_outputs,
.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}},
.priv_class = &transpose_class, .priv_class = &transpose_class,
}; };
...@@ -237,6 +237,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) ...@@ -237,6 +237,26 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
return 0; 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 = { AVFilter avfilter_vf_unsharp = {
.name = "unsharp", .name = "unsharp",
.description = NULL_IF_CONFIG_SMALL("Sharpen or blur the input video."), .description = NULL_IF_CONFIG_SMALL("Sharpen or blur the input video."),
...@@ -247,15 +267,7 @@ AVFilter avfilter_vf_unsharp = { ...@@ -247,15 +267,7 @@ AVFilter avfilter_vf_unsharp = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_unsharp_inputs,
.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", .outputs = avfilter_vf_unsharp_outputs,
.type = AVMEDIA_TYPE_VIDEO, },
{ .name = NULL}},
}; };
...@@ -96,20 +96,32 @@ static int draw_slice(AVFilterLink *link, int y, int h, int slice_dir) ...@@ -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); 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 = { AVFilter avfilter_vf_vflip = {
.name = "vflip", .name = "vflip",
.description = NULL_IF_CONFIG_SMALL("Flip the input video vertically."), .description = NULL_IF_CONFIG_SMALL("Flip the input video vertically."),
.priv_size = sizeof(FlipContext), .priv_size = sizeof(FlipContext),
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_vflip_inputs,
.type = AVMEDIA_TYPE_VIDEO, .outputs = avfilter_vf_vflip_outputs,
.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}},
}; };
...@@ -441,6 +441,29 @@ static int config_props(AVFilterLink *link) ...@@ -441,6 +441,29 @@ static int config_props(AVFilterLink *link)
return 0; 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 = { AVFilter avfilter_vf_yadif = {
.name = "yadif", .name = "yadif",
.description = NULL_IF_CONFIG_SMALL("Deinterlace the input image."), .description = NULL_IF_CONFIG_SMALL("Deinterlace the input image."),
...@@ -450,18 +473,7 @@ AVFilter avfilter_vf_yadif = { ...@@ -450,18 +473,7 @@ AVFilter avfilter_vf_yadif = {
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = (const AVFilterPad[]) {{ .name = "default", .inputs = avfilter_vf_yadif_inputs,
.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", .outputs = avfilter_vf_yadif_outputs,
.type = AVMEDIA_TYPE_VIDEO,
.poll_frame = poll_frame,
.request_frame = request_frame,
.config_props = config_props, },
{ .name = NULL}},
}; };
...@@ -30,20 +30,22 @@ static int end_frame(AVFilterLink *link) ...@@ -30,20 +30,22 @@ static int end_frame(AVFilterLink *link)
return 0; return 0;
} }
AVFilter avfilter_vsink_nullsink = { static const AVFilterPad avfilter_vsink_nullsink_inputs[] = {
.name = "nullsink",
.description = NULL_IF_CONFIG_SMALL("Do absolutely nothing with the input video."),
.priv_size = 0,
.inputs = (const AVFilterPad[]) {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.start_frame = start_frame, .start_frame = start_frame,
.end_frame = end_frame, .end_frame = end_frame,
}, },
{ .name = NULL}, { NULL },
}, };
AVFilter avfilter_vsink_nullsink = {
.name = "nullsink",
.description = NULL_IF_CONFIG_SMALL("Do absolutely nothing with the input video."),
.priv_size = 0,
.inputs = avfilter_vsink_nullsink_inputs,
.outputs = NULL, .outputs = NULL,
}; };
...@@ -525,6 +525,16 @@ static int test_query_formats(AVFilterContext *ctx) ...@@ -525,6 +525,16 @@ static int test_query_formats(AVFilterContext *ctx)
return 0; 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 = { AVFilter avfilter_vsrc_testsrc = {
.name = "testsrc", .name = "testsrc",
.description = NULL_IF_CONFIG_SMALL("Generate test pattern."), .description = NULL_IF_CONFIG_SMALL("Generate test pattern."),
...@@ -535,12 +545,7 @@ AVFilter avfilter_vsrc_testsrc = { ...@@ -535,12 +545,7 @@ AVFilter avfilter_vsrc_testsrc = {
.query_formats = test_query_formats, .query_formats = test_query_formats,
.inputs = NULL, .inputs = NULL,
.outputs = avfilter_vsrc_testsrc_outputs,
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = config_props, },
{ .name = NULL }},
.priv_class = &testsrc_class, .priv_class = &testsrc_class,
}; };
...@@ -639,6 +644,16 @@ static int rgbtest_config_props(AVFilterLink *outlink) ...@@ -639,6 +644,16 @@ static int rgbtest_config_props(AVFilterLink *outlink)
return config_props(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 = { AVFilter avfilter_vsrc_rgbtestsrc = {
.name = "rgbtestsrc", .name = "rgbtestsrc",
.description = NULL_IF_CONFIG_SMALL("Generate RGB test pattern."), .description = NULL_IF_CONFIG_SMALL("Generate RGB test pattern."),
...@@ -650,11 +665,7 @@ AVFilter avfilter_vsrc_rgbtestsrc = { ...@@ -650,11 +665,7 @@ AVFilter avfilter_vsrc_rgbtestsrc = {
.inputs = NULL, .inputs = NULL,
.outputs = (const AVFilterPad[]) {{ .name = "default", .outputs = avfilter_vsrc_rgbtestsrc_outputs,
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = rgbtest_config_props, },
{ .name = NULL }},
.priv_class = &rgbtestsrc_class, .priv_class = &rgbtestsrc_class,
}; };
......
...@@ -951,6 +951,9 @@ static int mxf_get_sorted_table_segments(MXFContext *mxf, int *nb_sorted_segment ...@@ -951,6 +951,9 @@ static int mxf_get_sorted_table_segments(MXFContext *mxf, int *nb_sorted_segment
if (mxf->metadata_sets[i]->type == IndexTableSegment) if (mxf->metadata_sets[i]->type == IndexTableSegment)
nb_segments++; nb_segments++;
if (!nb_segments)
return AVERROR_INVALIDDATA;
if (!(unsorted_segments = av_calloc(nb_segments, sizeof(*unsorted_segments))) || if (!(unsorted_segments = av_calloc(nb_segments, sizeof(*unsorted_segments))) ||
!(*sorted_segments = av_calloc(nb_segments, sizeof(**sorted_segments)))) { !(*sorted_segments = av_calloc(nb_segments, sizeof(**sorted_segments)))) {
av_freep(sorted_segments); av_freep(sorted_segments);
......
...@@ -25,7 +25,7 @@ $(TESTOBJS): CPPFLAGS += -DTEST ...@@ -25,7 +25,7 @@ $(TESTOBJS): CPPFLAGS += -DTEST
$(SUBDIR)$(LIBNAME): $(OBJS) $(SUBDIR)$(LIBNAME): $(OBJS)
$(RM) $@ $(RM) $@
$(AR) $(ARFLAGS) $(AR_O) $^ $(EXTRAOBJS) $(AR) $(ARFLAGS) $(AR_O) $^
$(RANLIB) $@ $(RANLIB) $@
install-headers: install-lib$(NAME)-headers install-lib$(NAME)-pkgconfig install-headers: install-lib$(NAME)-headers install-lib$(NAME)-pkgconfig
...@@ -45,7 +45,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) ...@@ -45,7 +45,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)lib$(NAME).ver $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)lib$(NAME).ver
$(SLIB_CREATE_DEF_CMD) $(SLIB_CREATE_DEF_CMD)
$$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS) $(EXTRAOBJS) $$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)
$(SLIB_EXTRA_CMD) $(SLIB_EXTRA_CMD)
ifdef SUBDIR ifdef SUBDIR
......
...@@ -79,6 +79,9 @@ fate-vsynth%-h261: ENCOPTS = -qscale 11 ...@@ -79,6 +79,9 @@ fate-vsynth%-h261: ENCOPTS = -qscale 11
FATE_VCODEC += h263 FATE_VCODEC += h263
fate-vsynth%-h263: ENCOPTS = -qscale 10 fate-vsynth%-h263: ENCOPTS = -qscale 10
FATE_VCODEC += h263-obmc
fate-vsynth%-h263-obmc: ENCOPTS = -qscale 10 -obmc 1
FATE_VCODEC += h263p FATE_VCODEC += h263p
fate-vsynth%-h263p: ENCOPTS = -qscale 2 -flags +aic -umv 1 -aiv 1 -ps 300 fate-vsynth%-h263p: ENCOPTS = -qscale 2 -flags +aic -umv 1 -aiv 1 -ps 300
......
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
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment