mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
lavfi: make AVFilterPad opaque after two major bumps.
It will allow adding new fields to it without ABI breaks.
This commit is contained in:
parent
84b9fbe055
commit
9d0bfc5052
14
avconv.c
14
avconv.c
@ -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;
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
#include "audio.h"
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
|
||||
AVFilter avfilter_af_anull = {
|
||||
.name = "anull",
|
||||
|
@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
|
||||
static void null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) { }
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "libavutil/audioconvert.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -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.
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "avfilter.h"
|
||||
#include "buffersrc.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "vsrc_buffer.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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -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[] = {
|
||||
|
@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
AVFilter avfilter_vf_copy = {
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/eval.h"
|
||||
#include "libavutil/avstring.h"
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
/**
|
||||
|
@ -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 };
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "avfilter.h"
|
||||
#include "drawutils.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
#undef time
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -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);
|
||||
|
@ -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] = {
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
AVFilter avfilter_vf_null = {
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/avstring.h"
|
||||
#include "libavutil/eval.h"
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/avstring.h"
|
||||
#include "libavutil/eval.h"
|
||||
|
@ -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[] = {
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -24,6 +24,7 @@
|
||||
*/
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -38,6 +38,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/mem.h"
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
|
||||
static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
{
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/colorspace.h"
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "libavformat/avformat.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "libavutil/parseutils.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
|
||||
static const char *const var_names[] = {
|
||||
"E",
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "libavutil/parseutils.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
|
Loading…
x
Reference in New Issue
Block a user