* [FFmpeg-devel] [PATCH 4/7] avformat/movenc: write channel descriptions when a known layout or a bitmap can't be used
2022-03-28 23:24 [FFmpeg-devel] [PATCH 1/7] avformat/mov_chan: rename mov_get_channel_label() to better reflect its purpose James Almer
2022-03-28 23:24 ` [FFmpeg-devel] [PATCH 2/7] avformat/mov_chan: add a few missing channel label mappings James Almer
2022-03-28 23:24 ` [FFmpeg-devel] [PATCH 3/7] avformat/mov_chan: use a higher log level for a debug message James Almer
@ 2022-03-28 23:24 ` James Almer
2022-03-28 23:24 ` [FFmpeg-devel] [PATCH 5/7] avformat/mov_chan: move the definition of MovChannelLayoutTag to the header James Almer
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: James Almer @ 2022-03-28 23:24 UTC (permalink / raw)
To: ffmpeg-devel
Fixes part of ticket #2865
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavformat/mov_chan.c | 75 ++++++++++++++++++++++++++++++++----------
libavformat/mov_chan.h | 8 +++--
libavformat/movenc.c | 37 +++++++++++++++------
3 files changed, 90 insertions(+), 30 deletions(-)
diff --git a/libavformat/mov_chan.c b/libavformat/mov_chan.c
index 3c23142f35..4cb373d1b9 100644
--- a/libavformat/mov_chan.c
+++ b/libavformat/mov_chan.c
@@ -504,9 +504,29 @@ static uint64_t mov_get_channel_mask(uint32_t label)
return 0;
}
-uint32_t ff_mov_get_channel_layout_tag(enum AVCodecID codec_id,
- const AVChannelLayout *ch_layout,
- uint32_t *bitmap)
+static uint32_t mov_get_channel_label(enum AVChannel channel)
+{
+ if (channel < 0)
+ return 0;
+ if (channel <= AV_CHAN_TOP_BACK_RIGHT)
+ return channel + 1;
+ if (channel == AV_CHAN_WIDE_LEFT)
+ return 35;
+ if (channel == AV_CHAN_WIDE_RIGHT)
+ return 36;
+ if (channel == AV_CHAN_LOW_FREQUENCY_2)
+ return 37;
+ if (channel == AV_CHAN_STEREO_LEFT)
+ return 38;
+ if (channel == AV_CHAN_STEREO_RIGHT)
+ return 39;
+ return 0;
+}
+
+int ff_mov_get_channel_layout_tag(const AVCodecParameters *par,
+ uint32_t *layout,
+ uint32_t *bitmap,
+ uint32_t **pchannel_desc)
{
int i, j;
uint32_t tag = 0;
@@ -514,7 +534,7 @@ uint32_t ff_mov_get_channel_layout_tag(enum AVCodecID codec_id,
/* find the layout list for the specified codec */
for (i = 0; mov_codec_ch_layouts[i].codec_id != AV_CODEC_ID_NONE; i++) {
- if (mov_codec_ch_layouts[i].codec_id == codec_id)
+ if (mov_codec_ch_layouts[i].codec_id == par->codec_id)
break;
}
if (mov_codec_ch_layouts[i].codec_id != AV_CODEC_ID_NONE)
@@ -525,7 +545,7 @@ uint32_t ff_mov_get_channel_layout_tag(enum AVCodecID codec_id,
const struct MovChannelLayoutMap *layout_map;
/* get the layout map based on the channel count */
- channels = ch_layout->nb_channels;
+ channels = par->ch_layout.nb_channels;
if (channels > 9)
channels = 0;
layout_map = mov_ch_layout_map[channels];
@@ -536,8 +556,8 @@ uint32_t ff_mov_get_channel_layout_tag(enum AVCodecID codec_id,
continue;
for (j = 0; layout_map[j].tag != 0; j++) {
if (layout_map[j].tag == layouts[i] &&
- (ch_layout->order == AV_CHANNEL_ORDER_NATIVE &&
- layout_map[j].layout == ch_layout->u.mask))
+ (par->ch_layout.order == AV_CHANNEL_ORDER_NATIVE &&
+ layout_map[j].layout == par->ch_layout.u.mask))
break;
}
if (layout_map[j].tag)
@@ -546,18 +566,39 @@ uint32_t ff_mov_get_channel_layout_tag(enum AVCodecID codec_id,
tag = layouts[i];
}
- /* if no tag was found, use channel bitmap as a backup if possible */
- if (tag == 0 && av_channel_layout_check(ch_layout) &&
- ch_layout->order == AV_CHANNEL_ORDER_NATIVE &&
- ch_layout->u.mask < 0x40000) {
- tag = MOV_CH_LAYOUT_USE_BITMAP;
- *bitmap = (uint32_t)ch_layout->u.mask;
- } else
- *bitmap = 0;
+ *layout = tag;
+ *bitmap = 0;
+ *pchannel_desc = NULL;
+
+ /* if no tag was found, use channel bitmap or description as a backup if possible */
+ if (tag == 0) {
+ uint32_t *channel_desc;
+ if (par->ch_layout.order == AV_CHANNEL_ORDER_NATIVE &&
+ par->ch_layout.u.mask < 0x40000) {
+ *layout = MOV_CH_LAYOUT_USE_BITMAP;
+ *bitmap = (uint32_t)par->ch_layout.u.mask;
+ return 0;
+ } else if (par->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
+ return AVERROR(ENOSYS);
+
+ channel_desc = av_malloc_array(par->ch_layout.nb_channels, sizeof(*channel_desc));
+ if (!channel_desc)
+ return AVERROR(ENOMEM);
+
+ for (i = 0; i < par->ch_layout.nb_channels; i++) {
+ channel_desc[i] =
+ mov_get_channel_label(av_channel_layout_channel_from_index(&par->ch_layout, i));
+
+ if (channel_desc[i] == 0) {
+ av_free(channel_desc);
+ return AVERROR(ENOSYS);
+ }
+ }
- /* TODO: set channel descriptions as a secondary backup */
+ *pchannel_desc = channel_desc;
+ }
- return tag;
+ return 0;
}
int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, AVStream *st,
diff --git a/libavformat/mov_chan.h b/libavformat/mov_chan.h
index 9514dfa405..2815f15f07 100644
--- a/libavformat/mov_chan.h
+++ b/libavformat/mov_chan.h
@@ -30,6 +30,7 @@
#include "libavutil/channel_layout.h"
#include "libavcodec/codec_id.h"
+#include "libavcodec/codec_par.h"
#include "avformat.h"
/**
@@ -41,9 +42,10 @@
* @param[out] bitmap channel bitmap
* @return channel layout tag
*/
-uint32_t ff_mov_get_channel_layout_tag(enum AVCodecID codec_id,
- const AVChannelLayout *ch_layout,
- uint32_t *bitmap);
+int ff_mov_get_channel_layout_tag(const AVCodecParameters *par,
+ uint32_t *layout,
+ uint32_t *bitmap,
+ uint32_t **pchannel_desc);
/**
* Read 'chan' tag from the input stream.
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 46d66c29c2..263649f1da 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -867,20 +867,27 @@ static int mov_write_dmlp_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *tra
static int mov_write_chan_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track)
{
- uint32_t layout_tag, bitmap;
+ uint32_t layout_tag, bitmap, *channel_desc;
int64_t pos = avio_tell(pb);
+ int num_desc, ret;
- layout_tag = ff_mov_get_channel_layout_tag(track->par->codec_id,
- &track->par->ch_layout,
- &bitmap);
- if (!layout_tag) {
- av_log(s, AV_LOG_WARNING, "not writing 'chan' tag due to "
- "lack of channel information\n");
+ if (track->multichannel_as_mono)
return 0;
+
+ ret = ff_mov_get_channel_layout_tag(track->par, &layout_tag,
+ &bitmap, &channel_desc);
+
+ if (ret < 0) {
+ if (ret == AVERROR(ENOSYS)) {
+ av_log(s, AV_LOG_WARNING, "not writing 'chan' tag due to "
+ "lack of channel information\n");
+ ret = 0;
+ }
+
+ return ret;
}
- if (track->multichannel_as_mono)
- return 0;
+ num_desc = layout_tag ? 0 : track->par->ch_layout.nb_channels;
avio_wb32(pb, 0); // Size
ffio_wfourcc(pb, "chan"); // Type
@@ -888,7 +895,17 @@ static int mov_write_chan_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *tra
avio_wb24(pb, 0); // Flags
avio_wb32(pb, layout_tag); // mChannelLayoutTag
avio_wb32(pb, bitmap); // mChannelBitmap
- avio_wb32(pb, 0); // mNumberChannelDescriptions
+ avio_wb32(pb, num_desc); // mNumberChannelDescriptions
+
+ for (int i = 0; i < num_desc; i++) {
+ avio_wb32(pb, channel_desc[i]); // mChannelLabel
+ avio_wb32(pb, 0); // mChannelFlags
+ avio_wl32(pb, 0); // mCoordinates[0]
+ avio_wl32(pb, 0); // mCoordinates[1]
+ avio_wl32(pb, 0); // mCoordinates[2]
+ }
+
+ av_free(channel_desc);
return update_size(pb, pos);
}
--
2.35.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 8+ messages in thread
* [FFmpeg-devel] [PATCH 5/7] avformat/mov_chan: move the definition of MovChannelLayoutTag to the header
2022-03-28 23:24 [FFmpeg-devel] [PATCH 1/7] avformat/mov_chan: rename mov_get_channel_label() to better reflect its purpose James Almer
` (2 preceding siblings ...)
2022-03-28 23:24 ` [FFmpeg-devel] [PATCH 4/7] avformat/movenc: write channel descriptions when a known layout or a bitmap can't be used James Almer
@ 2022-03-28 23:24 ` James Almer
2022-03-28 23:24 ` [FFmpeg-devel] [PATCH 6/7] avformat/movenc: don't use mono layout when a front center label is expected James Almer
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: James Almer @ 2022-03-28 23:24 UTC (permalink / raw)
To: ffmpeg-devel
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavformat/mov_chan.c | 104 -----------------------------------------
libavformat/mov_chan.h | 104 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 104 insertions(+), 104 deletions(-)
diff --git a/libavformat/mov_chan.c b/libavformat/mov_chan.c
index 4cb373d1b9..5b757c6a8a 100644
--- a/libavformat/mov_chan.c
+++ b/libavformat/mov_chan.c
@@ -29,110 +29,6 @@
#include "libavcodec/codec_id.h"
#include "mov_chan.h"
-/**
- * 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."
- */
-enum MovChannelLayoutTag {
-#define 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,
-};
-
struct MovChannelLayoutMap {
uint32_t tag;
uint64_t layout;
diff --git a/libavformat/mov_chan.h b/libavformat/mov_chan.h
index 2815f15f07..93d9878798 100644
--- a/libavformat/mov_chan.h
+++ b/libavformat/mov_chan.h
@@ -33,6 +33,110 @@
#include "libavcodec/codec_par.h"
#include "avformat.h"
+/**
+ * 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."
+ */
+enum MovChannelLayoutTag {
+#define 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,
+};
+
/**
* 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.
--
2.35.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 8+ messages in thread