Go to the documentation of this file.
36 #define FF_INTERNAL_FIELDS 1
45 #define OFFSET(x) offsetof(AVFilterGraph, x)
46 #define F AV_OPT_FLAG_FILTERING_PARAM
47 #define V AV_OPT_FLAG_VIDEO_PARAM
48 #define A AV_OPT_FLAG_AUDIO_PARAM
53 {
"threads",
"Maximum number of threads",
OFFSET(nb_threads),
55 {
"scale_sws_opts" ,
"default scale filter options" ,
OFFSET(scale_sws_opts) ,
57 {
"aresample_swr_opts" ,
"default aresample filter options" ,
OFFSET(aresample_swr_opts) ,
111 for (j = 0; j<
filter->nb_outputs; j++)
125 while ((*graph)->nb_filters)
132 av_freep(&(*graph)->scale_sws_opts);
133 av_freep(&(*graph)->aresample_swr_opts);
135 av_freep(&(*graph)->resample_lavr_opts);
143 const char *
name,
const char *args,
void *opaque,
223 for (j = 0; j <
filt->nb_inputs; j++) {
224 if (!
filt->inputs[j] || !
filt->inputs[j]->src) {
225 pad = &
filt->input_pads[j];
227 "Input pad \"%s\" with type %s of the filter instance \"%s\" of %s not connected to any source\n",
233 for (j = 0; j <
filt->nb_outputs; j++) {
234 if (!
filt->outputs[j] || !
filt->outputs[j]->dst) {
235 pad = &
filt->output_pads[j];
237 "Output pad \"%s\" with type %s of the filter instance \"%s\" of %s not connected to any destination\n",
260 if (!
filt->nb_outputs) {
278 for (j = 0; j <
f->nb_outputs; j++) {
323 ctx->outputs &&
ctx->outputs[0] ?
ctx->outputs[0]->type :
326 if ((
ret =
ctx->filter->query_formats(
ctx)) < 0) {
333 for (
i = 0;
i <
ctx->nb_inputs;
i++)
335 for (
i = 0;
i <
ctx->nb_outputs;
i++)
356 for (
i = 0;
i <
f->nb_inputs;
i++) {
357 if (!
f->inputs[
i]->out_formats)
360 !(
f->inputs[
i]->out_samplerates &&
361 f->inputs[
i]->out_channel_layouts))
364 for (
i = 0;
i <
f->nb_outputs;
i++) {
365 if (!
f->outputs[
i]->in_formats)
368 !(
f->outputs[
i]->in_samplerates &&
369 f->outputs[
i]->in_channel_layouts))
381 a->formats =
av_memdup(
a->formats,
sizeof(*
a->formats) *
a->nb_formats);
382 if (!
a->formats &&
arg->formats)
411 if (is_sample_rate) {
443 int scaler_count = 0, resampler_count = 0;
444 int count_queried = 0;
445 int count_merged = 0;
446 int count_already_merged = 0;
447 int count_delayed = 0;
453 if (
f->filter->query_formats)
460 count_queried +=
ret >= 0;
467 for (j = 0; j <
filter->nb_inputs; j++) {
469 int convert_needed = 0;
474 if (
link->in_formats !=
link->out_formats
475 &&
link->in_formats &&
link->out_formats)
480 if (
link->in_samplerates !=
link->out_samplerates
481 &&
link->in_samplerates &&
link->out_samplerates)
483 link->out_samplerates,
488 #define MERGE_DISPATCH(field, statement) \
489 if (!(link->in_ ## field && link->out_ ## field)) { \
491 } else if (link->in_ ## field == link->out_ ## field) { \
492 count_already_merged++; \
493 } else if (!convert_needed) { \
501 link->out_channel_layouts))
506 link->out_samplerates))
515 #undef MERGE_DISPATCH
517 if (convert_needed) {
525 "The filters '%s' and '%s' do not have a common format "
526 "and automatic conversion is disabled.\n",
532 switch (
link->type) {
536 "not present, cannot convert pixel formats.\n");
540 snprintf(inst_name,
sizeof(inst_name),
"auto_scaler_%d",
551 "not present, cannot convert audio formats.\n");
555 snprintf(inst_name,
sizeof(inst_name),
"auto_resampler_%d",
576 av_assert0(outlink-> in_formats->refcount > 0);
581 av_assert0(outlink-> in_samplerates->refcount > 0);
585 av_assert0(outlink-> in_channel_layouts->refcount > 0);
593 inlink->out_samplerates) ||
595 inlink->out_channel_layouts)))
606 "Impossible to convert between the formats supported by the filter "
607 "'%s' and the filter '%s'\n",
link->src->name,
link->dst->name);
615 "%d queried, %d merged, %d already done, %d delayed\n",
616 count_queried, count_merged, count_already_merged, count_delayed);
625 if (count_queried || count_merged)
633 "The following filters could not choose their formats: %s\n"
634 "Consider inserting the (a)format filter near their input or "
635 "output.\n", bp.str);
672 return score1 < score2 ? dst_fmt1 : dst_fmt2;
686 for (
i=0;
i<
link->in_formats->nb_formats;
i++) {
693 link->in_formats->formats[0] = best;
699 for (
i=0;
i<
link->in_formats->nb_formats;
i++) {
706 link->in_formats->formats[0] = best;
710 link->in_formats->nb_formats = 1;
714 if (!
link->in_samplerates->nb_formats) {
716 " the link between filters %s and %s.\n",
link->src->name,
720 link->in_samplerates->nb_formats = 1;
723 if (
link->in_channel_layouts->all_layouts) {
725 " the link between filters %s and %s.\n",
link->src->name,
727 if (!
link->in_channel_layouts->all_counts)
729 "supported, try specifying a channel layout using "
730 "'aformat=channel_layouts=something'.\n");
733 link->in_channel_layouts->nb_channel_layouts = 1;
751 #define REDUCE_FORMATS(fmt_type, list_type, list, var, nb, add_format, unref_format) \
753 for (i = 0; i < filter->nb_inputs; i++) { \
754 AVFilterLink *link = filter->inputs[i]; \
757 if (!link->out_ ## list || link->out_ ## list->nb != 1) \
759 fmt = link->out_ ## list->var[0]; \
761 for (j = 0; j < filter->nb_outputs; j++) { \
762 AVFilterLink *out_link = filter->outputs[j]; \
765 if (link->type != out_link->type || \
766 out_link->in_ ## list->nb == 1) \
768 fmts = out_link->in_ ## list; \
770 if (!out_link->in_ ## list->nb) { \
771 if ((ret = add_format(&out_link->in_ ##list, fmt)) < 0)\
777 for (k = 0; k < out_link->in_ ## list->nb; k++) \
778 if (fmts->var[k] == fmt) { \
779 fmts->var[0] = fmt; \
790 int i, j, k,
ret = 0;
798 for (
i = 0;
i <
filter->nb_inputs;
i++) {
802 if (!
inlink->out_channel_layouts ||
803 inlink->out_channel_layouts->nb_channel_layouts != 1)
805 fmt =
inlink->out_channel_layouts->channel_layouts[0];
807 for (j = 0; j <
filter->nb_outputs; j++) {
861 for (
i = 0;
i <
filter->nb_inputs;
i++) {
865 link->out_samplerates->nb_formats== 1)
873 for (
i = 0;
i <
filter->nb_outputs;
i++) {
875 int best_idx, best_diff = INT_MAX;
886 if (
diff < best_diff) {
904 #define CH_CENTER_PAIR (AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER)
905 #define CH_FRONT_PAIR (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT)
906 #define CH_STEREO_PAIR (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT)
907 #define CH_WIDE_PAIR (AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT)
908 #define CH_SIDE_PAIR (AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT)
909 #define CH_DIRECT_PAIR (AV_CH_SURROUND_DIRECT_LEFT | AV_CH_SURROUND_DIRECT_RIGHT)
910 #define CH_BACK_PAIR (AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT)
943 for (
i = 0;
i <
filter->nb_inputs;
i++) {
947 link->out_channel_layouts->nb_channel_layouts == 1)
953 for (
i = 0;
i <
filter->nb_outputs;
i++) {
955 int best_idx = -1, best_score = INT_MIN, best_count_diff = INT_MAX;
962 uint64_t in_chlayout =
link->out_channel_layouts->channel_layouts[0];
966 int count_diff = out_channels - in_channels;
967 int matched_channels, extra_channels;
979 score -= 10000 +
FFABS(out_channels - in_channels) +
980 (in_channels > out_channels ? 10000 : 0);
981 in_chlayout = out_chlayout = 0;
990 if (( in_chlayout & cmp0) && (!(out_chlayout & cmp0)) &&
991 (out_chlayout & cmp1) && (!( in_chlayout & cmp1))) {
992 in_chlayout &= ~cmp0;
993 out_chlayout &= ~cmp1;
1011 score += 10 * matched_channels - 5 * extra_channels;
1013 if (score > best_score ||
1014 (count_diff < best_count_diff && score == best_score)) {
1017 best_count_diff = count_diff;
1041 for (
i = 0;
i <
filter->nb_inputs;
i++) {
1045 link->out_formats->nb_formats == 1)
1054 for (
i = 0;
i <
filter->nb_outputs;
i++) {
1056 int best_idx = -1, best_score = INT_MIN;
1074 if (
bps == 4 && out_bps == 8) {
1080 score = -
abs(out_bps -
bps);
1084 if (score > best_score) {
1114 for (j = 0; j <
filter->nb_inputs; j++){
1115 if(
filter->inputs[j]->in_formats &&
filter->inputs[j]->in_formats->nb_formats == 1) {
1123 for (j = 0; j <
filter->nb_outputs; j++){
1124 if(
filter->outputs[j]->in_formats &&
filter->outputs[j]->in_formats->nb_formats == 1) {
1132 for (j = 0; j <
filter->nb_outputs; j++) {
1133 if(
filter->outputs[j]->format<0) {
1146 for (j = 0; j <
filter->nb_inputs; j++)
1149 for (j = 0; j <
filter->nb_outputs; j++)
1191 int sink_links_count = 0, n = 0;
1197 for (j = 0; j <
f->nb_inputs; j++) {
1198 f->inputs[j]->graph = graph;
1199 f->inputs[j]->age_index = -1;
1201 for (j = 0; j <
f->nb_outputs; j++) {
1202 f->outputs[j]->graph = graph;
1203 f->outputs[j]->age_index= -1;
1205 if (!
f->nb_outputs) {
1206 if (
f->nb_inputs > INT_MAX - sink_links_count)
1208 sink_links_count +=
f->nb_inputs;
1211 sinks =
av_calloc(sink_links_count,
sizeof(*sinks));
1216 if (!
f->nb_outputs) {
1217 for (j = 0; j <
f->nb_inputs; j++) {
1218 sinks[n] =
f->inputs[j];
1219 f->inputs[j]->age_index = n++;
1238 for (j = 0; j <
f->nb_inputs; j++) {
1244 if (!
link->dstpad->needs_fifo)
1305 if (!strcmp(target,
"all") || (
filter->name && !strcmp(target,
filter->name)) || !strcmp(target,
filter->filter->name)) {
1326 if(
filter && (!strcmp(target,
"all") || !strcmp(target,
filter->name) || !strcmp(target,
filter->filter->name))){
1328 while (*queue && (*queue)->
time <= ts)
1329 queue = &(*queue)->
next;
1337 (*queue)->time = ts;
1338 (*queue)->flags =
flags;
1339 (*queue)->next =
next;
1356 int parent = (
index - 1) >> 1;
1357 if (
links[parent]->current_pts_us >=
link->current_pts_us)
1375 int child = 2 *
index + 1;
1379 links[child + 1]->current_pts_us <
links[child]->current_pts_us)
1381 if (
link->current_pts_us <
links[child]->current_pts_us)
1400 int64_t frame_count;
avfilter_execute_func * execute
This callback may be set by the caller immediately after allocating the graph and before adding any f...
A list of supported channel layouts.
#define AVFILTER_CMD_FLAG_ONE
Stop once a filter understood the command (for target=all for example), fast filters are favored auto...
#define AV_LOG_WARNING
Something somehow does not look correct.
AVPixelFormat
Pixel format.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
struct AVFilterChannelLayouts * in_channel_layouts
int nb_threads
Maximum number of threads used by filters in this graph.
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
static const uint64_t ch_subst[][2]
#define FFSWAP(type, a, b)
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
int frame_wanted_out
True if a frame is currently wanted on the output of this filter.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AVERROR_EOF
End of file.
AVFilterPad * dstpad
input pad on the dest filter
static const struct PPFilter filters[]
int attribute_align_arg av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
Get a frame with filtered data from sink and put it in frame.
AVFilterFormats * in_formats
Lists of formats and channel layouts supported by the input and output filters respectively.
static int convert(uint8_t x)
The exact code depends on how similar the blocks are and how related they are to the and needs to apply these operations to the correct inlink or outlink if there are several Macros are available to factor that when no extra processing is inlink
static int filter_query_formats(AVFilterContext *ctx)
int ff_filter_activate(AVFilterContext *filter)
static void swap_sample_fmts(AVFilterGraph *graph)
struct AVFilterInOut * next
next input/input in the list, NULL if this is the last
static int graph_insert_fifos(AVFilterGraph *graph, AVClass *log_ctx)
static int pick_formats(AVFilterGraph *graph)
int ff_request_frame(AVFilterLink *link)
Request an input frame from the filter at the other end of the link.
unsigned disable_auto_convert
static int pick_format(AVFilterLink *link, AVFilterLink *ref)
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
int ff_filter_graph_run_once(AVFilterGraph *graph)
Run one round of processing on a filter graph.
A link between two filters.
AVFilterFormats * in_samplerates
Lists of channel layouts and sample rates used for automatic negotiation.
AVFilterContext * ff_filter_alloc(const AVFilter *filter, const char *inst_name)
Allocate a new filter context and return it.
struct AVFilterChannelLayouts * out_channel_layouts
static void swap_samplerates(AVFilterGraph *graph)
void avfilter_graph_free(AVFilterGraph **graph)
Free a graph, destroy its links, and set *graph to NULL.
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
static int get_fmt_score(enum AVSampleFormat dst_fmt, enum AVSampleFormat src_fmt)
int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx)
Create and add a filter instance into an existing graph.
AVFilterContext * avfilter_graph_alloc_filter(AVFilterGraph *graph, const AVFilter *filter, const char *name)
Create a new filter instance in a filter graph.
AVFilterGraph * avfilter_graph_alloc(void)
Allocate a filter graph.
static int reduce_formats(AVFilterGraph *graph)
int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, unsigned filt_srcpad_idx, unsigned filt_dstpad_idx)
Insert a filter in the middle of an existing link.
int avfilter_config_links(AVFilterContext *filter)
Negotiate the media format, dimensions, etc of all inputs to a filter.
#define AV_BPRINT_SIZE_AUTOMATIC
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
#define AVFILTER_THREAD_SLICE
Process multiple parts of the frame concurrently.
static void heap_bubble_down(AVFilterGraph *graph, AVFilterLink *link, int index)
#define REDUCE_FORMATS(fmt_type, list_type, list, var, nb, add_format, unref_format)
int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of a plane of an image with...
A filter pad used for either input or output.
enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt)
Get the planar alternative form of the given sample format.
static int reduce_formats_on_filter(AVFilterContext *filter)
enum AVMediaType type
filter media type
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int graph_config_formats(AVFilterGraph *graph, AVClass *log_ctx)
Configure the formats of all the links in the graph.
#define AV_CH_LOW_FREQUENCY
#define AV_BUFFERSINK_FLAG_PEEK
Tell av_buffersink_get_buffer_ref() to read video/samples buffer reference, but not remove it from th...
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
uint64_t * channel_layouts
list of channel layouts
int channels
number of audio channels, only used for audio.
int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags)
Make the filter instance process a command.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
Check if the sample format is planar.
static const AVOption filtergraph_options[]
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
char * aresample_swr_opts
swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
static int command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a link
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int(* activate)(AVFilterContext *ctx)
Filter activation function.
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx)
Check validity and configure all the links and formats in the graph.
static void sanitize_channel_layouts(void *log, AVFilterChannelLayouts *l)
uint8_t nb_components
The number of components each pixel has, (1-4)
void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags)
Enable or disable automatic format conversion inside the graph.
AVFilterContext ** filters
const char * av_default_item_name(void *ptr)
Return the context name.
char * name
name of this filter instance
static void heap_bubble_up(AVFilterGraph *graph, AVFilterLink *link, int index)
AVFilterContext * avfilter_graph_get_filter(AVFilterGraph *graph, const char *name)
Get a filter instance identified by instance name from graph.
int avfilter_graph_request_oldest(AVFilterGraph *graph)
Request a frame on the oldest sink link.
#define AV_CH_FRONT_CENTER
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
@ AV_CLASS_CATEGORY_FILTER
char * scale_sws_opts
sws options to use for the auto-inserted scale filters
void ff_graph_thread_free(AVFilterGraph *graph)
struct AVFilterCommand * next
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
int sample_rate
Sample rate of the audio data.
int format
agreed upon media format
int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *command, const char *arg, int flags, double ts)
Queue a command for one or more filter instances.
AVFilterContext * dst
dest filter
char all_layouts
accept any known channel layout
char all_counts
accept any channel layout or count
static const int8_t filt[NUMTAPS]
AVFilterFormats * out_samplerates
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
avfilter_execute_func * thread_execute
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
uint64_t channel_layout
Channel layout of the audio data.
static enum AVSampleFormat find_best_sample_fmt_of_2(enum AVSampleFormat dst_fmt1, enum AVSampleFormat dst_fmt2, enum AVSampleFormat src_fmt)
static AVFilterFormats * clone_filter_formats(AVFilterFormats *arg)
AVFilterFormats * out_formats
static int can_merge_formats(AVFilterFormats *a_arg, AVFilterFormats *b_arg, enum AVMediaType type, int is_sample_rate)
int avfilter_init_str(AVFilterContext *filter, const char *args)
Initialize a filter with the supplied parameters.
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
static void swap_sample_fmts_on_filter(AVFilterContext *filter)
int age_index
Index in the age array.
#define i(width, name, range_min, range_max)
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
int w
agreed upon image width
static int graph_check_validity(AVFilterGraph *graph, AVClass *log_ctx)
Check for the validity of graph.
static void swap_channel_layouts_on_filter(AVFilterContext *filter)
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
AVSampleFormat
Audio sample formats.
#define AV_CH_BACK_CENTER
AVFilterGraphInternal * internal
Opaque object for libavfilter internal use.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
Perform one round of query_formats() and merging formats lists on the filter graph.
int thread_type
Type of multithreading allowed for filters in this graph.
const char * name
Pad name.
int ff_graph_thread_init(AVFilterGraph *graph)
static void swap_channel_layouts(AVFilterGraph *graph)
#define AVFILTER_CMD_FLAG_FAST
Only execute command when its fast (like a video out that supports contrast adjustment in hw)
AVFilterLink ** sink_links
Private fields.
enum AVMediaType type
AVFilterPad type.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output links
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
void av_bprintf(AVBPrint *buf, const char *fmt,...)
#define FF_ARRAY_ELEMS(a)
static int formats_declared(AVFilterContext *f)
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
Compute what kind of losses will occur when converting from one specific pixel format to another.
void * av_calloc(size_t nmemb, size_t size)
Non-inlined equivalent of av_mallocz_array().
int h
agreed upon image height
void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter)
Remove a filter from a graph;.
void ff_framequeue_global_init(FFFrameQueueGlobal *fqg)
Init a global structure.
void ff_avfilter_graph_update_heap(AVFilterGraph *graph, AVFilterLink *link)
Update the position of a link in the age heap.
enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt)
Get the packed alternative form of the given sample format.
static int ref[MAX_W *MAX_W]
#define MERGE_DISPATCH(field, statement)
char * av_strdup(const char *s)
Duplicate a string.
int nb_channel_layouts
number of channel layouts
void avfilter_free(AVFilterContext *filter)
Free a filter context.
static av_always_inline int diff(const uint32_t a, const uint32_t b)
static const uint16_t channel_layouts[7]
static void swap_samplerates_on_filter(AVFilterContext *filter)
#define flags(name, subs,...)
int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags)
Send a command to one or more filter instances.
static int graph_config_pointers(AVFilterGraph *graph, AVClass *log_ctx)
const AVFilter * filter
the AVFilter of which this is an instance
unsigned refcount
number of references to this list
static int graph_config_links(AVFilterGraph *graph, AVClass *log_ctx)
Configure all the links of graphctx.
static int graph_check_links(AVFilterGraph *graph, AVClass *log_ctx)
@ AV_SAMPLE_FMT_S32
signed 32 bits
static const AVClass filtergraph_class
unsigned ready
Ready status of the filter.
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
double time
time expressed in seconds