mov_chan.c File Reference
#include <stdint.h>
#include "libavutil/channel_layout.h"
#include "libavcodec/avcodec.h"
#include "mov_chan.h"
Include dependency graph for mov_chan.c:

Go to the source code of this file.

Data Structures

struct  MovChannelLayoutMap
 

Enumerations

enum  MovChannelLayoutTag {
  MOV_CH_LAYOUT_UNKNOWN = 0xFFFF0000, MOV_CH_LAYOUT_USE_DESCRIPTIONS = ( 0 << 16) | 0, MOV_CH_LAYOUT_USE_BITMAP = ( 1 << 16) | 0, MOV_CH_LAYOUT_DISCRETEINORDER = (147 << 16) | 0,
  MOV_CH_LAYOUT_MONO = (100 << 16) | 1, MOV_CH_LAYOUT_STEREO = (101 << 16) | 2, MOV_CH_LAYOUT_STEREOHEADPHONES = (102 << 16) | 2, MOV_CH_LAYOUT_MATRIXSTEREO = (103 << 16) | 2,
  MOV_CH_LAYOUT_MIDSIDE = (104 << 16) | 2, MOV_CH_LAYOUT_XY = (105 << 16) | 2, MOV_CH_LAYOUT_BINAURAL = (106 << 16) | 2, MOV_CH_LAYOUT_AMBISONIC_B_FORMAT = (107 << 16) | 4,
  MOV_CH_LAYOUT_QUADRAPHONIC = (108 << 16) | 4, MOV_CH_LAYOUT_PENTAGONAL = (109 << 16) | 5, MOV_CH_LAYOUT_HEXAGONAL = (110 << 16) | 6, MOV_CH_LAYOUT_OCTAGONAL = (111 << 16) | 8,
  MOV_CH_LAYOUT_CUBE = (112 << 16) | 8, MOV_CH_LAYOUT_MPEG_3_0_A = (113 << 16) | 3, MOV_CH_LAYOUT_MPEG_3_0_B = (114 << 16) | 3, MOV_CH_LAYOUT_MPEG_4_0_A = (115 << 16) | 4,
  MOV_CH_LAYOUT_MPEG_4_0_B = (116 << 16) | 4, MOV_CH_LAYOUT_MPEG_5_0_A = (117 << 16) | 5, MOV_CH_LAYOUT_MPEG_5_0_B = (118 << 16) | 5, MOV_CH_LAYOUT_MPEG_5_0_C = (119 << 16) | 5,
  MOV_CH_LAYOUT_MPEG_5_0_D = (120 << 16) | 5, MOV_CH_LAYOUT_MPEG_5_1_A = (121 << 16) | 6, MOV_CH_LAYOUT_MPEG_5_1_B = (122 << 16) | 6, MOV_CH_LAYOUT_MPEG_5_1_C = (123 << 16) | 6,
  MOV_CH_LAYOUT_MPEG_5_1_D = (124 << 16) | 6, MOV_CH_LAYOUT_MPEG_6_1_A = (125 << 16) | 7, MOV_CH_LAYOUT_MPEG_7_1_A = (126 << 16) | 8, MOV_CH_LAYOUT_MPEG_7_1_B = (127 << 16) | 8,
  MOV_CH_LAYOUT_MPEG_7_1_C = (128 << 16) | 8, MOV_CH_LAYOUT_EMAGIC_DEFAULT_7_1 = (129 << 16) | 8, MOV_CH_LAYOUT_SMPTE_DTV = (130 << 16) | 8, MOV_CH_LAYOUT_ITU_2_1 = (131 << 16) | 3,
  MOV_CH_LAYOUT_ITU_2_2 = (132 << 16) | 4, MOV_CH_LAYOUT_DVD_4 = (133 << 16) | 3, MOV_CH_LAYOUT_DVD_5 = (134 << 16) | 4, MOV_CH_LAYOUT_DVD_6 = (135 << 16) | 5,
  MOV_CH_LAYOUT_DVD_10 = (136 << 16) | 4, MOV_CH_LAYOUT_DVD_11 = (137 << 16) | 5, MOV_CH_LAYOUT_DVD_18 = (138 << 16) | 5, MOV_CH_LAYOUT_AUDIOUNIT_6_0 = (139 << 16) | 6,
  MOV_CH_LAYOUT_AUDIOUNIT_7_0 = (140 << 16) | 7, MOV_CH_LAYOUT_AUDIOUNIT_7_0_FRONT = (148 << 16) | 7, MOV_CH_LAYOUT_AAC_6_0 = (141 << 16) | 6, MOV_CH_LAYOUT_AAC_6_1 = (142 << 16) | 7,
  MOV_CH_LAYOUT_AAC_7_0 = (143 << 16) | 7, MOV_CH_LAYOUT_AAC_OCTAGONAL = (144 << 16) | 8, MOV_CH_LAYOUT_TMH_10_2_STD = (145 << 16) | 16, MOV_CH_LAYOUT_TMH_10_2_FULL = (146 << 16) | 21,
  MOV_CH_LAYOUT_AC3_1_0_1 = (149 << 16) | 2, MOV_CH_LAYOUT_AC3_3_0 = (150 << 16) | 3, MOV_CH_LAYOUT_AC3_3_1 = (151 << 16) | 4, MOV_CH_LAYOUT_AC3_3_0_1 = (152 << 16) | 4,
  MOV_CH_LAYOUT_AC3_2_1_1 = (153 << 16) | 4, MOV_CH_LAYOUT_AC3_3_1_1 = (154 << 16) | 5, MOV_CH_LAYOUT_EAC3_6_0_A = (155 << 16) | 6, MOV_CH_LAYOUT_EAC3_7_0_A = (156 << 16) | 7,
  MOV_CH_LAYOUT_EAC3_6_1_A = (157 << 16) | 7, MOV_CH_LAYOUT_EAC3_6_1_B = (158 << 16) | 7, MOV_CH_LAYOUT_EAC3_6_1_C = (159 << 16) | 7, MOV_CH_LAYOUT_EAC3_7_1_A = (160 << 16) | 8,
  MOV_CH_LAYOUT_EAC3_7_1_B = (161 << 16) | 8, MOV_CH_LAYOUT_EAC3_7_1_C = (162 << 16) | 8, MOV_CH_LAYOUT_EAC3_7_1_D = (163 << 16) | 8, MOV_CH_LAYOUT_EAC3_7_1_E = (164 << 16) | 8,
  MOV_CH_LAYOUT_EAC3_7_1_F = (165 << 16) | 8, MOV_CH_LAYOUT_EAC3_7_1_G = (166 << 16) | 8, MOV_CH_LAYOUT_EAC3_7_1_H = (167 << 16) | 8, MOV_CH_LAYOUT_DTS_3_1 = (168 << 16) | 4,
  MOV_CH_LAYOUT_DTS_4_1 = (169 << 16) | 5, MOV_CH_LAYOUT_DTS_6_0_A = (170 << 16) | 6, MOV_CH_LAYOUT_DTS_6_0_B = (171 << 16) | 6, MOV_CH_LAYOUT_DTS_6_0_C = (172 << 16) | 6,
  MOV_CH_LAYOUT_DTS_6_1_A = (173 << 16) | 7, MOV_CH_LAYOUT_DTS_6_1_B = (174 << 16) | 7, MOV_CH_LAYOUT_DTS_6_1_C = (175 << 16) | 7, MOV_CH_LAYOUT_DTS_6_1_D = (182 << 16) | 7,
  MOV_CH_LAYOUT_DTS_7_0 = (176 << 16) | 7, MOV_CH_LAYOUT_DTS_7_1 = (177 << 16) | 8, MOV_CH_LAYOUT_DTS_8_0_A = (178 << 16) | 8, MOV_CH_LAYOUT_DTS_8_0_B = (179 << 16) | 8,
  MOV_CH_LAYOUT_DTS_8_1_A = (180 << 16) | 9, MOV_CH_LAYOUT_DTS_8_1_B = (181 << 16) | 9
}
 mov 'chan' tag reading/writing. More...
 

