31 #define KNOWN(l) (!FF_LAYOUT2COUNT(l)) 36 #define MERGE_REF(ret, a, fmts, type, fail_statement) \ 41 if (!(tmp = av_realloc_array(ret->refs, ret->refcount + a->refcount, \ 46 for (i = 0; i < a->refcount; i ++) { \ 47 ret->refs[ret->refcount] = a->refs[i]; \ 48 *ret->refs[ret->refcount++] = ret; \ 63 #define MERGE_FORMATS(a, b, fmts, nb, type, check, empty_allowed) \ 65 int i, j, k = 0, skip = 0; \ 67 if (empty_allowed) { \ 68 if (!a->nb || !b->nb) { \ 72 FFSWAP(type *, a, b); \ 77 for (i = 0; i < a->nb; i++) \ 78 for (j = 0; j < b->nb; j++) \ 79 if (a->fmts[i] == b->fmts[j]) { \ 82 a->fmts[k++] = a->fmts[i]; \ 93 MERGE_REF(a, b, fmts, type, return AVERROR(ENOMEM);); \ 100 int alpha1=0, alpha2=0;
101 int chroma1=0, chroma2=0;
127 if (alpha2 > alpha1 || chroma2 > chroma1)
152 if (a == b)
return 1;
175 int ret_max, ret_nb = 0,
i, j,
round;
179 if (a == b)
return 1;
184 FFSWAP(
unsigned, a_all, b_all);
187 if (a_all == 1 && !b_all) {
203 if (!(channel_layouts =
av_malloc_array(ret_max,
sizeof(*channel_layouts))))
220 for (round = 0; round < 2; round++) {
223 if (!fmt || !
KNOWN(fmt))
262 for (p = fmts; *p != -1; p++) {
269 #define MAKE_FORMAT_LIST(type, field, count_field) \ 273 for (count = 0; fmts[count] != -1; count++) \ 275 formats = av_mallocz(sizeof(*formats)); \ 278 formats->count_field = count; \ 280 formats->field = av_malloc_array(count, sizeof(*formats->field)); \ 281 if (!formats->field) { \ 282 av_freep(&formats); \ 301 memcpy(
formats->channel_layouts, fmts,
307 #if LIBAVFILTER_VERSION_MAJOR < 8 314 #define ADD_FORMAT(f, fmt, unref_fn, type, list, nb) \ 318 if (!(*f) && !(*f = av_mallocz(sizeof(**f)))) { \ 319 return AVERROR(ENOMEM); \ 322 fmts = av_realloc_array((*f)->list, (*f)->nb + 1, \ 323 sizeof(*(*f)->list)); \ 326 return AVERROR(ENOMEM); \ 330 (*f)->list[(*f)->nb++] = fmt; \ 370 unsigned nb_formats, fmt,
flags;
375 for (fmt = 0;; fmt++) {
384 if ((flags & (want | rej)) != want)
387 formats->
formats[nb_formats] = fmt;
446 #define FORMATS_REF(f, ref, unref_fn) \ 450 return AVERROR(ENOMEM); \ 452 tmp = av_realloc_array(f->refs, sizeof(*f->refs), f->refcount + 1); \ 455 return AVERROR(ENOMEM); \ 458 f->refs[f->refcount++] = ref; \ 472 #define FIND_REF_INDEX(ref, idx) \ 475 for (i = 0; i < (*ref)->refcount; i ++) \ 476 if((*ref)->refs[i] == ref) { \ 482 #define FORMATS_UNREF(ref, list) \ 489 FIND_REF_INDEX(ref, idx); \ 492 memmove((*ref)->refs + idx, (*ref)->refs + idx + 1, \ 493 sizeof(*(*ref)->refs) * ((*ref)->refcount - idx - 1)); \ 494 --(*ref)->refcount; \ 496 if (!(*ref)->refcount) { \ 497 av_free((*ref)->list); \ 498 av_free((*ref)->refs); \ 514 #define FORMATS_CHANGEREF(oldref, newref) \ 518 FIND_REF_INDEX(oldref, idx); \ 521 (*oldref)->refs[idx] = newref; \ 538 #define SET_COMMON_FORMATS(ctx, fmts, ref_fn, unref_fn) \ 542 return AVERROR(ENOMEM); \ 544 for (i = 0; i < ctx->nb_inputs; i++) { \ 545 if (ctx->inputs[i] && !ctx->inputs[i]->outcfg.fmts) { \ 546 int ret = ref_fn(fmts, &ctx->inputs[i]->outcfg.fmts); \ 553 for (i = 0; i < ctx->nb_outputs; i++) { \ 554 if (ctx->outputs[i] && !ctx->outputs[i]->incfg.fmts) { \ 555 int ret = ref_fn(fmts, &ctx->outputs[i]->incfg.fmts); \ 623 pix_fmt = strtol(arg, &tail, 0);
637 if (*tail || srate < 1 || (
int)srate != srate || srate > INT_MAX) {
655 if (!chlayout && !nret) {
656 av_log(log_ctx,
AV_LOG_ERROR,
"Unknown channel layout '%s' is not supported.\n", arg);
694 return check_list(log,
"sample format", fmts);
static enum AVPixelFormat pix_fmt
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Main libavfilter public API header.
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
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
AVFilterLink ** inputs
array of pointers to input links
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
Check if the sample format is planar.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
unsigned nb_outputs
number of output pads
uint64_t * channel_layouts
list of channel layouts
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
simple assert() macros that are a bit more flexible than ISO C assert().
static av_always_inline av_const double round(double x)
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.
char all_counts
accept any channel layout or count
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
uint8_t nb_components
The number of components each pixel has, (1-4)
audio channel layout utility functions
unsigned nb_inputs
number of input pads
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
A list of supported channel layouts.
double av_strtod(const char *numstr, char **tail)
Parse the string in numstr and return its value as a double.
AVSampleFormat
Audio sample formats.
char all_layouts
accept any known channel layout
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
static const uint16_t channel_layouts[7]
AVFilterLink ** outputs
array of pointers to output links
#define flags(name, subs,...)
enum AVMediaType type
filter media type
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
common internal and external API header
static int ref[MAX_W *MAX_W]
int nb_channel_layouts
number of channel layouts
unsigned refcount
number of references to this list
#define av_malloc_array(a, b)
#define FFSWAP(type, a, b)
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to 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
AVPixelFormat
Pixel format.
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
int av_get_extended_channel_layout(const char *name, uint64_t *channel_layout, int *nb_channels)
Return a channel layout and the number of channels based on the specified name.
simple arithmetic expression evaluator
const AVPixFmtDescriptor * av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
Iterate over all pixel format descriptors known to libavutil.
#define check(x, y, S, v)