From cc8a878a9cb9688b2eb53b7ee3c6d82bc1555aaf Mon Sep 17 00:00:00 2001 From: tack Date: Mon, 22 Feb 2010 14:27:32 +0000 Subject: Get the proper codec id when a WAVE_FORMAT_EXTENSIBLE extension exists in a wave file. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30709 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/aviprint.c | 6 ++++++ libmpdemux/demux_audio.c | 2 ++ libmpdemux/ms_hdr.h | 11 +++++++++++ 3 files changed, 19 insertions(+) (limited to 'libmpdemux') 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 63b710427d..9c1c006003 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 { -- cgit v1.2.3