[FFmpeg-cvslog] Fix channel order for some less common TrueHD layouts.

Carl Eugen Hoyos git at videolan.org
Tue Jan 3 14:06:39 CET 2012


ffmpeg | branch: release/0.9 | Carl Eugen Hoyos <cehoyos at ag.or.at> | Sun Dec 18 15:28:18 2011 +0100| [55e2dc7f77d6af421ceefb0df7d13b9d43ea91d3] | committer: Carl Eugen Hoyos

Fix channel order for some less common TrueHD layouts.

Reported and tested by TDiTP_

Fixes ticket #779.
(cherry picked from commit 1af0ace3a4b8aa8c6240a99de3c40f495ab279e9)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=55e2dc7f77d6af421ceefb0df7d13b9d43ea91d3
---

 libavcodec/mlpdec.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index 339c757..47aee28 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -480,6 +480,14 @@ static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp,
         m->avctx->channel_layout == AV_CH_LAYOUT_7POINT1_WIDE)) {
         FFSWAP(int, s->ch_assign[4], s->ch_assign[6]);
         FFSWAP(int, s->ch_assign[5], s->ch_assign[7]);
+    } else if (m->avctx->codec_id == CODEC_ID_TRUEHD &&
+        (m->avctx->channel_layout == AV_CH_LAYOUT_6POINT1 ||
+        m->avctx->channel_layout == (AV_CH_LAYOUT_6POINT1 | AV_CH_TOP_CENTER) ||
+        m->avctx->channel_layout == (AV_CH_LAYOUT_6POINT1 | AV_CH_TOP_FRONT_CENTER))) {
+        int i = s->ch_assign[6];
+        s->ch_assign[6] = s->ch_assign[5];
+        s->ch_assign[5] = s->ch_assign[4];
+        s->ch_assign[4] = i;
     }
 
     checksum = ff_mlp_restart_checksum(buf, get_bits_count(gbp) - start_count);



More information about the ffmpeg-cvslog mailing list