mov_chan.c File Reference
#include <stdint.h>
#include "libavutil/audioconvert.h"
#include "libavcodec/avcodec.h"
#include "mov_chan.h"

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...
 
uint32_t ff_mov_get_channel_label (uint32_t label)
 Get the channel layout for the specified channel layout tag. More...
 
uint32_t ff_mov_get_channel_layout_tag (enum CodecID codec_id, uint64_t channel_layout, uint32_t *bitmap)
 Get the channel layout tag for the specified codec id and channel layout. 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
MovChannelLayoutMap
mov_ch_layout_map []
 
static enum MovChannelLayoutTag mov_ch_layouts_aac []
 
static enum MovChannelLayoutTag mov_ch_layouts_ac3 []
 
static enum MovChannelLayoutTag mov_ch_layouts_alac []
 
struct {
   enum CodecID   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

uint32_t ff_mov_get_channel_label ( uint32_t  label)

Get the channel layout for the specified channel layout tag.

Parameters
[in]tagchannel label
Returns
channel layout mask fragment

Definition at line 453 of file mov_chan.c.

Referenced by mov_read_chan().

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 426 of file mov_chan.c.

Referenced by mov_read_chan().

uint32_t ff_mov_get_channel_layout_tag ( enum CodecID  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 466 of file mov_chan.c.

Referenced by mov_write_chan_tag().

Variable Documentation

enum MovChannelLayoutTag* layouts

Definition at line 418 of file mov_chan.c.

Referenced by ff_mov_get_channel_layout_tag().

const struct MovChannelLayoutMap* mov_ch_layout_map[]
static
Initial value:
= {
}
static const struct MovChannelLayoutMap mov_ch_layout_map_8ch[]
Definition: mov_chan.c:274
static const struct MovChannelLayoutMap mov_ch_layout_map_2ch[]
Definition: mov_chan.c:160
static const struct MovChannelLayoutMap mov_ch_layout_map_6ch[]
Definition: mov_chan.c:226
static const struct MovChannelLayoutMap mov_ch_layout_map_9ch[]
Definition: mov_chan.c:333
static const struct MovChannelLayoutMap mov_ch_layout_map_3ch[]
Definition: mov_chan.c:174
static const struct MovChannelLayoutMap mov_ch_layout_map_4ch[]
Definition: mov_chan.c:185
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:246
static const struct MovChannelLayoutMap mov_ch_layout_map_5ch[]
Definition: mov_chan.c:207

Definition at line 346 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_1ch[]
static
Initial value:

Definition at line 156 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_4ch[]
static
Initial value:
= {
{ 0, 0 },
}
#define AV_CH_LAYOUT_4POINT0
Definition: audioconvert.h:82
#define AV_CH_LOW_FREQUENCY
Definition: audioconvert.h:44
#define AV_CH_LAYOUT_QUAD
Definition: audioconvert.h:85
#define AV_CH_LAYOUT_2_1
Definition: audioconvert.h:79
#define AV_CH_LAYOUT_2_2
Definition: audioconvert.h:84
#define AV_CH_LAYOUT_3POINT1
Definition: audioconvert.h:81

Definition at line 185 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_5ch[]
static
const struct MovChannelLayoutMap mov_ch_layout_map_6ch[]
static
Initial value:
= {
{ 0, 0 },
}
#define AV_CH_LAYOUT_6POINT0
Definition: audioconvert.h:90
#define AV_CH_LAYOUT_HEXAGONAL
Definition: audioconvert.h:92
#define AV_CH_LAYOUT_5POINT1
Definition: audioconvert.h:87
#define AV_CH_LAYOUT_6POINT0_FRONT
Definition: audioconvert.h:91
#define AV_CH_TOP_CENTER
Definition: audioconvert.h:52
#define AV_CH_LAYOUT_5POINT0_BACK
Definition: audioconvert.h:88

Definition at line 226 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_7ch[]
static
Initial value:
= {
{ 0, 0 },
}
#define AV_CH_LAYOUT_6POINT1
Definition: audioconvert.h:93
#define AV_CH_TOP_FRONT_CENTER
Definition: audioconvert.h:54
#define AV_CH_LAYOUT_7POINT0_FRONT
Definition: audioconvert.h:97
#define AV_CH_LAYOUT_7POINT0
Definition: audioconvert.h:96
#define AV_CH_LAYOUT_5POINT1
Definition: audioconvert.h:87
#define AV_CH_TOP_CENTER
Definition: audioconvert.h:52
#define AV_CH_LAYOUT_5POINT1_BACK
Definition: audioconvert.h:89
#define AV_CH_LAYOUT_6POINT1_BACK
Definition: audioconvert.h:94
#define AV_CH_LAYOUT_6POINT1_FRONT
Definition: audioconvert.h:95

Definition at line 246 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_8ch[]
static

Definition at line 274 of file mov_chan.c.

const struct MovChannelLayoutMap mov_ch_layout_map_9ch[]
static
Initial value:
= {
{ 0, 0 },
}
#define AV_CH_LOW_FREQUENCY
Definition: audioconvert.h:44
#define AV_CH_BACK_LEFT
Definition: audioconvert.h:45
#define AV_CH_LAYOUT_2_2
Definition: audioconvert.h:84
#define AV_CH_FRONT_LEFT_OF_CENTER
Definition: audioconvert.h:47
#define AV_CH_FRONT_RIGHT_OF_CENTER
Definition: audioconvert.h:48
#define AV_CH_BACK_CENTER
Definition: audioconvert.h:49
#define AV_CH_LAYOUT_7POINT1_WIDE
Definition: audioconvert.h:99
#define AV_CH_BACK_RIGHT
Definition: audioconvert.h:46

Definition at line 333 of file mov_chan.c.

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

Definition at line 359 of file mov_chan.c.

const { ... } mov_codec_ch_layouts[]
Initial value:
= {
}
static enum MovChannelLayoutTag mov_ch_layouts_alac[]
Definition: mov_chan.c:404
static enum MovChannelLayoutTag mov_ch_layouts_ac3[]
Definition: mov_chan.c:386
NULL
Definition: eval.c:50
static enum MovChannelLayoutTag mov_ch_layouts_aac[]
Definition: mov_chan.c:359

Referenced by ff_mov_get_channel_layout_tag().