summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-03-10 01:25:15 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-03-10 01:25:15 +0200
commitacdce0176ae3722ad38a23aae0cf0bf03a82f9c4 (patch)
tree57a30f1d44ea193586d5723faac7ffb96a3a73aa /libmpdemux
parentef3ef5e218588b5f68b427729a3c2c1a8083e499 (diff)
parent5a2289137f43501281dba83fe98b5f67be63f9ef (diff)
downloadmpv-acdce0176ae3722ad38a23aae0cf0bf03a82f9c4.tar.bz2
mpv-acdce0176ae3722ad38a23aae0cf0bf03a82f9c4.tar.xz
Merge svn changes up to r30732
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/aviprint.c6
-rw-r--r--libmpdemux/demux_audio.c2
-rw-r--r--libmpdemux/ms_hdr.h11
3 files changed, 19 insertions, 0 deletions
diff --git a/libmpdemux/aviprint.c b/libmpdemux/aviprint.c
index dc992d5f97..f83bcd3756 100644
--- a/libmpdemux/aviprint.c
+++ b/libmpdemux/aviprint.c
@@ -89,6 +89,12 @@ void print_wave_header(WAVEFORMATEX *h, int verbose_level){
mp_msg(MSGT_HEADER, verbose_level, "mp3.nFramesPerBlock=%d\n",h2->nFramesPerBlock);
mp_msg(MSGT_HEADER, verbose_level, "mp3.nCodecDelay=%d\n",h2->nCodecDelay);
}
+ else if (h->wFormatTag == 0xfffe && h->cbSize >= 22) {
+ WAVEFORMATEXTENSIBLE *h2 = (WAVEFORMATEXTENSIBLE *)h;
+ mp_msg(MSGT_HEADER, verbose_level, "ex.wValidBitsPerSample=%d\n", h2->wValidBitsPerSample);
+ mp_msg(MSGT_HEADER, verbose_level, "ex.dwChannelMask=0x%X\n", h2->dwChannelMask);
+ mp_msg(MSGT_HEADER, verbose_level, "ex.SubFormat=%d (0x%X)\n", h2->SubFormat, h2->SubFormat);
+ }
else if (h->cbSize > 0)
{
int i;
diff --git a/libmpdemux/demux_audio.c b/libmpdemux/demux_audio.c
index 6c62e5fdc5..45ead3d325 100644
--- a/libmpdemux/demux_audio.c
+++ b/libmpdemux/demux_audio.c
@@ -416,6 +416,8 @@ static int demux_audio_open(demuxer_t* demuxer) {
}
stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),w->cbSize);
l -= w->cbSize;
+ if (w->wFormatTag & 0xfffe && w->cbSize >= 22)
+ sh_audio->format = ((WAVEFORMATEXTENSIBLE *)w)->SubFormat;
}
if( mp_msg_test(MSGT_DEMUX,MSGL_V) ) print_wave_header(w, MSGL_V);
diff --git a/libmpdemux/ms_hdr.h b/libmpdemux/ms_hdr.h
index 2bfefa9ca2..3d6bc07545 100644
--- a/libmpdemux/ms_hdr.h
+++ b/libmpdemux/ms_hdr.h
@@ -34,6 +34,17 @@ typedef struct __attribute__((__packed__)) _WAVEFORMATEX {
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
#endif /* _WAVEFORMATEX_ */
+#ifndef _WAVEFORMATEXTENSIBLE_
+#define _WAVEFORMATEXTENSIBLE_
+typedef struct __attribute__((__packed__)) _WAVEFORMATEXTENSIBLE {
+ WAVEFORMATEX wf;
+ unsigned short wValidBitsPerSample;
+ unsigned int dwChannelMask;
+ unsigned int SubFormat; // Only interested in first 32 bits of guid
+ unsigned int _guid_remainder[3];
+} WAVEFORMATEXTENSIBLE;
+#endif /* _WAVEFORMATEXTENSIBLE_ */
+
#ifndef _MPEGLAYER3WAVEFORMAT_
#define _MPEGLAYER3WAVEFORMAT_
typedef struct __attribute__((__packed__)) mpeglayer3waveformat_tag {