📄 avfilter.h.svn-base
字号:
*/ int (*poll_frame)(AVFilterLink *link); /** * Frame request callback. A call to this should result in at least one * frame being output over the given link. This should return zero on * success, and another value on error. * * Output video pads only. */ int (*request_frame)(AVFilterLink *link); /** * Link configuration callback. * * For output pads, this should set the link properties such as * width/height. This should NOT set the format property - that is * negotiated between filters by the filter system using the * query_formats() callback before this function is called. * * For input pads, this should check the properties of the link, and update * the filter's internal state as necessary. * * For both input and output filters, this should return zero on success, * and another value on error. */ int (*config_props)(AVFilterLink *link);};/** Default handler for start_frame() for video inputs */void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref);/** Default handler for end_frame() for video inputs */void avfilter_default_end_frame(AVFilterLink *link);/** Default handler for config_props() for video outputs */int avfilter_default_config_output_link(AVFilterLink *link);/** Default handler for config_props() for video inputs */int avfilter_default_config_input_link (AVFilterLink *link);/** Default handler for get_video_buffer() for video inputs */AVFilterPicRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms);/** * A helper for query_formats() which sets all links to the same list of * formats. If there are no links hooked to this filter, the list of formats is * freed. */void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats);/** Default handler for query_formats() */int avfilter_default_query_formats(AVFilterContext *ctx);/** * Filter definition. This defines the pads a filter contains, and all the * callback functions used to interact with the filter. */typedef struct{ const char *name; ///< filter name int priv_size; ///< size of private data to allocate for the filter /** * Filter initialization function. Args contains the user-supplied * parameters. FIXME: maybe an AVOption-based system would be better? * opaque is data provided by the code requesting creation of the filter, * and is used to pass data to the filter. */ int (*init)(AVFilterContext *ctx, const char *args, void *opaque); /** * Filter uninitialization function. Should deallocate any memory held * by the filter, release any picture references, etc. This does not need * to deallocate the AVFilterContext->priv memory itself. */ void (*uninit)(AVFilterContext *ctx); /** * Query formats supported by the filter and its pads. Should set the * in_formats for links connected to its output pads, and out_formats * for links connected to its input pads. * * Should return zero on success. */ int (*query_formats)(AVFilterContext *); const AVFilterPad *inputs; ///< NULL terminated list of inputs. NULL if none const AVFilterPad *outputs; ///< NULL terminated list of outputs. NULL if none} AVFilter;/** An instance of a filter */struct AVFilterContext{ const AVClass *av_class; ///< needed for av_log() AVFilter *filter; ///< the AVFilter of which this is an instance char *name; ///< name of this filter instance unsigned input_count; ///< number of input pads AVFilterPad *input_pads; ///< array of input pads AVFilterLink **inputs; ///< array of pointers to input links unsigned output_count; ///< number of output pads AVFilterPad *output_pads; ///< array of output pads AVFilterLink **outputs; ///< array of pointers to output links void *priv; ///< private data for use by the filter};/** * A link between two filters. This contains pointers to the source and * destination filters between which this link exists, and the indexes of * the pads involved. In addition, this link also contains the parameters * which have been negotiated and agreed upon between the filter, such as * image dimensions, format, etc */struct AVFilterLink{ AVFilterContext *src; ///< source filter unsigned int srcpad; ///< index of the output pad on the source filter AVFilterContext *dst; ///< dest filter unsigned int dstpad; ///< index of the input pad on the dest filter /** stage of the initialization of the link properties (dimensions, etc) */ enum { AVLINK_UNINIT = 0, ///< not started AVLINK_STARTINIT, ///< started, but incomplete AVLINK_INIT ///< complete } init_state; int w; ///< agreed upon image width int h; ///< agreed upon image height enum PixelFormat format; ///< agreed upon image colorspace /** * Lists of formats supported by the input and output filters respectively. * These lists are used for negotiating the format to actually be used, * which will be loaded into the format member, above, when chosen. */ AVFilterFormats *in_formats; AVFilterFormats *out_formats; /** * The picture reference currently being sent across the link by the source * filter. This is used internally by the filter system to allow * automatic copying of pictures which do not have sufficient permissions * for the destination. This should not be accessed directly by the * filters. */ AVFilterPicRef *srcpic; AVFilterPicRef *cur_pic; AVFilterPicRef *outpic;};/** * Link two filters together. * @param src the source filter * @param srcpad index of the output pad on the source filter * @param dst the destination filter * @param dstpad index of the input pad on the destination filter * @return zero on success */int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad);/** * Negotiate the colorspace, dimensions, etc of all inputs to a filter. * @param filter the filter to negotiate the properties for its inputs * @return zero on successful negotiation */int avfilter_config_links(AVFilterContext *filter);/** * Request a picture buffer with a specific set of permissions * @param link the output link to the filter from which the picture will * be requested * @param perms the required access permissions * @return A reference to the picture. This must be unreferenced with * avfilter_unref_pic when you are finished with it. */AVFilterPicRef *avfilter_get_video_buffer(AVFilterLink *link, int perms);/** * Request an input frame from the filter at the other end of the link. * @param link the input link * @return zero on success */int avfilter_request_frame(AVFilterLink *link);/** * Poll a frame from the filter chain. * @param link the input link * @return the number of imediately available frames */int avfilter_poll_frame(AVFilterLink *link);/** * Notify the next filter of the start of a frame. * @param link the output link the frame will be sent over * @param picref A reference to the frame about to be sent. The data for this * frame need only be valid once draw_slice() is called for that * portion. The receiving filter will free this reference when * it no longer needs it. */void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref);/** * Notify the next filter that the current frame has finished * @param link the output link the frame was sent over */void avfilter_end_frame(AVFilterLink *link);/** * Send a slice to the next filter. * @param link the output link over which the frame is being sent * @param y offset in pixels from the top of the image for this slice * @param h height of this slice in pixels */void avfilter_draw_slice(AVFilterLink *link, int y, int h);/** Initialize the filter system. Registers all builtin filters */void avfilter_register_all(void);/** Uninitialize the filter system. Unregisters all filters */void avfilter_uninit(void);/** * Register a filter. This is only needed if you plan to use * avfilter_get_by_name later to lookup the AVFilter structure by name. A * filter can still by instantiated with avfilter_open even if it is not * registered. * @param filter the filter to register */void avfilter_register(AVFilter *filter);/** * Gets a filter definition matching the given name. * @param name the filter name to find * @return the filter definition, if any matching one is registered. * NULL if none found. */AVFilter *avfilter_get_by_name(const char *name);/** * Create a filter instance. * @param filter the filter to create an instance of * @param inst_name Name to give to the new instance. Can be NULL for none. * @return Pointer to the new instance on success. NULL on failure. */AVFilterContext *avfilter_open(AVFilter *filter, const char *inst_name);/** * Initialize a filter. * @param filter the filter to initialize * @param args A string of parameters to use when initializing the filter. * The format and meaning of this string varies by filter. * @param opaque Any extra non-string data needed by the filter. The meaning * of this parameter varies by filter. * @return zero on success */int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque);/** * Destroy a filter. * @param filter the filter to destroy */void avfilter_destroy(AVFilterContext *filter);/** * Insert a filter in the middle of an existing link. * @param link the link into which the filter should be inserted * @param filt the filter to be inserted * @param in the input pad on the filter to connect * @param out the output pad on the filter to connect * @return zero on success */int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, unsigned in, unsigned out);/** * Insert a new pad. * @param idx Insertion point. Pad is inserted at the end if this point * is beyond the end of the list of pads. * @param count Pointer to the number of pads in the list * @param padidx_off Offset within an AVFilterLink structure to the element * to increment when inserting a new pad causes link * numbering to change * @param pads Pointer to the pointer to the beginning of the list of pads * @param links Pointer to the pointer to the beginning of the list of links * @param newpad The new pad to add. A copy is made when adding. */void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off, AVFilterPad **pads, AVFilterLink ***links, AVFilterPad *newpad);/** insert a new input pad for the filter */static inline void avfilter_insert_inpad(AVFilterContext *f, unsigned index, AVFilterPad *p){ avfilter_insert_pad(index, &f->input_count, offsetof(AVFilterLink, dstpad), &f->input_pads, &f->inputs, p);}/** insert a new output pad for the filter */static inline void avfilter_insert_outpad(AVFilterContext *f, unsigned index, AVFilterPad *p){ avfilter_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad), &f->output_pads, &f->outputs, p);}#endif /* FFMPEG_AVFILTER_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -