Mon Oct 8 12:39:01 2012

Asterisk developer's documentation


codec_alaw.c

Go to the documentation of this file.
00001 /*
00002  * Asterisk -- An open source telephony toolkit.
00003  *
00004  * Copyright (C) 1999 - 2005, Digium, Inc.
00005  *
00006  * Mark Spencer <markster@digium.com>
00007  *
00008  * See http://www.asterisk.org for more information about
00009  * the Asterisk project. Please do not directly contact
00010  * any of the maintainers of this project for assistance;
00011  * the project provides a web site, mailing lists and IRC
00012  * channels for your use.
00013  *
00014  * This program is free software, distributed under the terms of
00015  * the GNU General Public License Version 2. See the LICENSE file
00016  * at the top of the source tree.
00017  */
00018 
00019 /*! \file
00020  *
00021  * \brief codec_alaw.c - translate between signed linear and alaw
00022  * 
00023  * \ingroup codecs
00024  */
00025 
00026 /*** MODULEINFO
00027    <support_level>core</support_level>
00028  ***/
00029 
00030 #include "asterisk.h"
00031 
00032 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 328209 $")
00033 
00034 #include "asterisk/module.h"
00035 #include "asterisk/config.h"
00036 #include "asterisk/translate.h"
00037 #include "asterisk/alaw.h"
00038 #include "asterisk/utils.h"
00039 
00040 #define BUFFER_SAMPLES   8096 /* size for the translation buffers */
00041 
00042 /* Sample frame data */
00043 #include "asterisk/slin.h"
00044 #include "ex_alaw.h"
00045 
00046 /*! \brief decode frame into lin and fill output buffer. */
00047 static int alawtolin_framein(struct ast_trans_pvt *pvt, struct ast_frame *f)
00048 {
00049    int i = f->samples;
00050    unsigned char *src = f->data.ptr;
00051    int16_t *dst = pvt->outbuf.i16 + pvt->samples;
00052 
00053    pvt->samples += i;
00054    pvt->datalen += i * 2;  /* 2 bytes/sample */
00055    
00056    while (i--)
00057       *dst++ = AST_ALAW(*src++);
00058 
00059    return 0;
00060 }
00061 
00062 /*! \brief convert and store input samples in output buffer */
00063 static int lintoalaw_framein(struct ast_trans_pvt *pvt, struct ast_frame *f)
00064 {
00065    int i = f->samples;
00066    char *dst = pvt->outbuf.c + pvt->samples;
00067    int16_t *src = f->data.ptr;
00068 
00069    pvt->samples += i;
00070    pvt->datalen += i;   /* 1 byte/sample */
00071 
00072    while (i--) 
00073       *dst++ = AST_LIN2A(*src++);
00074 
00075    return 0;
00076 }
00077 
00078 static struct ast_translator alawtolin = {
00079    .name = "alawtolin",
00080    .srcfmt = AST_FORMAT_ALAW,
00081    .dstfmt = AST_FORMAT_SLINEAR,
00082    .framein = alawtolin_framein,
00083    .sample = alaw_sample,
00084    .buffer_samples = BUFFER_SAMPLES,
00085    .buf_size = BUFFER_SAMPLES * 2,
00086 };
00087 
00088 static struct ast_translator lintoalaw = {
00089    "lintoalaw",
00090    .srcfmt = AST_FORMAT_SLINEAR,
00091    .dstfmt = AST_FORMAT_ALAW,
00092    .framein = lintoalaw_framein,
00093    .sample = slin8_sample,
00094    .buffer_samples = BUFFER_SAMPLES,
00095    .buf_size = BUFFER_SAMPLES,
00096 };
00097 
00098 /*! \brief standard module stuff */
00099 
00100 static int reload(void)
00101 {
00102    return AST_MODULE_LOAD_SUCCESS;
00103 }
00104 
00105 static int unload_module(void)
00106 {
00107    int res;
00108 
00109    res = ast_unregister_translator(&lintoalaw);
00110    res |= ast_unregister_translator(&alawtolin);
00111 
00112    return res;
00113 }
00114 
00115 static int load_module(void)
00116 {
00117    int res;
00118 
00119    res = ast_register_translator(&alawtolin);
00120    if (!res)
00121       res = ast_register_translator(&lintoalaw);
00122    else
00123       ast_unregister_translator(&alawtolin);
00124    if (res)
00125       return AST_MODULE_LOAD_FAILURE;
00126    return AST_MODULE_LOAD_SUCCESS;
00127 }
00128 
00129 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "A-law Coder/Decoder",
00130       .load = load_module,
00131       .unload = unload_module,
00132       .reload = reload,
00133           );

Generated on Mon Oct 8 12:39:01 2012 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7