Go to the documentation of this file.
39 #define CHAN_IS_AMBI(x) ((x) >= AV_CHAN_AMBISONIC_BASE &&\
40 (x) <= AV_CHAN_AMBISONIC_END)
108 if (!buf && buf_size)
114 if (bp.len >= INT_MAX)
141 if (!buf && buf_size)
147 if (bp.len >= INT_MAX)
155 char *endptr = (
char *)str;
158 if (!strncmp(str,
"AMBI", 4)) {
159 i = strtol(str + 4,
NULL, 0);
169 if (!strcmp(str,
"UNK"))
171 if (!strcmp(str,
"UNSD"))
174 if (!strncmp(str,
"USR", 3)) {
175 const char *p = str + 3;
176 id = strtol(p, &endptr, 0);
178 if (
id >= 0 && !*endptr)
234 if (nb_channels <= 0)
240 for (
int i = 0;
i < nb_channels;
i++)
328 memset(channel_layout, 0,
sizeof(*channel_layout));
331 if (!strncmp(str,
"ambisonic ", 10)) {
332 const char *p = str + 10;
337 order = strtol(p, &endptr, 0);
338 if (order < 0 || order + 1 > INT_MAX / (order + 1) ||
339 (*endptr && *endptr !=
'+'))
343 channel_layout->
nb_channels = (order + 1) * (order + 1);
358 channel_layout->
u.
map =
360 sizeof(*channel_layout->
u.
map));
361 if (!channel_layout->
u.
map) {
395 matches =
av_sscanf(str,
"%d channels (%[^)]", &nb_channels, chlist);
402 end = strchr(str,
')');
403 if (matches == 2 && (nb_channels != channel_layout->
nb_channels || !end || *++end)) {
411 mask = strtoull(str, &end, 0);
414 if (!errno && !*end && !strchr(str,
'-') &&
mask) {
423 if (!errno && !strcmp(end,
"c") &&
channels > 0) {
430 if (!errno && (!strcmp(end,
"C") || !strcmp(end,
" channels"))
444 memset(channel_layout, 0,
sizeof(*channel_layout));
455 memcpy(
dst->u.map,
src->u.map,
src->nb_channels *
sizeof(*
src->u.map));
463 for (
int i = start_channel;
i < channel_layout->
nb_channels;
i++) {
465 if (ch >= 0 && ch < 63 &&
mask < (1ULL << ch))
466 mask |= (1ULL << ch);
485 int i, highest_ambi, order;
514 if (highest_ambi < 0)
517 order =
floor(sqrt(highest_ambi));
519 if ((order + 1) * (order + 1) != highest_ambi + 1)
527 int has_known_channel = 0;
531 return channel_layout->
order;
536 for (
int i = 0;
i < channel_layout->
nb_channels && !has_known_channel;
i++)
538 has_known_channel = 1;
539 if (!has_known_channel)
559 int nb_ambi_channels;
567 nb_ambi_channels = (order + 1) * (order + 1);
568 if (nb_ambi_channels < channel_layout->nb_channels) {
585 extra.
u.
map = channel_layout->
u.
map + nb_ambi_channels;
602 switch (channel_layout->
order) {
652 char *buf,
size_t buf_size)
657 if (!buf && buf_size)
665 if (bp.len >= INT_MAX)
679 switch (channel_layout->
order) {
681 return channel_layout->
u.
map[idx].
id;
684 if (idx < ambi_channels)
686 idx -= ambi_channels;
690 for (
i = 0;
i < 64;
i++) {
691 if ((1ULL <<
i) & channel_layout->
u.
mask && !idx--)
719 switch (channel_layout->
order) {
751 switch (channel_layout->
order) {
753 chname = strstr(str,
"@");
765 if (!strcmp(chname, channel_layout->
u.
map[
i].
name) &&
786 switch (channel_layout->
order) {
790 if (!channel_layout->
u.
map)
852 uintptr_t
i = (uintptr_t)*opaque;
857 *opaque = (
void*)(
i + 1);
869 switch (channel_layout->
order) {
874 for (
i = 0;
i < 64;
i++)
894 if (channel_layout->
order == order)
902 for (
int i = 0;
i < nb_channels;
i++) {
911 if (!lossy || allow_lossy) {
912 void *opaque = channel_layout->
opaque;
916 channel_layout->
opaque = opaque;
927 if (!lossy || allow_lossy) {
928 void *opaque = channel_layout->
opaque;
931 channel_layout->
opaque = opaque;
939 void *opaque = channel_layout->
opaque;
946 *channel_layout = custom;
947 channel_layout->
opaque = opaque;
961 if (!lossy || allow_lossy) {
962 void *opaque = channel_layout->
opaque;
967 channel_layout->
opaque = opaque;
union AVChannelLayout::@427 u
Details about which channels are present in this layout.
#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX
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
#define AV_CHANNEL_LAYOUT_OCTAGONAL
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
#define AV_CHANNEL_LAYOUT_7POINT1POINT4_BACK
#define AV_CHANNEL_LAYOUT_STEREO
#define AV_CHANNEL_LAYOUT_4POINT1
#define AV_CHANNEL_LAYOUT_HEXAGONAL
@ AV_OPT_FLAG_IMPLICIT_KEY
Accept to parse a value without a key; the key will then be returned as NULL.
AVChannelCustom * map
This member must be used when the channel order is AV_CHANNEL_ORDER_CUSTOM.
#define AV_CHANNEL_LAYOUT_2_2
@ AV_CHAN_TOP_SURROUND_LEFT
+110 degrees, Lvs, TpLS
int av_channel_layout_ambisonic_order(const AVChannelLayout *channel_layout)
Return the order if the layout is n-th order standard-order ambisonic.
enum AVChannel av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx)
Get the channel with the given index in a channel layout.
void * av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, const uint8_t *elem_data)
Add an element of size elem_size to a dynamic array.
enum AVChannelOrder order
Channel order used in this layout.
uint64_t mask
This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used for AV_CHANNEL_ORDER_AMBISONIC ...
int nb_channels
Number of channels in this layout.
#define AV_CHANNEL_LAYOUT_7POINT2POINT3
int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, AVBPrint *bp)
bprint variant of av_channel_layout_describe().
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE
@ AV_CHAN_SURROUND_DIRECT_LEFT
void av_channel_description_bprint(AVBPrint *bp, enum AVChannel channel_id)
bprint variant of av_channel_description().
#define AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK
void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size)
Init a print buffer using a pre-existing buffer.
#define AV_CHANNEL_LAYOUT_7POINT1POINT2
int av_opt_get_key_value(const char **ropts, const char *key_val_sep, const char *pairs_sep, unsigned flags, char **rkey, char **rval)
Extract a key-value pair from the beginning of a string.
#define AV_CHANNEL_LAYOUT_2POINT1
static int try_describe_ambisonic(AVBPrint *bp, const AVChannelLayout *channel_layout)
If the custom layout is n-th order standard-order ambisonic, with optional extra non-diegetic channel...
#define AV_CHANNEL_LAYOUT_6POINT1_FRONT
#define AV_CHANNEL_LAYOUT_SURROUND
@ AV_CHAN_STEREO_RIGHT
See above.
@ AV_CHAN_BOTTOM_FRONT_LEFT
#define FF_ARRAY_ELEMS(a)
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
#define AV_CHANNEL_LAYOUT_4POINT0
#define AV_CHANNEL_LAYOUT_7POINT1
An AVChannelCustom defines a single channel within a custom order layout.
static __device__ float floor(float a)
@ AV_CHAN_UNKNOWN
Channel contains data, but its position is unknown.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
#define AV_CHANNEL_LAYOUT_5POINT0_BACK
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout, const char *str)
Get the index in a channel layout of a channel described by the given string.
const AVChannelLayout * av_channel_layout_standard(void **opaque)
Iterate over all standard channel layouts.
static int has_channel_names(const AVChannelLayout *channel_layout)
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK
@ AV_CHAN_SIDE_SURROUND_LEFT
+90 degrees, Lss, SiL
#define AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS
The conversion must be lossless.
int av_sscanf(const char *string, const char *format,...)
See libc sscanf manual for more information.
@ AV_CHANNEL_ORDER_AMBISONIC
The audio is represented as the decomposition of the sound field into spherical harmonics.
#define AV_CHANNEL_LAYOUT_3POINT1POINT2
#define AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL
The specified retype target order is ignored and the simplest possible (canonical) order is used for ...
@ AV_CHAN_TOP_BACK_CENTER
static const struct channel_name channel_names[]
@ AV_CHAN_BOTTOM_FRONT_RIGHT
@ AV_CHAN_FRONT_RIGHT_OF_CENTER
#define AV_CHANNEL_LAYOUT_22POINT2
static int parse_channel_list(AVChannelLayout *ch_layout, const char *str)
static const struct channel_layout_name channel_layout_map[]
#define AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK
An AVChannelLayout holds information about the channel layout of audio data.
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
#define AV_CHANNEL_LAYOUT_6POINT0
int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel_id)
Get a human readable string describing a given channel.
int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags)
Change the AVChannelOrder of a channel layout.
@ AV_CHAN_TOP_FRONT_RIGHT
@ AV_CHANNEL_ORDER_NATIVE
The native channel order, i.e.
@ AV_CHAN_FRONT_LEFT_OF_CENTER
@ AV_CHAN_UNUSED
Channel is empty can be safely skipped.
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
int av_channel_layout_custom_init(AVChannelLayout *channel_layout, int nb_channels)
Initialize a custom channel layout with the specified number of channels.
#define AV_CHANNEL_LAYOUT_HEXADECAGONAL
void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels)
Get the default channel layout for a given number of channels.
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 layout
#define AV_CHANNEL_LAYOUT_6POINT1_BACK
@ AV_CHAN_TOP_SURROUND_RIGHT
-110 degrees, Rvs, TpRS
int av_channel_layout_from_string(AVChannelLayout *channel_layout, const char *str)
Initialize a channel layout from a given string description.
#define AV_CHANNEL_LAYOUT_CUBE
@ AV_CHAN_SURROUND_DIRECT_RIGHT
#define i(width, name, range_min, range_max)
#define AV_CHANNEL_LAYOUT_QUAD
int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel_id)
Get a human readable string in an abbreviated form describing a given channel.
static enum AVChannelOrder canonical_order(AVChannelLayout *channel_layout)
#define av_malloc_array(a, b)
#define AV_CHANNEL_LAYOUT_7POINT0_FRONT
#define AV_CHANNEL_LAYOUT_5POINT1POINT4_BACK
#define AV_CHANNEL_LAYOUT_3POINT1
@ AV_CHAN_STEREO_LEFT
Stereo downmix.
void * av_calloc(size_t nmemb, size_t size)
int av_channel_layout_check(const AVChannelLayout *channel_layout)
Check whether a channel layout is valid, i.e.
#define AV_CHANNEL_LAYOUT_7POINT0
void av_bprintf(AVBPrint *buf, const char *fmt,...)
enum AVChannel av_channel_from_string(const char *str)
This is the inverse function of av_channel_name().
#define AV_CHANNEL_LAYOUT_2_1
@ AV_CHAN_NONE
Invalid channel index.
@ AV_CHANNEL_ORDER_CUSTOM
The channel order does not correspond to any other predefined order and is stored as an explicit map.
void * opaque
For some private data of the user.
@ AV_CHAN_LOW_FREQUENCY_2
uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, uint64_t mask)
Find out what channels from a given set are present in a channel layout, without regard for their pos...
enum AVChannel av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout, const char *str)
Get a channel described by the given string.
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, enum AVChannel channel)
Get the index of a given channel in a channel layout.
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
#define AV_CHANNEL_LAYOUT_6POINT0_FRONT
static int64_t masked_description(const AVChannelLayout *channel_layout, int start_channel)
@ AV_CHAN_BOTTOM_FRONT_CENTER
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
char * av_strdup(const char *s)
Duplicate a string.
@ AV_CHAN_TOP_FRONT_CENTER
@ AV_CHAN_SIDE_SURROUND_RIGHT
-90 degrees, Rss, SiR
const VDPAUPixFmtMap * map
#define AV_CHANNEL_LAYOUT_BINAURAL
#define AV_CHANNEL_LAYOUT_MONO
@ AV_CHAN_AMBISONIC_BASE
Range of channels between AV_CHAN_AMBISONIC_BASE and AV_CHAN_AMBISONIC_END represent Ambisonic compon...
#define AV_CHANNEL_LAYOUT_5POINT1_BACK
#define flags(name, subs,...)
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
#define AV_CHANNEL_LAYOUT_6POINT1
#define AV_CHANNEL_LAYOUT_5POINT0
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.
#define AV_CHANNEL_LAYOUT_5POINT1
void av_channel_name_bprint(AVBPrint *bp, enum AVChannel channel_id)
bprint variant of av_channel_name().