A trunk that builds is a productive trunk.
[asterisk/asterisk.git] / codecs / codec_adpcm.c
index 83ff54f..7469f05 100644 (file)
  * \ingroup codecs
  */
 
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
 #include <fcntl.h>
 #include <netinet/in.h>
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 
-#include "asterisk.h"
-
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
 #include "asterisk/lock.h"
 #include "asterisk/logger.h"
 #include "asterisk/linkedlists.h"
@@ -238,13 +238,13 @@ struct adpcm_decoder_pvt {
 static int adpcmtolin_framein(struct ast_trans_pvt *pvt, struct ast_frame *f)
 {
        struct adpcm_decoder_pvt *tmp = pvt->pvt;
-       int x;
+       int x = f->datalen;
        unsigned char *src = f->data;
        int16_t *dst = (int16_t *)pvt->outbuf + pvt->samples;
 
-       for (x=0; x < f->datalen; x++) {
-               *dst++ = decode((src[x] >> 4) & 0xf, &tmp->state);
-               *dst++ = decode(src[x] & 0x0f, &tmp->state);
+       while (x--) {
+               *dst++ = decode((*src >> 4) & 0xf, &tmp->state);
+               *dst++ = decode(*src++ & 0x0f, &tmp->state);
        }
        pvt->samples += f->samples;
        pvt->datalen += 2*f->samples;
@@ -326,8 +326,6 @@ static struct ast_frame *lintoadpcm_sample(void)
        return &f;
 }
 
-struct ast_module_lock me = { .usecnt = -1 };
-
 static struct ast_translator adpcmtolin = {
        .name = "adpcmtolin",
        .srcfmt = AST_FORMAT_ADPCM,
@@ -338,7 +336,6 @@ static struct ast_translator adpcmtolin = {
        .buffer_samples = BUFFER_SAMPLES,
        .buf_size = BUFFER_SAMPLES * 2,
        .plc_samples = 160,
-       .lockp = &me,
 };
 
 static struct ast_translator lintoadpcm = {
@@ -351,7 +348,6 @@ static struct ast_translator lintoadpcm = {
        .desc_size = sizeof (struct adpcm_encoder_pvt),
        .buffer_samples = BUFFER_SAMPLES,
        .buf_size = BUFFER_SAMPLES/ 2,  /* 2 samples per byte */
-       .lockp = &me,
 };
 
 static void parse_config(void)
@@ -371,47 +367,38 @@ static void parse_config(void)
 }
 
 /*! \brief standard module glue */
-int reload(void)
+static int reload(void)
 {
        parse_config();
        return 0;
 }
 
-int unload_module(void)
+static int unload_module(void)
 {
        int res;
-       ast_mutex_lock(&me.lock);
+
        res = ast_unregister_translator(&lintoadpcm);
        res |= ast_unregister_translator(&adpcmtolin);
-       if (me.usecnt)
-               res = -1;
-       ast_mutex_unlock(&me.lock);
+
        return res;
 }
 
-int load_module(void)
+static int load_module(void)
 {
        int res;
+
        parse_config();
        res = ast_register_translator(&adpcmtolin);
        if (!res)
                res = ast_register_translator(&lintoadpcm);
        else
                ast_unregister_translator(&adpcmtolin);
-       return res;
-}
-
-const char *description(void)
-{
-       return "Adaptive Differential PCM Coder/Decoder";
-}
 
-int usecount(void)
-{
-       return me.usecnt;
+       return res;
 }
 
-const char *key()
-{
-       return ASTERISK_GPL_KEY;
-}
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Adaptive Differential PCM Coder/Decoder",
+               .load = load_module,
+               .unload = unload_module,
+               .reload = reload,
+              );