diff options
author | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2011-04-19 03:18:08 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2011-04-19 03:18:08 +0200 |
commit | d3f126df4bf97d464ca34b7071283f692af9f541 (patch) | |
tree | e6700a8daa2618a4038a4bb5264b417552c9eabe /libavcodec/mlpdec.c | |
parent | 280a789fe218351a1f137366a1eabde87313049a (diff) | |
download | ffmpeg-d3f126df4bf97d464ca34b7071283f692af9f541.tar.gz |
Also set the MLP/TrueHD channel layout in the decoder.
Applications might not use the parser,
Diffstat (limited to 'libavcodec/mlpdec.c')
-rw-r--r-- | libavcodec/mlpdec.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c index 044df5bc6a..7b3bd710bb 100644 --- a/libavcodec/mlpdec.c +++ b/libavcodec/mlpdec.c @@ -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; |