avcodec/aacdec: fix parsing streams with channel configuration 11

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>
This commit is contained in:
James Almer 2022-10-26 20:11:04 -03:00
parent e27bef9a56
commit 8c7d3b43cc
2 changed files with 4 additions and 6 deletions

View File

@ -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]; return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2];
} }
case 11: case 11:
if (ac->tags_mapped == 2 && if (ac->tags_mapped == 3 && type == TYPE_SCE) {
ac->oc[1].m4ac.chan_config == 11 &&
type == TYPE_SCE) {
ac->tags_mapped++; ac->tags_mapped++;
return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1]; return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1];
} }

View File

@ -35,7 +35,7 @@
#include <stdint.h> #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] = { static const uint8_t aac_channel_layout_map[16][16][3] = {
{ { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, }, { { 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_5POINT0_BACK,
AV_CH_LAYOUT_5POINT1_BACK, AV_CH_LAYOUT_5POINT1_BACK,
AV_CH_LAYOUT_7POINT1_WIDE_BACK, AV_CH_LAYOUT_7POINT1_WIDE_BACK,
AV_CH_LAYOUT_6POINT1, AV_CH_LAYOUT_6POINT1_BACK,
AV_CH_LAYOUT_7POINT1, AV_CH_LAYOUT_7POINT1,
AV_CH_LAYOUT_22POINT2, AV_CH_LAYOUT_22POINT2,
0, 0,
@ -97,7 +97,7 @@ static const AVChannelLayout aac_ch_layout[] = {
AV_CHANNEL_LAYOUT_5POINT0_BACK, AV_CHANNEL_LAYOUT_5POINT0_BACK,
AV_CHANNEL_LAYOUT_5POINT1_BACK, AV_CHANNEL_LAYOUT_5POINT1_BACK,
AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK, AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK,
AV_CHANNEL_LAYOUT_6POINT1, AV_CHANNEL_LAYOUT_6POINT1_BACK,
AV_CHANNEL_LAYOUT_7POINT1, AV_CHANNEL_LAYOUT_7POINT1,
AV_CHANNEL_LAYOUT_22POINT2, AV_CHANNEL_LAYOUT_22POINT2,
{ 0 }, { 0 },