| OLD | NEW |
| 1 /* | 1 /* |
| 2 * filter layer | 2 * filter layer |
| 3 * copyright (c) 2007 Bobby Bingham | 3 * copyright (c) 2007 Bobby Bingham |
| 4 * | 4 * |
| 5 * This file is part of FFmpeg. | 5 * This file is part of FFmpeg. |
| 6 * | 6 * |
| 7 * FFmpeg is free software; you can redistribute it and/or | 7 * FFmpeg is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Lesser General Public | 8 * modify it under the terms of the GNU Lesser General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2.1 of the License, or (at your option) any later version. | 10 * version 2.1 of the License, or (at your option) any later version. |
| 11 * | 11 * |
| 12 * FFmpeg is distributed in the hope that it will be useful, | 12 * FFmpeg is distributed in the hope that it will be useful, |
| 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 15 * Lesser General Public License for more details. | 15 * Lesser General Public License for more details. |
| 16 * | 16 * |
| 17 * You should have received a copy of the GNU Lesser General Public | 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 | 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 | 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| 20 */ | 20 */ |
| 21 | 21 |
| 22 #ifndef AVFILTER_AVFILTER_H | 22 #ifndef AVFILTER_AVFILTER_H |
| 23 #define AVFILTER_AVFILTER_H | 23 #define AVFILTER_AVFILTER_H |
| 24 | 24 |
| 25 #include "libavutil/avutil.h" | 25 #include "libavutil/avutil.h" |
| 26 | 26 |
| 27 #define LIBAVFILTER_VERSION_MAJOR 1 | 27 #define LIBAVFILTER_VERSION_MAJOR 1 |
| 28 #define LIBAVFILTER_VERSION_MINOR 31 | 28 #define LIBAVFILTER_VERSION_MINOR 38 |
| 29 #define LIBAVFILTER_VERSION_MICRO 0 | 29 #define LIBAVFILTER_VERSION_MICRO 3 |
| 30 | 30 |
| 31 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | 31 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ |
| 32 LIBAVFILTER_VERSION_MINOR, \ | 32 LIBAVFILTER_VERSION_MINOR, \ |
| 33 LIBAVFILTER_VERSION_MICRO) | 33 LIBAVFILTER_VERSION_MICRO) |
| 34 #define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ | 34 #define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ |
| 35 LIBAVFILTER_VERSION_MINOR, \ | 35 LIBAVFILTER_VERSION_MINOR, \ |
| 36 LIBAVFILTER_VERSION_MICRO) | 36 LIBAVFILTER_VERSION_MICRO) |
| 37 #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT | 37 #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT |
| 38 | 38 |
| 39 #include <stddef.h> | 39 #include <stddef.h> |
| (...skipping 17 matching lines...) Expand all Loading... |
| 57 | 57 |
| 58 typedef struct AVFilterContext AVFilterContext; | 58 typedef struct AVFilterContext AVFilterContext; |
| 59 typedef struct AVFilterLink AVFilterLink; | 59 typedef struct AVFilterLink AVFilterLink; |
| 60 typedef struct AVFilterPad AVFilterPad; | 60 typedef struct AVFilterPad AVFilterPad; |
| 61 | 61 |
| 62 /** | 62 /** |
| 63 * A reference-counted buffer data type used by the filter system. Filters | 63 * A reference-counted buffer data type used by the filter system. Filters |
| 64 * should not store pointers to this structure directly, but instead use the | 64 * should not store pointers to this structure directly, but instead use the |
| 65 * AVFilterBufferRef structure below. | 65 * AVFilterBufferRef structure below. |
| 66 */ | 66 */ |
| 67 typedef struct AVFilterBuffer | 67 typedef struct AVFilterBuffer { |
| 68 { | |
| 69 uint8_t *data[8]; ///< buffer data for each plane/channel | 68 uint8_t *data[8]; ///< buffer data for each plane/channel |
| 70 int linesize[8]; ///< number of bytes per line | 69 int linesize[8]; ///< number of bytes per line |
| 71 | 70 |
| 72 unsigned refcount; ///< number of references to this buffer | 71 unsigned refcount; ///< number of references to this buffer |
| 73 | 72 |
| 74 /** private data to be used by a custom free function */ | 73 /** private data to be used by a custom free function */ |
| 75 void *priv; | 74 void *priv; |
| 76 /** | 75 /** |
| 77 * A pointer to the function to deallocate this buffer if the default | 76 * A pointer to the function to deallocate this buffer if the default |
| 78 * function is not sufficient. This could, for example, add the memory | 77 * function is not sufficient. This could, for example, add the memory |
| 79 * back into a memory pool to be reused later without the overhead of | 78 * back into a memory pool to be reused later without the overhead of |
| 80 * reallocating it from scratch. | 79 * reallocating it from scratch. |
| 81 */ | 80 */ |
| 82 void (*free)(struct AVFilterBuffer *buf); | 81 void (*free)(struct AVFilterBuffer *buf); |
| 83 } AVFilterBuffer; | 82 } AVFilterBuffer; |
| 84 | 83 |
| 85 #define AV_PERM_READ 0x01 ///< can read from the buffer | 84 #define AV_PERM_READ 0x01 ///< can read from the buffer |
| 86 #define AV_PERM_WRITE 0x02 ///< can write to the buffer | 85 #define AV_PERM_WRITE 0x02 ///< can write to the buffer |
| 87 #define AV_PERM_PRESERVE 0x04 ///< nobody else can overwrite the buffer | 86 #define AV_PERM_PRESERVE 0x04 ///< nobody else can overwrite the buffer |
| 88 #define AV_PERM_REUSE 0x08 ///< can output the buffer multiple times, with
the same contents each time | 87 #define AV_PERM_REUSE 0x08 ///< can output the buffer multiple times, with
the same contents each time |
| 89 #define AV_PERM_REUSE2 0x10 ///< can output the buffer multiple times, modif
ied each time | 88 #define AV_PERM_REUSE2 0x10 ///< can output the buffer multiple times, modif
ied each time |
| 90 | 89 |
| 91 /** | 90 /** |
| 91 * 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 * 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 typedef struct AVFilterBufferRefVideoProps { |
| 109 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 /** |
| 92 * A reference to an AVFilterBuffer. Since filters can manipulate the origin of | 117 * A reference to an AVFilterBuffer. Since filters can manipulate the origin of |
| 93 * a buffer to, for example, crop image without any memcpy, the buffer origin | 118 * a buffer to, for example, crop image without any memcpy, the buffer origin |
| 94 * and dimensions are per-reference properties. Linesize is also useful for | 119 * and dimensions are per-reference properties. Linesize is also useful for |
| 95 * image flipping, frame to field filters, etc, and so is also per-reference. | 120 * image flipping, frame to field filters, etc, and so is also per-reference. |
| 96 * | 121 * |
| 97 * TODO: add anything necessary for frame reordering | 122 * TODO: add anything necessary for frame reordering |
| 98 */ | 123 */ |
| 99 typedef struct AVFilterBufferRef | 124 typedef struct AVFilterBufferRef { |
| 100 { | |
| 101 AVFilterBuffer *buf; ///< the buffer that this is a reference to | 125 AVFilterBuffer *buf; ///< the buffer that this is a reference to |
| 102 uint8_t *data[4]; ///< picture data for each plane | 126 uint8_t *data[8]; ///< picture/audio data for each plane |
| 103 int linesize[4]; ///< number of bytes per line | 127 int linesize[8]; ///< number of bytes per line |
| 104 int w; ///< image width | |
| 105 int h; ///< image height | |
| 106 int format; ///< media format | 128 int format; ///< media format |
| 107 | 129 |
| 108 int64_t pts; ///< presentation timestamp in units of 1/AV_TIM
E_BASE | 130 int64_t pts; ///< presentation timestamp in units of 1/AV_TIM
E_BASE |
| 109 int64_t pos; ///< byte position in stream, -1 if unknown | 131 int64_t pos; ///< byte position in stream, -1 if unknown |
| 110 | 132 |
| 111 AVRational pixel_aspect; ///< pixel aspect ratio | |
| 112 | |
| 113 int perms; ///< permissions, see the AV_PERM_* flags | 133 int perms; ///< permissions, see the AV_PERM_* flags |
| 114 | 134 |
| 115 int interlaced; ///< is frame interlaced | 135 enum AVMediaType type; ///< media type of buffer data |
| 116 int top_field_first; | 136 AVFilterBufferRefVideoProps *video; ///< video buffer specific properties |
| 137 AVFilterBufferRefAudioProps *audio; ///< audio buffer specific properties |
| 117 } AVFilterBufferRef; | 138 } AVFilterBufferRef; |
| 118 | 139 |
| 119 /** | 140 /** |
| 120 * Copy properties of src to dst, without copying the actual video | 141 * Copy properties of src to dst, without copying the actual data |
| 121 * data. | |
| 122 */ | 142 */ |
| 123 static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilt
erBufferRef *src) | 143 static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilt
erBufferRef *src) |
| 124 { | 144 { |
| 145 // copy common properties |
| 125 dst->pts = src->pts; | 146 dst->pts = src->pts; |
| 126 dst->pos = src->pos; | 147 dst->pos = src->pos; |
| 127 dst->pixel_aspect = src->pixel_aspect; | 148 |
| 128 dst->interlaced = src->interlaced; | 149 switch (src->type) { |
| 129 dst->top_field_first = src->top_field_first; | 150 case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break; |
| 130 dst->w = src->w; | 151 case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break; |
| 131 dst->h = src->h; | 152 } |
| 132 } | 153 } |
| 133 | 154 |
| 134 /** | 155 /** |
| 135 * Add a new reference to a buffer. | 156 * Add a new reference to a buffer. |
| 157 * |
| 136 * @param ref an existing reference to the buffer | 158 * @param ref an existing reference to the buffer |
| 137 * @param pmask a bitmask containing the allowable permissions in the new | 159 * @param pmask a bitmask containing the allowable permissions in the new |
| 138 * reference | 160 * reference |
| 139 * @return a new reference to the buffer with the same properties as the | 161 * @return a new reference to the buffer with the same properties as the |
| 140 * old, excluding any permissions denied by pmask | 162 * old, excluding any permissions denied by pmask |
| 141 */ | 163 */ |
| 142 AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask); | 164 AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask); |
| 143 | 165 |
| 144 /** | 166 /** |
| 145 * Remove a reference to a buffer. If this is the last reference to the | 167 * Remove a reference to a buffer. If this is the last reference to the |
| 146 * buffer, the buffer itself is also automatically freed. | 168 * buffer, the buffer itself is also automatically freed. |
| 169 * |
| 147 * @param ref reference to the buffer | 170 * @param ref reference to the buffer |
| 148 */ | 171 */ |
| 149 void avfilter_unref_buffer(AVFilterBufferRef *ref); | 172 void avfilter_unref_buffer(AVFilterBufferRef *ref); |
| 150 | 173 |
| 151 /** | 174 /** |
| 152 * A list of supported formats for one end of a filter link. This is used | 175 * A list of supported formats for one end of a filter link. This is used |
| 153 * during the format negotiation process to try to pick the best format to | 176 * during the format negotiation process to try to pick the best format to |
| 154 * use to minimize the number of necessary conversions. Each filter gives a | 177 * use to minimize the number of necessary conversions. Each filter gives a |
| 155 * list of the formats supported by each input and output pad. The list | 178 * list of the formats supported by each input and output pad. The list |
| 156 * given for each pad need not be distinct - they may be references to the | 179 * given for each pad need not be distinct - they may be references to the |
| (...skipping 24 matching lines...) Expand all Loading... |
| 181 * Next, the lists for the second link are merged, yielding: | 204 * Next, the lists for the second link are merged, yielding: |
| 182 * filter (a) --> (a) filter (a) --> (a) filter | 205 * filter (a) --> (a) filter (a) --> (a) filter |
| 183 * | 206 * |
| 184 * where (a) = {B}. | 207 * where (a) = {B}. |
| 185 * | 208 * |
| 186 * Unfortunately, when the format lists at the two ends of a link are merged, | 209 * Unfortunately, when the format lists at the two ends of a link are merged, |
| 187 * we must ensure that all links which reference either pre-merge format list | 210 * we must ensure that all links which reference either pre-merge format list |
| 188 * get updated as well. Therefore, we have the format list structure store a | 211 * get updated as well. Therefore, we have the format list structure store a |
| 189 * pointer to each of the pointers to itself. | 212 * pointer to each of the pointers to itself. |
| 190 */ | 213 */ |
| 191 typedef struct AVFilterFormats AVFilterFormats; | 214 typedef struct AVFilterFormats { |
| 192 struct AVFilterFormats | |
| 193 { | |
| 194 unsigned format_count; ///< number of formats | 215 unsigned format_count; ///< number of formats |
| 195 int *formats; ///< list of media formats | 216 int *formats; ///< list of media formats |
| 196 | 217 |
| 197 unsigned refcount; ///< number of references to this list | 218 unsigned refcount; ///< number of references to this list |
| 198 AVFilterFormats ***refs; ///< references to this list | 219 struct AVFilterFormats ***refs; ///< references to this list |
| 199 }; | 220 } AVFilterFormats;; |
| 200 | 221 |
| 201 /** | 222 /** |
| 202 * Create a list of supported formats. This is intended for use in | 223 * Create a list of supported formats. This is intended for use in |
| 203 * AVFilter->query_formats(). | 224 * AVFilter->query_formats(). |
| 225 * |
| 204 * @param fmts list of media formats, terminated by -1 | 226 * @param fmts list of media formats, terminated by -1 |
| 205 * @return the format list, with no existing references | 227 * @return the format list, with no existing references |
| 206 */ | 228 */ |
| 207 AVFilterFormats *avfilter_make_format_list(const int *fmts); | 229 AVFilterFormats *avfilter_make_format_list(const int *fmts); |
| 208 | 230 |
| 209 /** | 231 /** |
| 210 * Add fmt to the list of media formats contained in *avff. | 232 * Add fmt to the list of media formats contained in *avff. |
| 211 * If *avff is NULL the function allocates the filter formats struct | 233 * If *avff is NULL the function allocates the filter formats struct |
| 212 * and puts its pointer in *avff. | 234 * and puts its pointer in *avff. |
| 213 * | 235 * |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 * | |____| | | |____| | | | | | 296 * | |____| | | |____| | | | | |
| 275 * |________| |________| |*oldref| | 297 * |________| |________| |*oldref| |
| 276 * |_______| | 298 * |_______| |
| 277 */ | 299 */ |
| 278 void avfilter_formats_changeref(AVFilterFormats **oldref, | 300 void avfilter_formats_changeref(AVFilterFormats **oldref, |
| 279 AVFilterFormats **newref); | 301 AVFilterFormats **newref); |
| 280 | 302 |
| 281 /** | 303 /** |
| 282 * A filter pad used for either input or output. | 304 * A filter pad used for either input or output. |
| 283 */ | 305 */ |
| 284 struct AVFilterPad | 306 struct AVFilterPad { |
| 285 { | |
| 286 /** | 307 /** |
| 287 * Pad name. The name is unique among inputs and among outputs, but an | 308 * Pad name. The name is unique among inputs and among outputs, but an |
| 288 * input may have the same name as an output. This may be NULL if this | 309 * input may have the same name as an output. This may be NULL if this |
| 289 * pad has no need to ever be referenced by name. | 310 * pad has no need to ever be referenced by name. |
| 290 */ | 311 */ |
| 291 const char *name; | 312 const char *name; |
| 292 | 313 |
| 293 /** | 314 /** |
| 294 * AVFilterPad type. Only video supported now, hopefully someone will | 315 * AVFilterPad type. Only video supported now, hopefully someone will |
| 295 * add audio in the future. | 316 * add audio in the future. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 319 /** | 340 /** |
| 320 * Callback called before passing the first slice of a new frame. If | 341 * Callback called before passing the first slice of a new frame. If |
| 321 * NULL, the filter layer will default to storing a reference to the | 342 * NULL, the filter layer will default to storing a reference to the |
| 322 * picture inside the link structure. | 343 * picture inside the link structure. |
| 323 * | 344 * |
| 324 * Input video pads only. | 345 * Input video pads only. |
| 325 */ | 346 */ |
| 326 void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref); | 347 void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref); |
| 327 | 348 |
| 328 /** | 349 /** |
| 329 * Callback function to get a buffer. If NULL, the filter system will | 350 * Callback function to get a video buffer. If NULL, the filter system will |
| 330 * use avfilter_default_get_video_buffer(). | 351 * use avfilter_default_get_video_buffer(). |
| 331 * | 352 * |
| 332 * Input video pads only. | 353 * Input video pads only. |
| 333 */ | 354 */ |
| 334 AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w,
int h); | 355 AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w,
int h); |
| 335 | 356 |
| 336 /** | 357 /** |
| 358 * Callback function to get an audio buffer. If NULL, the filter system will |
| 359 * use avfilter_default_get_audio_buffer(). |
| 360 * |
| 361 * Input audio pads only. |
| 362 */ |
| 363 AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms, |
| 364 enum SampleFormat sample_fmt, int siz
e, |
| 365 int64_t channel_layout, int planar); |
| 366 |
| 367 /** |
| 337 * Callback called after the slices of a frame are completely sent. If | 368 * Callback called after the slices of a frame are completely sent. If |
| 338 * NULL, the filter layer will default to releasing the reference stored | 369 * NULL, the filter layer will default to releasing the reference stored |
| 339 * in the link structure during start_frame(). | 370 * in the link structure during start_frame(). |
| 340 * | 371 * |
| 341 * Input video pads only. | 372 * Input video pads only. |
| 342 */ | 373 */ |
| 343 void (*end_frame)(AVFilterLink *link); | 374 void (*end_frame)(AVFilterLink *link); |
| 344 | 375 |
| 345 /** | 376 /** |
| 346 * Slice drawing callback. This is where a filter receives video data | 377 * Slice drawing callback. This is where a filter receives video data |
| 347 * and should do its processing. | 378 * and should do its processing. |
| 348 * | 379 * |
| 349 * Input video pads only. | 380 * Input video pads only. |
| 350 */ | 381 */ |
| 351 void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir); | 382 void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir); |
| 352 | 383 |
| 353 /** | 384 /** |
| 385 * Samples filtering callback. This is where a filter receives audio data |
| 386 * and should do its processing. |
| 387 * |
| 388 * Input audio pads only. |
| 389 */ |
| 390 void (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref); |
| 391 |
| 392 /** |
| 354 * Frame poll callback. This returns the number of immediately available | 393 * Frame poll callback. This returns the number of immediately available |
| 355 * frames. It should return a positive value if the next request_frame() | 394 * frames. It should return a positive value if the next request_frame() |
| 356 * is guaranteed to return one frame (with no delay). | 395 * is guaranteed to return one frame (with no delay). |
| 357 * | 396 * |
| 358 * Defaults to just calling the source poll_frame() method. | 397 * Defaults to just calling the source poll_frame() method. |
| 359 * | 398 * |
| 360 * Output video pads only. | 399 * Output video pads only. |
| 361 */ | 400 */ |
| 362 int (*poll_frame)(AVFilterLink *link); | 401 int (*poll_frame)(AVFilterLink *link); |
| 363 | 402 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 382 * the filter's internal state as necessary. | 421 * the filter's internal state as necessary. |
| 383 * | 422 * |
| 384 * For both input and output filters, this should return zero on success, | 423 * For both input and output filters, this should return zero on success, |
| 385 * and another value on error. | 424 * and another value on error. |
| 386 */ | 425 */ |
| 387 int (*config_props)(AVFilterLink *link); | 426 int (*config_props)(AVFilterLink *link); |
| 388 }; | 427 }; |
| 389 | 428 |
| 390 /** default handler for start_frame() for video inputs */ | 429 /** default handler for start_frame() for video inputs */ |
| 391 void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
; | 430 void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
; |
| 431 |
| 392 /** default handler for draw_slice() for video inputs */ | 432 /** default handler for draw_slice() for video inputs */ |
| 393 void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir
); | 433 void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir
); |
| 434 |
| 394 /** default handler for end_frame() for video inputs */ | 435 /** default handler for end_frame() for video inputs */ |
| 395 void avfilter_default_end_frame(AVFilterLink *link); | 436 void avfilter_default_end_frame(AVFilterLink *link); |
| 396 /** default handler for config_props() for video outputs */ | 437 |
| 438 /** default handler for filter_samples() for audio inputs */ |
| 439 void avfilter_default_filter_samples(AVFilterLink *link, AVFilterBufferRef *samp
lesref); |
| 440 |
| 441 /** default handler for config_props() for audio/video outputs */ |
| 397 int avfilter_default_config_output_link(AVFilterLink *link); | 442 int avfilter_default_config_output_link(AVFilterLink *link); |
| 398 /** default handler for config_props() for video inputs */ | 443 |
| 444 /** default handler for config_props() for audio/video inputs */ |
| 399 int avfilter_default_config_input_link (AVFilterLink *link); | 445 int avfilter_default_config_input_link (AVFilterLink *link); |
| 446 |
| 400 /** default handler for get_video_buffer() for video inputs */ | 447 /** default handler for get_video_buffer() for video inputs */ |
| 401 AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, | 448 AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, |
| 402 int perms, int w, int h); | 449 int perms, int w, int h); |
| 450 |
| 451 /** default handler for get_audio_buffer() for audio inputs */ |
| 452 AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per
ms, |
| 453 enum SampleFormat sample_fm
t, int size, |
| 454 int64_t channel_layout, int
planar); |
| 455 |
| 403 /** | 456 /** |
| 404 * A helper for query_formats() which sets all links to the same list of | 457 * A helper for query_formats() which sets all links to the same list of |
| 405 * formats. If there are no links hooked to this filter, the list of formats is | 458 * formats. If there are no links hooked to this filter, the list of formats is |
| 406 * freed. | 459 * freed. |
| 407 */ | 460 */ |
| 408 void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats)
; | 461 void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats)
; |
| 462 |
| 409 /** Default handler for query_formats() */ | 463 /** Default handler for query_formats() */ |
| 410 int avfilter_default_query_formats(AVFilterContext *ctx); | 464 int avfilter_default_query_formats(AVFilterContext *ctx); |
| 411 | 465 |
| 412 /** start_frame() handler for filters which simply pass video along */ | 466 /** start_frame() handler for filters which simply pass video along */ |
| 413 void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); | 467 void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); |
| 414 | 468 |
| 415 /** draw_slice() handler for filters which simply pass video along */ | 469 /** draw_slice() handler for filters which simply pass video along */ |
| 416 void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); | 470 void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); |
| 417 | 471 |
| 418 /** end_frame() handler for filters which simply pass video along */ | 472 /** end_frame() handler for filters which simply pass video along */ |
| 419 void avfilter_null_end_frame(AVFilterLink *link); | 473 void avfilter_null_end_frame(AVFilterLink *link); |
| 420 | 474 |
| 475 /** filter_samples() handler for filters which simply pass audio along */ |
| 476 void avfilter_null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samples
ref); |
| 477 |
| 421 /** get_video_buffer() handler for filters which simply pass video along */ | 478 /** get_video_buffer() handler for filters which simply pass video along */ |
| 422 AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, | 479 AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, |
| 423 int perms, int w, int h); | 480 int perms, int w, int h); |
| 424 | 481 |
| 482 /** get_audio_buffer() handler for filters which simply pass audio along */ |
| 483 AVFilterBufferRef *avfilter_null_get_audio_buffer(AVFilterLink *link, int perms, |
| 484 enum SampleFormat sample_fmt,
int size, |
| 485 int64_t channel_layout, int pl
anar); |
| 486 |
| 425 /** | 487 /** |
| 426 * Filter definition. This defines the pads a filter contains, and all the | 488 * Filter definition. This defines the pads a filter contains, and all the |
| 427 * callback functions used to interact with the filter. | 489 * callback functions used to interact with the filter. |
| 428 */ | 490 */ |
| 429 typedef struct AVFilter | 491 typedef struct AVFilter { |
| 430 { | |
| 431 const char *name; ///< filter name | 492 const char *name; ///< filter name |
| 432 | 493 |
| 433 int priv_size; ///< size of private data to allocate for the filter | 494 int priv_size; ///< size of private data to allocate for the filter |
| 434 | 495 |
| 435 /** | 496 /** |
| 436 * Filter initialization function. Args contains the user-supplied | 497 * Filter initialization function. Args contains the user-supplied |
| 437 * parameters. FIXME: maybe an AVOption-based system would be better? | 498 * parameters. FIXME: maybe an AVOption-based system would be better? |
| 438 * opaque is data provided by the code requesting creation of the filter, | 499 * opaque is data provided by the code requesting creation of the filter, |
| 439 * and is used to pass data to the filter. | 500 * and is used to pass data to the filter. |
| 440 */ | 501 */ |
| (...skipping 20 matching lines...) Expand all Loading... |
| 461 const AVFilterPad *outputs; ///< NULL terminated list of outputs. NULL if no
ne | 522 const AVFilterPad *outputs; ///< NULL terminated list of outputs. NULL if no
ne |
| 462 | 523 |
| 463 /** | 524 /** |
| 464 * A description for the filter. You should use the | 525 * A description for the filter. You should use the |
| 465 * NULL_IF_CONFIG_SMALL() macro to define it. | 526 * NULL_IF_CONFIG_SMALL() macro to define it. |
| 466 */ | 527 */ |
| 467 const char *description; | 528 const char *description; |
| 468 } AVFilter; | 529 } AVFilter; |
| 469 | 530 |
| 470 /** An instance of a filter */ | 531 /** An instance of a filter */ |
| 471 struct AVFilterContext | 532 struct AVFilterContext { |
| 472 { | |
| 473 const AVClass *av_class; ///< needed for av_log() | 533 const AVClass *av_class; ///< needed for av_log() |
| 474 | 534 |
| 475 AVFilter *filter; ///< the AVFilter of which this is an instan
ce | 535 AVFilter *filter; ///< the AVFilter of which this is an instan
ce |
| 476 | 536 |
| 477 char *name; ///< name of this filter instance | 537 char *name; ///< name of this filter instance |
| 478 | 538 |
| 479 unsigned input_count; ///< number of input pads | 539 unsigned input_count; ///< number of input pads |
| 480 AVFilterPad *input_pads; ///< array of input pads | 540 AVFilterPad *input_pads; ///< array of input pads |
| 481 AVFilterLink **inputs; ///< array of pointers to input links | 541 AVFilterLink **inputs; ///< array of pointers to input links |
| 482 | 542 |
| 483 unsigned output_count; ///< number of output pads | 543 unsigned output_count; ///< number of output pads |
| 484 AVFilterPad *output_pads; ///< array of output pads | 544 AVFilterPad *output_pads; ///< array of output pads |
| 485 AVFilterLink **outputs; ///< array of pointers to output links | 545 AVFilterLink **outputs; ///< array of pointers to output links |
| 486 | 546 |
| 487 void *priv; ///< private data for use by the filter | 547 void *priv; ///< private data for use by the filter |
| 488 }; | 548 }; |
| 489 | 549 |
| 490 /** | 550 /** |
| 491 * A link between two filters. This contains pointers to the source and | 551 * A link between two filters. This contains pointers to the source and |
| 492 * destination filters between which this link exists, and the indexes of | 552 * destination filters between which this link exists, and the indexes of |
| 493 * the pads involved. In addition, this link also contains the parameters | 553 * the pads involved. In addition, this link also contains the parameters |
| 494 * which have been negotiated and agreed upon between the filter, such as | 554 * which have been negotiated and agreed upon between the filter, such as |
| 495 * image dimensions, format, etc. | 555 * image dimensions, format, etc. |
| 496 */ | 556 */ |
| 497 struct AVFilterLink | 557 struct AVFilterLink { |
| 498 { | |
| 499 AVFilterContext *src; ///< source filter | 558 AVFilterContext *src; ///< source filter |
| 500 unsigned int srcpad; ///< index of the output pad on the source filte
r | 559 unsigned int srcpad; ///< index of the output pad on the source filte
r |
| 501 | 560 |
| 502 AVFilterContext *dst; ///< dest filter | 561 AVFilterContext *dst; ///< dest filter |
| 503 unsigned int dstpad; ///< index of the input pad on the dest filter | 562 unsigned int dstpad; ///< index of the input pad on the dest filter |
| 504 | 563 |
| 505 /** stage of the initialization of the link properties (dimensions, etc) */ | 564 /** stage of the initialization of the link properties (dimensions, etc) */ |
| 506 enum { | 565 enum { |
| 507 AVLINK_UNINIT = 0, ///< not started | 566 AVLINK_UNINIT = 0, ///< not started |
| 508 AVLINK_STARTINIT, ///< started, but incomplete | 567 AVLINK_STARTINIT, ///< started, but incomplete |
| 509 AVLINK_INIT ///< complete | 568 AVLINK_INIT ///< complete |
| 510 } init_state; | 569 } init_state; |
| 511 | 570 |
| 512 enum AVMediaType type; ///< filter media type | 571 enum AVMediaType type; ///< filter media type |
| 513 | 572 |
| 573 /* These two parameters apply only to video */ |
| 514 int w; ///< agreed upon image width | 574 int w; ///< agreed upon image width |
| 515 int h; ///< agreed upon image height | 575 int h; ///< agreed upon image height |
| 576 /* These two parameters apply only to audio */ |
| 577 int64_t channel_layout; ///< channel layout of current buffer (see avcod
ec.h) |
| 578 int64_t sample_rate; ///< samples per second |
| 579 |
| 516 int format; ///< agreed upon media format | 580 int format; ///< agreed upon media format |
| 517 | 581 |
| 518 /** | 582 /** |
| 519 * Lists of formats supported by the input and output filters respectively. | 583 * Lists of formats supported by the input and output filters respectively. |
| 520 * These lists are used for negotiating the format to actually be used, | 584 * These lists are used for negotiating the format to actually be used, |
| 521 * which will be loaded into the format member, above, when chosen. | 585 * which will be loaded into the format member, above, when chosen. |
| 522 */ | 586 */ |
| 523 AVFilterFormats *in_formats; | 587 AVFilterFormats *in_formats; |
| 524 AVFilterFormats *out_formats; | 588 AVFilterFormats *out_formats; |
| 525 | 589 |
| 526 /** | 590 /** |
| 527 * The buffer reference currently being sent across the link by the source | 591 * The buffer reference currently being sent across the link by the source |
| 528 * filter. This is used internally by the filter system to allow | 592 * filter. This is used internally by the filter system to allow |
| 529 * automatic copying of buffers which do not have sufficient permissions | 593 * automatic copying of buffers which do not have sufficient permissions |
| 530 * for the destination. This should not be accessed directly by the | 594 * for the destination. This should not be accessed directly by the |
| 531 * filters. | 595 * filters. |
| 532 */ | 596 */ |
| 533 AVFilterBufferRef *src_buf; | 597 AVFilterBufferRef *src_buf; |
| 534 | 598 |
| 535 AVFilterBufferRef *cur_buf; | 599 AVFilterBufferRef *cur_buf; |
| 536 AVFilterBufferRef *out_buf; | 600 AVFilterBufferRef *out_buf; |
| 537 }; | 601 }; |
| 538 | 602 |
| 539 /** | 603 /** |
| 540 * Link two filters together. | 604 * Link two filters together. |
| 605 * |
| 541 * @param src the source filter | 606 * @param src the source filter |
| 542 * @param srcpad index of the output pad on the source filter | 607 * @param srcpad index of the output pad on the source filter |
| 543 * @param dst the destination filter | 608 * @param dst the destination filter |
| 544 * @param dstpad index of the input pad on the destination filter | 609 * @param dstpad index of the input pad on the destination filter |
| 545 * @return zero on success | 610 * @return zero on success |
| 546 */ | 611 */ |
| 547 int avfilter_link(AVFilterContext *src, unsigned srcpad, | 612 int avfilter_link(AVFilterContext *src, unsigned srcpad, |
| 548 AVFilterContext *dst, unsigned dstpad); | 613 AVFilterContext *dst, unsigned dstpad); |
| 549 | 614 |
| 550 /** | 615 /** |
| 551 * Negotiate the media format, dimensions, etc of all inputs to a filter. | 616 * Negotiate the media format, dimensions, etc of all inputs to a filter. |
| 617 * |
| 552 * @param filter the filter to negotiate the properties for its inputs | 618 * @param filter the filter to negotiate the properties for its inputs |
| 553 * @return zero on successful negotiation | 619 * @return zero on successful negotiation |
| 554 */ | 620 */ |
| 555 int avfilter_config_links(AVFilterContext *filter); | 621 int avfilter_config_links(AVFilterContext *filter); |
| 556 | 622 |
| 557 /** | 623 /** |
| 558 * Request a picture buffer with a specific set of permissions. | 624 * Request a picture buffer with a specific set of permissions. |
| 625 * |
| 559 * @param link the output link to the filter from which the buffer will | 626 * @param link the output link to the filter from which the buffer will |
| 560 * be requested | 627 * be requested |
| 561 * @param perms the required access permissions | 628 * @param perms the required access permissions |
| 562 * @param w the minimum width of the buffer to allocate | 629 * @param w the minimum width of the buffer to allocate |
| 563 * @param h the minimum height of the buffer to allocate | 630 * @param h the minimum height of the buffer to allocate |
| 564 * @return A reference to the buffer. This must be unreferenced with | 631 * @return A reference to the buffer. This must be unreferenced with |
| 565 * avfilter_unref_buffer when you are finished with it. | 632 * avfilter_unref_buffer when you are finished with it. |
| 566 */ | 633 */ |
| 567 AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, | 634 AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, |
| 568 int w, int h); | 635 int w, int h); |
| 569 | 636 |
| 570 /** | 637 /** |
| 638 * Request an audio samples buffer with a specific set of permissions. |
| 639 * |
| 640 * @param link the output link to the filter from which the buffer wil
l |
| 641 * be requested |
| 642 * @param perms the required access permissions |
| 643 * @param sample_fmt the format of each sample in the buffer to allocate |
| 644 * @param size the buffer size in bytes |
| 645 * @param channel_layout the number and type of channels per sample in the buffe
r to allocate |
| 646 * @param planar audio data layout - planar or packed |
| 647 * @return A reference to the samples. This must be unreferenced w
ith |
| 648 * avfilter_unref_samples when you are finished with it. |
| 649 */ |
| 650 AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms, |
| 651 enum SampleFormat sample_fmt, int s
ize, |
| 652 int64_t channel_layout, int planar)
; |
| 653 |
| 654 /** |
| 571 * Request an input frame from the filter at the other end of the link. | 655 * Request an input frame from the filter at the other end of the link. |
| 656 * |
| 572 * @param link the input link | 657 * @param link the input link |
| 573 * @return zero on success | 658 * @return zero on success |
| 574 */ | 659 */ |
| 575 int avfilter_request_frame(AVFilterLink *link); | 660 int avfilter_request_frame(AVFilterLink *link); |
| 576 | 661 |
| 577 /** | 662 /** |
| 578 * Poll a frame from the filter chain. | 663 * Poll a frame from the filter chain. |
| 664 * |
| 579 * @param link the input link | 665 * @param link the input link |
| 580 * @return the number of immediately available frames, a negative | 666 * @return the number of immediately available frames, a negative |
| 581 * number in case of error | 667 * number in case of error |
| 582 */ | 668 */ |
| 583 int avfilter_poll_frame(AVFilterLink *link); | 669 int avfilter_poll_frame(AVFilterLink *link); |
| 584 | 670 |
| 585 /** | 671 /** |
| 586 * Notifie the next filter of the start of a frame. | 672 * Notifie the next filter of the start of a frame. |
| 673 * |
| 587 * @param link the output link the frame will be sent over | 674 * @param link the output link the frame will be sent over |
| 588 * @param picref A reference to the frame about to be sent. The data for this | 675 * @param picref A reference to the frame about to be sent. The data for this |
| 589 * frame need only be valid once draw_slice() is called for that | 676 * frame need only be valid once draw_slice() is called for that |
| 590 * portion. The receiving filter will free this reference when | 677 * portion. The receiving filter will free this reference when |
| 591 * it no longer needs it. | 678 * it no longer needs it. |
| 592 */ | 679 */ |
| 593 void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); | 680 void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); |
| 594 | 681 |
| 595 /** | 682 /** |
| 596 * Notifie the next filter that the current frame has finished. | 683 * Notifie the next filter that the current frame has finished. |
| 684 * |
| 597 * @param link the output link the frame was sent over | 685 * @param link the output link the frame was sent over |
| 598 */ | 686 */ |
| 599 void avfilter_end_frame(AVFilterLink *link); | 687 void avfilter_end_frame(AVFilterLink *link); |
| 600 | 688 |
| 601 /** | 689 /** |
| 602 * Send a slice to the next filter. | 690 * Send a slice to the next filter. |
| 603 * | 691 * |
| 604 * Slices have to be provided in sequential order, either in | 692 * Slices have to be provided in sequential order, either in |
| 605 * top-bottom or bottom-top order. If slices are provided in | 693 * top-bottom or bottom-top order. If slices are provided in |
| 606 * non-sequential order the behavior of the function is undefined. | 694 * non-sequential order the behavior of the function is undefined. |
| 607 * | 695 * |
| 608 * @param link the output link over which the frame is being sent | 696 * @param link the output link over which the frame is being sent |
| 609 * @param y offset in pixels from the top of the image for this slice | 697 * @param y offset in pixels from the top of the image for this slice |
| 610 * @param h height of this slice in pixels | 698 * @param h height of this slice in pixels |
| 611 * @param slice_dir the assumed direction for sending slices, | 699 * @param slice_dir the assumed direction for sending slices, |
| 612 * from the top slice to the bottom slice if the value is 1, | 700 * from the top slice to the bottom slice if the value is 1, |
| 613 * from the bottom slice to the top slice if the value is -1, | 701 * from the bottom slice to the top slice if the value is -1, |
| 614 * for other values the behavior of the function is undefined. | 702 * for other values the behavior of the function is undefined. |
| 615 */ | 703 */ |
| 616 void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); | 704 void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); |
| 617 | 705 |
| 706 /** |
| 707 * Send a buffer of audio samples to the next filter. |
| 708 * |
| 709 * @param link the output link over which the audio samples are being sent |
| 710 * @param samplesref a reference to the buffer of audio samples being sent. The |
| 711 * receiving filter will free this reference when it no longer |
| 712 * needs it or pass it on to the next filter. |
| 713 */ |
| 714 void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref); |
| 715 |
| 618 /** Initialize the filter system. Register all builtin filters. */ | 716 /** Initialize the filter system. Register all builtin filters. */ |
| 619 void avfilter_register_all(void); | 717 void avfilter_register_all(void); |
| 620 | 718 |
| 621 /** Uninitialize the filter system. Unregister all filters. */ | 719 /** Uninitialize the filter system. Unregister all filters. */ |
| 622 void avfilter_uninit(void); | 720 void avfilter_uninit(void); |
| 623 | 721 |
| 624 /** | 722 /** |
| 625 * Register a filter. This is only needed if you plan to use | 723 * Register a filter. This is only needed if you plan to use |
| 626 * avfilter_get_by_name later to lookup the AVFilter structure by name. A | 724 * avfilter_get_by_name later to lookup the AVFilter structure by name. A |
| 627 * filter can still by instantiated with avfilter_open even if it is not | 725 * filter can still by instantiated with avfilter_open even if it is not |
| 628 * registered. | 726 * registered. |
| 727 * |
| 629 * @param filter the filter to register | 728 * @param filter the filter to register |
| 630 * @return 0 if the registration was succesfull, a negative value | 729 * @return 0 if the registration was succesfull, a negative value |
| 631 * otherwise | 730 * otherwise |
| 632 */ | 731 */ |
| 633 int avfilter_register(AVFilter *filter); | 732 int avfilter_register(AVFilter *filter); |
| 634 | 733 |
| 635 /** | 734 /** |
| 636 * Get a filter definition matching the given name. | 735 * Get a filter definition matching the given name. |
| 736 * |
| 637 * @param name the filter name to find | 737 * @param name the filter name to find |
| 638 * @return the filter definition, if any matching one is registered. | 738 * @return the filter definition, if any matching one is registered. |
| 639 * NULL if none found. | 739 * NULL if none found. |
| 640 */ | 740 */ |
| 641 AVFilter *avfilter_get_by_name(const char *name); | 741 AVFilter *avfilter_get_by_name(const char *name); |
| 642 | 742 |
| 643 /** | 743 /** |
| 644 * If filter is NULL, returns a pointer to the first registered filter pointer, | 744 * If filter is NULL, returns a pointer to the first registered filter pointer, |
| 645 * if filter is non-NULL, returns the next pointer after filter. | 745 * if filter is non-NULL, returns the next pointer after filter. |
| 646 * If the returned pointer points to NULL, the last registered filter | 746 * If the returned pointer points to NULL, the last registered filter |
| 647 * was already reached. | 747 * was already reached. |
| 648 */ | 748 */ |
| 649 AVFilter **av_filter_next(AVFilter **filter); | 749 AVFilter **av_filter_next(AVFilter **filter); |
| 650 | 750 |
| 651 /** | 751 /** |
| 652 * Create a filter instance. | 752 * Create a filter instance. |
| 753 * |
| 754 * @param filter_ctx put here a pointer to the created filter context |
| 755 * on success, NULL on failure |
| 653 * @param filter the filter to create an instance of | 756 * @param filter the filter to create an instance of |
| 654 * @param inst_name Name to give to the new instance. Can be NULL for none. | 757 * @param inst_name Name to give to the new instance. Can be NULL for none. |
| 655 * @return Pointer to the new instance on success. NULL on failure. | 758 * @return >= 0 in case of success, a negative error code otherwise |
| 656 */ | 759 */ |
| 657 AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name); | 760 int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *in
st_name); |
| 658 | 761 |
| 659 /** | 762 /** |
| 660 * Initialize a filter. | 763 * Initialize a filter. |
| 764 * |
| 661 * @param filter the filter to initialize | 765 * @param filter the filter to initialize |
| 662 * @param args A string of parameters to use when initializing the filter. | 766 * @param args A string of parameters to use when initializing the filter. |
| 663 * The format and meaning of this string varies by filter. | 767 * The format and meaning of this string varies by filter. |
| 664 * @param opaque Any extra non-string data needed by the filter. The meaning | 768 * @param opaque Any extra non-string data needed by the filter. The meaning |
| 665 * of this parameter varies by filter. | 769 * of this parameter varies by filter. |
| 666 * @return zero on success | 770 * @return zero on success |
| 667 */ | 771 */ |
| 668 int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
); | 772 int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
); |
| 669 | 773 |
| 670 /** | 774 /** |
| 671 * Destroy a filter. | 775 * Destroy a filter. |
| 776 * |
| 672 * @param filter the filter to destroy | 777 * @param filter the filter to destroy |
| 673 */ | 778 */ |
| 674 void avfilter_destroy(AVFilterContext *filter); | 779 void avfilter_destroy(AVFilterContext *filter); |
| 675 | 780 |
| 676 /** | 781 /** |
| 677 * Insert a filter in the middle of an existing link. | 782 * Insert a filter in the middle of an existing link. |
| 783 * |
| 678 * @param link the link into which the filter should be inserted | 784 * @param link the link into which the filter should be inserted |
| 679 * @param filt the filter to be inserted | 785 * @param filt the filter to be inserted |
| 680 * @param in the input pad on the filter to connect | 786 * @param in the input pad on the filter to connect |
| 681 * @param out the output pad on the filter to connect | 787 * @param out the output pad on the filter to connect |
| 682 * @return zero on success | 788 * @return zero on success |
| 683 */ | 789 */ |
| 684 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, | 790 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, |
| 685 unsigned in, unsigned out); | 791 unsigned in, unsigned out); |
| 686 | 792 |
| 687 /** | 793 /** |
| 688 * Insert a new pad. | 794 * Insert a new pad. |
| 795 * |
| 689 * @param idx Insertion point. Pad is inserted at the end if this point | 796 * @param idx Insertion point. Pad is inserted at the end if this point |
| 690 * is beyond the end of the list of pads. | 797 * is beyond the end of the list of pads. |
| 691 * @param count Pointer to the number of pads in the list | 798 * @param count Pointer to the number of pads in the list |
| 692 * @param padidx_off Offset within an AVFilterLink structure to the element | 799 * @param padidx_off Offset within an AVFilterLink structure to the element |
| 693 * to increment when inserting a new pad causes link | 800 * to increment when inserting a new pad causes link |
| 694 * numbering to change | 801 * numbering to change |
| 695 * @param pads Pointer to the pointer to the beginning of the list of pads | 802 * @param pads Pointer to the pointer to the beginning of the list of pads |
| 696 * @param links Pointer to the pointer to the beginning of the list of links | 803 * @param links Pointer to the pointer to the beginning of the list of links |
| 697 * @param newpad The new pad to add. A copy is made when adding. | 804 * @param newpad The new pad to add. A copy is made when adding. |
| 698 */ | 805 */ |
| (...skipping 11 matching lines...) Expand all Loading... |
| 710 | 817 |
| 711 /** Insert a new output pad for the filter. */ | 818 /** Insert a new output pad for the filter. */ |
| 712 static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index, | 819 static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index, |
| 713 AVFilterPad *p) | 820 AVFilterPad *p) |
| 714 { | 821 { |
| 715 avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad), | 822 avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad), |
| 716 &f->output_pads, &f->outputs, p); | 823 &f->output_pads, &f->outputs, p); |
| 717 } | 824 } |
| 718 | 825 |
| 719 #endif /* AVFILTER_AVFILTER_H */ | 826 #endif /* AVFILTER_AVFILTER_H */ |
| OLD | NEW |