Go to the documentation of this file.
123 #define TAG(_tag, _cnt) {.tag = _tag}
124 #define ID(_0) {.id = c_##_0}
125 #define CHLIST01(_tag, _1) CHLIST(_tag, 1, ID(_1))
126 #define CHLIST02(_tag, _1, _2) CHLIST(_tag, 2, ID(_1), ID(_2))
127 #define CHLIST03(_tag, _1, _2, _3) CHLIST(_tag, 3, ID(_1), ID(_2), ID(_3))
128 #define CHLIST04(_tag, _1, _2, _3, _4) CHLIST(_tag, 4, ID(_1), ID(_2), ID(_3), ID(_4))
129 #define CHLIST05(_tag, _1, _2, _3, _4, _5) CHLIST(_tag, 5, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5))
130 #define CHLIST06(_tag, _1, _2, _3, _4, _5, _6) CHLIST(_tag, 6, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5), ID(_6))
131 #define CHLIST07(_tag, _1, _2, _3, _4, _5, _6, _7) CHLIST(_tag, 7, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5), ID(_6), ID(_7))
132 #define CHLIST08(_tag, _1, _2, _3, _4, _5, _6, _7, _8) CHLIST(_tag, 8, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5), ID(_6), ID(_7), ID(_8))
133 #define CHLIST09(_tag, _1, _2, _3, _4, _5, _6, _7, _8, _9) CHLIST(_tag, 9, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5), ID(_6), ID(_7), ID(_8), ID(_9))
134 #define CHLIST16(_tag, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) \
135 CHLIST(_tag, 16, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5), ID(_6), ID(_7), ID(_8), ID(_9), ID(_10), \
136 ID(_11), ID(_12), ID(_13), ID(_14), ID(_15), ID(_16))
137 #define CHLIST21(_tag, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) \
138 CHLIST(_tag, 21, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5), ID(_6), ID(_7), ID(_8), ID(_9), ID(_10), \
139 ID(_11), ID(_12), ID(_13), ID(_14), ID(_15), ID(_16), ID(_17), ID(_18), ID(_19), ID(_20), ID(_21))
140 #define CHLIST24(_tag, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24) \
141 CHLIST(_tag, 24, ID(_1), ID(_2), ID(_3), ID(_4), ID(_5), ID(_6), ID(_7), ID(_8), ID(_9), ID(_10), \
142 ID(_11), ID(_12), ID(_13), ID(_14), ID(_15), ID(_16), ID(_17), ID(_18), ID(_19), ID(_20), \
143 ID(_21), ID(_22), ID(_23), ID(_24))
145 #define MOV_CH_LAYOUT_MAP \
146 CHLIST01( MOV_CH_LAYOUT_MONO, C )\
147 CHLIST02( MOV_CH_LAYOUT_STEREO, L, R )\
148 CHLIST02( MOV_CH_LAYOUT_STEREOHEADPHONES, L, R )\
149 CHLIST02( MOV_CH_LAYOUT_BINAURAL, L, R )\
150 CHLIST02( MOV_CH_LAYOUT_MIDSIDE, L, R )\
151 CHLIST02( MOV_CH_LAYOUT_XY, L, R )\
152 CHLIST02( MOV_CH_LAYOUT_MATRIXSTEREO, Lt, Rt )\
153 CHLIST02( MOV_CH_LAYOUT_AC3_1_0_1, C, LFE )\
154 CHLIST03( MOV_CH_LAYOUT_MPEG_3_0_A, L, R, C )\
155 CHLIST03( MOV_CH_LAYOUT_MPEG_3_0_B, C, L, R )\
156 CHLIST03( MOV_CH_LAYOUT_AC3_3_0, L, C, R )\
157 CHLIST03( MOV_CH_LAYOUT_ITU_2_1, L, R, Cs )\
158 CHLIST03( MOV_CH_LAYOUT_DVD_4, L, R, LFE )\
159 CHLIST04( MOV_CH_LAYOUT_AMBISONIC_B_FORMAT, W, X, Y, Z )\
160 CHLIST04( MOV_CH_LAYOUT_QUADRAPHONIC, L, R, Rls, Rrs )\
161 CHLIST04( MOV_CH_LAYOUT_MPEG_4_0_A, L, R, C, Cs )\
162 CHLIST04( MOV_CH_LAYOUT_MPEG_4_0_B, C, L, R, Cs )\
163 CHLIST04( MOV_CH_LAYOUT_AC3_3_1, L, C, R, Cs )\
164 CHLIST04( MOV_CH_LAYOUT_ITU_2_2, L, R, Ls, Rs )\
165 CHLIST04( MOV_CH_LAYOUT_DVD_5, L, R, LFE, Cs )\
166 CHLIST04( MOV_CH_LAYOUT_AC3_2_1_1, L, R, Cs, LFE )\
167 CHLIST04( MOV_CH_LAYOUT_DVD_10, L, R, C, LFE )\
168 CHLIST04( MOV_CH_LAYOUT_AC3_3_0_1, L, C, R, LFE )\
169 CHLIST04( MOV_CH_LAYOUT_DTS_3_1, C, L, R, LFE )\
170 CHLIST05( MOV_CH_LAYOUT_PENTAGONAL, L, R, Rls, Rrs, C )\
171 CHLIST05( MOV_CH_LAYOUT_MPEG_5_0_A, L, R, C, Ls, Rs )\
172 CHLIST05( MOV_CH_LAYOUT_MPEG_5_0_B, L, R, Ls, Rs, C )\
173 CHLIST05( MOV_CH_LAYOUT_MPEG_5_0_C, L, C, R, Ls, Rs )\
174 CHLIST05( MOV_CH_LAYOUT_MPEG_5_0_D, C, L, R, Ls, Rs )\
175 CHLIST05( MOV_CH_LAYOUT_DVD_6, L, R, LFE, Ls, Rs )\
176 CHLIST05( MOV_CH_LAYOUT_DVD_18, L, R, Ls, Rs, LFE )\
177 CHLIST05( MOV_CH_LAYOUT_DVD_11, L, R, C, LFE, Cs )\
178 CHLIST05( MOV_CH_LAYOUT_AC3_3_1_1, L, C, R, Cs, LFE )\
179 CHLIST05( MOV_CH_LAYOUT_DTS_4_1, C, L, R, Cs, LFE )\
180 CHLIST06( MOV_CH_LAYOUT_HEXAGONAL, L, R, Rls, Rrs, C, Cs )\
181 CHLIST06( MOV_CH_LAYOUT_DTS_6_0_C, C, Cs, L, R, Rls, Rrs )\
182 CHLIST06( MOV_CH_LAYOUT_MPEG_5_1_A, L, R, C, LFE, Ls, Rs )\
183 CHLIST06( MOV_CH_LAYOUT_MPEG_5_1_B, L, R, Ls, Rs, C, LFE )\
184 CHLIST06( MOV_CH_LAYOUT_MPEG_5_1_C, L, C, R, Ls, Rs, LFE )\
185 CHLIST06( MOV_CH_LAYOUT_MPEG_5_1_D, C, L, R, Ls, Rs, LFE )\
186 CHLIST06( MOV_CH_LAYOUT_AUDIOUNIT_6_0, L, R, Ls, Rs, C, Cs )\
187 CHLIST06( MOV_CH_LAYOUT_AAC_6_0, C, L, R, Ls, Rs, Cs )\
188 CHLIST06( MOV_CH_LAYOUT_EAC3_6_0_A, L, C, R, Ls, Rs, Cs )\
189 CHLIST06( MOV_CH_LAYOUT_DTS_6_0_A, Lc, Rc, L, R, Ls, Rs )\
190 CHLIST06( MOV_CH_LAYOUT_DTS_6_0_B, C, L, R, Rls, Rrs, Ts )\
191 CHLIST07( MOV_CH_LAYOUT_MPEG_6_1_A, L, R, C, LFE, Ls, Rs, Cs )\
192 CHLIST07( MOV_CH_LAYOUT_AAC_6_1, C, L, R, Ls, Rs, Cs, LFE )\
193 CHLIST07( MOV_CH_LAYOUT_EAC3_6_1_A, L, C, R, Ls, Rs, LFE, Cs )\
194 CHLIST07( MOV_CH_LAYOUT_DTS_6_1_D, C, L, R, Ls, Rs, LFE, Cs )\
195 CHLIST07( MOV_CH_LAYOUT_AUDIOUNIT_7_0, L, R, Ls, Rs, C, Rls, Rrs )\
196 CHLIST07( MOV_CH_LAYOUT_AAC_7_0, C, L, R, Ls, Rs, Rls, Rrs )\
197 CHLIST07( MOV_CH_LAYOUT_EAC3_7_0_A, L, C, R, Ls, Rs, Rls, Rrs )\
198 CHLIST07( MOV_CH_LAYOUT_AUDIOUNIT_7_0_FRONT, L, R, Ls, Rs, C, Lc, Rc )\
199 CHLIST07( MOV_CH_LAYOUT_DTS_7_0, Lc, C, Rc, L, R, Ls, Rs )\
200 CHLIST07( MOV_CH_LAYOUT_EAC3_6_1_B, L, C, R, Ls, Rs, LFE, Ts )\
201 CHLIST07( MOV_CH_LAYOUT_EAC3_6_1_C, L, C, R, Ls, Rs, LFE, Vhc )\
202 CHLIST07( MOV_CH_LAYOUT_DTS_6_1_A, Lc, Rc, L, R, Ls, Rs, LFE )\
203 CHLIST07( MOV_CH_LAYOUT_DTS_6_1_B, C, L, R, Rls, Rrs, Ts, LFE )\
204 CHLIST07( MOV_CH_LAYOUT_DTS_6_1_C, C, Cs, L, R, Rls, Rrs, LFE )\
205 CHLIST08( MOV_CH_LAYOUT_OCTAGONAL, L, R, Rls, Rrs, C, Cs, Ls, Rs )\
206 CHLIST08( MOV_CH_LAYOUT_AAC_OCTAGONAL, C, L, R, Ls, Rs, Rls, Rrs, Cs )\
207 CHLIST08( MOV_CH_LAYOUT_CUBE, L, R, Rls, Rrs, Vhl, Vhr, Rlt, Rrt )\
208 CHLIST08( MOV_CH_LAYOUT_MPEG_7_1_A, L, R, C, LFE, Ls, Rs, Lc, Rc )\
209 CHLIST08( MOV_CH_LAYOUT_MPEG_7_1_B, C, Lc, Rc, L, R, Ls, Rs, LFE )\
210 CHLIST08( MOV_CH_LAYOUT_EMAGIC_DEFAULT_7_1, L, R, Ls, Rs, C, LFE, Lc, Rc )\
211 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_B, L, C, R, Ls, Rs, LFE, Lc, Rc )\
212 CHLIST08( MOV_CH_LAYOUT_DTS_7_1, Lc, C, Rc, L, R, Ls, Rs, LFE )\
213 CHLIST08( MOV_CH_LAYOUT_MPEG_7_1_C, L, R, C, LFE, Ls, Rs, Rls, Rrs )\
214 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_A, L, C, R, Ls, Rs, LFE, Rls, Rrs )\
215 CHLIST08( MOV_CH_LAYOUT_SMPTE_DTV, L, R, C, LFE, Ls, Rs, Lt, Rt )\
216 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_C, L, C, R, Ls, Rs, LFE, Lsd, Rsd )\
217 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_D, L, C, R, Ls, Rs, LFE, Lw, Rw )\
218 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_E, L, C, R, Ls, Rs, LFE, Vhl, Vhr )\
219 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_F, L, C, R, Ls, Rs, LFE, Cs, Ts )\
220 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_G, L, C, R, Ls, Rs, LFE, Cs, Vhc )\
221 CHLIST08( MOV_CH_LAYOUT_EAC3_7_1_H, L, C, R, Ls, Rs, LFE, Ts, Vhc )\
222 CHLIST08( MOV_CH_LAYOUT_DTS_8_0_A, Lc, Rc, L, R, Ls, Rs, Rls, Rrs )\
223 CHLIST08( MOV_CH_LAYOUT_DTS_8_0_B, Lc, C, Rc, L, R, Ls, Cs, Rs )\
224 CHLIST09( MOV_CH_LAYOUT_DTS_8_1_A, Lc, Rc, L, R, Ls, Rs, Rls, Rrs, LFE )\
225 CHLIST09( MOV_CH_LAYOUT_DTS_8_1_B, Lc, C, Rc, L, R, Ls, Cs, Rs, LFE )\
226 CHLIST16( MOV_CH_LAYOUT_TMH_10_2_STD, L, R, C, Vhc, Lsd, Rsd, Ls, Rs, Vhl, Vhr, Lw, Rw, Csd, Cs, LFE1, LFE2 )\
227 CHLIST21( MOV_CH_LAYOUT_TMH_10_2_FULL, L, R, C, Vhc, Lsd, Rsd, Ls, Rs, Vhl, Vhr, Lw, Rw, Csd, Cs, LFE1, LFE2, Lc, Rc, HI, VI, Haptic )\
229 #define CHLIST(_tag, _cnt, ...) static_assert((_tag & 0xffff) == _cnt, "Channel count of " #_tag " is not " #_cnt);
232 #define CHLIST(_tag, _cnt, ...) TAG(_tag, _cnt), __VA_ARGS__,
240 #define ID(_0) {.id = iso_##_0}
241 #define TAG(_tag, _cnt) {.tag = (_tag << 16) | _cnt}
256 CHLIST24( 13,
C, Lc, Rc,
L,
R, Lss, Rss, Lsr, Rsr, Cs, LFE, LFE2, Cv, Lv, Rv, Lvss, Rvss, Ts, Lvr, Rvr, Cvr, Cb, Lb, Rb)
333 static const struct {
357 for (
int i = 0;
map[
i].tag & 0xffff;
i += 1 + (
map[
i].tag & 0xffff))
379 int map_layout_nb_channels =
tag & 0xFFFF;
383 if (omitted_channel_map >> map_layout_nb_channels)
391 for (
int i = 0, idx = 0; i < map_layout_nb_channels && idx < nb_channels; i++, omitted_channel_map >>= 1) {
392 if (!(omitted_channel_map & 1)) {
466 uint32_t **pchannel_desc)
491 *pchannel_desc =
NULL;
495 uint32_t *channel_desc;
512 if (channel_desc[
i] == 0) {
518 *pchannel_desc = channel_desc;
527 uint32_t layout_tag, bitmap, num_descr;
539 "bitmap=%"PRIu32
" num_descr=%"PRIu32
"\n",
540 layout_tag, bitmap, num_descr);
542 if (
size < 12ULL + num_descr * 20ULL)
547 if (num_descr > nb_channels) {
549 num_descr, nb_channels);
550 num_descr = nb_channels;
558 for (
int i = 0;
i < num_descr;
i++) {
562 "reached EOF while reading channel layout\n");
579 if (bitmap < 0x40000) {
584 av_log(
s,
AV_LOG_WARNING,
"ignoring channel layout bitmap with %d channels because number of channels is %d\n",
587 }
else if (layout_tag & 0xFFFF) {
588 int nb_channels = layout_tag & 0xFFFF;
679 int nb_omitted_channels =
av_popcount64(omitted_channel_map);
681 if (
layout->nb_channels <= 0 ||
layout->nb_channels > UINT16_MAX - nb_omitted_channels)
684 layout_tag = (
config << 16) | (
layout->nb_channels + nb_omitted_channels);
691 uint8_t *position,
int position_num)
695 if (position_num < layout->nb_channels)
698 for (
int i = 0;
i <
layout->nb_channels;
i++) {
710 if (position[
i] == 127)
719 int stream_structure =
avio_r8(pb);
723 if (stream_structure & 1) {
736 for (
int i = 0;
i < nb_channels;
i++) {
740 if (speaker_pos == 126)
760 uint64_t omitted_channel_map =
avio_rb64(pb);
768 if (stream_structure & 2) {
@ MOV_CH_LAYOUT_QUADRAPHONIC
#define AV_LOG_WARNING
Something somehow does not look correct.
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
@ MOV_CH_LAYOUT_MPEG_5_1_A
int ff_mov_get_channel_layout_from_config(int config, AVChannelLayout *layout, uint64_t omitted_channel_map)
Get AVChannelLayout from ISO/IEC 23001-8 ChannelConfiguration.
static const struct MovChannelLayoutMap iso_ch_layout_map[]
This struct describes the properties of an encoded stream.
enum MovChannelLayoutTag * layouts
@ MOV_CH_LAYOUT_DTS_8_0_A
AVChannelCustom * map
This member must be used when the channel order is AV_CHANNEL_ORDER_CUSTOM.
@ AV_CHAN_TOP_SURROUND_LEFT
+110 degrees, Lvs, TpLS
@ MOV_CH_LAYOUT_AC3_3_0_1
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.
static const struct MovChannelLayoutMap mov_ch_layout_map[]
#define CHLIST01(_tag, _1)
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 ...
#define CHLIST24(_tag, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24)
int ff_mov_get_channel_layout_tag(const AVCodecParameters *par, uint32_t *layout, uint32_t *bitmap, uint32_t **pchannel_desc)
Get the channel layout tag for the specified codec id and channel layout.
int nb_channels
Number of channels in this layout.
@ MOV_CH_LAYOUT_DTS_6_0_A
static int mov_get_channel_layout(AVChannelLayout *ch_layout, uint32_t tag, uint64_t omitted_channel_map, const struct MovChannelLayoutMap *map)
Get the channel layout for the specified non-special channel layout tag if known.
@ MOV_CH_LAYOUT_MATRIXSTEREO
@ AV_CHAN_SURROUND_DIRECT_LEFT
@ MOV_CH_LAYOUT_MPEG_5_0_A
@ MOV_CH_LAYOUT_MPEG_5_1_D
static enum MovChannelLayoutTag mov_ch_layouts_alac[]
@ AV_CHAN_STEREO_RIGHT
See above.
s EdgeDetect Foobar g libavfilter vf_edgedetect c libavfilter vf_foobar c edit libavfilter and add an entry for foobar following the pattern of the other filters edit libavfilter allfilters and add an entry for foobar following the pattern of the other filters configure make j< whatever > ffmpeg ffmpeg i you should get a foobar png with Lena edge detected That s your new playground is ready Some little details about what s going which in turn will define variables for the build system and the C
@ AV_CHAN_BOTTOM_FRONT_LEFT
unsigned int avio_rb32(AVIOContext *s)
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
@ MOV_CH_LAYOUT_AC3_1_0_1
@ MOV_CH_LAYOUT_MPEG_5_1_C
static const struct MovChannelLayoutMap * find_layout_map(uint32_t tag, const struct MovChannelLayoutMap *map)
@ 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 CHLIST08(_tag, _1, _2, _3, _4, _5, _6, _7, _8)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
@ MOV_CH_LAYOUT_MPEG_7_1_B
#define CHLIST04(_tag, _1, _2, _3, _4)
@ AV_CHAN_SIDE_SURROUND_LEFT
+90 degrees, Lss, SiL
@ MOV_CH_LAYOUT_SMPTE_DTV
AVCodecParameters * codecpar
Codec parameters associated with this stream.
MovChannelLayoutTag
mov 'chan' tag reading/writing.
#define MOV_CH_LAYOUT_MAP
#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
uint64_t avio_rb64(AVIOContext *s)
#define CHLIST05(_tag, _1, _2, _3, _4, _5)
static enum AVChannel mov_get_channel_id(uint32_t label)
@ AV_CHAN_BOTTOM_FRONT_RIGHT
@ MOV_CH_LAYOUT_MPEG_3_0_B
int ff_mov_get_channel_positions_from_layout(const AVChannelLayout *layout, uint8_t *position, int position_num)
Get ISO/IEC 23001-8 OutputChannelPosition from AVChannelLayout.
AVChannelLayout ch_layout
Audio only.
@ AV_CHAN_FRONT_RIGHT_OF_CENTER
AVCodecID
Identify the syntax and semantics of the bitstream.
int ff_mov_get_channel_config_from_layout(const AVChannelLayout *layout, int *config)
Get ISO/IEC 23001-8 ChannelConfiguration from AVChannelLayout.
unsigned int avio_rl32(AVIOContext *s)
An AVChannelLayout holds information about the channel layout of audio data.
#define CHLIST07(_tag, _1, _2, _3, _4, _5, _6, _7)
@ MOV_CH_LAYOUT_MPEG_7_1_A
int avio_r8(AVIOContext *s)
int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags)
Change the AVChannelOrder of a channel layout.
@ MOV_CH_LAYOUT_DTS_6_1_A
@ MOV_CH_LAYOUT_MPEG_3_0_A
@ 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_custom_init(AVChannelLayout *channel_layout, int nb_channels)
Initialize a custom channel layout with the specified number of channels.
static const struct @384 mov_codec_ch_layouts[]
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
@ MOV_CH_LAYOUT_MPEG_5_0_D
@ AV_CHAN_TOP_SURROUND_RIGHT
-110 degrees, Rvs, TpRS
@ AV_CHAN_SURROUND_DIRECT_RIGHT
#define i(width, name, range_min, range_max)
#define av_malloc_array(a, b)
#define CHLIST03(_tag, _1, _2, _3)
@ MOV_CH_LAYOUT_MPEG_6_1_A
#define CHLIST06(_tag, _1, _2, _3, _4, _5, _6)
@ MOV_CH_LAYOUT_AC3_2_1_1
@ AV_CHAN_STEREO_LEFT
Stereo downmix.
@ MOV_CH_LAYOUT_MPEG_4_0_B
@ MOV_CH_LAYOUT_MPEG_5_0_C
@ AV_CHAN_NONE
Invalid channel index.
@ AV_CHAN_LOW_FREQUENCY_2
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
int eof_reached
true if was unable to read due to error or eof
@ MOV_CH_LAYOUT_MPEG_7_1_C
@ AV_CHAN_BOTTOM_FRONT_CENTER
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
static int is_layout_valid_for_tag(const AVChannelLayout *ch_layout, uint32_t tag, const struct MovChannelLayoutMap *map)
static enum MovChannelLayoutTag mov_ch_layouts_aac[]
@ MOV_CH_LAYOUT_AAC_OCTAGONAL
static enum AVChannel iso_channel_position[]
@ AV_CHAN_TOP_FRONT_CENTER
static uint32_t mov_get_channel_label(enum AVChannel channel)
@ AV_CHAN_SIDE_SURROUND_RIGHT
-90 degrees, Rss, SiR
union AVChannelLayout::@410 u
Details about which channels are present in this layout.
#define CHLIST02(_tag, _1, _2)
const VDPAUPixFmtMap * map
@ MOV_CH_LAYOUT_AC3_3_1_1
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
@ AV_CHAN_AMBISONIC_BASE
Range of channels between AV_CHAN_AMBISONIC_BASE and AV_CHAN_AMBISONIC_END represent Ambisonic compon...
int ff_mov_read_chnl(AVFormatContext *s, AVIOContext *pb, AVStream *st)
Read 'chnl' tag from the input stream.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static enum MovChannelLayoutTag mov_ch_layouts_wav[]
static enum MovChannelLayoutTag mov_ch_layouts_ac3[]
@ MOV_CH_LAYOUT_USE_BITMAP
@ MOV_CH_LAYOUT_USE_DESCRIPTIONS
int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, AVStream *st, int64_t size)
Read 'chan' tag from the input stream.