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 #include "libavcore/avcore.h"
00027 #include "libavcore/samplefmt.h"
00028
00029 #define LIBAVFILTER_VERSION_MAJOR 1
00030 #define LIBAVFILTER_VERSION_MINOR 74
00031 #define LIBAVFILTER_VERSION_MICRO 0
00032
00033 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
00034 LIBAVFILTER_VERSION_MINOR, \
00035 LIBAVFILTER_VERSION_MICRO)
00036 #define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \
00037 LIBAVFILTER_VERSION_MINOR, \
00038 LIBAVFILTER_VERSION_MICRO)
00039 #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT
00040
00041 #include <stddef.h>
00042
00046 unsigned avfilter_version(void);
00047
00051 const char *avfilter_configuration(void);
00052
00056 const char *avfilter_license(void);
00057
00058
00059 typedef struct AVFilterContext AVFilterContext;
00060 typedef struct AVFilterLink AVFilterLink;
00061 typedef struct AVFilterPad AVFilterPad;
00062
00068 typedef struct AVFilterBuffer {
00069 uint8_t *data[8];
00070 int linesize[8];
00071
00072 unsigned refcount;
00073
00075 void *priv;
00082 void (*free)(struct AVFilterBuffer *buf);
00083
00084 int format;
00085 int w, h;
00086 } AVFilterBuffer;
00087
00088 #define AV_PERM_READ 0x01
00089 #define AV_PERM_WRITE 0x02
00090 #define AV_PERM_PRESERVE 0x04
00091 #define AV_PERM_REUSE 0x08
00092 #define AV_PERM_REUSE2 0x10
00093 #define AV_PERM_NEG_LINESIZES 0x20
00094
00095
00100 typedef struct AVFilterBufferRefAudioProps {
00101 int64_t channel_layout;
00102 int nb_samples;
00103 int size;
00104 uint32_t sample_rate;
00105 int planar;
00106 } AVFilterBufferRefAudioProps;
00107
00113 typedef struct AVFilterBufferRefVideoProps {
00114 int w;
00115 int h;
00116 AVRational pixel_aspect;
00117 int interlaced;
00118 int top_field_first;
00119 } AVFilterBufferRefVideoProps;
00120
00129 typedef struct AVFilterBufferRef {
00130 AVFilterBuffer *buf;
00131 uint8_t *data[8];
00132 int linesize[8];
00133 int format;
00134
00140 int64_t pts;
00141 int64_t pos;
00142
00143 int perms;
00144
00145 enum AVMediaType type;
00146 AVFilterBufferRefVideoProps *video;
00147 AVFilterBufferRefAudioProps *audio;
00148 } AVFilterBufferRef;
00149
00153 static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src)
00154 {
00155
00156 dst->pts = src->pts;
00157 dst->pos = src->pos;
00158
00159 switch (src->type) {
00160 case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break;
00161 case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break;
00162 }
00163 }
00164
00174 AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask);
00175
00182 void avfilter_unref_buffer(AVFilterBufferRef *ref);
00183
00224 typedef struct AVFilterFormats {
00225 unsigned format_count;
00226 int *formats;
00227
00228 unsigned refcount;
00229 struct AVFilterFormats ***refs;
00230 } AVFilterFormats;;
00231
00239 AVFilterFormats *avfilter_make_format_list(const int *fmts);
00240
00249 int avfilter_add_format(AVFilterFormats **avff, int fmt);
00250
00254 AVFilterFormats *avfilter_all_formats(enum AVMediaType type);
00255
00264 AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b);
00265
00278 void avfilter_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref);
00279
00295 void avfilter_formats_unref(AVFilterFormats **ref);
00296
00310 void avfilter_formats_changeref(AVFilterFormats **oldref,
00311 AVFilterFormats **newref);
00312
00316 struct AVFilterPad {
00322 const char *name;
00323
00328 enum AVMediaType type;
00329
00337 int min_perms;
00338
00348 int rej_perms;
00349
00357 void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref);
00358
00365 AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h);
00366
00373 AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms,
00374 enum AVSampleFormat sample_fmt, int size,
00375 int64_t channel_layout, int planar);
00376
00384 void (*end_frame)(AVFilterLink *link);
00385
00392 void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir);
00393
00400 void (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref);
00401
00411 int (*poll_frame)(AVFilterLink *link);
00412
00420 int (*request_frame)(AVFilterLink *link);
00421
00436 int (*config_props)(AVFilterLink *link);
00437 };
00438
00440 void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
00441
00443 void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00444
00446 void avfilter_default_end_frame(AVFilterLink *link);
00447
00449 void avfilter_default_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
00450
00452 int avfilter_default_config_output_link(AVFilterLink *link);
00453
00455 int avfilter_default_config_input_link (AVFilterLink *link);
00456
00458 AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link,
00459 int perms, int w, int h);
00460
00462 AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int perms,
00463 enum AVSampleFormat sample_fmt, int size,
00464 int64_t channel_layout, int planar);
00465
00471 void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats);
00472
00474 int avfilter_default_query_formats(AVFilterContext *ctx);
00475
00477 void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
00478
00480 void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00481
00483 void avfilter_null_end_frame(AVFilterLink *link);
00484
00486 void avfilter_null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
00487
00489 AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link,
00490 int perms, int w, int h);
00491
00493 AVFilterBufferRef *avfilter_null_get_audio_buffer(AVFilterLink *link, int perms,
00494 enum AVSampleFormat sample_fmt, int size,
00495 int64_t channel_layout, int planar);
00496
00501 typedef struct AVFilter {
00502 const char *name;
00503
00504 int priv_size;
00505
00512 int (*init)(AVFilterContext *ctx, const char *args, void *opaque);
00513
00519 void (*uninit)(AVFilterContext *ctx);
00520
00529 int (*query_formats)(AVFilterContext *);
00530
00531 const AVFilterPad *inputs;
00532 const AVFilterPad *outputs;
00533
00538 const char *description;
00539 } AVFilter;
00540
00542 struct AVFilterContext {
00543 const AVClass *av_class;
00544
00545 AVFilter *filter;
00546
00547 char *name;
00548
00549 unsigned input_count;
00550 AVFilterPad *input_pads;
00551 AVFilterLink **inputs;
00552
00553 unsigned output_count;
00554 AVFilterPad *output_pads;
00555 AVFilterLink **outputs;
00556
00557 void *priv;
00558 };
00559
00567 struct AVFilterLink {
00568 AVFilterContext *src;
00569 AVFilterPad *srcpad;
00570
00571 AVFilterContext *dst;
00572 AVFilterPad *dstpad;
00573
00575 enum {
00576 AVLINK_UNINIT = 0,
00577 AVLINK_STARTINIT,
00578 AVLINK_INIT
00579 } init_state;
00580
00581 enum AVMediaType type;
00582
00583
00584 int w;
00585 int h;
00586
00587 int64_t channel_layout;
00588 int64_t sample_rate;
00589
00590 int format;
00591
00597 AVFilterFormats *in_formats;
00598 AVFilterFormats *out_formats;
00599
00607 AVFilterBufferRef *src_buf;
00608
00609 AVFilterBufferRef *cur_buf;
00610 AVFilterBufferRef *out_buf;
00611
00619 AVRational time_base;
00620 };
00621
00631 int avfilter_link(AVFilterContext *src, unsigned srcpad,
00632 AVFilterContext *dst, unsigned dstpad);
00633
00640 int avfilter_config_links(AVFilterContext *filter);
00641
00653 AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms,
00654 int w, int h);
00655
00667 AVFilterBufferRef *
00668 avfilter_get_video_buffer_ref_from_arrays(uint8_t *data[4], int linesize[4], int perms,
00669 int w, int h, enum PixelFormat format);
00670
00684 AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
00685 enum AVSampleFormat sample_fmt, int size,
00686 int64_t channel_layout, int planar);
00687
00694 int avfilter_request_frame(AVFilterLink *link);
00695
00703 int avfilter_poll_frame(AVFilterLink *link);
00704
00714 void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
00715
00721 void avfilter_end_frame(AVFilterLink *link);
00722
00738 void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00739
00748 void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
00749
00751 void avfilter_register_all(void);
00752
00754 void avfilter_uninit(void);
00755
00766 int avfilter_register(AVFilter *filter);
00767
00775 AVFilter *avfilter_get_by_name(const char *name);
00776
00783 AVFilter **av_filter_next(AVFilter **filter);
00784
00794 int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name);
00795
00806 int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque);
00807
00813 void avfilter_free(AVFilterContext *filter);
00814
00824 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
00825 unsigned filt_srcpad_idx, unsigned filt_dstpad_idx);
00826
00840 void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off,
00841 AVFilterPad **pads, AVFilterLink ***links,
00842 AVFilterPad *newpad);
00843
00845 static inline void avfilter_insert_inpad(AVFilterContext *f, unsigned index,
00846 AVFilterPad *p)
00847 {
00848 avfilter_insert_pad(index, &f->input_count, offsetof(AVFilterLink, dstpad),
00849 &f->input_pads, &f->inputs, p);
00850 }
00851
00853 static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index,
00854 AVFilterPad *p)
00855 {
00856 avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad),
00857 &f->output_pads, &f->outputs, p);
00858 }
00859
00860 #endif