]> git.sesse.net Git - vlc/commitdiff
Handle case where dwFormat is WAVE_FORMAT_EXTENSIBLE
authorDenis Charmet <typx@dinauz.org>
Fri, 8 Feb 2013 20:37:01 +0000 (21:37 +0100)
committerDenis Charmet <typx@dinauz.org>
Fri, 8 Feb 2013 20:37:48 +0000 (21:37 +0100)
modules/demux/mkv/matroska_segment_parse.cpp

index 697660d98fe3e7439222cfafb3af2785b587e350..07288a821b2288ed4423d0dcf2becff2269242b9 100644 (file)
@@ -1305,8 +1305,15 @@ int32_t matroska_segment_c::TrackInit( mkv_track_t * p_tk )
         else
         {
             WAVEFORMATEX *p_wf = (WAVEFORMATEX*)p_tk->p_extra_data;
-
-            wf_tag_to_fourcc( GetWLE( &p_wf->wFormatTag ), &p_tk->fmt.i_codec, NULL );
+            if( p_wf->wFormatTag == WAVE_FORMAT_EXTENSIBLE && 
+                p_tk->i_extra_data >= sizeof(WAVEFORMATEXTENSIBLE) )
+            {
+                WAVEFORMATEXTENSIBLE * p_wext = (WAVEFORMATEXTENSIBLE*) p_wf;
+                sf_tag_to_fourcc( &p_wext->SubFormat,  &p_tk->fmt.i_codec, NULL);
+                /* FIXME should we use Samples and dwChannelMask?*/
+            }
+            else
+                wf_tag_to_fourcc( GetWLE( &p_wf->wFormatTag ), &p_tk->fmt.i_codec, NULL );
 
             if( p_tk->fmt.i_codec == VLC_FOURCC( 'u', 'n', 'd', 'f' ) )
                 msg_Err( &sys.demuxer, "Unrecognized wf tag: 0x%x", GetWLE( &p_wf->wFormatTag ) );