]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
work on gsm blindly with no testing conditions so it probably needs more =D
authorAnthony Minessale <anthony.minessale@gmail.com>
Sat, 24 Dec 2005 03:00:29 +0000 (03:00 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Sat, 24 Dec 2005 03:00:29 +0000 (03:00 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@205 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/codec/mod_codec_gsm/mod_codec_gsm.c

index e3eeb48cbad5d58eb8dd8bef6229530c5ed7e8ec..bcca79d77506d05567c195a01690777bea2efcc8 100644 (file)
@@ -77,8 +77,26 @@ static switch_status switch_gsm_encode(switch_codec *codec,
        if (!context) {\r
                return SWITCH_STATUS_FALSE;\r
        }\r
-       gsm_encode(context, (void *)decoded_data, (void *)encoded_data);\r
-       *encoded_data_len = 33;\r
+       if (decoded_data_len % 160 == 0) {\r
+               unsigned int new_len = 0;\r
+               gsm_signal *ddp = decoded_data;\r
+               gsm_byte *edp = encoded_data;\r
+               int x;\r
+               int loops = (int) decoded_data_len / 160;\r
+               \r
+               for(x = 0; x < loops && new_len < *encoded_data_len; x++) {\r
+                       gsm_encode(context, ddp, edp);\r
+                       edp += 10;\r
+                       ddp += 80;\r
+                       new_len += 10;\r
+               }\r
+               if( new_len <= *encoded_data_len ) {\r
+                       *encoded_data_len = new_len;\r
+               } else {\r
+                       switch_console_printf(SWITCH_CHANNEL_CONSOLE, "buffer overflow!!! %u >= %u\n", new_len, *encoded_data_len);\r
+                       return SWITCH_STATUS_FALSE;                     \r
+               }\r
+       }\r
 \r
        return SWITCH_STATUS_SUCCESS;\r
 }\r
@@ -101,12 +119,12 @@ static switch_status switch_gsm_decode(switch_codec *codec,
 \r
        if (encoded_data_len % 33 == 0) {\r
                int loops = (int) encoded_data_len / 33;\r
-               char *edp = encoded_data;\r
-               short *ddp = decoded_data;\r
+               gsm_byte *edp = encoded_data;\r
+               gsm_signal *ddp = decoded_data;\r
                int x;\r
                unsigned int new_len = 0;\r
                for(x = 0; x < loops && new_len < *decoded_data_len; x++) {\r
-                       gsm_decode(&context, ddp, edp, 33);\r
+                       gsm_decode(&context, ddp, edp);\r
                        ddp += 80;\r
                        edp += 10;\r
                        new_len += 320;\r