Resample slinear audio. More...
#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 = AST_BUILDOPT_SUM, .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 |
Resample slinear audio.
$ 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, and ast_register_translator.
{
int res = 0;
res |= ast_register_translator(&slin16_to_slin8);
res |= ast_register_translator(&slin8_to_slin16);
return AST_MODULE_LOAD_SUCCESS;
}
| 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_frame::data, ast_trans_pvt::datalen, ast_trans_pvt::i16, LOG_ERROR, ast_trans_pvt::outbuf, ast_frame::ptr, ast_trans_pvt::samples, and ast_frame::samples.
Referenced by slin16_to_slin8_framein(), and slin8_to_slin16_framein().
{
int total_in_buf_used = 0;
int total_out_buf_used = 0;
int16_t *in_buf = (int16_t *) f->data.ptr;
int16_t *out_buf = pvt->outbuf.i16 + pvt->samples;
float in_buf_f[f->samples];
float out_buf_f[2048];
int res = 0;
int i;
for (i = 0; i < f->samples; i++)
in_buf_f[i] = in_buf[i] * (FLT_MAX / SHRT_MAX);
while (total_in_buf_used < f->samples) {
int in_buf_used, out_buf_used;
out_buf_used = resample_process(resampler, resample_factor,
&in_buf_f[total_in_buf_used], f->samples - total_in_buf_used,
0, &in_buf_used,
&out_buf_f[total_out_buf_used], ARRAY_LEN(out_buf_f) - total_out_buf_used);
if (out_buf_used < 0)
break;
total_out_buf_used += out_buf_used;
total_in_buf_used += in_buf_used;
if (total_out_buf_used == ARRAY_LEN(out_buf_f)) {
ast_log(LOG_ERROR, "Output buffer filled ... need to increase its size\n");
res = -1;
break;
}
}
for (i = 0; i < total_out_buf_used; i++)
out_buf[i] = out_buf_f[i] * (SHRT_MAX / FLT_MAX);
pvt->samples += total_out_buf_used;
pvt->datalen += (total_out_buf_used * sizeof(int16_t));
return res;
}
| 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.
{
struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt;
if (resamp_pvt->resampler)
resample_close(resamp_pvt->resampler);
}
| 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 ast_trans_pvt::pvt, slin16_to_slin8_pvt::resample_factor, resample_frame(), and slin16_to_slin8_pvt::resampler.
{
struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt;
void *resampler = resamp_pvt->resampler;
float resample_factor = resamp_pvt->resample_factor;
return resample_frame(pvt, resampler, resample_factor, f);
}
| 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.
{
struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt;
resamp_pvt->resample_factor = 8000.0 / 16000.0;
if (!(resamp_pvt->resampler = resample_open(RESAMPLER_QUALITY, resamp_pvt->resample_factor, resamp_pvt->resample_factor)))
return -1;
return 0;
}
| 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.
{
struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt;
if (resamp_pvt->resampler)
resample_close(resamp_pvt->resampler);
}
| 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 ast_trans_pvt::pvt, slin8_to_slin16_pvt::resample_factor, resample_frame(), and slin8_to_slin16_pvt::resampler.
{
struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt;
void *resampler = resamp_pvt->resampler;
float resample_factor = resamp_pvt->resample_factor;
return resample_frame(pvt, resampler, resample_factor, f);
}
| 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.
{
struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt;
resamp_pvt->resample_factor = 16000.0 / 8000.0;
if (!(resamp_pvt->resampler = resample_open(RESAMPLER_QUALITY, resamp_pvt->resample_factor, resamp_pvt->resample_factor)))
return -1;
return 0;
}
| static int unload_module | ( | void | ) | [static] |
Definition at line 198 of file codec_resample.c.
References ast_unregister_translator().
{
int res = 0;
res |= ast_unregister_translator(&slin16_to_slin8);
res |= ast_unregister_translator(&slin8_to_slin16);
return res;
}
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 = AST_BUILDOPT_SUM, .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] |
Definition at line 172 of file codec_resample.c.
struct ast_translator slin8_to_slin16 [static] |
Definition at line 185 of file codec_resample.c.