新县住房和城乡规划建设网站,网站怎么做用户体验,淮阴区城乡建设管理局网站,电商怎么做营销推广wAVFilterGraph是对pileline的一个整体描述#xff0c;没看之前以为里面大概是个有向无环图什么的来描述#xff0c;进去一看#xff0c;居然只是用链表来描述
结构体
先看结构体#xff0c;主要关注里面的两个成员变量
AVFilterContext **filters;unsigned nb_filters;
…AVFilterGraph是对pileline的一个整体描述没看之前以为里面大概是个有向无环图什么的来描述进去一看居然只是用链表来描述
结构体
先看结构体主要关注里面的两个成员变量
AVFilterContext **filters;unsigned nb_filters;
AVFilterLink **sink_links;int sink_links_count;以为avfilter是通过avFilterlink链接起来的所以本质上来说只要有AVFilterLink就能描述清楚所有的链接图了
下面是全部定义 typedef struct AVFilterGraph {const AVClass *av_class;AVFilterContext **filters;unsigned nb_filters;char *scale_sws_opts; /// sws options to use for the auto-inserted scale filters/*** Type of multithreading allowed for filters in this graph. A combination* of AVFILTER_THREAD_* flags.** May be set by the caller at any point, the setting will apply to all* filters initialized after that. The default is allowing everything.** When a filter in this graph is initialized, this field is combined using* bit AND with AVFilterContext.thread_type to get the final mask used for* determining allowed threading types. I.e. a threading type needs to be* set in both to be allowed.*/int thread_type;/*** Maximum number of threads used by filters in this graph. May be set by* the caller before adding any filters to the filtergraph. Zero (the* default) means that the number of threads is determined automatically.*/int nb_threads;/*** Opaque object for libavfilter internal use.*/AVFilterGraphInternal *internal;/*** Opaque user data. May be set by the caller to an arbitrary value, e.g. to* be used from callbacks like ref AVFilterGraph.execute.* Libavfilter will not touch this field in any way.*/void *opaque;/*** This callback may be set by the caller immediately after allocating the* graph and before adding any filters to it, to provide a custom* multithreading implementation.** If set, filters with slice threading capability will call this callback* to execute multiple jobs in parallel.** If this field is left unset, libavfilter will use its internal* implementation, which may or may not be multithreaded depending on the* platform and build options.*/avfilter_execute_func *execute;char *aresample_swr_opts; /// swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions/*** Private fields** The following fields are for internal use only.* Their type, offset, number and semantic can change without notice.*/AVFilterLink **sink_links;int sink_links_count;unsigned disable_auto_convert;
} AVFilterGraph;
函数 /*** Allocate a filter graph.** return the allocated filter graph on success or NULL.*/
AVFilterGraph *avfilter_graph_alloc(void);/*** Create a new filter instance in a filter graph.** param graph graph in which the new filter will be used* param filter the filter to create an instance of* param name Name to give to the new instance (will be copied to* AVFilterContext.name). This may be used by the caller to identify* different filters, libavfilter itself assigns no semantics to* this parameter. May be NULL.** return the context of the newly created filter instance (note that it is* also retrievable directly through AVFilterGraph.filters or with* avfilter_graph_get_filter()) on success or NULL on failure.*/
AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph,const AVFilter *filter,const char *name);/*** Get a filter instance identified by instance name from graph.** param graph filter graph to search through.* param name filter instance name (should be unique in the graph).* return the pointer to the found filter instance or NULL if it* cannot be found.*/
AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *name);/*** Create and add a filter instance into an existing graph.* The filter instance is created from the filter filt and inited* with the parameter args. opaque is currently ignored.** In case of success put in *filt_ctx the pointer to the created* filter instance, otherwise set *filt_ctx to NULL.** param name the instance name to give to the created filter instance* param graph_ctx the filter graph* return a negative AVERROR error code in case of failure, a non* negative value otherwise*/
int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt,const char *name, const char *args, void *opaque,AVFilterGraph *graph_ctx);/*** Enable or disable automatic format conversion inside the graph.** Note that format conversion can still happen inside explicitly inserted* scale and aresample filters.** param flags any of the AVFILTER_AUTO_CONVERT_* constants*/
void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags);enum {AVFILTER_AUTO_CONVERT_ALL 0, /** all automatic conversions enabled */AVFILTER_AUTO_CONVERT_NONE -1, /** all automatic conversions disabled */
};/*** Check validity and configure all the links and formats in the graph.** param graphctx the filter graph* param log_ctx context used for logging* return 0 in case of success, a negative AVERROR code otherwise*/
int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx);/*** Free a graph, destroy its links, and set *graph to NULL.* If *graph is NULL, do nothing.*/
void avfilter_graph_free(AVFilterGraph **graph);dump一个图
/*** Dump a graph into a human-readable string representation.** param graph the graph to dump* param options formatting options; currently ignored* return a string, or NULL in case of memory allocation failure;* the string must be freed using av_free*/
char *avfilter_graph_dump(AVFilterGraph *graph, const char *options);解析一个图
图的解析分为三层突然就忘了艹总之就是先解析外边最大的block再解析图内部的filter /*** Add a graph described by a string to a graph.** note The caller must provide the lists of inputs and outputs,* which therefore must be known before calling the function.** note The inputs parameter describes inputs of the already existing* part of the graph; i.e. from the point of view of the newly created* part, they are outputs. Similarly the outputs parameter describes* outputs of the already existing filters, which are provided as* inputs to the parsed filters.** param graph the filter graph where to link the parsed graph context* param filters string to be parsed* param inputs linked list to the inputs of the graph* param outputs linked list to the outputs of the graph* return zero on success, a negative AVERROR code on error*/
int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,AVFilterInOut *inputs, AVFilterInOut *outputs,void *log_ctx);/*** Add a graph described by a string to a graph.** In the graph filters description, if the input label of the first* filter is not specified, in is assumed; if the output label of* the last filter is not specified, out is assumed.** param graph the filter graph where to link the parsed graph context* param filters string to be parsed* param inputs pointer to a linked list to the inputs of the graph, may be NULL.* If non-NULL, *inputs is updated to contain the list of open inputs* after the parsing, should be freed with avfilter_inout_free().* param outputs pointer to a linked list to the outputs of the graph, may be NULL.* If non-NULL, *outputs is updated to contain the list of open outputs* after the parsing, should be freed with avfilter_inout_free().* return non negative on success, a negative AVERROR code on error*/
int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters,AVFilterInOut **inputs, AVFilterInOut **outputs,void *log_ctx);/*** Add a graph described by a string to a graph.** param[in] graph the filter graph where to link the parsed graph context* param[in] filters string to be parsed* param[out] inputs a linked list of all free (unlinked) inputs of the* parsed graph will be returned here. It is to be freed* by the caller using avfilter_inout_free().* param[out] outputs a linked list of all free (unlinked) outputs of the* parsed graph will be returned here. It is to be freed by the* caller using avfilter_inout_free().* return zero on success, a negative AVERROR code on error** note This function returns the inputs and outputs that are left* unlinked after parsing the graph and the caller then deals with* them.* note This function makes no reference whatsoever to already* existing parts of the graph and the inputs parameter will on return* contain inputs of the newly parsed part of the graph. Analogously* the outputs parameter will contain outputs of the newly created* filters.*/
int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters,AVFilterInOut **inputs,AVFilterInOut **outputs);