Browse Source

mlpdec: support TrueHD streams with an Atmos substream

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

Fixes decoding of the true hd stream from Transformers\ -\ Age\ of\ Extinction\ 2014\ 1080P-003.mkv

Signed-off-by: Anton Khirnov <anton@khirnov.net>
tags/n2.7
Hendrik Leppkes Anton Khirnov 11 years ago
parent
commit
dc2d0e06af
2 changed files with 4 additions and 2 deletions
  1. +1
    -1
      libavcodec/mlp.h
  2. +3
    -1
      libavcodec/mlpdec.c

+ 1
- 1
libavcodec/mlp.h View File

@@ -45,7 +45,7 @@
/** Maximum number of substreams that can be decoded. /** Maximum number of substreams that can be decoded.
* MLP's limit is 2. TrueHD supports at least up to 3. * 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 */ /** which multiple of 48000 the maximum sample rate is */
#define MAX_RATEFACTOR 4 #define MAX_RATEFACTOR 4


+ 3
- 1
libavcodec/mlpdec.c View File

@@ -355,7 +355,9 @@ static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
m->access_unit_size_pow2 = mh.access_unit_size_pow2; m->access_unit_size_pow2 = mh.access_unit_size_pow2;


m->num_substreams = mh.num_substreams; 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->sample_rate = mh.group1_samplerate;
m->avctx->frame_size = mh.access_unit_size; m->avctx->frame_size = mh.access_unit_size;


Loading…
Cancel
Save