avfilter.h
Go to the documentation of this file.
1 /*
2  * filter layer
3  * Copyright (c) 2007 Bobby Bingham
4  *
5  * This file is part of Libav.
6  *
7  * Libav is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * Libav is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with Libav; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVFILTER_AVFILTER_H
23 #define AVFILTER_AVFILTER_H
24 
25 #include "libavutil/avutil.h"
26 #include "libavutil/log.h"
27 #include "libavutil/samplefmt.h"
28 #include "libavutil/pixfmt.h"
29 #include "libavutil/rational.h"
30 #include "libavcodec/avcodec.h"
31 
32 #include <stddef.h>
33 
34 #include "libavfilter/version.h"
35 
39 unsigned avfilter_version(void);
40 
44 const char *avfilter_configuration(void);
45 
49 const char *avfilter_license(void);
50 
51 
53 typedef struct AVFilterLink AVFilterLink;
54 typedef struct AVFilterPad AVFilterPad;
55 
61 typedef struct AVFilterBuffer {
62  uint8_t *data[8];
63  int linesize[8];
64 
65  unsigned refcount;
66 
68  void *priv;
75  void (*free)(struct AVFilterBuffer *buf);
76 
77  int format;
78  int w, h;
80 
81 #define AV_PERM_READ 0x01
82 #define AV_PERM_WRITE 0x02
83 #define AV_PERM_PRESERVE 0x04
84 #define AV_PERM_REUSE 0x08
85 #define AV_PERM_REUSE2 0x10
86 #define AV_PERM_NEG_LINESIZES 0x20
87 
88 
94  uint64_t channel_layout;
95  int nb_samples;
96  int size;
97  uint32_t sample_rate;
98  int planar;
100 
107  int w;
108  int h;
113  int key_frame;
115 
124 typedef struct AVFilterBufferRef {
126  uint8_t *data[8];
127  int linesize[8];
128  int format;
129 
135  int64_t pts;
136  int64_t pos;
137 
138  int perms;
139 
144 
149 {
150  // copy common properties
151  dst->pts = src->pts;
152  dst->pos = src->pos;
153 
154  switch (src->type) {
155  case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break;
156  case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break;
157  default: break;
158  }
159 }
160 
171 
179 
220 typedef struct AVFilterFormats {
221  unsigned format_count;
222  int *formats;
223 
224  unsigned refcount;
225  struct AVFilterFormats ***refs;
227 
236 
245 int avfilter_add_format(AVFilterFormats **avff, int fmt);
246 
251 
261 
275 
292 
307  AVFilterFormats **newref);
308 
312 struct AVFilterPad {
318  const char *name;
319 
325 
334 
345 
354 
361  AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h);
362 
369  AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms,
370  enum AVSampleFormat sample_fmt, int size,
371  uint64_t channel_layout, int planar);
372 
381 
388  void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir);
389 
397 
407  int (*poll_frame)(AVFilterLink *link);
408 
417 
432  int (*config_props)(AVFilterLink *link);
433 };
434 
437 
439 void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
440 
443 
446 
449 
452 
455  int perms, int w, int h);
456 
459  enum AVSampleFormat sample_fmt, int size,
460  uint64_t channel_layout, int planar);
461 
468 
471 
474 
476 void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
477 
480 
483 
486  int perms, int w, int h);
487 
490  enum AVSampleFormat sample_fmt, int size,
491  uint64_t channel_layout, int planar);
492 
497 typedef struct AVFilter {
498  const char *name;
499 
500  int priv_size;
501 
508  int (*init)(AVFilterContext *ctx, const char *args, void *opaque);
509 
516 
526 
529 
534  const char *description;
535 } AVFilter;
536 
539  const AVClass *av_class;
540 
542 
543  char *name;
544 
545  unsigned input_count;
548 
549  unsigned output_count;
552 
553  void *priv;
554 };
555 
563 struct AVFilterLink {
566 
569 
571  enum {
575  } init_state;
576 
578 
579  /* These parameters apply only to video */
580  int w;
581  int h;
583  /* These two parameters apply only to audio */
584  uint64_t channel_layout;
585  int64_t sample_rate;
586 
587  int format;
588 
596 
605 
608 
617 };
618 
628 int avfilter_link(AVFilterContext *src, unsigned srcpad,
629  AVFilterContext *dst, unsigned dstpad);
630 
638 
651  int w, int h);
652 
665 avfilter_get_video_buffer_ref_from_arrays(uint8_t *data[4], int linesize[4], int perms,
666  int w, int h, enum PixelFormat format);
667 
682  enum AVSampleFormat sample_fmt, int size,
683  uint64_t channel_layout, int planar);
684 
692 
701 
712 
718 void avfilter_end_frame(AVFilterLink *link);
719 
735 void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
736 
746 
748 void avfilter_register_all(void);
749 
751 void avfilter_uninit(void);
752 
764 
772 AVFilter *avfilter_get_by_name(const char *name);
773 
781 
791 int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name);
792 
803 int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque);
804 
811 
822  unsigned filt_srcpad_idx, unsigned filt_dstpad_idx);
823 
837 void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off,
838  AVFilterPad **pads, AVFilterLink ***links,
839  AVFilterPad *newpad);
840 
842 static inline void avfilter_insert_inpad(AVFilterContext *f, unsigned index,
843  AVFilterPad *p)
844 {
845  avfilter_insert_pad(index, &f->input_count, offsetof(AVFilterLink, dstpad),
846  &f->input_pads, &f->inputs, p);
847 }
848 
850 static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index,
851  AVFilterPad *p)
852 {
853  avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad),
854  &f->output_pads, &f->outputs, p);
855 }
856 
864 
865 #endif /* AVFILTER_AVFILTER_H */
uint8_t * data[8]
buffer data for each plane/channel
Definition: avfilter.h:62
int(* poll_frame)(AVFilterLink *link)
Frame poll callback.
Definition: avfilter.h:407
int format
media format
Definition: avfilter.h:77
int size
audio buffer size
Definition: avfilter.h:96
int size
Audio Video Frame.
Definition: avcodec.h:985
int nb_samples
number of audio samples
Definition: avfilter.h:95
AVFilterBufferRefAudioProps * audio
audio buffer specific properties
Definition: avfilter.h:142
AVFilterBufferRefVideoProps * video
video buffer specific properties
Definition: avfilter.h:141
int linesize[8]
number of bytes per line
Definition: avfilter.h:127
int avfilter_poll_frame(AVFilterLink *link)
Poll a frame from the filter chain.
Definition: avfilter.c:380
static void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src)
Copy properties of src to dst, without copying the actual data.
Definition: avfilter.h:148
AVFilterFormats * avfilter_all_formats(enum AVMediaType type)
Return a list of all formats supported by Libav for the given media type.
Definition: formats.c:124
int(* init)(AVFilterContext *ctx, const char *args, void *opaque)
Filter initialization function.
Definition: avfilter.h:508
Libavfilter version macros.
void * priv
private data to be used by a custom free function
Definition: avfilter.h:68
enum AVMediaType type
media type of buffer data
Definition: avfilter.h:140
external API header
Audio specific properties in a reference to an AVFilterBuffer.
Definition: avfilter.h:93
A reference-counted buffer data type used by the filter system.
Definition: avfilter.h:61
AVFilterBufferRef * avfilter_get_video_buffer_ref_from_arrays(uint8_t *data[4], int linesize[4], int perms, int w, int h, enum PixelFormat format)
Create a buffer reference wrapped around an already allocated image buffer.
Definition: avfilter.c:312
enum AVMediaType type
AVFilterPad type.
Definition: avfilter.h:324
struct AVFilterBufferRefVideoProps AVFilterBufferRefVideoProps
Video specific properties in a reference to an AVFilterBuffer.
#define b
Definition: swscale.c:1335
AVFilterBufferRef * avfilter_default_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, uint64_t channel_layout, int planar)
default handler for get_audio_buffer() for audio inputs
Definition: defaults.c:58
int(* query_formats)(AVFilterContext *)
Queries formats supported by the filter and its pads, and sets the in_formats for links connected to ...
Definition: avfilter.h:525
void(* start_frame)(AVFilterLink *link, AVFilterBufferRef *picref)
Callback called before passing the first slice of a new frame.
Definition: avfilter.h:353
void(* end_frame)(AVFilterLink *link)
Callback called after the slices of a frame are completely sent.
Definition: avfilter.h:380
int h
width and height of the allocated buffer
Definition: avfilter.h:78
void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
default handler for start_frame() for video inputs
Definition: defaults.c:136
void avfilter_unref_buffer(AVFilterBufferRef *ref)
Remove a reference to a buffer.
Definition: avfilter.c:73
void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
Send a buffer of audio samples to the next filter.
Definition: avfilter.c:488
const char * name
Pad name.
Definition: avfilter.h:318
int priv_size
size of private data to allocate for the filter
Definition: avfilter.h:500
AVFilterLink ** inputs
array of pointers to input links
Definition: avfilter.h:547
char * name
name of this filter instance
Definition: avfilter.h:543
void avfilter_null_end_frame(AVFilterLink *link)
end_frame() handler for filters which simply pass video along
Definition: defaults.c:278
static void avfilter_insert_outpad(AVFilterContext *f, unsigned index, AVFilterPad *p)
Insert a new output pad for the filter.
Definition: avfilter.h:850
AVFilterPad * output_pads
array of output pads
Definition: avfilter.h:550
int linesize[8]
number of bytes per line
Definition: avfilter.h:63
int(* request_frame)(AVFilterLink *link)
Frame request callback.
Definition: avfilter.h:416
int avfilter_default_config_input_link(AVFilterLink *link)
default handler for config_props() for audio/video inputs
int top_field_first
field order
Definition: avfilter.h:111
void avfilter_default_end_frame(AVFilterLink *link)
default handler for end_frame() for video inputs
Definition: defaults.c:161
struct AVFilterFormats *** refs
references to this list
Definition: avfilter.h:225
AVFilterBufferRef * avfilter_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, uint64_t channel_layout, int planar)
Request an audio samples buffer with a specific set of permissions.
Definition: avfilter.c:351
unsigned input_count
number of input pads
Definition: avfilter.h:545
const char data[16]
Definition: mxf.c:60
int avfilter_add_format(AVFilterFormats **avff, int fmt)
Add fmt to the list of media formats contained in *avff.
Definition: formats.c:107
int key_frame
1 -> keyframe, 0-> not
Definition: avfilter.h:113
int avfilter_request_frame(AVFilterLink *link)
Request an input frame from the filter at the other end of the link.
Definition: avfilter.c:369
void(* filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref)
Samples filtering callback.
Definition: avfilter.h:396
void(* uninit)(AVFilterContext *ctx)
Filter uninitialization function.
Definition: avfilter.h:515
void avfilter_null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
filter_samples() handler for filters which simply pass audio along
Definition: defaults.c:283
AVRational pixel_aspect
pixel aspect ratio
Definition: avfilter.h:109
int64_t pts
presentation timestamp.
Definition: avfilter.h:135
A filter pad used for either input or output.
Definition: avfilter.h:312
int avfilter_default_query_formats(AVFilterContext *ctx)
Default handler for query_formats()
Definition: defaults.c:258
unsigned refcount
number of references to this list
Definition: avfilter.h:224
AVFilterPad * input_pads
array of input pads
Definition: avfilter.h:546
void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats)
A helper for query_formats() which sets all links to the same list of formats.
Definition: defaults.c:234
int h
image height
Definition: avfilter.h:108
void avfilter_register_all(void)
Initialize the filter system.
Definition: allfilters.c:29
AVFilterBufferRef * avfilter_null_get_audio_buffer(AVFilterLink *link, int perms, enum AVSampleFormat sample_fmt, int size, uint64_t channel_layout, int planar)
get_audio_buffer() handler for filters which simply pass audio along
Definition: defaults.c:293
AVFilterBuffer * buf
the buffer that this is a reference to
Definition: avfilter.h:125
void * priv
private data for use by the filter
Definition: avfilter.h:553
AVFilterBufferRef * avfilter_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
default handler for get_video_buffer() for video inputs
Definition: defaults.c:38
Video specific properties in a reference to an AVFilterBuffer.
Definition: avfilter.h:106
AVFilterFormats * avfilter_make_format_list(const int *fmts)
Create a list of supported formats.
Definition: formats.c:90
unsigned avfilter_version(void)
Return the LIBAVFILTER_VERSION_INT constant.
Definition: avfilter.c:32
AVFilterBufferRef * avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask)
Add a new reference to a buffer.
Definition: avfilter.c:47
static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
Definition: mpegaudioenc.c:311
unsigned output_count
number of output pads
Definition: avfilter.h:549
void avfilter_free(AVFilterContext *filter)
Free a filter context.
Definition: avfilter.c:640
void avfilter_default_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
default handler for filter_samples() for audio inputs
Definition: defaults.c:181
void avfilter_end_frame(AVFilterLink *link)
Notifie the next filter that the current frame has finished.
Definition: avfilter.c:430
void(* draw_slice)(AVFilterLink *link, int y, int height, int slice_dir)
Slice drawing callback.
Definition: avfilter.h:388
int avfilter_config_links(AVFilterContext *filter)
Negotiate the media format, dimensions, etc of all inputs to a filter.
Definition: avfilter.c:166
#define f(n)
Definition: regs.h:33
struct AVFilterBufferRef AVFilterBufferRef
A reference to an AVFilterBuffer.
unsigned refcount
number of references to this buffer
Definition: avfilter.h:65
int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, unsigned filt_srcpad_idx, unsigned filt_dstpad_idx)
Insert a filter in the middle of an existing link.
Definition: avfilter.c:135
int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src)
Copy the frame properties of src to dst, without copying the actual image data.
Definition: avfilter.c:685
const char * avfilter_configuration(void)
Return the libavfilter build-time configuration.
Definition: avfilter.c:36
const AVFilterPad * inputs
NULL terminated list of inputs. NULL if none.
Definition: avfilter.h:527
void(* free)(struct AVFilterBuffer *buf)
A pointer to the function to deallocate this buffer if the default function is not sufficient...
Definition: avfilter.h:75
A reference to an AVFilterBuffer.
Definition: avfilter.h:124
struct AVFilterFormats AVFilterFormats
A list of supported formats for one end of a filter link.
struct AVFilter AVFilter
Filter definition.
external API header
int perms
permissions, see the AV_PERM_* flags
Definition: avfilter.h:138
uint32_t sample_rate
audio buffer sample rate
Definition: avfilter.h:97
static void(WINAPI *cond_broadcast)(pthread_cond_t *cond)
void avfilter_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref)
Add *ref as a new reference to formats.
Definition: formats.c:139
int avfilter_default_config_output_link(AVFilterLink *link)
default handler for config_props() for audio/video outputs
Definition: defaults.c:206
void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off, AVFilterPad **pads, AVFilterLink ***links, AVFilterPad *newpad)
Insert a new pad.
Definition: avfilter.c:84
void avfilter_uninit(void)
Uninitialize the filter system.
Definition: avfilter.c:555
enum AVPictureType pict_type
picture type of the frame
Definition: avfilter.h:112
void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
start_frame() handler for filters which simply pass video along
Definition: defaults.c:268
Describe the class of an AVClass context structure.
Definition: log.h:33
Filter definition.
Definition: avfilter.h:497
int index
Definition: gxfenc.c:73
rational number numerator/denominator
Definition: rational.h:43
AVMediaType
Definition: avutil.h:228
const char * name
filter name
Definition: avfilter.h:498
AVPictureType
Definition: avutil.h:295
AVFilterFormats * avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b)
Return a format list which contains the intersection of the formats of a and b.
Definition: formats.c:43
AVFilterBufferRef * avfilter_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
get_video_buffer() handler for filters which simply pass video along
Definition: defaults.c:288
uint64_t channel_layout
channel layout of audio buffer
Definition: avfilter.h:94
AVFilterLink ** outputs
array of pointers to output links
Definition: avfilter.h:551
int planar
audio buffer - planar or packed
Definition: avfilter.h:98
int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name)
Create a filter instance.
Definition: avfilter.c:582
const char * name
Definition: audioconvert.c:61
int height
Definition: gxfenc.c:73
AVFilterBufferRef * avfilter_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
Request a picture buffer with a specific set of permissions.
Definition: avfilter.c:289
PixelFormat
Pixel format.
Definition: pixfmt.h:62
void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
Send a slice to the next filter.
Definition: avfilter.c:447
int rej_perms
Permissions which are not accepted on incoming buffers.
Definition: avfilter.h:344
int interlaced
is frame interlaced
Definition: avfilter.h:110
rational numbers
void avfilter_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref)
Before After |formats |<------—.
Definition: formats.c:176
int avfilter_register(AVFilter *filter)
Register a filter.
Definition: avfilter.c:541
AVSampleFormat
all in native-endian format
Definition: samplefmt.h:27
void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
default handler for draw_slice() for video inputs
Definition: defaults.c:150
pixel format definitions
const char * description
A description for the filter.
Definition: avfilter.h:534
int64_t pos
byte position in stream, -1 if unknown
Definition: avfilter.h:136
void avfilter_formats_unref(AVFilterFormats **ref)
If *ref is non-NULL, remove *ref as a reference to the format list it currently points to...
Definition: formats.c:155
static void avfilter_insert_inpad(AVFilterContext *f, unsigned index, AVFilterPad *p)
Insert a new input pad for the filter.
Definition: avfilter.h:842
AVFilter * filter
the AVFilter of which this is an instance
Definition: avfilter.h:541
const AVClass * av_class
needed for av_log()
Definition: avfilter.h:539
uint8_t * data[8]
picture/audio data for each plane
Definition: avfilter.h:126
int format
media format
Definition: avfilter.h:128
A list of supported formats for one end of a filter link.
Definition: avfilter.h:220
An instance of a filter.
Definition: avfilter.h:538
struct AVFilterBuffer AVFilterBuffer
A reference-counted buffer data type used by the filter system.
const AVFilterPad * outputs
NULL terminated list of outputs. NULL if none.
Definition: avfilter.h:528
int(* config_props)(AVFilterLink *link)
Link configuration callback.
Definition: avfilter.h:432
struct AVFilterBufferRefAudioProps AVFilterBufferRefAudioProps
Audio specific properties in a reference to an AVFilterBuffer.
const char * avfilter_license(void)
Return the libavfilter license.
Definition: avfilter.c:41
void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
Notify the next filter of the start of a frame.
Definition: avfilter.c:400
void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
draw_slice() handler for filters which simply pass video along
Definition: defaults.c:273
int min_perms
Minimum required permissions on incoming buffers.
Definition: avfilter.h:333
int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque)
Initialize a filter.
Definition: avfilter.c:676
AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
Definition: avfilter.c:530
AVFilter ** av_filter_next(AVFilter **filter)
If filter is NULL, returns a pointer to the first registered filter pointer, if filter is non-NULL...
Definition: avfilter.c:550
unsigned format_count
number of formats
Definition: avfilter.h:221
int * formats
list of media formats
Definition: avfilter.h:222
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together.
Definition: avfilter.c:105