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.