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
00025 #include "libavutil/avutil.h"
00026
00027 #define LIBAVFILTER_VERSION_MAJOR 1
00028 #define LIBAVFILTER_VERSION_MINOR 19
00029 #define LIBAVFILTER_VERSION_MICRO 0
00030
00031 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
00032 LIBAVFILTER_VERSION_MINOR, \
00033 LIBAVFILTER_VERSION_MICRO)
00034 #define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \
00035 LIBAVFILTER_VERSION_MINOR, \
00036 LIBAVFILTER_VERSION_MICRO)
00037 #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT
00038
00039 #include <stddef.h>
00040 #include "libavcodec/avcodec.h"
00041
00045 unsigned avfilter_version(void);
00046
00050 const char *avfilter_configuration(void);
00051
00055 const char *avfilter_license(void);
00056
00057
00058 typedef struct AVFilterContext AVFilterContext;
00059 typedef struct AVFilterLink AVFilterLink;
00060 typedef struct AVFilterPad AVFilterPad;
00061
00062
00063
00064
00070 typedef struct AVFilterPic
00071 {
00072 uint8_t *data[4];
00073 int linesize[4];
00074 enum PixelFormat format;
00075
00076 unsigned refcount;
00077
00079 void *priv;
00086 void (*free)(struct AVFilterPic *pic);
00087
00088 int w, h;
00089 } AVFilterPic;
00090
00099 typedef struct AVFilterPicRef
00100 {
00101 AVFilterPic *pic;
00102 uint8_t *data[4];
00103 int linesize[4];
00104 int w;
00105 int h;
00106
00107 int64_t pts;
00108 int64_t pos;
00109
00110 AVRational pixel_aspect;
00111
00112 int perms;
00113 #define AV_PERM_READ 0x01
00114 #define AV_PERM_WRITE 0x02
00115 #define AV_PERM_PRESERVE 0x04
00116 #define AV_PERM_REUSE 0x08
00117 #define AV_PERM_REUSE2 0x10
00118 } AVFilterPicRef;
00119
00128 AVFilterPicRef *avfilter_ref_pic(AVFilterPicRef *ref, int pmask);
00129
00135 void avfilter_unref_pic(AVFilterPicRef *ref);
00136
00177 typedef struct AVFilterFormats AVFilterFormats;
00178 struct AVFilterFormats
00179 {
00180 unsigned format_count;
00181 enum PixelFormat *formats;
00182
00183 unsigned refcount;
00184 AVFilterFormats ***refs;
00185 };
00186
00193 AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts);
00194
00203 int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt);
00204
00208 AVFilterFormats *avfilter_all_colorspaces(void);
00209
00218 AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b);
00219
00232 void avfilter_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref);
00233
00249 void avfilter_formats_unref(AVFilterFormats **ref);
00250
00264 void avfilter_formats_changeref(AVFilterFormats **oldref,
00265 AVFilterFormats **newref);
00266
00270 struct AVFilterPad
00271 {
00277 const char *name;
00278
00283 enum AVMediaType type;
00284
00292 int min_perms;
00293
00303 int rej_perms;
00304
00312 void (*start_frame)(AVFilterLink *link, AVFilterPicRef *picref);
00313
00320 AVFilterPicRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h);
00321
00329 void (*end_frame)(AVFilterLink *link);
00330
00337 void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir);
00338
00348 int (*poll_frame)(AVFilterLink *link);
00349
00357 int (*request_frame)(AVFilterLink *link);
00358
00373 int (*config_props)(AVFilterLink *link);
00374 };
00375
00377 void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref);
00379 void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00381 void avfilter_default_end_frame(AVFilterLink *link);
00383 int avfilter_default_config_output_link(AVFilterLink *link);
00385 int avfilter_default_config_input_link (AVFilterLink *link);
00387 AVFilterPicRef *avfilter_default_get_video_buffer(AVFilterLink *link,
00388 int perms, int w, int h);
00394 void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats);
00396 int avfilter_default_query_formats(AVFilterContext *ctx);
00397
00399 void avfilter_null_start_frame(AVFilterLink *link, AVFilterPicRef *picref);
00400
00402 void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00403
00405 void avfilter_null_end_frame(AVFilterLink *link);
00406
00408 AVFilterPicRef *avfilter_null_get_video_buffer(AVFilterLink *link,
00409 int perms, int w, int h);
00410
00415 typedef struct AVFilter
00416 {
00417 const char *name;
00418
00419 int priv_size;
00420
00427 int (*init)(AVFilterContext *ctx, const char *args, void *opaque);
00428
00434 void (*uninit)(AVFilterContext *ctx);
00435
00444 int (*query_formats)(AVFilterContext *);
00445
00446 const AVFilterPad *inputs;
00447 const AVFilterPad *outputs;
00448
00453 const char *description;
00454 } AVFilter;
00455
00457 struct AVFilterContext
00458 {
00459 const AVClass *av_class;
00460
00461 AVFilter *filter;
00462
00463 char *name;
00464
00465 unsigned input_count;
00466 AVFilterPad *input_pads;
00467 AVFilterLink **inputs;
00468
00469 unsigned output_count;
00470 AVFilterPad *output_pads;
00471 AVFilterLink **outputs;
00472
00473 void *priv;
00474 };
00475
00483 struct AVFilterLink
00484 {
00485 AVFilterContext *src;
00486 unsigned int srcpad;
00487
00488 AVFilterContext *dst;
00489 unsigned int dstpad;
00490
00492 enum {
00493 AVLINK_UNINIT = 0,
00494 AVLINK_STARTINIT,
00495 AVLINK_INIT
00496 } init_state;
00497
00498 int w;
00499 int h;
00500 enum PixelFormat format;
00501
00507 AVFilterFormats *in_formats;
00508 AVFilterFormats *out_formats;
00509
00517 AVFilterPicRef *srcpic;
00518
00519 AVFilterPicRef *cur_pic;
00520 AVFilterPicRef *outpic;
00521 };
00522
00531 int avfilter_link(AVFilterContext *src, unsigned srcpad,
00532 AVFilterContext *dst, unsigned dstpad);
00533
00539 int avfilter_config_links(AVFilterContext *filter);
00540
00551 AVFilterPicRef *avfilter_get_video_buffer(AVFilterLink *link, int perms,
00552 int w, int h);
00553
00559 int avfilter_request_frame(AVFilterLink *link);
00560
00567 int avfilter_poll_frame(AVFilterLink *link);
00568
00577 void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref);
00578
00583 void avfilter_end_frame(AVFilterLink *link);
00584
00600 void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00601
00603 void avfilter_register_all(void);
00604
00606 void avfilter_uninit(void);
00607
00617 int avfilter_register(AVFilter *filter);
00618
00625 AVFilter *avfilter_get_by_name(const char *name);
00626
00633 AVFilter **av_filter_next(AVFilter **filter);
00634
00641 AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name);
00642
00652 int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque);
00653
00658 void avfilter_destroy(AVFilterContext *filter);
00659
00668 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
00669 unsigned in, unsigned out);
00670
00683 void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off,
00684 AVFilterPad **pads, AVFilterLink ***links,
00685 AVFilterPad *newpad);
00686
00688 static inline void avfilter_insert_inpad(AVFilterContext *f, unsigned index,
00689 AVFilterPad *p)
00690 {
00691 avfilter_insert_pad(index, &f->input_count, offsetof(AVFilterLink, dstpad),
00692 &f->input_pads, &f->inputs, p);
00693 }
00694
00696 static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index,
00697 AVFilterPad *p)
00698 {
00699 avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad),
00700 &f->output_pads, &f->outputs, p);
00701 }
00702
00703 #endif