* [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11
@ 2022-10-31 21:15 James Almer
2022-10-31 21:15 ` [FFmpeg-devel] [PATCH 2/6 v3] avutil/channel_layout: add a 7.1(top) channel layout James Almer
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: James Almer @ 2022-10-31 21:15 UTC (permalink / raw)
To: ffmpeg-devel
Set the correct amount of tags in tags_per_config[].
Also, there are no channels that correspond to a side element in this
configuration, so reflect this in the list of known/supported channel layouts.
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/aacdec_template.c | 4 +---
libavcodec/aacdectab.h | 6 +++---
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index 4a9513d53e..c10bc743b6 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -731,9 +731,7 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
}
case 11:
- if (ac->tags_mapped == 2 &&
- ac->oc[1].m4ac.chan_config == 11 &&
- type == TYPE_SCE) {
+ if (ac->tags_mapped == 3 && type == TYPE_SCE) {
ac->tags_mapped++;
return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
}
diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h
index e38b93a534..327efbcde0 100644
--- a/libavcodec/aacdectab.h
+++ b/libavcodec/aacdectab.h
@@ -35,7 +35,7 @@
#include <stdint.h>
-static const int8_t tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 4, 5, 16, 5, 0 };
+static const int8_t tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 5, 5, 16, 5, 0 };
static const uint8_t aac_channel_layout_map[16][16][3] = {
{ { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, },
@@ -81,7 +81,7 @@ static const uint64_t aac_channel_layout[] = {
AV_CH_LAYOUT_5POINT0_BACK,
AV_CH_LAYOUT_5POINT1_BACK,
AV_CH_LAYOUT_7POINT1_WIDE_BACK,
- AV_CH_LAYOUT_6POINT1,
+ AV_CH_LAYOUT_6POINT1_BACK,
AV_CH_LAYOUT_7POINT1,
AV_CH_LAYOUT_22POINT2,
0,
@@ -97,7 +97,7 @@ static const AVChannelLayout aac_ch_layout[] = {
AV_CHANNEL_LAYOUT_5POINT0_BACK,
AV_CHANNEL_LAYOUT_5POINT1_BACK,
AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK,
- AV_CHANNEL_LAYOUT_6POINT1,
+ AV_CHANNEL_LAYOUT_6POINT1_BACK,
AV_CHANNEL_LAYOUT_7POINT1,
AV_CHANNEL_LAYOUT_22POINT2,
{ 0 },
--
2.38.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] 7+ messages in thread
* [FFmpeg-devel] [PATCH 2/6 v3] avutil/channel_layout: add a 7.1(top) channel layout
2022-10-31 21:15 [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
@ 2022-10-31 21:15 ` James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 3/6] swresample/rematrix: support mixing top front left/right channels James Almer
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: James Almer @ 2022-10-31 21:15 UTC (permalink / raw)
To: ffmpeg-devel
Signed-off-by: James Almer <jamrial@gmail.com>
---
doc/APIchanges | 3 +++
doc/utils.texi | 2 ++
libavutil/channel_layout.c | 1 +
libavutil/channel_layout.h | 2 ++
tests/ref/fate/channel_layout | 1 +
5 files changed, 9 insertions(+)
diff --git a/doc/APIchanges b/doc/APIchanges
index 3c86f24285..58a970328b 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -14,6 +14,9 @@ libavutil: 2021-04-27
API changes, most recent first:
+2022-10-xx - xxxxxxxxxx - lavu 57.xx.xxx - channel_layout.h
+ Add AV_CH_LAYOUT_7POINT1_TOP_BACK and AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK.
+
2022-10-30 - xxxxxxxxxx - lavu 57.40.100 - channel_layout.h
Add AV_CH_LAYOUT_CUBE and AV_CHANNEL_LAYOUT_CUBE.
diff --git a/doc/utils.texi b/doc/utils.texi
index 907a6b87cb..8e8bfa76d4 100644
--- a/doc/utils.texi
+++ b/doc/utils.texi
@@ -713,6 +713,8 @@ FL+FR+FC+LFE+BL+BR+SL+SR
FL+FR+FC+LFE+BL+BR+FLC+FRC
@item 7.1(wide-side)
FL+FR+FC+LFE+FLC+FRC+SL+SR
+@item 7.1(top)
+FL+FR+FC+LFE+BL+BR+TFL+TFR
@item octagonal
FL+FR+FC+BL+BR+BC+SL+SR
@item cube
diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c
index 5af7ea0e01..e2f7512254 100644
--- a/libavutil/channel_layout.c
+++ b/libavutil/channel_layout.c
@@ -196,6 +196,7 @@ static const struct channel_layout_name channel_layout_map[] = {
{ "7.1", AV_CHANNEL_LAYOUT_7POINT1 },
{ "7.1(wide)", AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK },
{ "7.1(wide-side)", AV_CHANNEL_LAYOUT_7POINT1_WIDE },
+ { "7.1(top)", AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK },
{ "octagonal", AV_CHANNEL_LAYOUT_OCTAGONAL },
{ "cube", AV_CHANNEL_LAYOUT_CUBE },
{ "hexadecagonal", AV_CHANNEL_LAYOUT_HEXADECAGONAL },
diff --git a/libavutil/channel_layout.h b/libavutil/channel_layout.h
index 3e69163360..f345415c55 100644
--- a/libavutil/channel_layout.h
+++ b/libavutil/channel_layout.h
@@ -232,6 +232,7 @@ enum AVChannelOrder {
#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
+#define AV_CH_LAYOUT_7POINT1_TOP_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
#define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
@@ -389,6 +390,7 @@ typedef struct AVChannelLayout {
#define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1)
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE)
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK)
+#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_TOP_BACK)
#define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL)
#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE)
#define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL)
diff --git a/tests/ref/fate/channel_layout b/tests/ref/fate/channel_layout
index 02eaad0929..b93f96dbb3 100644
--- a/tests/ref/fate/channel_layout
+++ b/tests/ref/fate/channel_layout
@@ -24,6 +24,7 @@ hexagonal FL+FR+FC+BL+BR+BC
7.1 FL+FR+FC+LFE+BL+BR+SL+SR
7.1(wide) FL+FR+FC+LFE+BL+BR+FLC+FRC
7.1(wide-side) FL+FR+FC+LFE+FLC+FRC+SL+SR
+7.1(top) FL+FR+FC+LFE+BL+BR+TFL+TFR
octagonal FL+FR+FC+BL+BR+BC+SL+SR
cube FL+FR+BL+BR+TFL+TFR+TBL+TBR
hexadecagonal FL+FR+FC+BL+BR+BC+SL+SR+TFL+TFC+TFR+TBL+TBC+TBR+WL+WR
--
2.38.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] 7+ messages in thread
* [FFmpeg-devel] [PATCH 3/6] swresample/rematrix: support mixing top front left/right channels
2022-10-31 21:15 [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
2022-10-31 21:15 ` [FFmpeg-devel] [PATCH 2/6 v3] avutil/channel_layout: add a 7.1(top) channel layout James Almer
@ 2022-10-31 21:18 ` James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 4/6 v3] avcodec/aacdec: add support for channel configuration 14 James Almer
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: James Almer @ 2022-10-31 21:18 UTC (permalink / raw)
To: ffmpeg-devel
Signed-off-by: James Almer <jamrial@gmail.com>
---
libswresample/rematrix.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c
index fe823dc575..0c3fff6c42 100644
--- a/libswresample/rematrix.c
+++ b/libswresample/rematrix.c
@@ -138,6 +138,8 @@ static int sane_layout(AVChannelLayout *ch_layout) {
return 0;
if(!even(av_channel_layout_subset(ch_layout, (AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER))))
return 0;
+ if(!even(av_channel_layout_subset(ch_layout, (AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT))))
+ return 0;
if(ch_layout->nb_channels >= SWR_CH_MAX)
return 0;
@@ -369,6 +371,28 @@ av_cold int swr_build_matrix2(const AVChannelLayout *in_layout, const AVChannelL
}else
av_assert0(0);
}
+
+ if (unaccounted & AV_CH_TOP_FRONT_LEFT) {
+ if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_TOP_FRONT_CENTER) >= 0) {
+ matrix[TOP_FRONT_CENTER][TOP_FRONT_LEFT ] += M_SQRT1_2;
+ matrix[TOP_FRONT_CENTER][TOP_FRONT_RIGHT] += M_SQRT1_2;
+ if (av_channel_layout_index_from_channel(&in_ch_layout, AV_CHAN_TOP_FRONT_CENTER) >= 0)
+ matrix[TOP_FRONT_CENTER][TOP_FRONT_CENTER] = center_mix_level * sqrt(2);
+ } else if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_FRONT_LEFT) >= 0) {
+ if (av_channel_layout_index_from_channel(&in_ch_layout, AV_CHAN_FRONT_LEFT) >= 0) {
+ matrix[FRONT_LEFT ][TOP_FRONT_LEFT ] += M_SQRT1_2;
+ matrix[FRONT_RIGHT][TOP_FRONT_RIGHT] += M_SQRT1_2;
+ } else {
+ matrix[FRONT_LEFT ][TOP_FRONT_LEFT ] += 1.0;
+ matrix[FRONT_RIGHT][TOP_FRONT_RIGHT] += 1.0;
+ }
+ } else if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_FRONT_CENTER) >= 0) {
+ matrix[FRONT_CENTER][TOP_FRONT_LEFT ] += M_SQRT1_2;
+ matrix[FRONT_CENTER][TOP_FRONT_RIGHT] += M_SQRT1_2;
+ } else
+ av_assert0(0);
+ }
+
/* mix LFE into front left/right or center */
if (unaccounted & AV_CH_LOW_FREQUENCY) {
if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_FRONT_CENTER) >= 0) {
--
2.38.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] 7+ messages in thread
* [FFmpeg-devel] [PATCH 4/6 v3] avcodec/aacdec: add support for channel configuration 14
2022-10-31 21:15 [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
2022-10-31 21:15 ` [FFmpeg-devel] [PATCH 2/6 v3] avutil/channel_layout: add a 7.1(top) channel layout James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 3/6] swresample/rematrix: support mixing top front left/right channels James Almer
@ 2022-10-31 21:18 ` James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 5/6] avcodec/aacdec: don't force a layout when a channel position is unknown James Almer
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: James Almer @ 2022-10-31 21:18 UTC (permalink / raw)
To: ffmpeg-devel
It corresponds to the 7.1(top) layout.
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/aacdec_template.c | 23 ++++++++++++++++++++++-
libavcodec/aacdectab.h | 6 +++---
libavcodec/mpeg4audio.c | 5 +++--
libavcodec/mpeg4audio.h | 2 +-
4 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index c10bc743b6..9a85692069 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -404,6 +404,21 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
i++;
}
+ // The previous checks would end up at 4 at this point for chan_config 14
+ if (layout == AV_CH_LAYOUT_5POINT1_BACK && tags == 5 && i == 4) {
+ const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[13];
+ for (int j = 0; j < tags; j++) {
+ if (layout_map[j][0] != reference_layout_map[j][0] ||
+ layout_map[j][2] != reference_layout_map[j][2])
+ goto end_of_layout_definition;
+ }
+
+ i += assign_pair(e2c_vec, layout_map, i,
+ AV_CH_TOP_FRONT_LEFT,
+ AV_CH_TOP_FRONT_RIGHT,
+ AAC_CHANNEL_FRONT,
+ &layout);
+ }
// The previous checks would end up at 8 at this point for 22.2
if (layout == PREFIX_FOR_22POINT2 && tags == 16 && i == 8) {
const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[12];
@@ -633,7 +648,7 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx,
int channel_config)
{
if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
- channel_config > 13) {
+ channel_config > 14) {
av_log(avctx, AV_LOG_ERROR,
"invalid default channel configuration (%d)\n",
channel_config);
@@ -717,6 +732,12 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
/* For indexed channel configurations map the channels solely based
* on position. */
switch (ac->oc[1].m4ac.chan_config) {
+ case 14:
+ if (ac->tags_mapped > 2 && ((type == TYPE_CPE && elem_id < 3) ||
+ (type == TYPE_LFE && elem_id < 1))) {
+ ac->tags_mapped++;
+ return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id];
+ }
case 13:
if (ac->tags_mapped > 3 && ((type == TYPE_CPE && elem_id < 8) ||
(type == TYPE_SCE && elem_id < 6) ||
diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h
index 327efbcde0..0e5e47da64 100644
--- a/libavcodec/aacdectab.h
+++ b/libavcodec/aacdectab.h
@@ -68,8 +68,8 @@ static const uint8_t aac_channel_layout_map[16][16][3] = {
{ TYPE_SCE, 5, AAC_CHANNEL_FRONT }, // SCE6 = BtFC,
{ TYPE_CPE, 7, AAC_CHANNEL_FRONT }, // CPE8 = BtFL and BtFR
},
+ { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, { TYPE_CPE, 2, AAC_CHANNEL_FRONT }, },
{ { 0, } },
- /* TODO: Add 7+1 TOP configuration */
};
#if FF_API_OLD_CHANNEL_LAYOUT
@@ -84,8 +84,8 @@ static const uint64_t aac_channel_layout[] = {
AV_CH_LAYOUT_6POINT1_BACK,
AV_CH_LAYOUT_7POINT1,
AV_CH_LAYOUT_22POINT2,
+ AV_CH_LAYOUT_7POINT1_TOP_BACK,
0,
- /* AV_CH_LAYOUT_7POINT1_TOP, */
};
#endif
@@ -100,8 +100,8 @@ static const AVChannelLayout aac_ch_layout[] = {
AV_CHANNEL_LAYOUT_6POINT1_BACK,
AV_CHANNEL_LAYOUT_7POINT1,
AV_CHANNEL_LAYOUT_22POINT2,
+ AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK,
{ 0 },
- /* AV_CHANNEL_LAYOUT_7POINT1_TOP, */
};
#endif /* AVCODEC_AACDECTAB_H */
diff --git a/libavcodec/mpeg4audio.c b/libavcodec/mpeg4audio.c
index e38a8c0852..fbd2a8f811 100644
--- a/libavcodec/mpeg4audio.c
+++ b/libavcodec/mpeg4audio.c
@@ -56,7 +56,7 @@ static int parse_config_ALS(GetBitContext *gb, MPEG4AudioConfig *c, void *logctx
return 0;
}
-const uint8_t ff_mpeg4audio_channels[14] = {
+const uint8_t ff_mpeg4audio_channels[15] = {
0,
1, // mono (1/0)
2, // stereo (2/0)
@@ -70,7 +70,8 @@ const uint8_t ff_mpeg4audio_channels[14] = {
0,
7, // 3/3.1
8, // 3/2/2.1
- 24 // 3/3/3 - 5/2/3 - 3/0/0.2
+ 24, // 3/3/3 - 5/2/3 - 3/0/0.2
+ 8, // 3/2.1 - 2/0
};
static inline int get_object_type(GetBitContext *gb)
diff --git a/libavcodec/mpeg4audio.h b/libavcodec/mpeg4audio.h
index a6f71cff58..56615ef321 100644
--- a/libavcodec/mpeg4audio.h
+++ b/libavcodec/mpeg4audio.h
@@ -42,7 +42,7 @@ typedef struct MPEG4AudioConfig {
} MPEG4AudioConfig;
extern const int ff_mpeg4audio_sample_rates[16];
-extern const uint8_t ff_mpeg4audio_channels[14];
+extern const uint8_t ff_mpeg4audio_channels[15];
/**
* Parse MPEG-4 systems extradata from a potentially unaligned GetBitContext to retrieve audio configuration.
--
2.38.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] 7+ messages in thread
* [FFmpeg-devel] [PATCH 5/6] avcodec/aacdec: don't force a layout when a channel position is unknown
2022-10-31 21:15 [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
` (2 preceding siblings ...)
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 4/6 v3] avcodec/aacdec: add support for channel configuration 14 James Almer
@ 2022-10-31 21:18 ` James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 6/6] avcodec/aacdec: refactor the channel layout derivation code James Almer
2022-11-03 13:47 ` [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
5 siblings, 0 replies; 7+ messages in thread
From: James Almer @ 2022-10-31 21:18 UTC (permalink / raw)
To: ffmpeg-devel
If PCE defines channels not covered by those in the standard configurations
then don't try to come up with some made up layout and just return them in the
coded order.
Fixes al08_44.mp4 from the conformance suite, now reporting and decoding all 48
channels instead of 10.
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/aacdec_template.c | 27 ++++++---------------------
1 file changed, 6 insertions(+), 21 deletions(-)
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index 9a85692069..4a88aeae1d 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -325,36 +325,19 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
AAC_CHANNEL_FRONT, &layout);
num_front_channels -= 2;
}
- while (num_front_channels >= 2) {
- i += assign_pair(e2c_vec, layout_map, i,
- UINT64_MAX,
- UINT64_MAX,
- AAC_CHANNEL_FRONT, &layout);
- num_front_channels -= 2;
- }
+ if (num_front_channels)
+ return 0; // Non standard PCE defined layout
if (num_side_channels >= 2) {
i += assign_pair(e2c_vec, layout_map, i,
AV_CH_SIDE_LEFT,
AV_CH_SIDE_RIGHT,
- AAC_CHANNEL_FRONT, &layout);
- num_side_channels -= 2;
- }
- while (num_side_channels >= 2) {
- i += assign_pair(e2c_vec, layout_map, i,
- UINT64_MAX,
- UINT64_MAX,
AAC_CHANNEL_SIDE, &layout);
num_side_channels -= 2;
}
+ if (num_side_channels)
+ return 0; // Non standard PCE defined layout
- while (num_back_channels >= 4) {
- i += assign_pair(e2c_vec, layout_map, i,
- UINT64_MAX,
- UINT64_MAX,
- AAC_CHANNEL_BACK, &layout);
- num_back_channels -= 2;
- }
if (num_back_channels >= 2) {
i += assign_pair(e2c_vec, layout_map, i,
AV_CH_BACK_LEFT,
@@ -373,6 +356,8 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
i++;
num_back_channels--;
}
+ if (num_back_channels)
+ return 0; // Non standard PCE defined layout
if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
e2c_vec[i] = (struct elem_to_channel) {
--
2.38.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] 7+ messages in thread
* [FFmpeg-devel] [PATCH 6/6] avcodec/aacdec: refactor the channel layout derivation code
2022-10-31 21:15 [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
` (3 preceding siblings ...)
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 5/6] avcodec/aacdec: don't force a layout when a channel position is unknown James Almer
@ 2022-10-31 21:18 ` James Almer
2022-11-03 13:47 ` [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
5 siblings, 0 replies; 7+ messages in thread
From: James Almer @ 2022-10-31 21:18 UTC (permalink / raw)
To: ffmpeg-devel
Generalize the checks for channels in all positions, and properly support
the three height groups (normal, top, bottom) instead of manually setting
the relevant channels for the latter two after the normal height tags were
parsed.
Signed-off-by: James Almer <jamrial@gmail.com>
---
libavcodec/aacdec_template.c | 256 ++++++++++++-----------------------
libavcodec/aacdectab.h | 27 +++-
2 files changed, 107 insertions(+), 176 deletions(-)
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index 4a88aeae1d..245fd9f6fe 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -238,13 +238,13 @@ static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
}
static int count_paired_channels(uint8_t (*layout_map)[3], int tags, int pos,
- int *current)
+ int current)
{
int num_pos_channels = 0;
int first_cpe = 0;
int sce_parity = 0;
int i;
- for (i = *current; i < tags; i++) {
+ for (i = current; i < tags; i++) {
if (layout_map[i][2] != pos)
break;
if (layout_map[i][0] == TYPE_CPE) {
@@ -259,207 +259,117 @@ static int count_paired_channels(uint8_t (*layout_map)[3], int tags, int pos,
first_cpe = 1;
} else {
num_pos_channels++;
- sce_parity ^= 1;
+ sce_parity ^= (pos != AAC_CHANNEL_LFE);
}
}
if (sce_parity &&
- ((pos == AAC_CHANNEL_FRONT && first_cpe) || pos == AAC_CHANNEL_SIDE))
+ (pos == AAC_CHANNEL_FRONT && first_cpe))
return -1;
- *current = i;
+
return num_pos_channels;
}
-#define PREFIX_FOR_22POINT2 (AV_CH_LAYOUT_7POINT1_WIDE_BACK|AV_CH_BACK_CENTER|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_LOW_FREQUENCY_2)
-static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
+static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t (*layout_map)[3],
+ uint64_t *layout, int tags, int layer, int pos, int *current)
{
- int i, n, total_non_cc_elements;
- struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } };
- int num_front_channels, num_side_channels, num_back_channels;
- uint64_t layout = 0;
+ int i = *current, j = 0;
+ int nb_channels = count_paired_channels(layout_map, tags, pos, i);
- if (FF_ARRAY_ELEMS(e2c_vec) < tags)
+ if (nb_channels < 0 || nb_channels > 5)
return 0;
- i = 0;
- num_front_channels =
- count_paired_channels(layout_map, tags, AAC_CHANNEL_FRONT, &i);
- if (num_front_channels < 0)
- return 0;
- num_side_channels =
- count_paired_channels(layout_map, tags, AAC_CHANNEL_SIDE, &i);
- if (num_side_channels < 0)
- return 0;
- num_back_channels =
- count_paired_channels(layout_map, tags, AAC_CHANNEL_BACK, &i);
- if (num_back_channels < 0)
- return 0;
+ if (pos == AAC_CHANNEL_LFE) {
+ while (nb_channels) {
+ if (aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE)
+ return -1;
+ e2c_vec[i] = (struct elem_to_channel) {
+ .av_position = 1ULL << aac_channel_map[layer][pos - 1][j],
+ .syn_ele = layout_map[i][0],
+ .elem_id = layout_map[i][1],
+ .aac_position = pos
+ };
+ *layout |= e2c_vec[i].av_position;
+ i++;
+ j++;
+ nb_channels--;
+ }
+ *current = i;
- if (num_side_channels == 0 && num_back_channels >= 4) {
- num_side_channels = 2;
- num_back_channels -= 2;
+ return 0;
}
- i = 0;
- if (num_front_channels & 1) {
+ while (nb_channels & 1) {
+ if (aac_channel_map[layer][pos - 1][0] == AV_CHAN_NONE)
+ return -1;
+ if (aac_channel_map[layer][pos - 1][0] == AV_CHAN_UNUSED)
+ break;
e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_FRONT_CENTER,
- .syn_ele = TYPE_SCE,
+ .av_position = 1ULL << aac_channel_map[layer][pos - 1][0],
+ .syn_ele = layout_map[i][0],
.elem_id = layout_map[i][1],
- .aac_position = AAC_CHANNEL_FRONT
+ .aac_position = pos
};
- layout |= e2c_vec[i].av_position;
+ *layout |= e2c_vec[i].av_position;
i++;
- num_front_channels--;
+ nb_channels--;
}
- if (num_front_channels >= 4) {
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_FRONT_LEFT_OF_CENTER,
- AV_CH_FRONT_RIGHT_OF_CENTER,
- AAC_CHANNEL_FRONT, &layout);
- num_front_channels -= 2;
- }
- if (num_front_channels >= 2) {
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_FRONT_LEFT,
- AV_CH_FRONT_RIGHT,
- AAC_CHANNEL_FRONT, &layout);
- num_front_channels -= 2;
- }
- if (num_front_channels)
- return 0; // Non standard PCE defined layout
- if (num_side_channels >= 2) {
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_SIDE_LEFT,
- AV_CH_SIDE_RIGHT,
- AAC_CHANNEL_SIDE, &layout);
- num_side_channels -= 2;
- }
- if (num_side_channels)
- return 0; // Non standard PCE defined layout
-
- if (num_back_channels >= 2) {
+ j = (pos != AAC_CHANNEL_SIDE) && nb_channels <= 3 ? 3 : 1;
+ while (nb_channels >= 2) {
+ if (aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE ||
+ aac_channel_map[layer][pos - 1][j+1] == AV_CHAN_NONE)
+ return -1;
i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_BACK_LEFT,
- AV_CH_BACK_RIGHT,
- AAC_CHANNEL_BACK, &layout);
- num_back_channels -= 2;
- }
- if (num_back_channels) {
+ 1ULL << aac_channel_map[layer][pos - 1][j],
+ 1ULL << aac_channel_map[layer][pos - 1][j+1],
+ pos, layout);
+ j += 2;
+ nb_channels -= 2;
+ }
+ while (nb_channels & 1) {
+ if (aac_channel_map[layer][pos - 1][5] == AV_CHAN_NONE)
+ return -1;
e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_BACK_CENTER,
- .syn_ele = TYPE_SCE,
+ .av_position = 1ULL << aac_channel_map[layer][pos - 1][5],
+ .syn_ele = layout_map[i][0],
.elem_id = layout_map[i][1],
- .aac_position = AAC_CHANNEL_BACK
+ .aac_position = pos
};
- layout |= e2c_vec[i].av_position;
+ *layout |= e2c_vec[i].av_position;
i++;
- num_back_channels--;
+ nb_channels--;
}
- if (num_back_channels)
- return 0; // Non standard PCE defined layout
+ if (nb_channels)
+ return -1;
- if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
- e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_LOW_FREQUENCY,
- .syn_ele = TYPE_LFE,
- .elem_id = layout_map[i][1],
- .aac_position = AAC_CHANNEL_LFE
- };
- layout |= e2c_vec[i].av_position;
- i++;
- }
- if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
- e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_LOW_FREQUENCY_2,
- .syn_ele = TYPE_LFE,
- .elem_id = layout_map[i][1],
- .aac_position = AAC_CHANNEL_LFE
- };
- layout |= e2c_vec[i].av_position;
- i++;
- }
- while (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
- e2c_vec[i] = (struct elem_to_channel) {
- .av_position = UINT64_MAX,
- .syn_ele = TYPE_LFE,
- .elem_id = layout_map[i][1],
- .aac_position = AAC_CHANNEL_LFE
- };
- i++;
- }
+ *current = i;
- // The previous checks would end up at 4 at this point for chan_config 14
- if (layout == AV_CH_LAYOUT_5POINT1_BACK && tags == 5 && i == 4) {
- const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[13];
- for (int j = 0; j < tags; j++) {
- if (layout_map[j][0] != reference_layout_map[j][0] ||
- layout_map[j][2] != reference_layout_map[j][2])
- goto end_of_layout_definition;
- }
+ return 0;
+}
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_TOP_FRONT_LEFT,
- AV_CH_TOP_FRONT_RIGHT,
- AAC_CHANNEL_FRONT,
- &layout);
- }
- // The previous checks would end up at 8 at this point for 22.2
- if (layout == PREFIX_FOR_22POINT2 && tags == 16 && i == 8) {
- const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[12];
- for (int j = 0; j < tags; j++) {
- if (layout_map[j][0] != reference_layout_map[j][0] ||
- layout_map[j][2] != reference_layout_map[j][2])
- goto end_of_layout_definition;
- }
+static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
+{
+ int i, n, total_non_cc_elements;
+ struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } };
+ uint64_t layout = 0;
- e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_TOP_FRONT_CENTER,
- .syn_ele = layout_map[i][0],
- .elem_id = layout_map[i][1],
- .aac_position = layout_map[i][2]
- }; layout |= e2c_vec[i].av_position; i++;
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_TOP_FRONT_LEFT,
- AV_CH_TOP_FRONT_RIGHT,
- AAC_CHANNEL_FRONT,
- &layout);
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_TOP_SIDE_LEFT,
- AV_CH_TOP_SIDE_RIGHT,
- AAC_CHANNEL_SIDE,
- &layout);
- e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_TOP_CENTER,
- .syn_ele = layout_map[i][0],
- .elem_id = layout_map[i][1],
- .aac_position = layout_map[i][2]
- }; layout |= e2c_vec[i].av_position; i++;
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_TOP_BACK_LEFT,
- AV_CH_TOP_BACK_RIGHT,
- AAC_CHANNEL_BACK,
- &layout);
- e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_TOP_BACK_CENTER,
- .syn_ele = layout_map[i][0],
- .elem_id = layout_map[i][1],
- .aac_position = layout_map[i][2]
- }; layout |= e2c_vec[i].av_position; i++;
- e2c_vec[i] = (struct elem_to_channel) {
- .av_position = AV_CH_BOTTOM_FRONT_CENTER,
- .syn_ele = layout_map[i][0],
- .elem_id = layout_map[i][1],
- .aac_position = layout_map[i][2]
- }; layout |= e2c_vec[i].av_position; i++;
- i += assign_pair(e2c_vec, layout_map, i,
- AV_CH_BOTTOM_FRONT_LEFT,
- AV_CH_BOTTOM_FRONT_RIGHT,
- AAC_CHANNEL_FRONT,
- &layout);
- }
+ if (FF_ARRAY_ELEMS(e2c_vec) < tags)
+ return 0;
-end_of_layout_definition:
+ for (n = 0, i = 0; n < 3 && i < tags; n++) {
+ int ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_FRONT, &i);
+ if (ret < 0)
+ return 0;
+ ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_SIDE, &i);
+ if (ret < 0)
+ return 0;
+ ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_BACK, &i);
+ if (ret < 0)
+ return 0;
+ ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_LFE, &i);
+ if (ret < 0)
+ return 0;
+ }
total_non_cc_elements = n = i;
@@ -655,7 +565,7 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx,
* 7.1 layout was intended.
*/
if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) {
- layout_map[2][2] = AAC_CHANNEL_SIDE;
+ layout_map[2][2] = AAC_CHANNEL_BACK;
if (!ac || !ac->warned_71_wide++) {
av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h
index 0e5e47da64..41f1db781d 100644
--- a/libavcodec/aacdectab.h
+++ b/libavcodec/aacdectab.h
@@ -49,12 +49,12 @@ static const uint8_t aac_channel_layout_map[16][16][3] = {
{ { 0, } },
{ { 0, } },
{ { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, },
- { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_SIDE }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, },
+ { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, },
{
{ TYPE_SCE, 0, AAC_CHANNEL_FRONT }, // SCE1 = FC,
{ TYPE_CPE, 0, AAC_CHANNEL_FRONT }, // CPE1 = FLc and FRc,
{ TYPE_CPE, 1, AAC_CHANNEL_FRONT }, // CPE2 = FL and FR,
- { TYPE_CPE, 2, AAC_CHANNEL_SIDE }, // CPE3 = SiL and SiR,
+ { TYPE_CPE, 2, AAC_CHANNEL_BACK }, // CPE3 = SiL and SiR,
{ TYPE_CPE, 3, AAC_CHANNEL_BACK }, // CPE4 = BL and BR,
{ TYPE_SCE, 1, AAC_CHANNEL_BACK }, // SCE2 = BC,
{ TYPE_LFE, 0, AAC_CHANNEL_LFE }, // LFE1 = LFE1,
@@ -62,7 +62,7 @@ static const uint8_t aac_channel_layout_map[16][16][3] = {
{ TYPE_SCE, 2, AAC_CHANNEL_FRONT }, // SCE3 = TpFC,
{ TYPE_CPE, 4, AAC_CHANNEL_FRONT }, // CPE5 = TpFL and TpFR,
{ TYPE_CPE, 5, AAC_CHANNEL_SIDE }, // CPE6 = TpSiL and TpSiR,
- { TYPE_SCE, 3, AAC_CHANNEL_FRONT }, // SCE4 = TpC,
+ { TYPE_SCE, 3, AAC_CHANNEL_SIDE }, // SCE4 = TpC,
{ TYPE_CPE, 6, AAC_CHANNEL_BACK }, // CPE7 = TpBL and TpBR,
{ TYPE_SCE, 4, AAC_CHANNEL_BACK }, // SCE5 = TpBC,
{ TYPE_SCE, 5, AAC_CHANNEL_FRONT }, // SCE6 = BtFC,
@@ -72,6 +72,27 @@ static const uint8_t aac_channel_layout_map[16][16][3] = {
{ { 0, } },
};
+static const int16_t aac_channel_map[3][4][6] = {
+ {
+ { AV_CHAN_FRONT_CENTER, AV_CHAN_FRONT_LEFT_OF_CENTER, AV_CHAN_FRONT_RIGHT_OF_CENTER, AV_CHAN_FRONT_LEFT, AV_CHAN_FRONT_RIGHT, AV_CHAN_NONE },
+ { AV_CHAN_UNUSED, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE },
+ { AV_CHAN_UNUSED, AV_CHAN_SIDE_LEFT, AV_CHAN_SIDE_RIGHT, AV_CHAN_BACK_LEFT, AV_CHAN_BACK_RIGHT, AV_CHAN_BACK_CENTER },
+ { AV_CHAN_LOW_FREQUENCY, AV_CHAN_LOW_FREQUENCY_2, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE },
+ },
+ {
+ { AV_CHAN_TOP_FRONT_CENTER, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_FRONT_LEFT, AV_CHAN_TOP_FRONT_RIGHT, AV_CHAN_NONE },
+ { AV_CHAN_UNUSED, AV_CHAN_TOP_SIDE_LEFT, AV_CHAN_TOP_SIDE_RIGHT, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_CENTER},
+ { AV_CHAN_UNUSED, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_BACK_LEFT, AV_CHAN_TOP_BACK_RIGHT, AV_CHAN_TOP_BACK_CENTER},
+ { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE},
+ },
+ {
+ { AV_CHAN_BOTTOM_FRONT_CENTER, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_BOTTOM_FRONT_LEFT, AV_CHAN_BOTTOM_FRONT_RIGHT, AV_CHAN_NONE },
+ { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE },
+ { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE },
+ { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE },
+ },
+};
+
#if FF_API_OLD_CHANNEL_LAYOUT
static const uint64_t aac_channel_layout[] = {
AV_CH_LAYOUT_MONO,
--
2.38.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] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11
2022-10-31 21:15 [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
` (4 preceding siblings ...)
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 6/6] avcodec/aacdec: refactor the channel layout derivation code James Almer
@ 2022-11-03 13:47 ` James Almer
5 siblings, 0 replies; 7+ messages in thread
From: James Almer @ 2022-11-03 13:47 UTC (permalink / raw)
To: ffmpeg-devel
On 10/31/2022 6:15 PM, James Almer wrote:
> Set the correct amount of tags in tags_per_config[].
> Also, there are no channels that correspond to a side element in this
> configuration, so reflect this in the list of known/supported channel layouts.
>
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
> libavcodec/aacdec_template.c | 4 +---
> libavcodec/aacdectab.h | 6 +++---
> 2 files changed, 4 insertions(+), 6 deletions(-)
Will apply set.
_______________________________________________
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] 7+ messages in thread
end of thread, other threads:[~2022-11-03 13:47 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-31 21:15 [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
2022-10-31 21:15 ` [FFmpeg-devel] [PATCH 2/6 v3] avutil/channel_layout: add a 7.1(top) channel layout James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 3/6] swresample/rematrix: support mixing top front left/right channels James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 4/6 v3] avcodec/aacdec: add support for channel configuration 14 James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 5/6] avcodec/aacdec: don't force a layout when a channel position is unknown James Almer
2022-10-31 21:18 ` [FFmpeg-devel] [PATCH 6/6] avcodec/aacdec: refactor the channel layout derivation code James Almer
2022-11-03 13:47 ` [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 James Almer
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git