#include "asterisk.h"
#include <values.h>
#include <limits.h>
#include <libresample.h>
#include "asterisk/module.h"
#include "asterisk/translate.h"
#include "asterisk/slin.h"
Go to the source code of this file.
Data Structures | |
struct | slin16_to_slin8_pvt |
struct | slin8_to_slin16_pvt |
Defines | |
#define | OUTBUF_SIZE 8096 |
#define | RESAMPLER_QUALITY 1 |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static int | load_module (void) |
static int | resample_frame (struct ast_trans_pvt *pvt, void *resampler, float resample_factor, struct ast_frame *f) |
static void | slin16_to_slin8_destroy (struct ast_trans_pvt *pvt) |
static int | slin16_to_slin8_framein (struct ast_trans_pvt *pvt, struct ast_frame *f) |
static int | slin16_to_slin8_new (struct ast_trans_pvt *pvt) |
static void | slin8_to_slin16_destroy (struct ast_trans_pvt *pvt) |
static int | slin8_to_slin16_framein (struct ast_trans_pvt *pvt, struct ast_frame *f) |
static int | slin8_to_slin16_new (struct ast_trans_pvt *pvt) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "SLIN Resampling Codec" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_translator | slin16_to_slin8 |
static struct ast_translator | slin8_to_slin16 |
$ svn co http://svn.digium.com/svn/thirdparty/libresample/trunk
Definition in file codec_resample.c.
#define OUTBUF_SIZE 8096 |
Definition at line 57 of file codec_resample.c.
#define RESAMPLER_QUALITY 1 |
Definition at line 55 of file codec_resample.c.
Referenced by slin16_to_slin8_new(), and slin8_to_slin16_new().
static void __reg_module | ( | void | ) | [static] |
Definition at line 218 of file codec_resample.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 218 of file codec_resample.c.
static int load_module | ( | void | ) | [static] |
Definition at line 208 of file codec_resample.c.
References AST_MODULE_LOAD_SUCCESS, ast_register_translator, slin16_to_slin8, and slin8_to_slin16.
00209 { 00210 int res = 0; 00211 00212 res |= ast_register_translator(&slin16_to_slin8); 00213 res |= ast_register_translator(&slin8_to_slin16); 00214 00215 return AST_MODULE_LOAD_SUCCESS; 00216 }
static int resample_frame | ( | struct ast_trans_pvt * | pvt, | |
void * | resampler, | |||
float | resample_factor, | |||
struct ast_frame * | f | |||
) | [static] |
Definition at line 109 of file codec_resample.c.
References ARRAY_LEN, ast_log(), ast_trans_pvt::datalen, f, ast_trans_pvt::i16, LOG_ERROR, ast_trans_pvt::outbuf, and ast_trans_pvt::samples.
Referenced by slin16_to_slin8_framein(), and slin8_to_slin16_framein().
00111 { 00112 int total_in_buf_used = 0; 00113 int total_out_buf_used = 0; 00114 int16_t *in_buf = (int16_t *) f->data.ptr; 00115 int16_t *out_buf = pvt->outbuf.i16 + pvt->samples; 00116 float in_buf_f[f->samples]; 00117 float out_buf_f[2048]; 00118 int res = 0; 00119 int i; 00120 00121 for (i = 0; i < f->samples; i++) 00122 in_buf_f[i] = in_buf[i] * (FLT_MAX / SHRT_MAX); 00123 00124 while (total_in_buf_used < f->samples) { 00125 int in_buf_used, out_buf_used; 00126 00127 out_buf_used = resample_process(resampler, resample_factor, 00128 &in_buf_f[total_in_buf_used], f->samples - total_in_buf_used, 00129 0, &in_buf_used, 00130 &out_buf_f[total_out_buf_used], ARRAY_LEN(out_buf_f) - total_out_buf_used); 00131 00132 if (out_buf_used < 0) 00133 break; 00134 00135 total_out_buf_used += out_buf_used; 00136 total_in_buf_used += in_buf_used; 00137 00138 if (total_out_buf_used == ARRAY_LEN(out_buf_f)) { 00139 ast_log(LOG_ERROR, "Output buffer filled ... need to increase its size\n"); 00140 res = -1; 00141 break; 00142 } 00143 } 00144 00145 for (i = 0; i < total_out_buf_used; i++) 00146 out_buf[i] = out_buf_f[i] * (SHRT_MAX / FLT_MAX); 00147 00148 pvt->samples += total_out_buf_used; 00149 pvt->datalen += (total_out_buf_used * sizeof(int16_t)); 00150 00151 return res; 00152 }
static void slin16_to_slin8_destroy | ( | struct ast_trans_pvt * | pvt | ) | [static] |
Definition at line 93 of file codec_resample.c.
References ast_trans_pvt::pvt, and slin16_to_slin8_pvt::resampler.
00094 { 00095 struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt; 00096 00097 if (resamp_pvt->resampler) 00098 resample_close(resamp_pvt->resampler); 00099 }
static int slin16_to_slin8_framein | ( | struct ast_trans_pvt * | pvt, | |
struct ast_frame * | f | |||
) | [static] |
Definition at line 154 of file codec_resample.c.
References f, ast_trans_pvt::pvt, slin16_to_slin8_pvt::resample_factor, resample_frame(), and slin16_to_slin8_pvt::resampler.
00155 { 00156 struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt; 00157 void *resampler = resamp_pvt->resampler; 00158 float resample_factor = resamp_pvt->resample_factor; 00159 00160 return resample_frame(pvt, resampler, resample_factor, f); 00161 }
static int slin16_to_slin8_new | ( | struct ast_trans_pvt * | pvt | ) | [static] |
Definition at line 69 of file codec_resample.c.
References ast_trans_pvt::pvt, slin16_to_slin8_pvt::resample_factor, slin16_to_slin8_pvt::resampler, and RESAMPLER_QUALITY.
00070 { 00071 struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt; 00072 00073 resamp_pvt->resample_factor = 8000.0 / 16000.0; 00074 00075 if (!(resamp_pvt->resampler = resample_open(RESAMPLER_QUALITY, resamp_pvt->resample_factor, resamp_pvt->resample_factor))) 00076 return -1; 00077 00078 return 0; 00079 }
static void slin8_to_slin16_destroy | ( | struct ast_trans_pvt * | pvt | ) | [static] |
Definition at line 101 of file codec_resample.c.
References ast_trans_pvt::pvt, and slin8_to_slin16_pvt::resampler.
00102 { 00103 struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt; 00104 00105 if (resamp_pvt->resampler) 00106 resample_close(resamp_pvt->resampler); 00107 }
static int slin8_to_slin16_framein | ( | struct ast_trans_pvt * | pvt, | |
struct ast_frame * | f | |||
) | [static] |
Definition at line 163 of file codec_resample.c.
References f, ast_trans_pvt::pvt, slin8_to_slin16_pvt::resample_factor, resample_frame(), and slin8_to_slin16_pvt::resampler.
00164 { 00165 struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt; 00166 void *resampler = resamp_pvt->resampler; 00167 float resample_factor = resamp_pvt->resample_factor; 00168 00169 return resample_frame(pvt, resampler, resample_factor, f); 00170 }
static int slin8_to_slin16_new | ( | struct ast_trans_pvt * | pvt | ) | [static] |
Definition at line 81 of file codec_resample.c.
References ast_trans_pvt::pvt, slin8_to_slin16_pvt::resample_factor, slin8_to_slin16_pvt::resampler, and RESAMPLER_QUALITY.
00082 { 00083 struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt; 00084 00085 resamp_pvt->resample_factor = 16000.0 / 8000.0; 00086 00087 if (!(resamp_pvt->resampler = resample_open(RESAMPLER_QUALITY, resamp_pvt->resample_factor, resamp_pvt->resample_factor))) 00088 return -1; 00089 00090 return 0; 00091 }
static int unload_module | ( | void | ) | [static] |
Definition at line 198 of file codec_resample.c.
References ast_unregister_translator(), slin16_to_slin8, and slin8_to_slin16.
00199 { 00200 int res = 0; 00201 00202 res |= ast_unregister_translator(&slin16_to_slin8); 00203 res |= ast_unregister_translator(&slin8_to_slin16); 00204 00205 return res; 00206 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "SLIN Resampling Codec" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 218 of file codec_resample.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 218 of file codec_resample.c.
struct ast_translator slin16_to_slin8 [static] |
struct ast_translator slin8_to_slin16 [static] |