summaryrefslogtreecommitdiffstats
path: root/demux/demux_mkv.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux_mkv.c')
-rw-r--r--demux/demux_mkv.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 9515cd10c5..97c7d3e09b 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -1549,12 +1549,12 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
unsigned char *extradata = track->private_data;
unsigned int extradata_len = track->private_size;
- uint64_t chmask = 0;
if (!track->a_osfreq)
track->a_osfreq = track->a_sfreq;
sh_a->bits_per_coded_sample = track->a_bps ? track->a_bps : 16;
sh_a->samplerate = (uint32_t) track->a_osfreq;
+ mp_chmap_set_unknown(&sh_a->channels, track->a_channels);
for (int i = 0; mkv_audio_tags[i][0]; i++) {
if (!strcmp(mkv_audio_tags[i][0], track->codec_id)) {
@@ -1581,10 +1581,11 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
extradata = track->private_data + 18;
extradata_len = track->private_size - 18;
sh_a->bits_per_coded_sample = track->a_bps;
+ sh_a->extradata = extradata;
+ sh_a->extradata_size = extradata_len;
mp_set_codec_from_tag(sh_a);
- // WAVEFORMATEXTENSIBLE.dwChannelMask
- if (sh_a->codec_tag == 0xfffe && extradata_len >= 6)
- chmask = AV_RL32(extradata + 2);
+ extradata = sh_a->extradata;
+ extradata_len = sh_a->extradata_size;
} else if (!strcmp(track->codec_id, "A_PCM/INT/LIT")) {
bool sign = sh_a->bits_per_coded_sample > 8;
mp_set_pcm_codec(sh_a, sign, false, sh_a->bits_per_coded_sample, false);
@@ -1704,10 +1705,6 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
if (!sh_a->codec)
goto error;
- mp_chmap_from_waveext(&sh_a->channels, chmask);
- if (sh_a->channels.num != track->a_channels)
- mp_chmap_set_unknown(&sh_a->channels, track->a_channels);
-
const char *codec = sh_a->codec;
if (!strcmp(codec, "mp2") || !strcmp(codec, "mp3") ||
!strcmp(codec, "truehd"))