Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2022-10-28 19:35:59 +0300
committerJames Almer <jamrial@gmail.com>2022-11-04 01:39:52 +0300
commitced6a5affb0ab1a24278b9bade76c36b8636e267 (patch)
tree1dcce352e07cc18a8b6a30f2e0ba0f375112a4de /libavcodec/aacdec_template.c
parentcf653aabb5b32ce2538365e32ea9db51592169c3 (diff)
avcodec/aacdec: don't force a layout when a channel position is unknown
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>
Diffstat (limited to 'libavcodec/aacdec_template.c')
-rw-r--r--libavcodec/aacdec_template.c27
1 files 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) {