]> git.sesse.net Git - vlc/blobdiff - modules/demux/wav.c
Wav GSM Demuxer Support Fixes Wav demux to work with MS-GSM codec. Uses ffmpeg decoder.
[vlc] / modules / demux / wav.c
index be7f848baf88ab278d03adacbd73b396e4a6b231..cf66ce9d7e66cbfc7f7a7ba36b1349b0a2cac0dc 100644 (file)
@@ -78,6 +78,7 @@ static int ChunkFind( demux_t *, const char *, unsigned int * );
 static void FrameInfo_IMA_ADPCM( demux_t *, unsigned int *, int * );
 static void FrameInfo_MS_ADPCM ( demux_t *, unsigned int *, int * );
 static void FrameInfo_PCM      ( demux_t *, unsigned int *, int * );
+static void FrameInfo_MSGSM    ( demux_t *, unsigned int *, int * );
 
 static const uint32_t pi_channels_src[] =
     { WAVE_SPEAKER_FRONT_LEFT, WAVE_SPEAKER_FRONT_RIGHT,
@@ -263,6 +264,10 @@ static int Open( vlc_object_t * p_this )
     case VLC_FOURCC( 'a', '5', '2', ' ' ):
         /* FIXME set end of area FIXME */
         goto error;
+    case VLC_FOURCC( 'a', 'g', 's', 'm' ):
+        FrameInfo_MSGSM( p_demux, &p_sys->i_frame_size,
+                            &p_sys->i_frame_samples );
+        break;
     default:
         msg_Err( p_demux, "unsupported codec (%4.4s)",
                  (char*)&p_sys->fmt.i_codec );
@@ -454,3 +459,13 @@ static void FrameInfo_IMA_ADPCM( demux_t *p_demux, unsigned int *pi_size,
 
     *pi_size = p_sys->fmt.audio.i_blockalign;
 }
+
+static void FrameInfo_MSGSM( demux_t *p_demux, unsigned int *pi_size,
+                                 int *pi_samples )
+{
+    demux_sys_t *p_sys = p_demux->p_sys;
+
+    *pi_samples = ( p_sys->fmt.audio.i_blockalign * p_sys->fmt.audio.i_rate * 8)
+                    / p_sys->fmt.i_bitrate;
+    *pi_size = p_sys->fmt.audio.i_blockalign;
+}