aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornu774 <honeycomb77@gmail.com>2015-06-04 14:42:08 +0900
committerLuca Barbato <lu_zero@gentoo.org>2015-06-07 10:14:45 +0200
commit677c804aa3a78d61b21e6423165a252846c20f0e (patch)
tree13a1789087f712b00b255a55205587c6a115fd47
parent252d6200c36e7eaa79f8d5205b7d731179e94897 (diff)
downloadffmpeg-677c804aa3a78d61b21e6423165a252846c20f0e.tar.gz
aac: correctly map 7.1ch-wide AAC from FDK AAC encoder
FDK AAC encoder outputs SCE(front)+CPE(front)+CPE(back)+CPE(back) on MODE_7_1_REAR_SURROUND configuration. Since decoder couldn't properly map 4 back channels, decoding failed unless -request_channel_layout 0x8000000000000000 has been specified. Now we treat first CPE(back) as CPE(side) on channel mapping. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
-rw-r--r--libavcodec/aacdec.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index 0c7e2c4d39..74628d6b14 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -291,6 +291,11 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
if (num_back_channels < 0)
return 0;
+ if (num_side_channels == 0 && num_back_channels >= 4) {
+ num_side_channels = 2;
+ num_back_channels -= 2;
+ }
+
i = 0;
if (num_front_channels & 1) {
e2c_vec[i] = (struct elem_to_channel) {