summaryrefslogtreecommitdiffstats
path: root/demux/demux_mkv.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-11-11 18:40:59 +0100
committerwm4 <wm4@nowhere>2013-11-11 18:40:59 +0100
commitd8882bbfb76fd9973134d0cb59b9dda064225354 (patch)
treee1f62b98003f4039639b12029839795772c2b346 /demux/demux_mkv.c
parent149ab3afa22bf03dc8334fd607d4c92440ab541e (diff)
downloadmpv-d8882bbfb76fd9973134d0cb59b9dda064225354.tar.bz2
mpv-d8882bbfb76fd9973134d0cb59b9dda064225354.tar.xz
demux_mkv: support some raw PCM variants
This affects 64 bit floats and big endian integer PCM variants (basically crap nobody uses). Possibly not all MS-muxed files work, but I couldn't get or produce any samples. Remove a bunch of format tags that are not needed anymore. Most of these were used by demux_mov, which is long gone. Repurpose/abuse 'twos' as mpv-internal tag for dealing with the PCM variants mentioned above.
Diffstat (limited to 'demux/demux_mkv.c')
-rw-r--r--demux/demux_mkv.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 7a9aaa0f87..7a30721e66 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -1355,6 +1355,7 @@ static struct mkv_audio_tag {
{ MKV_A_DTS, 0, 0x2001 },
{ MKV_A_PCM, 0, 0x0001 },
{ MKV_A_PCM_BE, 0, 0x0001 },
+ { MKV_A_PCM_FLT, 0, 0x0003 },
{ MKV_A_AAC_2MAIN, 0, MP_FOURCC('M', 'P', '4', 'A') },
{ MKV_A_AAC_2LC, 1, MP_FOURCC('M', 'P', '4', 'A') },
{ MKV_A_AAC_2SSR, 0, MP_FOURCC('M', 'P', '4', 'A') },
@@ -1464,10 +1465,10 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
free(sh_a->wf);
sh_a->wf = NULL;
} else if (track->a_formattag == 0x0001) { /* PCM || PCM_BE */
- sh_a->wf->nAvgBytesPerSec = sh_a->channels.num * sh_a->samplerate * 2;
- sh_a->wf->nBlockAlign = sh_a->wf->nAvgBytesPerSec;
if (!strcmp(track->codec_id, MKV_A_PCM_BE))
sh_a->format = MP_FOURCC('t', 'w', 'o', 's');
+ } else if (track->a_formattag == 0x0003) { /* PCM_FLT */
+ /* ok */
} else if (!strcmp(track->codec_id, MKV_A_QDMC)
|| !strcmp(track->codec_id, MKV_A_QDMC2)) {
sh_a->wf->nAvgBytesPerSec = 16000;