Functions

uint64_t ff_mov_get_channel_layout (uint32_t tag, uint32_t bitmap)
 mov 'chan' tag reading/writing. More...
 
static uint32_t mov_get_channel_label (uint32_t label)
 
uint32_t ff_mov_get_channel_layout_tag (enum AVCodecID codec_id, uint64_t channel_layout, uint32_t *bitmap)
 Get the channel layout tag for the specified codec id and channel layout. More...
 
int ff_mov_read_chan (AVFormatContext *s, AVIOContext *pb, AVStream *st, int64_t size)
 Read 'chan' tag from the input stream. More...
 

Variables

static const struct MovChannelLayoutMap mov_ch_layout_map_misc []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_1ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_2ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_3ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_4ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_5ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_6ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_7ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_8ch []
 
static const struct MovChannelLayoutMap mov_ch_layout_map_9ch []
 
static const struct MovChannelLayoutMapmov_ch_layout_map []
 
static enum MovChannelLayoutTag mov_ch_layouts_aac []
 
static enum MovChannelLayoutTag mov_ch_layouts_ac3 []
 
static enum MovChannelLayoutTag mov_ch_layouts_alac []
 
static enum MovChannelLayoutTag mov_ch_layouts_wav []
 
struct {
   enum AVCodecID   codec_id
 
   enum MovChannelLayoutTag *   layouts
 
mov_codec_ch_layouts []
 

Enumeration Type Documentation

mov 'chan' tag reading/writing.

Author
Justin Ruggles Channel Layout Tag This tells which channels are present in the audio stream and the order in which they appear.
Note
We're using the channel layout tag to indicate channel order when the value is greater than 0x10000. The Apple documentation has some contradictions as to how this is actually supposed to be handled.

Core Audio File Format Spec: "The high 16 bits indicates a specific ordering of the channels." Core Audio Data Types Reference: "These identifiers specify the channels included in a layout but do not specify a particular ordering of those channels."

Enumerator
MOV_CH_LAYOUT_UNKNOWN 
MOV_CH_LAYOUT_USE_DESCRIPTIONS 
MOV_CH_LAYOUT_USE_BITMAP 
MOV_CH_LAYOUT_DISCRETEINORDER 
MOV_CH_LAYOUT_MONO 
MOV_CH_LAYOUT_STEREO 
MOV_CH_LAYOUT_STEREOHEADPHONES 
MOV_CH_LAYOUT_MATRIXSTEREO 
MOV_CH_LAYOUT_MIDSIDE 
MOV_CH_LAYOUT_XY 
MOV_CH_LAYOUT_BINAURAL 
MOV_CH_LAYOUT_AMBISONIC_B_FORMAT 
MOV_CH_LAYOUT_QUADRAPHONIC 
MOV_CH_LAYOUT_PENTAGONAL 
MOV_CH_LAYOUT_HEXAGONAL 
MOV_CH_LAYOUT_OCTAGONAL 
MOV_CH_LAYOUT_CUBE 
MOV_CH_LAYOUT_MPEG_3_0_A 
MOV_CH_LAYOUT_MPEG_3_0_B 
MOV_CH_LAYOUT_MPEG_4_0_A 
MOV_CH_LAYOUT_MPEG_4_0_B 
MOV_CH_LAYOUT_MPEG_5_0_A 
MOV_CH_LAYOUT_MPEG_5_0_B 
MOV_CH_LAYOUT_MPEG_5_0_C 
MOV_CH_LAYOUT_MPEG_5_0_D 
MOV_CH_LAYOUT_MPEG_5_1_A 
MOV_CH_LAYOUT_MPEG_5_1_B 
MOV_CH_LAYOUT_MPEG_5_1_C 
MOV_CH_LAYOUT_MPEG_5_1_D 
MOV_CH_LAYOUT_MPEG_6_1_A 
MOV_CH_LAYOUT_MPEG_7_1_A 
MOV_CH_LAYOUT_MPEG_7_1_B 
MOV_CH_LAYOUT_MPEG_7_1_C 
MOV_CH_LAYOUT_EMAGIC_DEFAULT_7_1 
MOV_CH_LAYOUT_SMPTE_DTV 
MOV_CH_LAYOUT_ITU_2_1 
MOV_CH_LAYOUT_ITU_2_2 
MOV_CH_LAYOUT_DVD_4 
MOV_CH_LAYOUT_DVD_5 
MOV_CH_LAYOUT_DVD_6 
MOV_CH_LAYOUT_DVD_10 
MOV_CH_LAYOUT_DVD_11 
MOV_CH_LAYOUT_DVD_18 
MOV_CH_LAYOUT_AUDIOUNIT_6_0 
MOV_CH_LAYOUT_AUDIOUNIT_7_0 
MOV_CH_LAYOUT_AUDIOUNIT_7_0_FRONT 
MOV_CH_LAYOUT_AAC_6_0 
MOV_CH_LAYOUT_AAC_6_1 
MOV_CH_LAYOUT_AAC_7_0 
MOV_CH_LAYOUT_AAC_OCTAGONAL 
MOV_CH_LAYOUT_TMH_10_2_STD 
MOV_CH_LAYOUT_TMH_10_2_FULL 
MOV_CH_LAYOUT_AC3_1_0_1 
MOV_CH_LAYOUT_AC3_3_0 
MOV_CH_LAYOUT_AC3_3_1 
MOV_CH_LAYOUT_AC3_3_0_1 
MOV_CH_LAYOUT_AC3_2_1_1 
MOV_CH_LAYOUT_AC3_3_1_1 
MOV_CH_LAYOUT_EAC3_6_0_A 
MOV_CH_LAYOUT_EAC3_7_0_A 
MOV_CH_LAYOUT_EAC3_6_1_A 
MOV_CH_LAYOUT_EAC3_6_1_B 
MOV_CH_LAYOUT_EAC3_6_1_C 
MOV_CH_LAYOUT_EAC3_7_1_A 
MOV_CH_LAYOUT_EAC3_7_1_B 
MOV_CH_LAYOUT_EAC3_7_1_C 
MOV_CH_LAYOUT_EAC3_7_1_D 
MOV_CH_LAYOUT_EAC3_7_1_E 
MOV_CH_LAYOUT_EAC3_7_1_F 
MOV_CH_LAYOUT_EAC3_7_1_G 
MOV_CH_LAYOUT_EAC3_7_1_H 
MOV_CH_LAYOUT_DTS_3_1 
MOV_CH_LAYOUT_DTS_4_1 
MOV_CH_LAYOUT_DTS_6_0_A 
MOV_CH_LAYOUT_DTS_6_0_B 
MOV_CH_LAYOUT_DTS_6_0_C 
MOV_CH_LAYOUT_DTS_6_1_A 
MOV_CH_LAYOUT_DTS_6_1_B 
MOV_CH_LAYOUT_DTS_6_1_C 
MOV_CH_LAYOUT_DTS_6_1_D 
MOV_CH_LAYOUT_DTS_7_0 
MOV_CH_LAYOUT_DTS_7_1 
MOV_CH_LAYOUT_DTS_8_0_A 
MOV_CH_LAYOUT_DTS_8_0_B 
MOV_CH_LAYOUT_DTS_8_1_A 
MOV_CH_LAYOUT_DTS_8_1_B 

Definition at line 47 of file mov_chan.c.

Function Documentation

uint64_t ff_mov_get_channel_layout ( uint32_t  tag,
uint32_t  bitmap 
)

mov 'chan' tag reading/writing.

Author
Justin Ruggles Get the channel layout for the specified channel layout tag.
Parameters
[in]tagchannel layout tag
[out]bitmapchannel bitmap (only used if needed)
Returns
channel layout

Definition at line 454 of file mov_chan.c.

Referenced by ff_mov_read_chan().

uint32_t ff_mov_get_channel_layout_tag ( enum AVCodecID  codec_id,
uint64_t  channel_layout,
uint32_t *  bitmap 
)

Get the channel layout tag for the specified codec id and channel layout.

If the layout tag was not found, use a channel bitmap if possible.

Parameters
[in]codec_idcodec id
[in]channel_layoutchannel layout
[out]bitmapchannel bitmap
Returns
channel layout tag

Definition at line 494 of file mov_chan.c.

Referenced by mov_write_chan_tag().

int ff_mov_read_chan ( AVFormatContext s,
AVIOContext pb,
AVStream st,
int64_t  size 
)

Read 'chan' tag from the input stream.

Parameters
sAVFormatContext
pbAVIOContext
stThe stream to set codec values for
sizeRemaining size in the 'chan' tag
Returns
0 if ok, or negative AVERROR code on failure

Definition at line 547 of file mov_chan.c.

Referenced by aiff_read_header(), mov_read_chan(), and read_header().

static uint32_t mov_get_channel_label ( uint32_t  label)
static

Definition at line 481 of file mov_chan.c.

Referenced by ff_mov_read_chan().

Variable Documentation

const struct MovChannelLayoutMap* mov_ch_layout_map[]
static
Initial value:
= {
}
static const struct MovChannelLayoutMap mov_ch_layout_map_8ch[]
Definition: mov_chan.c:275
static const struct MovChannelLayoutMap mov_ch_layout_map_2ch[]
Definition: mov_chan.c:161
static const struct MovChannelLayoutMap mov_ch_layout_map_6ch[]
Definition: mov_chan.c:227
static const struct MovChannelLayoutMap mov_ch_layout_map_9ch[]
Definition: mov_chan.c:334
static const struct MovChannelLayoutMap mov_ch_layout_map_3ch[]
Definition: mov_chan.c:175
static const struct MovChannelLayoutMap mov_ch_layout_map_4ch[]
Definition: mov_chan.c:186
static const struct MovChannelLayoutMap mov_ch_layout_map_1ch[]
Definition: mov_chan.c:156
static const struct MovChannelLayoutMap mov_ch_layout_map_misc[]
Definition: mov_chan.c:141
static const struct MovChannelLayoutMap mov_ch_layout_map_7ch[]
Definition: mov_chan.c:247
static const struct MovChannelLayoutMap mov_ch_layout_map_5ch[]
Definition: mov_chan.c:208

Definition at line 347 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_1ch[]
static
Initial value:
= {
{ 0, 0 },
}
#define AV_CH_LAYOUT_MONO

Definition at line 156 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_2ch[]
static
Initial value:

Definition at line 161 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_3ch[]
static
Initial value:

Definition at line 175 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_4ch[]
static
Initial value:
= {
{ MOV_CH_LAYOUT_MPEG_4_0_B, AV_CH_LAYOUT_4POINT0 },
{ MOV_CH_LAYOUT_AC3_3_1, AV_CH_LAYOUT_4POINT0 },
{ MOV_CH_LAYOUT_AC3_3_0_1, AV_CH_LAYOUT_3POINT1 },
{ MOV_CH_LAYOUT_DTS_3_1, AV_CH_LAYOUT_3POINT1 },
{ 0, 0 },
}
#define AV_CH_LAYOUT_4POINT0
#define AV_CH_LOW_FREQUENCY
#define AV_CH_LAYOUT_QUAD
#define AV_CH_LAYOUT_2_1
#define AV_CH_LAYOUT_2_2
#define AV_CH_LAYOUT_3POINT1

Definition at line 186 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_5ch[]
static
Initial value:

Definition at line 208 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_6ch[]
static
Initial value:
= {
{ MOV_CH_LAYOUT_DTS_6_0_C, AV_CH_LAYOUT_HEXAGONAL },
{ MOV_CH_LAYOUT_MPEG_5_1_B, AV_CH_LAYOUT_5POINT1 },
{ MOV_CH_LAYOUT_MPEG_5_1_C, AV_CH_LAYOUT_5POINT1 },
{ MOV_CH_LAYOUT_MPEG_5_1_D, AV_CH_LAYOUT_5POINT1 },
{ MOV_CH_LAYOUT_AAC_6_0, AV_CH_LAYOUT_6POINT0 },
{ MOV_CH_LAYOUT_EAC3_6_0_A, AV_CH_LAYOUT_6POINT0 },
{ 0, 0 },
}
#define AV_CH_LAYOUT_6POINT0
#define AV_CH_LAYOUT_HEXAGONAL
#define AV_CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_6POINT0_FRONT
#define AV_CH_TOP_CENTER
#define AV_CH_LAYOUT_5POINT0_BACK

Definition at line 227 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_7ch[]
static
Initial value:
= {
{ MOV_CH_LAYOUT_AAC_6_1, AV_CH_LAYOUT_6POINT1 },
{ MOV_CH_LAYOUT_EAC3_6_1_A, AV_CH_LAYOUT_6POINT1 },
{ MOV_CH_LAYOUT_DTS_6_1_D, AV_CH_LAYOUT_6POINT1 },
{ MOV_CH_LAYOUT_AAC_7_0, AV_CH_LAYOUT_7POINT0 },
{ MOV_CH_LAYOUT_EAC3_7_0_A, AV_CH_LAYOUT_7POINT0 },
{ MOV_CH_LAYOUT_DTS_7_0, AV_CH_LAYOUT_7POINT0_FRONT },
{ 0, 0 },
}
#define AV_CH_LAYOUT_6POINT1
#define AV_CH_TOP_FRONT_CENTER
#define AV_CH_LAYOUT_7POINT0_FRONT
#define AV_CH_LAYOUT_7POINT0
#define AV_CH_LAYOUT_5POINT1
#define AV_CH_TOP_CENTER
#define AV_CH_LAYOUT_5POINT1_BACK
#define AV_CH_LAYOUT_6POINT1_BACK
#define AV_CH_LAYOUT_6POINT1_FRONT

Definition at line 247 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_8ch[]
static

Definition at line 275 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_9ch[]
static
Initial value:
= {
{ 0, 0 },
}
#define AV_CH_LOW_FREQUENCY
#define AV_CH_BACK_LEFT
#define AV_CH_LAYOUT_2_2
#define AV_CH_FRONT_LEFT_OF_CENTER
#define AV_CH_FRONT_RIGHT_OF_CENTER
#define AV_CH_BACK_CENTER
#define AV_CH_LAYOUT_7POINT1_WIDE
#define AV_CH_BACK_RIGHT

Definition at line 334 of file mov_chan.c.

enum MovChannelLayoutTag mov_ch_layouts_aac[]
static
Initial value:
= {
0,
}

Definition at line 360 of file mov_chan.c.

const { ... } mov_codec_ch_layouts[]
Initial value:
= {
{ AV_CODEC_ID_PCM_S8, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_S16LE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_S16BE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_S24LE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_S24BE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_S32LE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_S32BE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_F32LE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_F32BE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_F64LE, mov_ch_layouts_wav },
{ AV_CODEC_ID_PCM_F64BE, mov_ch_layouts_wav },
}
static enum MovChannelLayoutTag mov_ch_layouts_wav[]
Definition: mov_chan.c:417
static enum MovChannelLayoutTag mov_ch_layouts_alac[]
Definition: mov_chan.c:405
static enum MovChannelLayoutTag mov_ch_layouts_ac3[]
Definition: mov_chan.c:387
NULL
Definition: eval.c:55
static enum MovChannelLayoutTag mov_ch_layouts_aac[]
Definition: mov_chan.c:360

Referenced by ff_mov_get_channel_layout_tag().