Wed Jan 8 2020 09:50:10

Asterisk developer's documentation


codec_resample.c File Reference

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
 

Macros

#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_infoast_module_info = &__mod_info
 
static struct ast_translator slin16_to_slin8
 
static struct ast_translator slin8_to_slin16
 

Detailed Description

Resample slinear audio.

Note
To install libresample, check it out of the following repository: $ svn co http://svn.digium.com/svn/thirdparty/libresample/trunk

Definition in file codec_resample.c.

Macro Definition Documentation

#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().

Function Documentation

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.

209 {
210  int res = 0;
211 
214 
216 }
#define ast_register_translator(t)
See __ast_register_translator()
Definition: translate.h:170
static struct ast_translator slin8_to_slin16
static struct ast_translator slin16_to_slin8
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, for(), 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().

111 {
112  int total_in_buf_used = 0;
113  int total_out_buf_used = 0;
114  int16_t *in_buf = (int16_t *) f->data.ptr;
115  int16_t *out_buf = pvt->outbuf.i16 + pvt->samples;
116  float in_buf_f[f->samples];
117  float out_buf_f[2048];
118  int res = 0;
119  int i;
120 
121  for (i = 0; i < f->samples; i++)
122  in_buf_f[i] = in_buf[i] * (FLT_MAX / SHRT_MAX);
123 
124  while (total_in_buf_used < f->samples) {
125  int in_buf_used, out_buf_used;
126 
127  out_buf_used = resample_process(resampler, resample_factor,
128  &in_buf_f[total_in_buf_used], f->samples - total_in_buf_used,
129  0, &in_buf_used,
130  &out_buf_f[total_out_buf_used], ARRAY_LEN(out_buf_f) - total_out_buf_used);
131 
132  if (out_buf_used < 0)
133  break;
134 
135  total_out_buf_used += out_buf_used;
136  total_in_buf_used += in_buf_used;
137 
138  if (total_out_buf_used == ARRAY_LEN(out_buf_f)) {
139  ast_log(LOG_ERROR, "Output buffer filled ... need to increase its size\n");
140  res = -1;
141  break;
142  }
143  }
144 
145  for (i = 0; i < total_out_buf_used; i++)
146  out_buf[i] = out_buf_f[i] * (SHRT_MAX / FLT_MAX);
147 
148  pvt->samples += total_out_buf_used;
149  pvt->datalen += (total_out_buf_used * sizeof(int16_t));
150 
151  return res;
152 }
int datalen
actual space used in outbuf
Definition: translate.h:140
#define ARRAY_LEN(a)
Definition: isdn_lib.c:42
union ast_trans_pvt::@213 outbuf
void * ptr
Definition: frame.h:160
for(;;)
Definition: ast_expr2.c:2460
int16_t * i16
Definition: translate.h:145
#define LOG_ERROR
Definition: logger.h:155
void ast_log(int level, const char *file, int line, const char *function, const char *fmt,...)
Used for sending a log message This is the standard logger function. Probably the only way you will i...
Definition: logger.c:1207
union ast_frame::@172 data
int samples
Definition: frame.h:150
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.

94 {
95  struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt;
96 
97  if (resamp_pvt->resampler)
98  resample_close(resamp_pvt->resampler);
99 }
void * pvt
Definition: translate.h:141
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.

155 {
156  struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt;
157  void *resampler = resamp_pvt->resampler;
158  float resample_factor = resamp_pvt->resample_factor;
159 
160  return resample_frame(pvt, resampler, resample_factor, f);
161 }
void * pvt
Definition: translate.h:141
static int resample_frame(struct ast_trans_pvt *pvt, void *resampler, float resample_factor, struct ast_frame *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.

70 {
71  struct slin16_to_slin8_pvt *resamp_pvt = pvt->pvt;
72 
73  resamp_pvt->resample_factor = 8000.0 / 16000.0;
74 
75  if (!(resamp_pvt->resampler = resample_open(RESAMPLER_QUALITY, resamp_pvt->resample_factor, resamp_pvt->resample_factor)))
76  return -1;
77 
78  return 0;
79 }
void * pvt
Definition: translate.h:141
#define RESAMPLER_QUALITY
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.

102 {
103  struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt;
104 
105  if (resamp_pvt->resampler)
106  resample_close(resamp_pvt->resampler);
107 }
void * pvt
Definition: translate.h:141
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.

164 {
165  struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt;
166  void *resampler = resamp_pvt->resampler;
167  float resample_factor = resamp_pvt->resample_factor;
168 
169  return resample_frame(pvt, resampler, resample_factor, f);
170 }
void * pvt
Definition: translate.h:141
static int resample_frame(struct ast_trans_pvt *pvt, void *resampler, float resample_factor, struct ast_frame *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.

82 {
83  struct slin8_to_slin16_pvt *resamp_pvt = pvt->pvt;
84 
85  resamp_pvt->resample_factor = 16000.0 / 8000.0;
86 
87  if (!(resamp_pvt->resampler = resample_open(RESAMPLER_QUALITY, resamp_pvt->resample_factor, resamp_pvt->resample_factor)))
88  return -1;
89 
90  return 0;
91 }
void * pvt
Definition: translate.h:141
#define RESAMPLER_QUALITY
static int unload_module ( void  )
static

Definition at line 198 of file codec_resample.c.

References ast_unregister_translator().

199 {
200  int res = 0;
201 
204 
205  return res;
206 }
int ast_unregister_translator(struct ast_translator *t)
Unregister a translator Unregisters the given tranlator.
Definition: translate.c:942
static struct ast_translator slin8_to_slin16
static struct ast_translator slin16_to_slin8

Variable Documentation

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.

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.