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 "libavutil/samplefmt.h"
00027
00028 #define LIBAVFILTER_VERSION_MAJOR 1
00029 #define LIBAVFILTER_VERSION_MINOR 76
00030 #define LIBAVFILTER_VERSION_MICRO 0
00031
00032 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
00033 LIBAVFILTER_VERSION_MINOR, \
00034 LIBAVFILTER_VERSION_MICRO)
00035 #define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \
00036 LIBAVFILTER_VERSION_MINOR, \
00037 LIBAVFILTER_VERSION_MICRO)
00038 #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT
00039
00040 #include <stddef.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
00067 typedef struct AVFilterBuffer {
00068 uint8_t *data[8];
00069 int linesize[8];
00070
00071 unsigned refcount;
00072
00074 void *priv;
00081 void (*free)(struct AVFilterBuffer *buf);
00082
00083 int format;
00084 int w, h;
00085 } AVFilterBuffer;
00086
00087 #define AV_PERM_READ 0x01
00088 #define AV_PERM_WRITE 0x02
00089 #define AV_PERM_PRESERVE 0x04
00090 #define AV_PERM_REUSE 0x08
00091 #define AV_PERM_REUSE2 0x10
00092 #define AV_PERM_NEG_LINESIZES 0x20
00093
00094
00099 typedef struct AVFilterBufferRefAudioProps {
00100 int64_t channel_layout;
00101 int nb_samples;
00102 int size;
00103 uint32_t sample_rate;
00104 int planar;
00105 } AVFilterBufferRefAudioProps;
00106
00112 typedef struct AVFilterBufferRefVideoProps {
00113 int w;
00114 int h;
00115 AVRational pixel_aspect;
00116 int interlaced;
00117 int top_field_first;
00118 } AVFilterBufferRefVideoProps;
00119
00128 typedef struct AVFilterBufferRef {
00129 AVFilterBuffer *buf;
00130 uint8_t *data[8];
00131 int linesize[8];
00132 int format;
00133
00139 int64_t pts;
00140 int64_t pos;
00141
00142 int perms;
00143
00144 enum AVMediaType type;
00145 AVFilterBufferRefVideoProps *video;
00146 AVFilterBufferRefAudioProps *audio;
00147 } AVFilterBufferRef;
00148
00152 static inline void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src)
00153 {
00154
00155 dst->pts = src->pts;
00156 dst->pos = src->pos;
00157
00158 switch (src->type) {
00159 case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break;
00160 case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break;
00161 }
00162 }
00163
00173 AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask);
00174
00181 void avfilter_unref_buffer(AVFilterBufferRef *ref);
00182
00223 typedef struct AVFilterFormats {
00224 unsigned format_count;
00225 int *formats;
00226
00227 unsigned refcount;
00228 struct AVFilterFormats ***refs;
00229 } AVFilterFormats;
00230
00238 AVFilterFormats *avfilter_make_format_list(const int *fmts);
00239
00248 int avfilter_add_format(AVFilterFormats **avff, int fmt);
00249
00253 AVFilterFormats *avfilter_all_formats(enum AVMediaType type);
00254
00263 AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b);
00264
00277 void avfilter_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref);
00278
00294 void avfilter_formats_unref(AVFilterFormats **ref);
00295
00309 void avfilter_formats_changeref(AVFilterFormats **oldref,
00310 AVFilterFormats **newref);
00311
00315 struct AVFilterPad {
00321 const char *name;
00322
00327 enum AVMediaType type;
00328
00336 int min_perms;
00337
00347 int rej_perms;
00348
00356 void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref);
00357
00364 AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h);
00365
00372 AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms,
00373 enum AVSampleFormat sample_fmt, int size,
00374 int64_t channel_layout, int planar);
00375
00383 void (*end_frame)(AVFilterLink *link);
00384
00391 void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir);
00392
00399 void (*filter_samples)(AVFilterLink *link, AVFilterBufferRef *samplesref);
00400
00410 int (*poll_frame)(AVFilterLink *link);
00411
00419 int (*request_frame)(AVFilterLink *link);
00420
00435 int (*config_props)(AVFilterLink *link);
00436 };
00437
00439 void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
00440
00442 void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00443
00445 void avfilter_default_end_frame(AVFilterLink *link);
00446
00448 void avfilter_default_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
00449
00451 int avfilter_default_config_output_link(AVFilterLink *link);
00452
00454 int avfilter_default_config_input_link (AVFilterLink *link);
00455
00457 AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link,
00458 int perms, int w, int h);
00459
00461 AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int perms,
00462 enum AVSampleFormat sample_fmt, int size,
00463 int64_t channel_layout, int planar);
00464
00470 void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats);
00471
00473 int avfilter_default_query_formats(AVFilterContext *ctx);
00474
00476 void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
00477
00479 void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
00480
00482 void avfilter_null_end_frame(AVFilterLink *link);
00483
00485 void avfilter_null_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref);
00486
00488 AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link,
00489 int perms, int w, int h);
00490
00492 AVFilterBufferRef *avfilter_null_get_audio_buffer(AVFilterLink *link, int perms,
00493 enum AVSampleFormat sample_fmt, int size,
00494 int64_t channel_layout, int planar);
00495
00500 typedef struct AVFilter {
00501 const char *name;
00502
00503 int priv_size;
00504
00511 int (*init)(AVFilterContext *ctx, const char *args, void *opaque);
00512
00518 void (*uninit)(AVFilterContext *ctx);
00519
00528 int (*query_formats)(AVFilterContext *);
00529
00530 const AVFilterPad *inputs;
00531 const AVFilterPad *outputs;
00532
00537 const char *description;
00538 } AVFilter;
00539
00541 struct AVFilterContext {
00542 const AVClass *av_class;
00543
00544 AVFilter *filter;
00545
00546 char *name;
00547
00548 unsigned input_count;
00549 AVFilterPad *input_pads;
00550 AVFilterLink **inputs;
00551
00552 unsigned output_count;
00553 AVFilterPad *output_pads;
00554 AVFilterLink **outputs;
00555
00556 void *priv;
00557 };
00558
00566 struct AVFilterLink {
00567 AVFilterContext *src;
00568 AVFilterPad *srcpad;
00569
00570 AVFilterContext *dst;
00571 AVFilterPad *dstpad;
00572
00574 enum {
00575 AVLINK_UNINIT = 0,
00576 AVLINK_STARTINIT,
00577 AVLINK_INIT
00578 } init_state;
00579
00580 enum AVMediaType type;
00581
00582
00583 int w;
00584 int h;
00585 AVRational sample_aspect_ratio;
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