|
|
|
@@ -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; |
|
|
|
|