speex: Fix crashes with MSVC
authorDavid Hoyt <dhoyt@llnl.gov>
Thu, 23 Sep 2010 19:57:18 +0000 (21:57 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 23 Sep 2010 19:57:18 +0000 (21:57 +0200)
Using the symbols for the different Speex modes results
in crashes when using MSVC. Use the library functions to
get the modes instead.

Fixes bug #630378.

ext/speex/gstspeexdec.c
ext/speex/gstspeexenc.c

index e4ce803..89293a3 100644 (file)
@@ -523,7 +523,7 @@ speex_dec_chain_parse_header (GstSpeexDec * dec, GstBuffer * buf)
   if (dec->header->mode >= SPEEX_NB_MODES || dec->header->mode < 0)
     goto mode_too_old;
 
-  dec->mode = (SpeexMode *) speex_mode_list[dec->header->mode];
+  dec->mode = speex_lib_get_mode (dec->header->mode);
 
   /* initialize the decoder */
   dec->state = speex_decoder_init (dec->mode);
index 13ec295..b8cb872 100644 (file)
@@ -647,15 +647,15 @@ gst_speex_enc_setup (GstSpeexEnc * enc)
   switch (enc->mode) {
     case GST_SPEEX_ENC_MODE_UWB:
       GST_LOG_OBJECT (enc, "configuring for requested UWB mode");
-      enc->speex_mode = (SpeexMode *) & speex_uwb_mode;
+      enc->speex_mode = speex_lib_get_mode (SPEEX_MODEID_UWB);
       break;
     case GST_SPEEX_ENC_MODE_WB:
       GST_LOG_OBJECT (enc, "configuring for requested WB mode");
-      enc->speex_mode = (SpeexMode *) & speex_wb_mode;
+      enc->speex_mode = speex_lib_get_mode (SPEEX_MODEID_WB);
       break;
     case GST_SPEEX_ENC_MODE_NB:
       GST_LOG_OBJECT (enc, "configuring for requested NB mode");
-      enc->speex_mode = (SpeexMode *) & speex_nb_mode;
+      enc->speex_mode = speex_lib_get_mode (SPEEX_MODEID_NB);
       break;
     case GST_SPEEX_ENC_MODE_AUTO:
       /* fall through */
@@ -667,9 +667,9 @@ gst_speex_enc_setup (GstSpeexEnc * enc)
   if (enc->rate > 25000) {
     if (enc->mode == GST_SPEEX_ENC_MODE_AUTO) {
       GST_LOG_OBJECT (enc, "selected UWB mode for samplerate %d", enc->rate);
-      enc->speex_mode = (SpeexMode *) & speex_uwb_mode;
+      enc->speex_mode = speex_lib_get_mode (SPEEX_MODEID_UWB);
     } else {
-      if (enc->speex_mode != &speex_uwb_mode) {
+      if (enc->speex_mode != speex_lib_get_mode (SPEEX_MODEID_UWB)) {
         gst_speex_enc_set_last_msg (enc,
             "Warning: suggest to use ultra wide band mode for this rate");
       }
@@ -677,9 +677,9 @@ gst_speex_enc_setup (GstSpeexEnc * enc)
   } else if (enc->rate > 12500) {
     if (enc->mode == GST_SPEEX_ENC_MODE_AUTO) {
       GST_LOG_OBJECT (enc, "selected WB mode for samplerate %d", enc->rate);
-      enc->speex_mode = (SpeexMode *) & speex_wb_mode;
+      enc->speex_mode = speex_lib_get_mode (SPEEX_MODEID_WB);
     } else {
-      if (enc->speex_mode != &speex_wb_mode) {
+      if (enc->speex_mode != speex_lib_get_mode (SPEEX_MODEID_WB)) {
         gst_speex_enc_set_last_msg (enc,
             "Warning: suggest to use wide band mode for this rate");
       }
@@ -687,9 +687,9 @@ gst_speex_enc_setup (GstSpeexEnc * enc)
   } else {
     if (enc->mode == GST_SPEEX_ENC_MODE_AUTO) {
       GST_LOG_OBJECT (enc, "selected NB mode for samplerate %d", enc->rate);
-      enc->speex_mode = (SpeexMode *) & speex_nb_mode;
+      enc->speex_mode = speex_lib_get_mode (SPEEX_MODEID_NB);
     } else {
-      if (enc->speex_mode != &speex_nb_mode) {
+      if (enc->speex_mode != speex_lib_get_mode (SPEEX_MODEID_NB)) {
         gst_speex_enc_set_last_msg (enc,
             "Warning: suggest to use narrow band mode for this rate");
       }