projects
/
ffmpeg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mlp: store the channel layout for each substream.
[ffmpeg.git]
/
libavcodec
/
mlp_parser.c
diff --git
a/libavcodec/mlp_parser.c
b/libavcodec/mlp_parser.c
index
d1a3dc1
..
31c79c9
100644
(file)
--- a/
libavcodec/mlp_parser.c
+++ b/
libavcodec/mlp_parser.c
@@
-126,7
+126,7
@@
static uint64_t truehd_layout(int chanmap)
int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
{
int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
{
- int ratebits;
+ int ratebits
, channel_arrangement
;
uint16_t checksum;
assert(get_bits_count(gb) == 0);
uint16_t checksum;
assert(get_bits_count(gb) == 0);
@@
-157,7
+157,9
@@
int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
skip_bits(gb, 11);
skip_bits(gb, 11);
- mh->channels_mlp = get_bits(gb, 5);
+ channel_arrangement = get_bits(gb, 5);
+ mh->channels_mlp = mlp_channels[channel_arrangement];
+ mh->channel_layout_mlp = mlp_layout[channel_arrangement];
} else if (mh->stream_type == 0xba) {
mh->group1_bits = 24; // TODO: Is this information actually conveyed anywhere?
mh->group2_bits = 0;
} else if (mh->stream_type == 0xba) {
mh->group1_bits = 24; // TODO: Is this information actually conveyed anywhere?
mh->group2_bits = 0;
@@
-168,11
+170,15
@@
int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
skip_bits(gb, 8);
skip_bits(gb, 8);
- mh->channels_thd_stream1 = get_bits(gb, 5);
+ channel_arrangement = get_bits(gb, 5);
+ mh->channels_thd_stream1 = truehd_channels(channel_arrangement);
+ mh->channel_layout_thd_stream1 = truehd_layout(channel_arrangement);
skip_bits(gb, 2);
skip_bits(gb, 2);
- mh->channels_thd_stream2 = get_bits(gb, 13);
+ channel_arrangement = get_bits(gb, 13);
+ mh->channels_thd_stream2 = truehd_channels(channel_arrangement);
+ mh->channel_layout_thd_stream2 = truehd_layout(channel_arrangement);
} else
return AVERROR_INVALIDDATA;
} else
return AVERROR_INVALIDDATA;
@@
-316,16
+322,16
@@
static int mlp_parse(AVCodecParserContext *s,
if (mh.stream_type == 0xbb) {
/* MLP stream */
if (mh.stream_type == 0xbb) {
/* MLP stream */
- avctx->channels
= mlp_channels[mh.channels_mlp]
;
- avctx->channel_layout = m
lp_layout[mh.channels_mlp]
;
+ avctx->channels
= mh.channels_mlp
;
+ avctx->channel_layout = m
h.channel_layout_mlp
;
} else { /* mh.stream_type == 0xba */
/* TrueHD stream */
if (mh.channels_thd_stream2) {
} else { /* mh.stream_type == 0xba */
/* TrueHD stream */
if (mh.channels_thd_stream2) {
- avctx->channels
= truehd_channels(mh.channels_thd_stream2)
;
- avctx->channel_layout =
truehd_layout(mh.channels_thd_stream2)
;
+ avctx->channels
= mh.channels_thd_stream2
;
+ avctx->channel_layout =
mh.channel_layout_thd_stream2
;
} else {
} else {
- avctx->channels
= truehd_channels(mh.channels_thd_stream1)
;
- avctx->channel_layout =
truehd_layout(mh.channels_thd_stream1)
;
+ avctx->channels
= mh.channels_thd_stream1
;
+ avctx->channel_layout =
mh.channel_layout_thd_stream1
;
}
}
}
}