00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef AVFILTER_AVFILTER_H
00023 #define AVFILTER_AVFILTER_H
00024
00036 #include <stddef.h>
00037
00038 #include "libavutil/avutil.h"
00039 #include "libavutil/dict.h"
00040 #include "libavutil/log.h"
00041 #include "libavutil/samplefmt.h"
00042 #include "libavutil/pixfmt.h"
00043 #include "libavutil/rational.h"
00044
00045 #include "libavfilter/version.h"
00046
00050 unsigned avfilter_version(void);
00051
00055 const char *avfilter_configuration(void);
00056
00060 const char *avfilter_license(void);
00061
00065 const AVClass *avfilter_get_class(void);
00066
00067 typedef struct AVFilterContext AVFilterContext;
00068 typedef struct AVFilterLink AVFilterLink;
00069 typedef struct AVFilterPad AVFilterPad;
00070 typedef struct AVFilterFormats AVFilterFormats;
00071
00077 typedef struct AVFilterBuffer {
00078 uint8_t *data[8];
00079
00094 uint8_t **extended_data;
00095 int linesize[8];
00096
00098 void *priv;
00105 void (*free)(struct AVFilterBuffer *buf);
00106
00107 int format;
00108 int w, h;
00109 unsigned refcount;
00110 } AVFilterBuffer;
00111
00112 #define AV_PERM_READ 0x01
00113 #define AV_PERM_WRITE 0x02
00114 #define AV_PERM_PRESERVE 0x04
00115 #define AV_PERM_REUSE 0x08
00116 #define AV_PERM_REUSE2 0x10
00117 #define AV_PERM_NEG_LINESIZES 0x20
00118 #define AV_PERM_ALIGN 0x40
00119
00120 #define AVFILTER_ALIGN 16 //not part of ABI
00121
00127 typedef struct AVFilterBufferRefAudioProps {
00128 uint64_t channel_layout;
00129 int nb_samples;
00130 int sample_rate;
00131 int channels;
00132 } AVFilterBufferRefAudioProps;
00133
00139 typedef struct AVFilterBufferRefVideoProps {
00140 int w;
00141 int h;
00142 AVRational sample_aspect_ratio;
00143 int interlaced;
00144 int top_field_first;
00145 enum AVPictureType pict_type;
00146 int key_frame;
00147 int qp_table_linesize;
00148 int qp_table_size;
00149 int8_t *qp_table;
00150 } AVFilterBufferRefVideoProps;
00151
00160 typedef struct AVFilterBufferRef {
00161 AVFilterBuffer *buf;
00162 uint8_t *data[8];
00163
00177 uint8_t **extended_data;
00178 int linesize[8];
00179
00180 AVFilterBufferRefVideoProps *video;
00181 AVFilterBufferRefAudioProps *audio;
00182
00188 int64_t pts;
00189 int64_t pos;
00190
00191 int format;
00192
00193 int perms;
00194
00195 enum AVMediaType type;
00196
00197 AVDictionary *metadata;
00198 } AVFilterBufferRef;
00199
00203 void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src);
00204
00214 AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask);
00215
00225 void avfilter_unref_buffer(AVFilterBufferRef *ref);
00226
00234 void avfilter_unref_bufferp(AVFilterBufferRef **ref);
00235
00236 #if FF_API_AVFILTERPAD_PUBLIC
00237
00247 struct AVFilterPad {
00253 const char *name;
00254
00258 enum AVMediaType type;
00259
00271 int min_perms;
00272
00285 int rej_perms;
00286
00290 int (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref);
00291
00298 AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h);
00299
00306 AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms,
00307 int nb_samples);
00308
00312 int (*end_frame)(AVFilterLink *link);
00313
00317 int (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir);
00318
00329 int (*filter_frame)(AVFilterLink *link, AVFilterBufferRef *frame);
00330
00340 int (*poll_frame)(AVFilterLink *link);
00341
00351 int (*request_frame)(AVFilterLink *link);
00352
00370 int (*config_props)(AVFilterLink *link);
00371
00378 int needs_fifo;
00379 };
00380 #endif
00381
00391 const char *avfilter_pad_get_name(AVFilterPad *pads, int pad_idx);
00392
00402 enum AVMediaType avfilter_pad_get_type(AVFilterPad *pads, int pad_idx);
00403
00408 typedef struct AVFilter {
00409 const char *name;
00410
00415 const char *description;
00416
00417 const AVFilterPad *inputs;
00418 const AVFilterPad *outputs;
00419
00420
00421
00422
00423
00424
00425
00426
00427
00432 int (*init)(AVFilterContext *ctx, const char *args);
00433
00439 void (*uninit)(AVFilterContext *ctx);
00440
00449 int (*query_formats)(AVFilterContext *);
00450
00451 int priv_size;
00452
00465 int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags);
00466
00472 int (*init_opaque)(AVFilterContext *ctx, const char *args, void *opaque);
00473
00474 const AVClass *priv_class;
00475 } AVFilter;
00476
00478 struct AVFilterContext {
00479 const AVClass *av_class;
00480
00481 AVFilter *filter;
00482
00483 char *name;
00484
00485 AVFilterPad *input_pads;
00486 AVFilterLink **inputs;
00487 #if FF_API_FOO_COUNT
00488 unsigned input_count;
00489 #endif
00490 unsigned nb_inputs;
00491
00492 AVFilterPad *output_pads;
00493 AVFilterLink **outputs;
00494 #if FF_API_FOO_COUNT
00495 unsigned output_count;
00496 #endif
00497 unsigned nb_outputs;
00498
00499 void *priv;
00500
00501 struct AVFilterCommand *command_queue;
00502 };
00503
00511 struct AVFilterLink {
00512 AVFilterContext *src;
00513 AVFilterPad *srcpad;
00514
00515 AVFilterContext *dst;
00516 AVFilterPad *dstpad;
00517
00518 enum AVMediaType type;
00519
00520
00521 int w;
00522 int h;
00523 AVRational sample_aspect_ratio;
00524
00525 uint64_t channel_layout;
00526 int sample_rate;
00527
00528 int format;
00529
00537 AVRational time_base;
00538
00539
00540
00541
00542
00543
00544
00545
00553 AVFilterFormats *in_formats;
00554 AVFilterFormats *out_formats;
00555
00560 AVFilterFormats *in_samplerates;
00561 AVFilterFormats *out_samplerates;
00562 struct AVFilterChannelLayouts *in_channel_layouts;
00563 struct AVFilterChannelLayouts *out_channel_layouts;
00564
00572 int request_samples;
00573
00575 enum {
00576 AVLINK_UNINIT = 0,
00577 AVLINK_STARTINIT,
00578 AVLINK_INIT
00579 } init_state;
00580
00588 AVFilterBufferRef *src_buf;
00589
00604 AVFilterBufferRef *cur_buf;
00605
00624 AVFilterBufferRef *out_buf;
00625
00626 struct AVFilterPool *pool;
00627
00631 struct AVFilterGraph *graph;
00632
00637 int64_t current_pts;
00638
00642 int age_index;
00643
00654 AVRational frame_rate;
00655
00659 AVFilterBufferRef *partial_buf;
00660
00665 int partial_buf_size;
00666
00674 int min_samples;
00675
00680 int max_samples;
00681
00689 AVFilterBufferRef *cur_buf_copy;
00690
00701 int closed;
00702 };
00703
00713 int avfilter_link(AVFilterContext *src, unsigned srcpad,
00714 AVFilterContext *dst, unsigned dstpad);
00715
00719 void avfilter_link_free(AVFilterLink **link);
00720
00724 void avfilter_link_set_closed(AVFilterLink *link, int closed);
00725
00732 int avfilter_config_links(AVFilterContext *filter);
00733
00745 AVFilterBufferRef *
00746 avfilter_get_video_buffer_ref_from_arrays(uint8_t * const data[4], const int linesize[4], int perms,
00747 int w, int h, enum AVPixelFormat format);
00748
00760 AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays(uint8_t **data,
00761 int linesize,
00762 int perms,
00763 int nb_samples,
00764 enum AVSampleFormat sample_fmt,
00765 uint64_t channel_layout);
00766
00767
00768 #define AVFILTER_CMD_FLAG_ONE 1
00769 #define AVFILTER_CMD_FLAG_FAST 2
00770
00771
00775 int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags);
00776
00778 void avfilter_register_all(void);
00779
00781 void avfilter_uninit(void);
00782
00793 int avfilter_register(AVFilter *filter);
00794
00802 AVFilter *avfilter_get_by_name(const char *name);
00803
00810 AVFilter **av_filter_next(AVFilter **filter);
00811
00821 int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name);
00822
00833 int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque);
00834
00840 void avfilter_free(AVFilterContext *filter);
00841
00851 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
00852 unsigned filt_srcpad_idx, unsigned filt_dstpad_idx);
00853
00858 #endif