32 #define KNOWN(l) (!FF_LAYOUT2COUNT(l)) 38 #define MERGE_REF_NO_ALLOC(ret, a, fmts) \ 41 for (i = 0; i < a->refcount; i ++) { \ 42 ret->refs[ret->refcount] = a->refs[i]; \ 43 *ret->refs[ret->refcount++] = ret; \ 51 #define MERGE_REF(ret, a, fmts, type, fail) \ 55 if (!(tmp = av_realloc_array(ret->refs, ret->refcount + a->refcount, \ 59 MERGE_REF_NO_ALLOC(ret, a, fmts); \ 66 #define MERGE_FORMATS(ret, a, b, fmts, nb, type, fail) \ 68 int i, j, k = 0, count = FFMIN(a->nb, b->nb); \ 71 if (!(ret = av_mallocz(sizeof(*ret)))) \ 75 if (!(ret->fmts = av_malloc_array(count, sizeof(*ret->fmts)))) \ 77 for (i = 0; i < a->nb; i++) \ 78 for (j = 0; j < b->nb; j++) \ 79 if (a->fmts[i] == b->fmts[j]) { \ 80 if(k >= FFMIN(a->nb, b->nb)){ \ 81 av_log(NULL, AV_LOG_ERROR, "Duplicate formats in %s detected\n", __FUNCTION__); \ 86 ret->fmts[k++] = a->fmts[i]; \ 94 tmp = av_realloc_array(NULL, a->refcount + b->refcount, sizeof(*tmp)); \ 99 MERGE_REF_NO_ALLOC(ret, a, fmts); \ 100 MERGE_REF_NO_ALLOC(ret, b, fmts); \ 108 int alpha1=0, alpha2=0;
109 int chroma1=0, chroma2=0;
135 if (alpha2 > alpha1 || chroma2 > chroma1)
155 if (a == b)
return a;
183 int ret_max, ret_nb = 0,
i, j,
round;
185 if (a == b)
return a;
190 FFSWAP(
unsigned, a_all, b_all);
193 if (a_all == 1 && !b_all) {
228 for (round = 0; round < 2; round++) {
231 if (!fmt || !
KNOWN(fmt))
275 for (p = fmts; *p != -1; p++) {
282 #define MAKE_FORMAT_LIST(type, field, count_field) \ 286 for (count = 0; fmts[count] != -1; count++) \ 288 formats = av_mallocz(sizeof(*formats)); \ 291 formats->count_field = count; \ 293 formats->field = av_malloc_array(count, sizeof(*formats->field)); \ 294 if (!formats->field) { \ 295 av_freep(&formats); \ 304 formats->formats[count] = fmts[count];
314 memcpy(
formats->channel_layouts, fmts,
315 sizeof(*
formats->channel_layouts) * count);
325 memcpy(
formats->channel_layouts, fmts,
326 sizeof(*
formats->channel_layouts) * count);
331 #define ADD_FORMAT(f, fmt, unref_fn, type, list, nb) \ 335 if (!(*f) && !(*f = av_mallocz(sizeof(**f)))) { \ 336 return AVERROR(ENOMEM); \ 339 fmts = av_realloc_array((*f)->list, (*f)->nb + 1, \ 340 sizeof(*(*f)->list)); \ 343 return AVERROR(ENOMEM); \ 347 (*f)->list[(*f)->nb++] = fmt; \ 387 unsigned nb_formats, fmt,
flags;
392 for (fmt = 0;; fmt++) {
401 if ((flags & (want | rej)) != want)
404 formats->
formats[nb_formats] = fmt;
463 #define FORMATS_REF(f, ref, unref_fn) \ 467 return AVERROR(ENOMEM); \ 469 tmp = av_realloc_array(f->refs, sizeof(*f->refs), f->refcount + 1); \ 472 return AVERROR(ENOMEM); \ 475 f->refs[f->refcount++] = ref; \ 489 #define FIND_REF_INDEX(ref, idx) \ 492 for (i = 0; i < (*ref)->refcount; i ++) \ 493 if((*ref)->refs[i] == ref) { \ 499 #define FORMATS_UNREF(ref, list) \ 506 FIND_REF_INDEX(ref, idx); \ 509 memmove((*ref)->refs + idx, (*ref)->refs + idx + 1, \ 510 sizeof(*(*ref)->refs) * ((*ref)->refcount - idx - 1)); \ 511 --(*ref)->refcount; \ 513 if (!(*ref)->refcount) { \ 514 av_free((*ref)->list); \ 515 av_free((*ref)->refs); \ 531 #define FORMATS_CHANGEREF(oldref, newref) \ 535 FIND_REF_INDEX(oldref, idx); \ 538 (*oldref)->refs[idx] = newref; \ 555 #define SET_COMMON_FORMATS(ctx, fmts, in_fmts, out_fmts, ref_fn, unref_fn) \ 559 return AVERROR(ENOMEM); \ 561 for (i = 0; i < ctx->nb_inputs; i++) { \ 562 if (ctx->inputs[i] && !ctx->inputs[i]->out_fmts) { \ 563 int ret = ref_fn(fmts, &ctx->inputs[i]->out_fmts); \ 570 for (i = 0; i < ctx->nb_outputs; i++) { \ 571 if (ctx->outputs[i] && !ctx->outputs[i]->in_fmts) { \ 572 int ret = ref_fn(fmts, &ctx->outputs[i]->in_fmts); \ 651 pix_fmt = strtol(arg, &tail, 0);
666 sfmt = strtol(arg, &tail, 0);
691 if (*tail || srate < 1 || (
int)srate != srate || srate > INT_MAX) {
709 if (!chlayout && !nret) {
710 av_log(log_ctx,
AV_LOG_ERROR,
"Unknown channel layout '%s' is not supported.\n", arg);
int av_parse_ratio(AVRational *q, const char *str, int max, int log_offset, void *log_ctx)
Parse str and store the parsed ratio in q.
static enum AVPixelFormat pix_fmt
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Main libavfilter public API header.
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
struct AVFilterChannelLayouts *** refs
references to this list
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.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate, or free an array.
int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
Check if the sample format is planar.
#define i(width, name, range_min, range_max)
#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.
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().
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
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
#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]
Rational number (pair of numerator and denominator).
enum AVSampleFormat av_get_sample_fmt(const char *name)
Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE on error.
AVFilterLink ** outputs
array of pointers to output links
enum MovChannelLayoutTag * layouts
#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.
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.