From e453ba4c45091fcaf950198bc1dc9fd1e645f111 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 20 Dec 2013 19:39:07 +0200 Subject: [PATCH] ffmpeg: add xbmc patch --- ...avcodec-aacdec-default-to-non-wide-7.patch | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 packages/multimedia/ffmpeg/patches/ffmpeg-0061-ffmpeg-backport-avcodec-aacdec-default-to-non-wide-7.patch diff --git a/packages/multimedia/ffmpeg/patches/ffmpeg-0061-ffmpeg-backport-avcodec-aacdec-default-to-non-wide-7.patch b/packages/multimedia/ffmpeg/patches/ffmpeg-0061-ffmpeg-backport-avcodec-aacdec-default-to-non-wide-7.patch new file mode 100644 index 0000000000..7e2f05bd9b --- /dev/null +++ b/packages/multimedia/ffmpeg/patches/ffmpeg-0061-ffmpeg-backport-avcodec-aacdec-default-to-non-wide-7.patch @@ -0,0 +1,67 @@ +From 59f16d529fdcb4c5db53ce3bd289aa8148a13de4 Mon Sep 17 00:00:00 2001 +From: Anssi Hannula +Date: Tue, 17 Dec 2013 23:04:31 +0200 +Subject: [PATCH] [ffmpeg] - backport - avcodec/aacdec: default to non-wide 7.1 + in non-strict mode + +Upstream commit e10fccf62a36e09b54ad6ea3d5fa6638f298d5ae, for +http://trac.xbmc.org/ticket/13758. + +AAC specification has 7.1(wide) as a default layout for 8-channel +streams (channel config 7). However, at least Nero AAC encoder encodes +non-wide 7.1 streams using the default channel config 7, mapping the +side channels of the original audio stream to the second +AAC_CHANNEL_FRONT pair in the AAC stream. Similarly, e.g. FAAD decodes +the second AAC_CHANNEL_FRONT pair as side channels, therefore decoding +the incorrect streams as if they were correct (and as the encoder +intended). + +FFmpeg currently decodes such files by-the-spec, i.e. after decoding the +original front pair will be in AV_CH_FRONT_x_OF_CENTER and the original +side pair will be in AV_CH_FRONT_x. + +As actual intended 7.1(wide) streams are very rare while misencoded 7.1 +files actually exist in the wild, default to assuming a 7.1 layout was +intended unless in strict mode. + +Fixes playback of e.g. 8_Channel_ID.m4a in samples. + +Signed-off-by: Anssi Hannula +Signed-off-by: Michael Niedermayer +--- + libavcodec/aacdec.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c +index 7a871c4..12dbfcf 100644 +--- a/libavcodec/aacdec.c ++++ b/libavcodec/aacdec.c +@@ -505,6 +505,25 @@ static int set_default_channel_config(AVCodecContext *avctx, + } + *tags = tags_per_config[channel_config]; + memcpy(layout_map, aac_channel_layout_map[channel_config-1], *tags * sizeof(*layout_map)); ++ ++ /* ++ * AAC specification has 7.1(wide) as a default layout for 8-channel streams. ++ * However, at least Nero AAC encoder encodes 7.1 streams using the default ++ * channel config 7, mapping the side channels of the original audio stream ++ * to the second AAC_CHANNEL_FRONT pair in the AAC stream. Similarly, e.g. FAAD ++ * decodes the second AAC_CHANNEL_FRONT pair as side channels, therefore decoding ++ * the incorrect streams as if they were correct (and as the encoder intended). ++ * ++ * As actual intended 7.1(wide) streams are very rare, default to assuming a ++ * 7.1 layout was intended. ++ */ ++ if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) { ++ av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout" ++ " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode" ++ " according to the specification instead.\n", FF_COMPLIANCE_STRICT); ++ layout_map[2][2] = AAC_CHANNEL_SIDE; ++ } ++ + return 0; + } + +-- +1.8.1.5 +