Merged revisions 77490 via svnmerge from
[asterisk/asterisk.git] / codecs / codec_gsm.c
index a23306e..c346f24 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 /*** MODULEINFO
-       <depend>libgsm</depend>
+       <depend>gsm</depend>
  ***/
 
 #include "asterisk.h"
@@ -50,7 +50,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/channel.h"
 #include "asterisk/utils.h"
 
+#ifdef HAVE_GSM_HEADER
 #include "gsm.h"
+#elif defined(HAVE_GSM_GSM_HEADER)
+#include <gsm/gsm.h>
+#endif
 
 #include "../formats/msgsm.h"
 
@@ -117,7 +121,7 @@ static int gsmtolin_framein(struct ast_trans_pvt *pvt, struct ast_frame *f)
 
        for (x=0; x < f->datalen; x += flen) {
                unsigned char data[2 * GSM_FRAME_LEN];
-               char *src;
+               unsigned char *src;
                int len;
                if (flen == MSGSM_FRAME_LEN) {
                        len = 2*GSM_SAMPLES;
@@ -183,14 +187,16 @@ static struct ast_frame *lintogsm_frameout(struct ast_trans_pvt *pvt)
                return NULL;
        while (pvt->samples >= GSM_SAMPLES) {
                /* Encode a frame of data */
-               gsm_encode(tmp->gsm, tmp->buf, (gsm_byte *)pvt->outbuf + datalen);
+               gsm_encode(tmp->gsm, tmp->buf + samples, (gsm_byte *) pvt->outbuf + datalen);
                datalen += GSM_FRAME_LEN;
                samples += GSM_SAMPLES;
                pvt->samples -= GSM_SAMPLES;
-               /* Move the data at the end of the buffer to the front */
-               if (pvt->samples)
-                       memmove(tmp->buf, tmp->buf + GSM_SAMPLES, pvt->samples * 2);
        }
+
+       /* Move the data at the end of the buffer to the front */
+       if (pvt->samples)
+               memmove(tmp->buf, tmp->buf + samples, pvt->samples * 2);
+
        return ast_trans_frameout(pvt, datalen, samples);
 }
 
@@ -238,49 +244,46 @@ static void parse_config(void)
        for (var = ast_variable_browse(cfg, "plc"); var; var = var->next) {
               if (!strcasecmp(var->name, "genericplc")) {
                       gsmtolin.useplc = ast_true(var->value) ? 1 : 0;
-                      if (option_verbose > 2)
-                              ast_verbose(VERBOSE_PREFIX_3 "codec_gsm: %susing generic PLC\n", gsmtolin.useplc ? "" : "not ");
+                          ast_verb(3, "codec_gsm: %susing generic PLC\n", gsmtolin.useplc ? "" : "not ");
               }
        }
        ast_config_destroy(cfg);
 }
 
 /*! \brief standard module glue */
-static int reload(void *mod)
+static int reload(void)
 {
        parse_config();
        return 0;
 }
 
-static int unload_module(void *mod)
+static int unload_module(void)
 {
        int res;
+
        res = ast_unregister_translator(&lintogsm);
        if (!res)
                res = ast_unregister_translator(&gsmtolin);
+
        return res;
 }
 
-static int load_module(void *mod)
+static int load_module(void)
 {
        int res;
+
        parse_config();
-       res = ast_register_translator(&gsmtolin, mod);
+       res = ast_register_translator(&gsmtolin);
        if (!res) 
-               res=ast_register_translator(&lintogsm, mod);
+               res=ast_register_translator(&lintogsm);
        else
                ast_unregister_translator(&gsmtolin);
-       return res;
-}
-
-static const char *description(void)
-{
-       return "GSM/PCM16 (signed linear) Codec Translator";
-}
 
-static const char *key(void)
-{
-       return ASTERISK_GPL_KEY;
+       return res;
 }
 
-STD_MOD(MOD_1, reload, NULL, NULL);
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "GSM Coder/Decoder",
+               .load = load_module,
+               .unload = unload_module,
+               .reload = reload,
+              );