diff options
39 files changed, 179 insertions, 6 deletions
@@ -548,7 +548,7 @@ static FilterGraph *init_simple_filtergraph(InputStream *ist, OutputStream *ost) static void init_input_filter(FilterGraph *fg, AVFilterInOut *in) { InputStream *ist; - enum AVMediaType type = in->filter_ctx->input_pads[in->pad_idx].type; + enum AVMediaType type = avfilter_pad_get_type(in->filter_ctx->input_pads, in->pad_idx); int i; // TODO: support other filter types @@ -789,7 +789,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter, \ avio_printf(pb, "%s", ctx->filter->name); \ if (nb_pads > 1) \ - avio_printf(pb, ":%s", pads[inout->pad_idx].name); \ + avio_printf(pb, ":%s", avfilter_pad_get_name(pads, inout->pad_idx));\ avio_w8(pb, 0); \ avio_close_dyn_buf(pb, &f->name); \ } @@ -799,7 +799,7 @@ static int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFil av_freep(&ofilter->name); DESCRIBE_FILTER_LINK(ofilter, out, 0); - switch (out->filter_ctx->output_pads[out->pad_idx].type) { + switch (avfilter_pad_get_type(out->filter_ctx->output_pads, out->pad_idx)) { case AVMEDIA_TYPE_VIDEO: return configure_output_video_filter(fg, ofilter, out); case AVMEDIA_TYPE_AUDIO: return configure_output_audio_filter(fg, ofilter, out); default: av_assert0(0); @@ -913,7 +913,7 @@ static int configure_input_filter(FilterGraph *fg, InputFilter *ifilter, av_freep(&ifilter->name); DESCRIBE_FILTER_LINK(ifilter, in, 1); - switch (in->filter_ctx->input_pads[in->pad_idx].type) { + switch (avfilter_pad_get_type(in->filter_ctx->input_pads, in->pad_idx)) { case AVMEDIA_TYPE_VIDEO: return configure_input_video_filter(fg, ifilter, in); case AVMEDIA_TYPE_AUDIO: return configure_input_audio_filter(fg, ifilter, in); default: av_assert0(0); @@ -4112,7 +4112,8 @@ static void init_output_filter(OutputFilter *ofilter, OptionsContext *o, { OutputStream *ost; - switch (ofilter->out_tmp->filter_ctx->output_pads[ofilter->out_tmp->pad_idx].type) { + switch (avfilter_pad_get_type(ofilter->out_tmp->filter_ctx->output_pads, + ofilter->out_tmp->pad_idx)) { case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(o, oc); break; case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(o, oc); break; default: @@ -4191,7 +4192,8 @@ static void opt_output_file(void *optctx, const char *filename) if (!ofilter->out_tmp || ofilter->out_tmp->name) continue; - switch (ofilter->out_tmp->filter_ctx->output_pads[ofilter->out_tmp->pad_idx].type) { + switch (avfilter_pad_get_type(ofilter->out_tmp->filter_ctx->output_pads, + ofilter->out_tmp->pad_idx)) { case AVMEDIA_TYPE_VIDEO: o->video_disable = 1; break; case AVMEDIA_TYPE_AUDIO: o->audio_disable = 1; break; case AVMEDIA_TYPE_SUBTITLE: o->subtitle_disable = 1; break; diff --git a/libavfilter/af_anull.c b/libavfilter/af_anull.c index 59b275c..294586e 100644 --- a/libavfilter/af_anull.c +++ b/libavfilter/af_anull.c @@ -23,6 +23,7 @@ #include "audio.h" #include "avfilter.h" +#include "internal.h" AVFilter avfilter_af_anull = { .name = "anull", diff --git a/libavfilter/asink_anullsink.c b/libavfilter/asink_anullsink.c index 3a505e7..b527850 100644 --- a/libavfilter/asink_anullsink.c +++ b/libavfilter/asink_anullsink.c @@ -17,6 +17,7 @@ */ #include "avfilter.h" +#include "internal.h" static void null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) { } diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c index 8e99012..6f1c1e7 100644 --- a/libavfilter/asrc_anullsrc.c +++ b/libavfilter/asrc_anullsrc.c @@ -22,6 +22,7 @@ */ #include "avfilter.h" +#include "internal.h" #include "libavutil/audioconvert.h" typedef struct { diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 7ee18fb..157e72f 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -235,8 +235,14 @@ void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats) */ #endif +#if FF_API_AVFILTERPAD_PUBLIC /** * A filter pad used for either input or output. + * + * @warning this struct will be removed from public API. + * users should call avfilter_pad_get_name() and avfilter_pad_get_type() + * to access the name and type fields; there should be no need to access + * any other fields from outside of libavfilter. */ struct AVFilterPad { /** @@ -358,6 +364,7 @@ struct AVFilterPad { */ int (*config_props)(AVFilterLink *link); }; +#endif /** * Get the name of an AVFilterPad. diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index 3ffab60..ad9f45b 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -27,6 +27,7 @@ #include "avfilter.h" #include "buffersrc.h" #include "formats.h" +#include "internal.h" #include "video.h" #include "vsrc_buffer.h" diff --git a/libavfilter/internal.h b/libavfilter/internal.h index 4b53831..f6dc74b 100644 --- a/libavfilter/internal.h +++ b/libavfilter/internal.h @@ -26,6 +26,132 @@ #include "avfilter.h" +#if !FF_API_AVFILTERPAD_PUBLIC +/** + * A filter pad used for either input or output. + */ +struct AVFilterPad { + /** + * Pad name. The name is unique among inputs and among outputs, but an + * input may have the same name as an output. This may be NULL if this + * pad has no need to ever be referenced by name. + */ + const char *name; + + /** + * AVFilterPad type. + */ + enum AVMediaType type; + + /** + * Minimum required permissions on incoming buffers. Any buffer with + * insufficient permissions will be automatically copied by the filter + * system to a new buffer which provides the needed access permissions. + * + * Input pads only. + */ + int min_perms; + + /** + * Permissions which are not accepted on incoming buffers. Any buffer + * which has any of these permissions set will be automatically copied + * by the filter system to a new buffer which does not have those + * permissions. This can be used to easily disallow buffers with + * AV_PERM_REUSE. + * + * Input pads only. + */ + int rej_perms; + + /** + * Callback called before passing the first slice of a new frame. If + * NULL, the filter layer will default to storing a reference to the + * picture inside the link structure. + * + * Input video pads only. + */ + void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref); + + /** + * Callback function to get a video buffer. If NULL, the filter system will + * use avfilter_default_get_video_buffer(). + * + * Input video pads only. + */ + AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h); + + /** + * Callback function to get an audio buffer. If NULL, the filter system will + * use avfilter_default_get_audio_buffer(). + * + * Input audio pads only. + */ + AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms, + int nb_samples); + + /** + * Callback called after the slices of a frame are completely sent. If + * NULL, the filter layer will default to releasing the reference stored + * in the link structure during start_frame(). + * + * Input video pads only. + */ + void (*end_frame)(AVFilterLink *link); + + /** + * Slice drawing callback. This is where a filter receives video data + * and should do its processing. + * + * Input video pads only. + */ + void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir); + + /** + * Samples filtering callback. This is where a filter receives audio data + * and should do its processing. + * + * Input audio pads only. + */ + void (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref); + + /** + * Frame poll callback. This returns the number of immediately available + * samples. It should return a positive value if the next request_frame() + * is guaranteed to return one frame (with no delay). + * + * Defaults to just calling the source poll_frame() method. + * + * Output pads only. + */ + int (*poll_frame)(AVFilterLink *link); + + /** + * Frame request callback. A call to this should result in at least one + * frame being output over the given link. This should return zero on + * success, and another value on error. + * + * Output pads only. + */ + int (*request_frame)(AVFilterLink *link); + + /** + * Link configuration callback. + * + * For output pads, this should set the link properties such as + * width/height. This should NOT set the format property - that is + * negotiated between filters by the filter system using the + * query_formats() callback before this function is called. + * + * For input pads, this should check the properties of the link, and update + * the filter's internal state as necessary. + * + * For both input and output filters, this should return zero on success, + * and another value on error. + */ + int (*config_props)(AVFilterLink *link); +}; +#endif + /** default handler for freeing audio/video buffer when there are no references left */ void ff_avfilter_default_free_buffer(AVFilterBuffer *buf); diff --git a/libavfilter/version.h b/libavfilter/version.h index d8baf0e..76fe166 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -59,5 +59,8 @@ #ifndef FF_API_FILTERS_PUBLIC #define FF_API_FILTERS_PUBLIC (LIBAVFILTER_VERSION_MAJOR < 3) #endif +#ifndef FF_API_AVFILTERPAD_PUBLIC +#define FF_API_AVFILTERPAD_PUBLIC (LIBAVFILTER_VERSION_MAJOR < 4) +#endif #endif // AVFILTER_VERSION_H diff --git a/libavfilter/vf_aspect.c b/libavfilter/vf_aspect.c index 0555afe..44bef91 100644 --- a/libavfilter/vf_aspect.c +++ b/libavfilter/vf_aspect.c @@ -25,6 +25,7 @@ #include "libavutil/mathematics.h" #include "avfilter.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_blackframe.c b/libavfilter/vf_blackframe.c index 1d9a75d..a1f9732 100644 --- a/libavfilter/vf_blackframe.c +++ b/libavfilter/vf_blackframe.c @@ -29,6 +29,7 @@ #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_boxblur.c b/libavfilter/vf_boxblur.c index 21a0173..06917ec 100644 --- a/libavfilter/vf_boxblur.c +++ b/libavfilter/vf_boxblur.c @@ -30,6 +30,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" static const char *const var_names[] = { diff --git a/libavfilter/vf_copy.c b/libavfilter/vf_copy.c index 271a729..9ceb2f8 100644 --- a/libavfilter/vf_copy.c +++ b/libavfilter/vf_copy.c @@ -22,6 +22,7 @@ */ #include "avfilter.h" +#include "internal.h" #include "video.h" AVFilter avfilter_vf_copy = { diff --git a/libavfilter/vf_crop.c b/libavfilter/vf_crop.c index f25278e..c884ce1 100644 --- a/libavfilter/vf_crop.c +++ b/libavfilter/vf_crop.c @@ -27,6 +27,7 @@ #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" #include "libavutil/eval.h" #include "libavutil/avstring.h" diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c index 38fd5c1..c890dab 100644 --- a/libavfilter/vf_cropdetect.c +++ b/libavfilter/vf_cropdetect.c @@ -26,6 +26,7 @@ #include "libavutil/imgutils.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c index 70aa12a..77382c9 100644 --- a/libavfilter/vf_delogo.c +++ b/libavfilter/vf_delogo.c @@ -30,6 +30,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" /** diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c index 47db049..eb129a2 100644 --- a/libavfilter/vf_drawbox.c +++ b/libavfilter/vf_drawbox.c @@ -29,6 +29,7 @@ #include "libavutil/parseutils.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" enum { Y, U, V, A }; diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index 411bcbc..db66ad6 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -42,6 +42,7 @@ #include "avfilter.h" #include "drawutils.h" #include "formats.h" +#include "internal.h" #include "video.h" #undef time diff --git a/libavfilter/vf_fade.c b/libavfilter/vf_fade.c index 6b9cb66..00501dd 100644 --- a/libavfilter/vf_fade.c +++ b/libavfilter/vf_fade.c @@ -28,6 +28,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_fieldorder.c b/libavfilter/vf_fieldorder.c index 67a6958..8921856 100644 --- a/libavfilter/vf_fieldorder.c +++ b/libavfilter/vf_fieldorder.c @@ -29,6 +29,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c index fff616b..1a50118 100644 --- a/libavfilter/vf_format.c +++ b/libavfilter/vf_format.c @@ -26,6 +26,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_frei0r.c b/libavfilter/vf_frei0r.c index 2a72fcc..5488157 100644 --- a/libavfilter/vf_frei0r.c +++ b/libavfilter/vf_frei0r.c @@ -32,6 +32,7 @@ #include "libavutil/parseutils.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef f0r_instance_t (*f0r_construct_f)(unsigned int width, unsigned int height); diff --git a/libavfilter/vf_gradfun.c b/libavfilter/vf_gradfun.c index 88872b3..303e54c 100644 --- a/libavfilter/vf_gradfun.c +++ b/libavfilter/vf_gradfun.c @@ -38,6 +38,7 @@ #include "avfilter.h" #include "formats.h" #include "gradfun.h" +#include "internal.h" #include "video.h" DECLARE_ALIGNED(16, static const uint16_t, dither)[8][8] = { diff --git a/libavfilter/vf_hflip.c b/libavfilter/vf_hflip.c index aff0f8c..af167e1 100644 --- a/libavfilter/vf_hflip.c +++ b/libavfilter/vf_hflip.c @@ -26,6 +26,7 @@ #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" #include "libavutil/pixdesc.h" #include "libavutil/intreadwrite.h" diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c index 0a26dd0..f9b864e 100644 --- a/libavfilter/vf_hqdn3d.c +++ b/libavfilter/vf_hqdn3d.c @@ -28,6 +28,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_null.c b/libavfilter/vf_null.c index 470c3d2..26545dc 100644 --- a/libavfilter/vf_null.c +++ b/libavfilter/vf_null.c @@ -22,6 +22,7 @@ */ #include "avfilter.h" +#include "internal.h" #include "video.h" AVFilter avfilter_vf_null = { diff --git a/libavfilter/vf_pad.c b/libavfilter/vf_pad.c index 11c59b9..098fc80 100644 --- a/libavfilter/vf_pad.c +++ b/libavfilter/vf_pad.c @@ -26,6 +26,7 @@ #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" #include "libavutil/avstring.h" #include "libavutil/eval.h" diff --git a/libavfilter/vf_pixdesctest.c b/libavfilter/vf_pixdesctest.c index 353c57b..37dbe2d 100644 --- a/libavfilter/vf_pixdesctest.c +++ b/libavfilter/vf_pixdesctest.c @@ -25,6 +25,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 68ff845..58daf38 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -25,6 +25,7 @@ #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" #include "libavutil/avstring.h" #include "libavutil/eval.h" diff --git a/libavfilter/vf_setpts.c b/libavfilter/vf_setpts.c index d303851..77eef60 100644 --- a/libavfilter/vf_setpts.c +++ b/libavfilter/vf_setpts.c @@ -29,6 +29,7 @@ #include "libavutil/eval.h" #include "libavutil/mathematics.h" #include "avfilter.h" +#include "internal.h" #include "video.h" static const char *const var_names[] = { diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c index 1a8f16e..dbb67e9 100644 --- a/libavfilter/vf_showinfo.c +++ b/libavfilter/vf_showinfo.c @@ -26,6 +26,7 @@ #include "libavutil/imgutils.h" #include "libavutil/pixdesc.h" #include "avfilter.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_slicify.c b/libavfilter/vf_slicify.c index fdc10be..636912d 100644 --- a/libavfilter/vf_slicify.c +++ b/libavfilter/vf_slicify.c @@ -24,6 +24,7 @@ */ #include "avfilter.h" +#include "internal.h" #include "video.h" #include "libavutil/pixdesc.h" diff --git a/libavfilter/vf_transpose.c b/libavfilter/vf_transpose.c index aa5c015..5bcee9d 100644 --- a/libavfilter/vf_transpose.c +++ b/libavfilter/vf_transpose.c @@ -30,6 +30,7 @@ #include "libavutil/imgutils.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c index a5d301c..8010f2d 100644 --- a/libavfilter/vf_unsharp.c +++ b/libavfilter/vf_unsharp.c @@ -38,6 +38,7 @@ #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" #include "libavutil/common.h" #include "libavutil/mem.h" diff --git a/libavfilter/vf_vflip.c b/libavfilter/vf_vflip.c index bece2b2..0f528f1 100644 --- a/libavfilter/vf_vflip.c +++ b/libavfilter/vf_vflip.c @@ -25,6 +25,7 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vsink_nullsink.c b/libavfilter/vsink_nullsink.c index bdfcb8a..6f11158 100644 --- a/libavfilter/vsink_nullsink.c +++ b/libavfilter/vsink_nullsink.c @@ -17,6 +17,7 @@ */ #include "avfilter.h" +#include "internal.h" static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) { diff --git a/libavfilter/vsrc_color.c b/libavfilter/vsrc_color.c index bfd8493..de1f340 100644 --- a/libavfilter/vsrc_color.c +++ b/libavfilter/vsrc_color.c @@ -25,6 +25,7 @@ #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" #include "libavutil/pixdesc.h" #include "libavutil/colorspace.h" diff --git a/libavfilter/vsrc_movie.c b/libavfilter/vsrc_movie.c index f887e95..64f6e18 100644 --- a/libavfilter/vsrc_movie.c +++ b/libavfilter/vsrc_movie.c @@ -37,6 +37,7 @@ #include "libavformat/avformat.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { diff --git a/libavfilter/vsrc_nullsrc.c b/libavfilter/vsrc_nullsrc.c index d145b0b..71094dc 100644 --- a/libavfilter/vsrc_nullsrc.c +++ b/libavfilter/vsrc_nullsrc.c @@ -27,6 +27,7 @@ #include "libavutil/parseutils.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" static const char *const var_names[] = { "E", diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index a6159ef..36f18b6 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -38,6 +38,7 @@ #include "libavutil/parseutils.h" #include "avfilter.h" #include "formats.h" +#include "internal.h" #include "video.h" typedef struct { |