ffmpeg / libavfilter / avfilter.h @ e73127a4
History | View | Annotate | Download (33.2 KB)
1 | a5cbb2f4 | Vitor Sessak | /*
|
---|---|---|---|
2 | 664f6595 | Vitor Sessak | * filter layer
|
3 | 3fa77bde | Stefano Sabatini | * Copyright (c) 2007 Bobby Bingham
|
4 | a5cbb2f4 | Vitor Sessak | *
|
5 | 2912e87a | Mans Rullgard | * This file is part of Libav.
|
6 | a5cbb2f4 | Vitor Sessak | *
|
7 | 2912e87a | Mans Rullgard | * Libav is free software; you can redistribute it and/or
|
8 | a5cbb2f4 | Vitor Sessak | * 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 | 2912e87a | Mans Rullgard | * Libav is distributed in the hope that it will be useful,
|
13 | a5cbb2f4 | Vitor Sessak | * 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 | 2912e87a | Mans Rullgard | * License along with Libav; if not, write to the Free Software
|
19 | a5cbb2f4 | Vitor Sessak | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
20 | */
|
||
21 | |||
22 | 98790382 | Stefano Sabatini | #ifndef AVFILTER_AVFILTER_H
|
23 | #define AVFILTER_AVFILTER_H
|
||
24 | a5cbb2f4 | Vitor Sessak | |
25 | 1f20782c | Diego Biurrun | #include "libavutil/avutil.h" |
26 | 737eb597 | Reinhard Tartler | #include "libavutil/samplefmt.h" |
27 | 1f20782c | Diego Biurrun | |
28 | 139f3ac4 | Anton Khirnov | #define LIBAVFILTER_VERSION_MAJOR 2 |
29 | a5b64584 | Stefano Sabatini | #define LIBAVFILTER_VERSION_MINOR 4 |
30 | #define LIBAVFILTER_VERSION_MICRO 0 |
||
31 | be19d752 | Vitor Sessak | |
32 | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||
33 | LIBAVFILTER_VERSION_MINOR, \ |
||
34 | LIBAVFILTER_VERSION_MICRO) |
||
35 | #define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \
|
||
36 | LIBAVFILTER_VERSION_MINOR, \ |
||
37 | LIBAVFILTER_VERSION_MICRO) |
||
38 | #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT
|
||
39 | a7d46657 | Víctor Paesa | |
40 | a9c81431 | Vitor Sessak | #include <stddef.h> |
41 | a5cbb2f4 | Vitor Sessak | |
42 | 540f1c7b | Stefano Sabatini | /**
|
43 | 49bd8e4b | Måns Rullgård | * Return the LIBAVFILTER_VERSION_INT constant.
|
44 | 540f1c7b | Stefano Sabatini | */
|
45 | unsigned avfilter_version(void); |
||
46 | |||
47 | c1736936 | Diego Biurrun | /**
|
48 | 49bd8e4b | Måns Rullgård | * Return the libavfilter build-time configuration.
|
49 | c1736936 | Diego Biurrun | */
|
50 | 41600690 | Stefano Sabatini | const char *avfilter_configuration(void); |
51 | c1736936 | Diego Biurrun | |
52 | /**
|
||
53 | 49bd8e4b | Måns Rullgård | * Return the libavfilter license.
|
54 | c1736936 | Diego Biurrun | */
|
55 | 41600690 | Stefano Sabatini | const char *avfilter_license(void); |
56 | c1736936 | Diego Biurrun | |
57 | |||
58 | a5cbb2f4 | Vitor Sessak | typedef struct AVFilterContext AVFilterContext; |
59 | typedef struct AVFilterLink AVFilterLink; |
||
60 | typedef struct AVFilterPad AVFilterPad; |
||
61 | |||
62 | /**
|
||
63 | 32d7bcd4 | Stefano Sabatini | * A reference-counted buffer data type used by the filter system. Filters
|
64 | a5cbb2f4 | Vitor Sessak | * should not store pointers to this structure directly, but instead use the
|
65 | ecc8dada | S.N. Hemanth Meenakshisundaram | * AVFilterBufferRef structure below.
|
66 | a5cbb2f4 | Vitor Sessak | */
|
67 | f607cc18 | Stefano Sabatini | typedef struct AVFilterBuffer { |
68 | 56b5e9d5 | S.N. Hemanth Meenakshisundaram | uint8_t *data[8]; ///< buffer data for each plane/channel |
69 | int linesize[8]; ///< number of bytes per line |
||
70 | a5cbb2f4 | Vitor Sessak | |
71 | 32d7bcd4 | Stefano Sabatini | unsigned refcount; ///< number of references to this buffer |
72 | 13ff8fd0 | Vitor Sessak | |
73 | /** private data to be used by a custom free function */
|
||
74 | a5cbb2f4 | Vitor Sessak | void *priv;
|
75 | 13ff8fd0 | Vitor Sessak | /**
|
76 | 32d7bcd4 | Stefano Sabatini | * A pointer to the function to deallocate this buffer if the default
|
77 | 38efe768 | Stefano Sabatini | * function is not sufficient. This could, for example, add the memory
|
78 | 13ff8fd0 | Vitor Sessak | * back into a memory pool to be reused later without the overhead of
|
79 | * reallocating it from scratch.
|
||
80 | */
|
||
81 | 32d7bcd4 | Stefano Sabatini | void (*free)(struct AVFilterBuffer *buf); |
82 | 36dc00de | Michael Niedermayer | |
83 | int format; ///< media format |
||
84 | int w, h; ///< width and height of the allocated buffer |
||
85 | f0d77b20 | S.N. Hemanth Meenakshisundaram | } AVFilterBuffer; |
86 | a5cbb2f4 | Vitor Sessak | |
87 | ff5f1be0 | S.N. Hemanth Meenakshisundaram | #define AV_PERM_READ 0x01 ///< can read from the buffer |
88 | #define AV_PERM_WRITE 0x02 ///< can write to the buffer |
||
89 | #define AV_PERM_PRESERVE 0x04 ///< nobody else can overwrite the buffer |
||
90 | #define AV_PERM_REUSE 0x08 ///< can output the buffer multiple times, with the same contents each time |
||
91 | #define AV_PERM_REUSE2 0x10 ///< can output the buffer multiple times, modified each time |
||
92 | 0ccabeea | Michael Niedermayer | #define AV_PERM_NEG_LINESIZES 0x20 ///< the buffer requested can have negative linesizes |
93 | ff5f1be0 | S.N. Hemanth Meenakshisundaram | |
94 | a5cbb2f4 | Vitor Sessak | /**
|
95 | ad2c9501 | S.N. Hemanth Meenakshisundaram | * Audio specific properties in a reference to an AVFilterBuffer. Since
|
96 | * AVFilterBufferRef is common to different media formats, audio specific
|
||
97 | * per reference properties must be separated out.
|
||
98 | */
|
||
99 | typedef struct AVFilterBufferRefAudioProps { |
||
100 | int64_t channel_layout; ///< channel layout of audio buffer
|
||
101 | a242ac36 | Stefano Sabatini | int nb_samples; ///< number of audio samples |
102 | ad2c9501 | S.N. Hemanth Meenakshisundaram | int size; ///< audio buffer size |
103 | uint32_t sample_rate; ///< audio buffer sample rate
|
||
104 | int planar; ///< audio buffer - planar or packed |
||
105 | } AVFilterBufferRefAudioProps; |
||
106 | |||
107 | /**
|
||
108 | cc80caff | S.N. Hemanth Meenakshisundaram | * Video specific properties in a reference to an AVFilterBuffer. Since
|
109 | * AVFilterBufferRef is common to different media formats, video specific
|
||
110 | * per reference properties must be separated out.
|
||
111 | */
|
||
112 | f607cc18 | Stefano Sabatini | typedef struct AVFilterBufferRefVideoProps { |
113 | cc80caff | S.N. Hemanth Meenakshisundaram | int w; ///< image width |
114 | int h; ///< image height |
||
115 | AVRational pixel_aspect; ///< pixel aspect ratio
|
||
116 | int interlaced; ///< is frame interlaced |
||
117 | int top_field_first; ///< field order |
||
118 | bebe72f4 | Stefano Sabatini | enum AVPictureType pict_type; ///< picture type of the frame |
119 | 10d39405 | Roger Pau Monné | int key_frame; ///< 1 -> keyframe, 0-> not |
120 | cc80caff | S.N. Hemanth Meenakshisundaram | } AVFilterBufferRefVideoProps; |
121 | |||
122 | /**
|
||
123 | f0d77b20 | S.N. Hemanth Meenakshisundaram | * A reference to an AVFilterBuffer. Since filters can manipulate the origin of
|
124 | 7fce481a | S.N. Hemanth Meenakshisundaram | * a buffer to, for example, crop image without any memcpy, the buffer origin
|
125 | 38efe768 | Stefano Sabatini | * and dimensions are per-reference properties. Linesize is also useful for
|
126 | bbf42679 | Vitor Sessak | * image flipping, frame to field filters, etc, and so is also per-reference.
|
127 | a5cbb2f4 | Vitor Sessak | *
|
128 | 1a18860a | Vitor Sessak | * TODO: add anything necessary for frame reordering
|
129 | a5cbb2f4 | Vitor Sessak | */
|
130 | f607cc18 | Stefano Sabatini | typedef struct AVFilterBufferRef { |
131 | 7fce481a | S.N. Hemanth Meenakshisundaram | AVFilterBuffer *buf; ///< the buffer that this is a reference to
|
132 | ad2c9501 | S.N. Hemanth Meenakshisundaram | uint8_t *data[8]; ///< picture/audio data for each plane |
133 | c1db7bff | S.N. Hemanth Meenakshisundaram | int linesize[8]; ///< number of bytes per line |
134 | d54e0948 | S.N. Hemanth Meenakshisundaram | int format; ///< media format |
135 | a5cbb2f4 | Vitor Sessak | |
136 | 867ae7aa | Stefano Sabatini | /**
|
137 | * presentation timestamp. The time unit may change during
|
||
138 | * filtering, as it is specified in the link and the filter code
|
||
139 | * may need to rescale the PTS accordingly.
|
||
140 | */
|
||
141 | int64_t pts; |
||
142 | 5bb5c1dc | Stefano Sabatini | int64_t pos; ///< byte position in stream, -1 if unknown
|
143 | 1a18860a | Vitor Sessak | |
144 | ff5f1be0 | S.N. Hemanth Meenakshisundaram | int perms; ///< permissions, see the AV_PERM_* flags |
145 | efdc74ef | Michael Niedermayer | |
146 | cc80caff | S.N. Hemanth Meenakshisundaram | enum AVMediaType type; ///< media type of buffer data |
147 | AVFilterBufferRefVideoProps *video; ///< video buffer specific properties
|
||
148 | ad2c9501 | S.N. Hemanth Meenakshisundaram | AVFilterBufferRefAudioProps *audio; ///< audio buffer specific properties
|
149 | ecc8dada | S.N. Hemanth Meenakshisundaram | } AVFilterBufferRef; |
150 | a5cbb2f4 | Vitor Sessak | |
151 | /**
|
||
152 | ad2c9501 | S.N. Hemanth Meenakshisundaram | * Copy properties of src to dst, without copying the actual data
|
153 | 4d508e4d | Stefano Sabatini | */
|
154 | 7fce481a | S.N. Hemanth Meenakshisundaram | static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src) |
155 | 4d508e4d | Stefano Sabatini | { |
156 | cc80caff | S.N. Hemanth Meenakshisundaram | // copy common properties
|
157 | 4d508e4d | Stefano Sabatini | dst->pts = src->pts; |
158 | dst->pos = src->pos; |
||
159 | cc80caff | S.N. Hemanth Meenakshisundaram | |
160 | switch (src->type) {
|
||
161 | case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break; |
||
162 | ad2c9501 | S.N. Hemanth Meenakshisundaram | case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break; |
163 | cc80caff | S.N. Hemanth Meenakshisundaram | } |
164 | 4d508e4d | Stefano Sabatini | } |
165 | |||
166 | /**
|
||
167 | 7fce481a | S.N. Hemanth Meenakshisundaram | * Add a new reference to a buffer.
|
168 | 3fa3e4f4 | Stefano Sabatini | *
|
169 | 7fce481a | S.N. Hemanth Meenakshisundaram | * @param ref an existing reference to the buffer
|
170 | 664f6595 | Vitor Sessak | * @param pmask a bitmask containing the allowable permissions in the new
|
171 | 13ff8fd0 | Vitor Sessak | * reference
|
172 | 7fce481a | S.N. Hemanth Meenakshisundaram | * @return a new reference to the buffer with the same properties as the
|
173 | 13ff8fd0 | Vitor Sessak | * old, excluding any permissions denied by pmask
|
174 | a5cbb2f4 | Vitor Sessak | */
|
175 | 7fce481a | S.N. Hemanth Meenakshisundaram | AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask);
|
176 | a5cbb2f4 | Vitor Sessak | |
177 | /**
|
||
178 | 7fce481a | S.N. Hemanth Meenakshisundaram | * Remove a reference to a buffer. If this is the last reference to the
|
179 | * buffer, the buffer itself is also automatically freed.
|
||
180 | 3fa3e4f4 | Stefano Sabatini | *
|
181 | 6baf4afa | Stefano Sabatini | * @param ref reference to the buffer, may be NULL
|
182 | a5cbb2f4 | Vitor Sessak | */
|
183 | 7fce481a | S.N. Hemanth Meenakshisundaram | void avfilter_unref_buffer(AVFilterBufferRef *ref);
|
184 | a5cbb2f4 | Vitor Sessak | |
185 | 13ff8fd0 | Vitor Sessak | /**
|
186 | 35f3fdf4 | Vitor Sessak | * A list of supported formats for one end of a filter link. This is used
|
187 | * during the format negotiation process to try to pick the best format to
|
||
188 | * use to minimize the number of necessary conversions. Each filter gives a
|
||
189 | * list of the formats supported by each input and output pad. The list
|
||
190 | * given for each pad need not be distinct - they may be references to the
|
||
191 | * same list of formats, as is often the case when a filter supports multiple
|
||
192 | 42f72a3a | Stefano Sabatini | * formats, but will always output the same format as it is given in input.
|
193 | 35f3fdf4 | Vitor Sessak | *
|
194 | * In this way, a list of possible input formats and a list of possible
|
||
195 | * output formats are associated with each link. When a set of formats is
|
||
196 | * negotiated over a link, the input and output lists are merged to form a
|
||
197 | * new list containing only the common elements of each list. In the case
|
||
198 | * that there were no common elements, a format conversion is necessary.
|
||
199 | * Otherwise, the lists are merged, and all other links which reference
|
||
200 | * either of the format lists involved in the merge are also affected.
|
||
201 | *
|
||
202 | * For example, consider the filter chain:
|
||
203 | * filter (a) --> (b) filter (b) --> (c) filter
|
||
204 | *
|
||
205 | * where the letters in parenthesis indicate a list of formats supported on
|
||
206 | * the input or output of the link. Suppose the lists are as follows:
|
||
207 | * (a) = {A, B}
|
||
208 | * (b) = {A, B, C}
|
||
209 | * (c) = {B, C}
|
||
210 | *
|
||
211 | * First, the first link's lists are merged, yielding:
|
||
212 | * filter (a) --> (a) filter (a) --> (c) filter
|
||
213 | *
|
||
214 | * Notice that format list (b) now refers to the same list as filter list (a).
|
||
215 | * Next, the lists for the second link are merged, yielding:
|
||
216 | * filter (a) --> (a) filter (a) --> (a) filter
|
||
217 | *
|
||
218 | * where (a) = {B}.
|
||
219 | *
|
||
220 | * Unfortunately, when the format lists at the two ends of a link are merged,
|
||
221 | * we must ensure that all links which reference either pre-merge format list
|
||
222 | * get updated as well. Therefore, we have the format list structure store a
|
||
223 | * pointer to each of the pointers to itself.
|
||
224 | */
|
||
225 | f607cc18 | Stefano Sabatini | typedef struct AVFilterFormats { |
226 | 35f3fdf4 | Vitor Sessak | unsigned format_count; ///< number of formats |
227 | bdab614b | S.N. Hemanth Meenakshisundaram | int *formats; ///< list of media formats |
228 | 35f3fdf4 | Vitor Sessak | |
229 | unsigned refcount; ///< number of references to this list |
||
230 | f607cc18 | Stefano Sabatini | struct AVFilterFormats ***refs; ///< references to this list |
231 | daed21a1 | Mans Rullgard | } AVFilterFormats; |
232 | 35f3fdf4 | Vitor Sessak | |
233 | /**
|
||
234 | 49bd8e4b | Måns Rullgård | * Create a list of supported formats. This is intended for use in
|
235 | f6a1fa85 | Stefano Sabatini | * AVFilter->query_formats().
|
236 | 3fa3e4f4 | Stefano Sabatini | *
|
237 | bdab614b | S.N. Hemanth Meenakshisundaram | * @param fmts list of media formats, terminated by -1
|
238 | f6a1fa85 | Stefano Sabatini | * @return the format list, with no existing references
|
239 | */
|
||
240 | bdab614b | S.N. Hemanth Meenakshisundaram | AVFilterFormats *avfilter_make_format_list(const int *fmts); |
241 | f6a1fa85 | Stefano Sabatini | |
242 | /**
|
||
243 | bdab614b | S.N. Hemanth Meenakshisundaram | * Add fmt to the list of media formats contained in *avff.
|
244 | c1d662fd | Stefano Sabatini | * If *avff is NULL the function allocates the filter formats struct
|
245 | * and puts its pointer in *avff.
|
||
246 | 4fd1f187 | Stefano Sabatini | *
|
247 | * @return a non negative value in case of success, or a negative
|
||
248 | * value corresponding to an AVERROR code in case of error
|
||
249 | */
|
||
250 | bdab614b | S.N. Hemanth Meenakshisundaram | int avfilter_add_format(AVFilterFormats **avff, int fmt); |
251 | 4fd1f187 | Stefano Sabatini | |
252 | /**
|
||
253 | 2912e87a | Mans Rullgard | * Return a list of all formats supported by Libav for the given media type.
|
254 | 35f3fdf4 | Vitor Sessak | */
|
255 | bdab614b | S.N. Hemanth Meenakshisundaram | AVFilterFormats *avfilter_all_formats(enum AVMediaType type);
|
256 | 35f3fdf4 | Vitor Sessak | |
257 | /**
|
||
258 | 49bd8e4b | Måns Rullgård | * Return a format list which contains the intersection of the formats of
|
259 | 39981f53 | Stefano Sabatini | * a and b. Also, all the references of a, all the references of b, and
|
260 | * a and b themselves will be deallocated.
|
||
261 | 35f3fdf4 | Vitor Sessak | *
|
262 | * If a and b do not share any common formats, neither is modified, and NULL
|
||
263 | * is returned.
|
||
264 | */
|
||
265 | AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b); |
||
266 | |||
267 | 09b63a42 | Michael Niedermayer | /**
|
268 | 49bd8e4b | Måns Rullgård | * Add *ref as a new reference to formats.
|
269 | 09b63a42 | Michael Niedermayer | * That is the pointers will point like in the ascii art below:
|
270 | * ________
|
||
271 | a27c8d5f | Michael Niedermayer | * |formats |<--------.
|
272 | * | ____ | ____|___________________
|
||
273 | * | |refs| | | __|_
|
||
274 | * | |* * | | | | | | AVFilterLink
|
||
275 | 09b63a42 | Michael Niedermayer | * | |* *--------->|*ref|
|
276 | a27c8d5f | Michael Niedermayer | * | |____| | | |____|
|
277 | * |________| |________________________
|
||
278 | 09b63a42 | Michael Niedermayer | */
|
279 | a27c8d5f | Michael Niedermayer | void avfilter_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref);
|
280 | 35f3fdf4 | Vitor Sessak | |
281 | /**
|
||
282 | 49bd8e4b | Måns Rullgård | * If *ref is non-NULL, remove *ref as a reference to the format list
|
283 | 063e7692 | Stefano Sabatini | * it currently points to, deallocates that list if this was the last
|
284 | * reference, and sets *ref to NULL.
|
||
285 | a27c8d5f | Michael Niedermayer | *
|
286 | * Before After
|
||
287 | * ________ ________ NULL
|
||
288 | * |formats |<--------. |formats | ^
|
||
289 | * | ____ | ____|________________ | ____ | ____|________________
|
||
290 | * | |refs| | | __|_ | |refs| | | __|_
|
||
291 | * | |* * | | | | | | AVFilterLink | |* * | | | | | | AVFilterLink
|
||
292 | * | |* *--------->|*ref| | |* | | | |*ref|
|
||
293 | * | |____| | | |____| | |____| | | |____|
|
||
294 | * |________| |_____________________ |________| |_____________________
|
||
295 | 35f3fdf4 | Vitor Sessak | */
|
296 | void avfilter_formats_unref(AVFilterFormats **ref);
|
||
297 | |||
298 | b9c2fb34 | Michael Niedermayer | /**
|
299 | *
|
||
300 | * Before After
|
||
301 | * ________ ________
|
||
302 | a27c8d5f | Michael Niedermayer | * |formats |<---------. |formats |<---------.
|
303 | b9c2fb34 | Michael Niedermayer | * | ____ | ___|___ | ____ | ___|___
|
304 | * | |refs| | | | | | |refs| | | | | NULL
|
||
305 | * | |* *--------->|*oldref| | |* *--------->|*newref| ^
|
||
306 | * | |* * | | |_______| | |* * | | |_______| ___|___
|
||
307 | * | |____| | | |____| | | | |
|
||
308 | * |________| |________| |*oldref|
|
||
309 | * |_______|
|
||
310 | */
|
||
311 | eb30e86c | Michael Niedermayer | void avfilter_formats_changeref(AVFilterFormats **oldref,
|
312 | AVFilterFormats **newref); |
||
313 | |||
314 | 35f3fdf4 | Vitor Sessak | /**
|
315 | 664f6595 | Vitor Sessak | * A filter pad used for either input or output.
|
316 | 13ff8fd0 | Vitor Sessak | */
|
317 | f607cc18 | Stefano Sabatini | struct AVFilterPad {
|
318 | a5cbb2f4 | Vitor Sessak | /**
|
319 | 38efe768 | Stefano Sabatini | * Pad name. The name is unique among inputs and among outputs, but an
|
320 | * input may have the same name as an output. This may be NULL if this
|
||
321 | 13ff8fd0 | Vitor Sessak | * pad has no need to ever be referenced by name.
|
322 | a5cbb2f4 | Vitor Sessak | */
|
323 | 2844dd39 | Vitor Sessak | const char *name; |
324 | a5cbb2f4 | Vitor Sessak | |
325 | /**
|
||
326 | 38efe768 | Stefano Sabatini | * AVFilterPad type. Only video supported now, hopefully someone will
|
327 | a5cbb2f4 | Vitor Sessak | * add audio in the future.
|
328 | */
|
||
329 | 72415b2a | Stefano Sabatini | enum AVMediaType type;
|
330 | a5cbb2f4 | Vitor Sessak | |
331 | /**
|
||
332 | 38efe768 | Stefano Sabatini | * Minimum required permissions on incoming buffers. Any buffer with
|
333 | 60bf6ce3 | Vitor Sessak | * insufficient permissions will be automatically copied by the filter
|
334 | * system to a new buffer which provides the needed access permissions.
|
||
335 | *
|
||
336 | * Input pads only.
|
||
337 | */
|
||
338 | int min_perms;
|
||
339 | |||
340 | /**
|
||
341 | 38efe768 | Stefano Sabatini | * Permissions which are not accepted on incoming buffers. Any buffer
|
342 | 9ce95f27 | Stefano Sabatini | * which has any of these permissions set will be automatically copied
|
343 | * by the filter system to a new buffer which does not have those
|
||
344 | 38efe768 | Stefano Sabatini | * permissions. This can be used to easily disallow buffers with
|
345 | 9ce95f27 | Stefano Sabatini | * AV_PERM_REUSE.
|
346 | 60bf6ce3 | Vitor Sessak | *
|
347 | * Input pads only.
|
||
348 | */
|
||
349 | int rej_perms;
|
||
350 | |||
351 | /**
|
||
352 | 38efe768 | Stefano Sabatini | * Callback called before passing the first slice of a new frame. If
|
353 | a5cbb2f4 | Vitor Sessak | * NULL, the filter layer will default to storing a reference to the
|
354 | * picture inside the link structure.
|
||
355 | 13ff8fd0 | Vitor Sessak | *
|
356 | * Input video pads only.
|
||
357 | a5cbb2f4 | Vitor Sessak | */
|
358 | ecc8dada | S.N. Hemanth Meenakshisundaram | void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref);
|
359 | a5cbb2f4 | Vitor Sessak | |
360 | /**
|
||
361 | ad2c9501 | S.N. Hemanth Meenakshisundaram | * Callback function to get a video buffer. If NULL, the filter system will
|
362 | da23d424 | Stefano Sabatini | * use avfilter_default_get_video_buffer().
|
363 | 13ff8fd0 | Vitor Sessak | *
|
364 | * Input video pads only.
|
||
365 | a5cbb2f4 | Vitor Sessak | */
|
366 | ecc8dada | S.N. Hemanth Meenakshisundaram | AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h); |
367 | a5cbb2f4 | Vitor Sessak | |
368 | /**
|
||
369 | ad2c9501 | S.N. Hemanth Meenakshisundaram | * Callback function to get an audio buffer. If NULL, the filter system will
|
370 | * use avfilter_default_get_audio_buffer().
|
||
371 | *
|
||
372 | * Input audio pads only.
|
||
373 | */
|
||
374 | AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms,
|
||
375 | 5d6e4c16 | Stefano Sabatini | enum AVSampleFormat sample_fmt, int size, |
376 | ad2c9501 | S.N. Hemanth Meenakshisundaram | int64_t channel_layout, int planar);
|
377 | |||
378 | /**
|
||
379 | 38efe768 | Stefano Sabatini | * Callback called after the slices of a frame are completely sent. If
|
380 | a5cbb2f4 | Vitor Sessak | * NULL, the filter layer will default to releasing the reference stored
|
381 | * in the link structure during start_frame().
|
||
382 | 13ff8fd0 | Vitor Sessak | *
|
383 | * Input video pads only.
|
||
384 | a5cbb2f4 | Vitor Sessak | */
|
385 | void (*end_frame)(AVFilterLink *link);
|
||
386 | |||
387 | /**
|
||
388 | 38efe768 | Stefano Sabatini | * Slice drawing callback. This is where a filter receives video data
|
389 | 13ff8fd0 | Vitor Sessak | * and should do its processing.
|
390 | *
|
||
391 | * Input video pads only.
|
||
392 | a5cbb2f4 | Vitor Sessak | */
|
393 | a13a5437 | Stefano Sabatini | void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir); |
394 | a5cbb2f4 | Vitor Sessak | |
395 | /**
|
||
396 | ad2c9501 | S.N. Hemanth Meenakshisundaram | * Samples filtering callback. This is where a filter receives audio data
|
397 | * and should do its processing.
|
||
398 | *
|
||
399 | * Input audio pads only.
|
||
400 | */
|
||
401 | void (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref);
|
||
402 | |||
403 | /**
|
||
404 | 38efe768 | Stefano Sabatini | * Frame poll callback. This returns the number of immediately available
|
405 | 177477f5 | Michael Niedermayer | * samples. It should return a positive value if the next request_frame()
|
406 | d224d73a | Vitor Sessak | * is guaranteed to return one frame (with no delay).
|
407 | *
|
||
408 | * Defaults to just calling the source poll_frame() method.
|
||
409 | *
|
||
410 | * Output video pads only.
|
||
411 | */
|
||
412 | int (*poll_frame)(AVFilterLink *link);
|
||
413 | |||
414 | /**
|
||
415 | 38efe768 | Stefano Sabatini | * Frame request callback. A call to this should result in at least one
|
416 | * frame being output over the given link. This should return zero on
|
||
417 | 13ff8fd0 | Vitor Sessak | * success, and another value on error.
|
418 | *
|
||
419 | * Output video pads only.
|
||
420 | a5cbb2f4 | Vitor Sessak | */
|
421 | 63f64e6f | Vitor Sessak | int (*request_frame)(AVFilterLink *link);
|
422 | a5cbb2f4 | Vitor Sessak | |
423 | /**
|
||
424 | 13ff8fd0 | Vitor Sessak | * Link configuration callback.
|
425 | *
|
||
426 | * For output pads, this should set the link properties such as
|
||
427 | 38efe768 | Stefano Sabatini | * width/height. This should NOT set the format property - that is
|
428 | 13ff8fd0 | Vitor Sessak | * negotiated between filters by the filter system using the
|
429 | * query_formats() callback before this function is called.
|
||
430 | d3e57c15 | Vitor Sessak | *
|
431 | * For input pads, this should check the properties of the link, and update
|
||
432 | * the filter's internal state as necessary.
|
||
433 | 13ff8fd0 | Vitor Sessak | *
|
434 | * For both input and output filters, this should return zero on success,
|
||
435 | * and another value on error.
|
||
436 | a5cbb2f4 | Vitor Sessak | */
|
437 | d3e57c15 | Vitor Sessak | int (*config_props)(AVFilterLink *link);
|
438 | a5cbb2f4 | Vitor Sessak | }; |
439 | |||
440 | 2b187df9 | Stefano Sabatini | /** default handler for start_frame() for video inputs */
|
441 | ecc8dada | S.N. Hemanth Meenakshisundaram | void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
|
442 | a4fb0ada | Stefano Sabatini | |
443 | b9609848 | Stefano Sabatini | /** default handler for draw_slice() for video inputs */
|
444 | a13a5437 | Stefano Sabatini | void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); |
445 | a4fb0ada | Stefano Sabatini | |
446 | 2b187df9 | Stefano Sabatini | /** default handler for end_frame() for video inputs */
|
447 | a5cbb2f4 | Vitor Sessak | void avfilter_default_end_frame(AVFilterLink *link);
|
448 | a4fb0ada | Stefano Sabatini | |
449 | ad2c9501 | S.N. Hemanth Meenakshisundaram | /** default handler for filter_samples() for audio inputs */
|
450 | void avfilter_default_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
|
||
451 | |||
452 | /** default handler for config_props() for audio/video outputs */
|
||
453 | 901e6b39 | Vitor Sessak | int avfilter_default_config_output_link(AVFilterLink *link);
|
454 | a4fb0ada | Stefano Sabatini | |
455 | ad2c9501 | S.N. Hemanth Meenakshisundaram | /** default handler for config_props() for audio/video inputs */
|
456 | 85322466 | Vitor Sessak | int avfilter_default_config_input_link (AVFilterLink *link);
|
457 | a4fb0ada | Stefano Sabatini | |
458 | 2b187df9 | Stefano Sabatini | /** default handler for get_video_buffer() for video inputs */
|
459 | ecc8dada | S.N. Hemanth Meenakshisundaram | AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, |
460 | a4fb0ada | Stefano Sabatini | int perms, int w, int h); |
461 | ad2c9501 | S.N. Hemanth Meenakshisundaram | |
462 | /** default handler for get_audio_buffer() for audio inputs */
|
||
463 | AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int perms,
|
||
464 | 5d6e4c16 | Stefano Sabatini | enum AVSampleFormat sample_fmt, int size, |
465 | ad2c9501 | S.N. Hemanth Meenakshisundaram | int64_t channel_layout, int planar);
|
466 | |||
467 | 35f3fdf4 | Vitor Sessak | /**
|
468 | * A helper for query_formats() which sets all links to the same list of
|
||
469 | * formats. If there are no links hooked to this filter, the list of formats is
|
||
470 | * freed.
|
||
471 | */
|
||
472 | void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats);
|
||
473 | a4fb0ada | Stefano Sabatini | |
474 | 35f3fdf4 | Vitor Sessak | /** Default handler for query_formats() */
|
475 | int avfilter_default_query_formats(AVFilterContext *ctx);
|
||
476 | a5cbb2f4 | Vitor Sessak | |
477 | 91d1c741 | Bobby Bingham | /** start_frame() handler for filters which simply pass video along */
|
478 | ecc8dada | S.N. Hemanth Meenakshisundaram | void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
|
479 | 91d1c741 | Bobby Bingham | |
480 | /** draw_slice() handler for filters which simply pass video along */
|
||
481 | void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); |
||
482 | |||
483 | /** end_frame() handler for filters which simply pass video along */
|
||
484 | void avfilter_null_end_frame(AVFilterLink *link);
|
||
485 | |||
486 | ad2c9501 | S.N. Hemanth Meenakshisundaram | /** filter_samples() handler for filters which simply pass audio along */
|
487 | void avfilter_null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
|
||
488 | |||
489 | 91d1c741 | Bobby Bingham | /** get_video_buffer() handler for filters which simply pass video along */
|
490 | ecc8dada | S.N. Hemanth Meenakshisundaram | AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, |
491 | 91d1c741 | Bobby Bingham | int perms, int w, int h); |
492 | |||
493 | ad2c9501 | S.N. Hemanth Meenakshisundaram | /** get_audio_buffer() handler for filters which simply pass audio along */
|
494 | AVFilterBufferRef *avfilter_null_get_audio_buffer(AVFilterLink *link, int perms,
|
||
495 | 5d6e4c16 | Stefano Sabatini | enum AVSampleFormat sample_fmt, int size, |
496 | ad2c9501 | S.N. Hemanth Meenakshisundaram | int64_t channel_layout, int planar);
|
497 | |||
498 | 13ff8fd0 | Vitor Sessak | /**
|
499 | 38efe768 | Stefano Sabatini | * Filter definition. This defines the pads a filter contains, and all the
|
500 | 13ff8fd0 | Vitor Sessak | * callback functions used to interact with the filter.
|
501 | */
|
||
502 | f607cc18 | Stefano Sabatini | typedef struct AVFilter { |
503 | 2844dd39 | Vitor Sessak | const char *name; ///< filter name |
504 | a5cbb2f4 | Vitor Sessak | |
505 | 13ff8fd0 | Vitor Sessak | int priv_size; ///< size of private data to allocate for the filter |
506 | a5cbb2f4 | Vitor Sessak | |
507 | 4d96a914 | Vitor Sessak | /**
|
508 | 38efe768 | Stefano Sabatini | * Filter initialization function. Args contains the user-supplied
|
509 | * parameters. FIXME: maybe an AVOption-based system would be better?
|
||
510 | 6e365c57 | Vitor Sessak | * opaque is data provided by the code requesting creation of the filter,
|
511 | * and is used to pass data to the filter.
|
||
512 | 4d96a914 | Vitor Sessak | */
|
513 | 95bcf498 | Vitor Sessak | int (*init)(AVFilterContext *ctx, const char *args, void *opaque); |
514 | 13ff8fd0 | Vitor Sessak | |
515 | /**
|
||
516 | 38efe768 | Stefano Sabatini | * Filter uninitialization function. Should deallocate any memory held
|
517 | 7fce481a | S.N. Hemanth Meenakshisundaram | * by the filter, release any buffer references, etc. This does not need
|
518 | 13ff8fd0 | Vitor Sessak | * to deallocate the AVFilterContext->priv memory itself.
|
519 | */
|
||
520 | a5cbb2f4 | Vitor Sessak | void (*uninit)(AVFilterContext *ctx);
|
521 | |||
522 | 35f3fdf4 | Vitor Sessak | /**
|
523 | c4d2e41c | Stefano Sabatini | * Queries formats supported by the filter and its pads, and sets the
|
524 | 35f3fdf4 | Vitor Sessak | * in_formats for links connected to its output pads, and out_formats
|
525 | * for links connected to its input pads.
|
||
526 | *
|
||
527 | fe592585 | Stefano Sabatini | * @return zero on success, a negative value corresponding to an
|
528 | * AVERROR code otherwise
|
||
529 | 35f3fdf4 | Vitor Sessak | */
|
530 | int (*query_formats)(AVFilterContext *);
|
||
531 | |||
532 | 13ff8fd0 | Vitor Sessak | const AVFilterPad *inputs; ///< NULL terminated list of inputs. NULL if none |
533 | const AVFilterPad *outputs; ///< NULL terminated list of outputs. NULL if none |
||
534 | cccd292a | Stefano Sabatini | |
535 | /**
|
||
536 | * A description for the filter. You should use the
|
||
537 | * NULL_IF_CONFIG_SMALL() macro to define it.
|
||
538 | */
|
||
539 | const char *description; |
||
540 | a5cbb2f4 | Vitor Sessak | } AVFilter; |
541 | |||
542 | 13ff8fd0 | Vitor Sessak | /** An instance of a filter */
|
543 | f607cc18 | Stefano Sabatini | struct AVFilterContext {
|
544 | d42a814e | Panagiotis Issaris | const AVClass *av_class; ///< needed for av_log() |
545 | a5cbb2f4 | Vitor Sessak | |
546 | 664f6595 | Vitor Sessak | AVFilter *filter; ///< the AVFilter of which this is an instance
|
547 | a5cbb2f4 | Vitor Sessak | |
548 | 13ff8fd0 | Vitor Sessak | char *name; ///< name of this filter instance |
549 | dcea2482 | Vitor Sessak | |
550 | 13ff8fd0 | Vitor Sessak | unsigned input_count; ///< number of input pads |
551 | AVFilterPad *input_pads; ///< array of input pads
|
||
552 | AVFilterLink **inputs; ///< array of pointers to input links
|
||
553 | 25f8e601 | Vitor Sessak | |
554 | 13ff8fd0 | Vitor Sessak | unsigned output_count; ///< number of output pads |
555 | AVFilterPad *output_pads; ///< array of output pads
|
||
556 | AVFilterLink **outputs; ///< array of pointers to output links
|
||
557 | a5cbb2f4 | Vitor Sessak | |
558 | 13ff8fd0 | Vitor Sessak | void *priv; ///< private data for use by the filter |
559 | a5cbb2f4 | Vitor Sessak | }; |
560 | |||
561 | 13ff8fd0 | Vitor Sessak | /**
|
562 | 38efe768 | Stefano Sabatini | * A link between two filters. This contains pointers to the source and
|
563 | f4433de9 | Diego Biurrun | * destination filters between which this link exists, and the indexes of
|
564 | 38efe768 | Stefano Sabatini | * the pads involved. In addition, this link also contains the parameters
|
565 | 13ff8fd0 | Vitor Sessak | * which have been negotiated and agreed upon between the filter, such as
|
566 | 2b187df9 | Stefano Sabatini | * image dimensions, format, etc.
|
567 | 13ff8fd0 | Vitor Sessak | */
|
568 | f607cc18 | Stefano Sabatini | struct AVFilterLink {
|
569 | 13ff8fd0 | Vitor Sessak | AVFilterContext *src; ///< source filter
|
570 | acc0490f | Stefano Sabatini | AVFilterPad *srcpad; ///< output pad on the source filter
|
571 | a5cbb2f4 | Vitor Sessak | |
572 | 13ff8fd0 | Vitor Sessak | AVFilterContext *dst; ///< dest filter
|
573 | acc0490f | Stefano Sabatini | AVFilterPad *dstpad; ///< input pad on the dest filter
|
574 | a5cbb2f4 | Vitor Sessak | |
575 | 24c4eff6 | Vitor Sessak | /** stage of the initialization of the link properties (dimensions, etc) */
|
576 | enum {
|
||
577 | AVLINK_UNINIT = 0, ///< not started |
||
578 | AVLINK_STARTINIT, ///< started, but incomplete
|
||
579 | AVLINK_INIT ///< complete
|
||
580 | } init_state; |
||
581 | |||
582 | bdab614b | S.N. Hemanth Meenakshisundaram | enum AVMediaType type; ///< filter media type |
583 | |||
584 | 910b5b82 | Michael Niedermayer | /* These parameters apply only to video */
|
585 | 13ff8fd0 | Vitor Sessak | int w; ///< agreed upon image width |
586 | int h; ///< agreed upon image height |
||
587 | 910b5b82 | Michael Niedermayer | AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio
|
588 | ad2c9501 | S.N. Hemanth Meenakshisundaram | /* These two parameters apply only to audio */
|
589 | 737eb597 | Reinhard Tartler | int64_t channel_layout; ///< channel layout of current buffer (see libavutil/audioconvert.h)
|
590 | ad2c9501 | S.N. Hemanth Meenakshisundaram | int64_t sample_rate; ///< samples per second
|
591 | |||
592 | bdab614b | S.N. Hemanth Meenakshisundaram | int format; ///< agreed upon media format |
593 | a5cbb2f4 | Vitor Sessak | |
594 | 60bf6ce3 | Vitor Sessak | /**
|
595 | 35f3fdf4 | Vitor Sessak | * Lists of formats supported by the input and output filters respectively.
|
596 | * These lists are used for negotiating the format to actually be used,
|
||
597 | * which will be loaded into the format member, above, when chosen.
|
||
598 | */
|
||
599 | AVFilterFormats *in_formats; |
||
600 | AVFilterFormats *out_formats; |
||
601 | |||
602 | /**
|
||
603 | 7fce481a | S.N. Hemanth Meenakshisundaram | * The buffer reference currently being sent across the link by the source
|
604 | 38efe768 | Stefano Sabatini | * filter. This is used internally by the filter system to allow
|
605 | 7fce481a | S.N. Hemanth Meenakshisundaram | * automatic copying of buffers which do not have sufficient permissions
|
606 | 38efe768 | Stefano Sabatini | * for the destination. This should not be accessed directly by the
|
607 | 60bf6ce3 | Vitor Sessak | * filters.
|
608 | */
|
||
609 | 5d4890d7 | S.N. Hemanth Meenakshisundaram | AVFilterBufferRef *src_buf; |
610 | 60bf6ce3 | Vitor Sessak | |
611 | 5d4890d7 | S.N. Hemanth Meenakshisundaram | AVFilterBufferRef *cur_buf; |
612 | AVFilterBufferRef *out_buf; |
||
613 | 867ae7aa | Stefano Sabatini | |
614 | /**
|
||
615 | * Define the time base used by the PTS of the frames/samples
|
||
616 | * which will pass through this link.
|
||
617 | * During the configuration stage, each filter is supposed to
|
||
618 | * change only the output timebase, while the timebase of the
|
||
619 | * input link is assumed to be an unchangeable property.
|
||
620 | */
|
||
621 | AVRational time_base; |
||
622 | a5cbb2f4 | Vitor Sessak | }; |
623 | |||
624 | 13ff8fd0 | Vitor Sessak | /**
|
625 | 49bd8e4b | Måns Rullgård | * Link two filters together.
|
626 | 3fa3e4f4 | Stefano Sabatini | *
|
627 | 664f6595 | Vitor Sessak | * @param src the source filter
|
628 | * @param srcpad index of the output pad on the source filter
|
||
629 | * @param dst the destination filter
|
||
630 | * @param dstpad index of the input pad on the destination filter
|
||
631 | * @return zero on success
|
||
632 | 13ff8fd0 | Vitor Sessak | */
|
633 | a5cbb2f4 | Vitor Sessak | int avfilter_link(AVFilterContext *src, unsigned srcpad, |
634 | AVFilterContext *dst, unsigned dstpad);
|
||
635 | |||
636 | 13ff8fd0 | Vitor Sessak | /**
|
637 | bdab614b | S.N. Hemanth Meenakshisundaram | * Negotiate the media format, dimensions, etc of all inputs to a filter.
|
638 | 3fa3e4f4 | Stefano Sabatini | *
|
639 | 664f6595 | Vitor Sessak | * @param filter the filter to negotiate the properties for its inputs
|
640 | * @return zero on successful negotiation
|
||
641 | 13ff8fd0 | Vitor Sessak | */
|
642 | 24c4eff6 | Vitor Sessak | int avfilter_config_links(AVFilterContext *filter);
|
643 | 85322466 | Vitor Sessak | |
644 | 13ff8fd0 | Vitor Sessak | /**
|
645 | 49bd8e4b | Måns Rullgård | * Request a picture buffer with a specific set of permissions.
|
646 | 3fa3e4f4 | Stefano Sabatini | *
|
647 | 7fce481a | S.N. Hemanth Meenakshisundaram | * @param link the output link to the filter from which the buffer will
|
648 | 13ff8fd0 | Vitor Sessak | * be requested
|
649 | 664f6595 | Vitor Sessak | * @param perms the required access permissions
|
650 | 0eb4ff9e | Stefano Sabatini | * @param w the minimum width of the buffer to allocate
|
651 | * @param h the minimum height of the buffer to allocate
|
||
652 | 7fce481a | S.N. Hemanth Meenakshisundaram | * @return A reference to the buffer. This must be unreferenced with
|
653 | * avfilter_unref_buffer when you are finished with it.
|
||
654 | 13ff8fd0 | Vitor Sessak | */
|
655 | ecc8dada | S.N. Hemanth Meenakshisundaram | AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms,
|
656 | 0eb4ff9e | Stefano Sabatini | int w, int h); |
657 | 13ff8fd0 | Vitor Sessak | |
658 | /**
|
||
659 | d38c340f | Stefano Sabatini | * Create a buffer reference wrapped around an already allocated image
|
660 | * buffer.
|
||
661 | *
|
||
662 | * @param data pointers to the planes of the image to reference
|
||
663 | * @param linesize linesizes for the planes of the image to reference
|
||
664 | * @param perms the required access permissions
|
||
665 | * @param w the width of the image specified by the data and linesize arrays
|
||
666 | * @param h the height of the image specified by the data and linesize arrays
|
||
667 | * @param format the pixel format of the image specified by the data and linesize arrays
|
||
668 | */
|
||
669 | AVFilterBufferRef * |
||
670 | avfilter_get_video_buffer_ref_from_arrays(uint8_t *data[4], int linesize[4], int perms, |
||
671 | int w, int h, enum PixelFormat format); |
||
672 | |||
673 | /**
|
||
674 | ad2c9501 | S.N. Hemanth Meenakshisundaram | * Request an audio samples buffer with a specific set of permissions.
|
675 | *
|
||
676 | * @param link the output link to the filter from which the buffer will
|
||
677 | * be requested
|
||
678 | * @param perms the required access permissions
|
||
679 | * @param sample_fmt the format of each sample in the buffer to allocate
|
||
680 | * @param size the buffer size in bytes
|
||
681 | * @param channel_layout the number and type of channels per sample in the buffer to allocate
|
||
682 | * @param planar audio data layout - planar or packed
|
||
683 | * @return A reference to the samples. This must be unreferenced with
|
||
684 | 33377121 | Stefano Sabatini | * avfilter_unref_buffer when you are finished with it.
|
685 | ad2c9501 | S.N. Hemanth Meenakshisundaram | */
|
686 | AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
|
||
687 | 5d6e4c16 | Stefano Sabatini | enum AVSampleFormat sample_fmt, int size, |
688 | ad2c9501 | S.N. Hemanth Meenakshisundaram | int64_t channel_layout, int planar);
|
689 | |||
690 | /**
|
||
691 | 49bd8e4b | Måns Rullgård | * Request an input frame from the filter at the other end of the link.
|
692 | 3fa3e4f4 | Stefano Sabatini | *
|
693 | 664f6595 | Vitor Sessak | * @param link the input link
|
694 | * @return zero on success
|
||
695 | 13ff8fd0 | Vitor Sessak | */
|
696 | 0155b1a1 | Vitor Sessak | int avfilter_request_frame(AVFilterLink *link);
|
697 | 13ff8fd0 | Vitor Sessak | |
698 | /**
|
||
699 | 49bd8e4b | Måns Rullgård | * Poll a frame from the filter chain.
|
700 | 3fa3e4f4 | Stefano Sabatini | *
|
701 | b04c740a | Vitor Sessak | * @param link the input link
|
702 | 055068d0 | Stefano Sabatini | * @return the number of immediately available frames, a negative
|
703 | * number in case of error
|
||
704 | b04c740a | Vitor Sessak | */
|
705 | int avfilter_poll_frame(AVFilterLink *link);
|
||
706 | |||
707 | /**
|
||
708 | 49bd8e4b | Måns Rullgård | * Notifie the next filter of the start of a frame.
|
709 | 3fa3e4f4 | Stefano Sabatini | *
|
710 | 664f6595 | Vitor Sessak | * @param link the output link the frame will be sent over
|
711 | 38efe768 | Stefano Sabatini | * @param picref A reference to the frame about to be sent. The data for this
|
712 | 13ff8fd0 | Vitor Sessak | * frame need only be valid once draw_slice() is called for that
|
713 | 38efe768 | Stefano Sabatini | * portion. The receiving filter will free this reference when
|
714 | 13ff8fd0 | Vitor Sessak | * it no longer needs it.
|
715 | */
|
||
716 | ecc8dada | S.N. Hemanth Meenakshisundaram | void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
|
717 | 13ff8fd0 | Vitor Sessak | |
718 | /**
|
||
719 | 49bd8e4b | Måns Rullgård | * Notifie the next filter that the current frame has finished.
|
720 | 3fa3e4f4 | Stefano Sabatini | *
|
721 | 664f6595 | Vitor Sessak | * @param link the output link the frame was sent over
|
722 | 13ff8fd0 | Vitor Sessak | */
|
723 | a5cbb2f4 | Vitor Sessak | void avfilter_end_frame(AVFilterLink *link);
|
724 | 13ff8fd0 | Vitor Sessak | |
725 | /**
|
||
726 | 49bd8e4b | Måns Rullgård | * Send a slice to the next filter.
|
727 | bd283738 | Stefano Sabatini | *
|
728 | * Slices have to be provided in sequential order, either in
|
||
729 | * top-bottom or bottom-top order. If slices are provided in
|
||
730 | * non-sequential order the behavior of the function is undefined.
|
||
731 | *
|
||
732 | 664f6595 | Vitor Sessak | * @param link the output link over which the frame is being sent
|
733 | * @param y offset in pixels from the top of the image for this slice
|
||
734 | * @param h height of this slice in pixels
|
||
735 | a13a5437 | Stefano Sabatini | * @param slice_dir the assumed direction for sending slices,
|
736 | * from the top slice to the bottom slice if the value is 1,
|
||
737 | * from the bottom slice to the top slice if the value is -1,
|
||
738 | * for other values the behavior of the function is undefined.
|
||
739 | 13ff8fd0 | Vitor Sessak | */
|
740 | a13a5437 | Stefano Sabatini | void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); |
741 | a5cbb2f4 | Vitor Sessak | |
742 | ad2c9501 | S.N. Hemanth Meenakshisundaram | /**
|
743 | * Send a buffer of audio samples to the next filter.
|
||
744 | *
|
||
745 | * @param link the output link over which the audio samples are being sent
|
||
746 | * @param samplesref a reference to the buffer of audio samples being sent. The
|
||
747 | * receiving filter will free this reference when it no longer
|
||
748 | * needs it or pass it on to the next filter.
|
||
749 | */
|
||
750 | void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
|
||
751 | |||
752 | 49bd8e4b | Måns Rullgård | /** Initialize the filter system. Register all builtin filters. */
|
753 | 11de6cac | Vitor Sessak | void avfilter_register_all(void); |
754 | e4152452 | Vitor Sessak | |
755 | 49bd8e4b | Måns Rullgård | /** Uninitialize the filter system. Unregister all filters. */
|
756 | a5cbb2f4 | Vitor Sessak | void avfilter_uninit(void); |
757 | 13ff8fd0 | Vitor Sessak | |
758 | /**
|
||
759 | 49bd8e4b | Måns Rullgård | * Register a filter. This is only needed if you plan to use
|
760 | fc815c56 | Vitor Sessak | * avfilter_get_by_name later to lookup the AVFilter structure by name. A
|
761 | * filter can still by instantiated with avfilter_open even if it is not
|
||
762 | * registered.
|
||
763 | 3fa3e4f4 | Stefano Sabatini | *
|
764 | 664f6595 | Vitor Sessak | * @param filter the filter to register
|
765 | 86a60fa1 | Stefano Sabatini | * @return 0 if the registration was succesfull, a negative value
|
766 | * otherwise
|
||
767 | 13ff8fd0 | Vitor Sessak | */
|
768 | 86a60fa1 | Stefano Sabatini | int avfilter_register(AVFilter *filter);
|
769 | 13ff8fd0 | Vitor Sessak | |
770 | /**
|
||
771 | 49bd8e4b | Måns Rullgård | * Get a filter definition matching the given name.
|
772 | 3fa3e4f4 | Stefano Sabatini | *
|
773 | 664f6595 | Vitor Sessak | * @param name the filter name to find
|
774 | * @return the filter definition, if any matching one is registered.
|
||
775 | 13ff8fd0 | Vitor Sessak | * NULL if none found.
|
776 | */
|
||
777 | 2844dd39 | Vitor Sessak | AVFilter *avfilter_get_by_name(const char *name); |
778 | a5cbb2f4 | Vitor Sessak | |
779 | 13ff8fd0 | Vitor Sessak | /**
|
780 | 1433c4ab | Stefano Sabatini | * If filter is NULL, returns a pointer to the first registered filter pointer,
|
781 | * if filter is non-NULL, returns the next pointer after filter.
|
||
782 | * If the returned pointer points to NULL, the last registered filter
|
||
783 | * was already reached.
|
||
784 | */
|
||
785 | AVFilter **av_filter_next(AVFilter **filter); |
||
786 | |||
787 | /**
|
||
788 | 49bd8e4b | Måns Rullgård | * Create a filter instance.
|
789 | 84c03869 | Stefano Sabatini | *
|
790 | * @param filter_ctx put here a pointer to the created filter context
|
||
791 | * on success, NULL on failure
|
||
792 | 664f6595 | Vitor Sessak | * @param filter the filter to create an instance of
|
793 | 38efe768 | Stefano Sabatini | * @param inst_name Name to give to the new instance. Can be NULL for none.
|
794 | 84c03869 | Stefano Sabatini | * @return >= 0 in case of success, a negative error code otherwise
|
795 | 13ff8fd0 | Vitor Sessak | */
|
796 | 84c03869 | Stefano Sabatini | int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name); |
797 | 13ff8fd0 | Vitor Sessak | |
798 | /**
|
||
799 | 49bd8e4b | Måns Rullgård | * Initialize a filter.
|
800 | 3fa3e4f4 | Stefano Sabatini | *
|
801 | 664f6595 | Vitor Sessak | * @param filter the filter to initialize
|
802 | 13ff8fd0 | Vitor Sessak | * @param args A string of parameters to use when initializing the filter.
|
803 | * The format and meaning of this string varies by filter.
|
||
804 | 38efe768 | Stefano Sabatini | * @param opaque Any extra non-string data needed by the filter. The meaning
|
805 | 13ff8fd0 | Vitor Sessak | * of this parameter varies by filter.
|
806 | 664f6595 | Vitor Sessak | * @return zero on success
|
807 | 13ff8fd0 | Vitor Sessak | */
|
808 | 6e365c57 | Vitor Sessak | int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque); |
809 | 13ff8fd0 | Vitor Sessak | |
810 | /**
|
||
811 | 24de0edb | Stefano Sabatini | * Free a filter context.
|
812 | 3fa3e4f4 | Stefano Sabatini | *
|
813 | 24de0edb | Stefano Sabatini | * @param filter the filter to free
|
814 | 13ff8fd0 | Vitor Sessak | */
|
815 | 24de0edb | Stefano Sabatini | void avfilter_free(AVFilterContext *filter);
|
816 | a5cbb2f4 | Vitor Sessak | |
817 | 13ff8fd0 | Vitor Sessak | /**
|
818 | 49bd8e4b | Måns Rullgård | * Insert a filter in the middle of an existing link.
|
819 | 3fa3e4f4 | Stefano Sabatini | *
|
820 | 664f6595 | Vitor Sessak | * @param link the link into which the filter should be inserted
|
821 | * @param filt the filter to be inserted
|
||
822 | 486adc55 | Stefano Sabatini | * @param filt_srcpad_idx the input pad on the filter to connect
|
823 | * @param filt_dstpad_idx the output pad on the filter to connect
|
||
824 | 664f6595 | Vitor Sessak | * @return zero on success
|
825 | 13ff8fd0 | Vitor Sessak | */
|
826 | 35f3fdf4 | Vitor Sessak | int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
|
827 | 486adc55 | Stefano Sabatini | unsigned filt_srcpad_idx, unsigned filt_dstpad_idx); |
828 | d3e57c15 | Vitor Sessak | |
829 | a9c81431 | Vitor Sessak | /**
|
830 | 49bd8e4b | Måns Rullgård | * Insert a new pad.
|
831 | 3fa3e4f4 | Stefano Sabatini | *
|
832 | 38efe768 | Stefano Sabatini | * @param idx Insertion point. Pad is inserted at the end if this point
|
833 | a9c81431 | Vitor Sessak | * is beyond the end of the list of pads.
|
834 | * @param count Pointer to the number of pads in the list
|
||
835 | * @param padidx_off Offset within an AVFilterLink structure to the element
|
||
836 | * to increment when inserting a new pad causes link
|
||
837 | * numbering to change
|
||
838 | * @param pads Pointer to the pointer to the beginning of the list of pads
|
||
839 | * @param links Pointer to the pointer to the beginning of the list of links
|
||
840 | * @param newpad The new pad to add. A copy is made when adding.
|
||
841 | */
|
||
842 | void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off, |
||
843 | AVFilterPad **pads, AVFilterLink ***links, |
||
844 | AVFilterPad *newpad); |
||
845 | |||
846 | 49bd8e4b | Måns Rullgård | /** Insert a new input pad for the filter. */
|
847 | a9c81431 | Vitor Sessak | static inline void avfilter_insert_inpad(AVFilterContext *f, unsigned index, |
848 | AVFilterPad *p) |
||
849 | { |
||
850 | avfilter_insert_pad(index, &f->input_count, offsetof(AVFilterLink, dstpad), |
||
851 | &f->input_pads, &f->inputs, p); |
||
852 | } |
||
853 | |||
854 | 49bd8e4b | Måns Rullgård | /** Insert a new output pad for the filter. */
|
855 | a9c81431 | Vitor Sessak | static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index, |
856 | AVFilterPad *p) |
||
857 | { |
||
858 | avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad), |
||
859 | &f->output_pads, &f->outputs, p); |
||
860 | } |
||
861 | |||
862 | 98790382 | Stefano Sabatini | #endif /* AVFILTER_AVFILTER_H */ |