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