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 __MODULE_INFO_SECTION | __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "SLIN Resampling Codec" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } |
| 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 56 of file codec_resample.c.
| #define RESAMPLER_QUALITY 1 |
Definition at line 54 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 217 of file codec_resample.c.
| static void __unreg_module | ( | void | ) | [static] |
Definition at line 217 of file codec_resample.c.
| static int load_module | ( | void | ) | [static] |
Definition at line 207 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 108 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_frame::samples, and ast_trans_pvt::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 92 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 153 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 68 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 100 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 162 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 80 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 197 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 __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "SLIN Resampling Codec" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static] |
Definition at line 217 of file codec_resample.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 217 of file codec_resample.c.
struct ast_translator slin16_to_slin8 [static] |
Definition at line 171 of file codec_resample.c.
struct ast_translator slin8_to_slin16 [static] |
Definition at line 184 of file codec_resample.c.