Also set the MLP/TrueHD channel layout in the decoder.
authorCarl Eugen Hoyos <cehoyos@ag.or.at>
Tue, 19 Apr 2011 01:18:08 +0000 (03:18 +0200)
committerCarl Eugen Hoyos <cehoyos@ag.or.at>
Tue, 19 Apr 2011 01:18:08 +0000 (03:18 +0200)
Applications might not use the parser,

libavcodec/mlpdec.c

index 044df5b..7b3bd71 100644 (file)
@@ -329,6 +329,23 @@ static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
     for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
         m->substream[substr].restart_seen = 0;
 
+    if (mh.stream_type == 0xbb) {
+        /* MLP stream */
+        m->avctx->channel_layout = ff_mlp_layout[mh.channels_mlp];
+    } else { /* mh.stream_type == 0xba */
+        /* TrueHD stream */
+        if (mh.channels_thd_stream2) {
+            m->avctx->channel_layout = ff_truehd_layout(mh.channels_thd_stream2);
+        } else {
+            m->avctx->channel_layout = ff_truehd_layout(mh.channels_thd_stream1);
+        }
+        if (m->avctx->channels &&
+            av_get_channel_layout_nb_channels(m->avctx->channel_layout) != m->avctx->channels) {
+            m->avctx->channel_layout = 0;
+            av_log_ask_for_sample(m->avctx, "Unknown channel layout.");
+        }
+    }
+
     m->needs_reordering = mh.channels_mlp >= 18 && mh.channels_mlp <= 20;
 
     return 0;