From: Hendrik Leppkes <[email protected]>

The fourth substream is being discarded, since its not raw audio
data, but an encoded Atmos stream which needs a specialized decoder.

Signed-off-by: Luca Barbato <[email protected]>
---

As asked by Felix.

 libavcodec/mlp.h    | 2 +-
 libavcodec/mlpdec.c | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/libavcodec/mlp.h b/libavcodec/mlp.h
index 5a4ee5f..8a1584e 100644
--- a/libavcodec/mlp.h
+++ b/libavcodec/mlp.h
@@ -45,7 +45,7 @@
 /** Maximum number of substreams that can be decoded.
  *  MLP's limit is 2. TrueHD supports at least up to 3.
  */
-#define MAX_SUBSTREAMS      3
+#define MAX_SUBSTREAMS      4

 /** which multiple of 48000 the maximum sample rate is */
 #define MAX_RATEFACTOR      4
diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index 624efc1..17f188f 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -350,7 +350,9 @@ static int read_major_sync(MLPDecodeContext *m, 
GetBitContext *gb)
     m->access_unit_size_pow2 = mh.access_unit_size_pow2;

     m->num_substreams        = mh.num_substreams;
-    m->max_decoded_substream = m->num_substreams - 1;
+    /* limit to decoding 3 substreams, as the 4th is used by
+     * Dolby Atmos for non-audio data */
+    m->max_decoded_substream = FFMIN(m->num_substreams - 1, 2);

     m->avctx->sample_rate    = mh.group1_samplerate;
     m->avctx->frame_size     = mh.access_unit_size;
--
2.1.0

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to