FreeSWITCH API Documentation  1.7.0
Functions
switch_pcm.c File Reference
#include <switch.h>
#include <g711.h>
+ Include dependency graph for switch_pcm.c:

Go to the source code of this file.

Functions

 SWITCH_MODULE_LOAD_FUNCTION (core_pcm_load)
 
 SWITCH_MODULE_SHUTDOWN_FUNCTION (core_pcm_shutdown)
 
 SWITCH_MODULE_DEFINITION (CORE_PCM_MODULE, core_pcm_load, core_pcm_shutdown, NULL)
 
static switch_status_t switch_raw_init (switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
 
static switch_status_t switch_raw_encode (switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
 
static switch_status_t switch_raw_decode (switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
 
static switch_status_t switch_raw_destroy (switch_codec_t *codec)
 
static switch_status_t switch_proxy_init (switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
 
static switch_status_t switch_proxy_encode (switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
 
static switch_status_t switch_proxy_decode (switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
 
static switch_status_t switch_proxy_destroy (switch_codec_t *codec)
 
static switch_status_t switch_g711u_init (switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
 
static switch_status_t switch_g711u_encode (switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
 
static switch_status_t switch_g711u_decode (switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
 
static switch_status_t switch_g711u_destroy (switch_codec_t *codec)
 
static switch_status_t switch_g711a_init (switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
 
static switch_status_t switch_g711a_encode (switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
 
static switch_status_t switch_g711a_decode (switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
 
static switch_status_t switch_g711a_destroy (switch_codec_t *codec)
 
static void mod_g711_load (switch_loadable_module_interface_t **module_interface, switch_memory_pool_t *pool)
 

Function Documentation

static void mod_g711_load ( switch_loadable_module_interface_t **  module_interface,
switch_memory_pool_t pool 
)
static

Definition at line 271 of file switch_pcm.c.

References SWITCH_ADD_CODEC, SWITCH_CODEC_TYPE_AUDIO, switch_core_codec_add_implementation(), switch_g711a_decode(), switch_g711a_destroy(), switch_g711a_encode(), switch_g711a_init(), switch_g711u_decode(), switch_g711u_destroy(), switch_g711u_encode(), and switch_g711u_init().

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

272 {
273  switch_codec_interface_t *codec_interface;
274  int mpf = 10000, spf = 80, bpf = 160, ebpf = 80, count;
275 
276  SWITCH_ADD_CODEC(codec_interface, "G.711 ulaw");
277  for (count = 12; count > 0; count--) {
278  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
279  0, /* the IANA code number */
280  "PCMU", /* the IANA code name */
281  NULL, /* default fmtp to send (can be overridden by the init function) */
282  8000, /* samples transferred per second */
283  8000, /* actual samples transferred per second */
284  64000, /* bits transferred per second */
285  mpf * count, /* number of microseconds per frame */
286  spf * count, /* number of samples per frame */
287  bpf * count, /* number of bytes per frame decompressed */
288  ebpf * count, /* number of bytes per frame compressed */
289  1, /* number of channels represented */
290  spf * count, /* number of frames per network packet */
291  switch_g711u_init, /* function to initialize a codec handle using this implementation */
292  switch_g711u_encode, /* function to encode raw data into encoded data */
293  switch_g711u_decode, /* function to decode encoded data into raw data */
294  switch_g711u_destroy); /* deinitalize a codec handle using this implementation */
295 
296  if (count > 4) continue;
297 
298  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
299  0, /* the IANA code number */
300  "PCMU", /* the IANA code name */
301  NULL, /* default fmtp to send (can be overridden by the init function) */
302  48000, /* samples transferred per second */
303  48000, /* actual samples transferred per second */
304  64000 * 6, /* bits transferred per second */
305  mpf * count, /* number of microseconds per frame */
306  spf * count * 6, /* number of samples per frame */
307  bpf * count * 6, /* number of bytes per frame decompressed */
308  ebpf * count * 6, /* number of bytes per frame compressed */
309  1, /* number of channels represented */
310  spf * count * 6, /* number of frames per network packet */
311  switch_g711u_init, /* function to initialize a codec handle using this implementation */
312  switch_g711u_encode, /* function to encode raw data into encoded data */
313  switch_g711u_decode, /* function to decode encoded data into raw data */
314  switch_g711u_destroy); /* deinitalize a codec handle using this implementation */
315 
316  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
317  0, /* the IANA code number */
318  "PCMU", /* the IANA code name */
319  NULL, /* default fmtp to send (can be overridden by the init function) */
320  48000, /* samples transferred per second */
321  48000, /* actual samples transferred per second */
322  64000 * 6 * 2, /* bits transferred per second */
323  mpf * count, /* number of microseconds per frame */
324  spf * count * 6, /* number of samples per frame */
325  bpf * count * 6 * 2, /* number of bytes per frame decompressed */
326  ebpf * count * 6 * 2, /* number of bytes per frame compressed */
327  2, /* number of channels represented */
328  spf * count * 6 * 2, /* number of frames per network packet */
329  switch_g711u_init, /* function to initialize a codec handle using this implementation */
330  switch_g711u_encode, /* function to encode raw data into encoded data */
331  switch_g711u_decode, /* function to decode encoded data into raw data */
332  switch_g711u_destroy); /* deinitalize a codec handle using this implementation */
333  }
334 
335  SWITCH_ADD_CODEC(codec_interface, "G.711 alaw");
336  for (count = 12; count > 0; count--) {
337  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
338  8, /* the IANA code number */
339  "PCMA", /* the IANA code name */
340  NULL, /* default fmtp to send (can be overridden by the init function) */
341  8000, /* samples transferred per second */
342  8000, /* actual samples transferred per second */
343  64000, /* bits transferred per second */
344  mpf * count, /* number of microseconds per frame */
345  spf * count, /* number of samples per frame */
346  bpf * count, /* number of bytes per frame decompressed */
347  ebpf * count, /* number of bytes per frame compressed */
348  1, /* number of channels represented */
349  spf * count, /* number of frames per network packet */
350  switch_g711a_init, /* function to initialize a codec handle using this implementation */
351  switch_g711a_encode, /* function to encode raw data into encoded data */
352  switch_g711a_decode, /* function to decode encoded data into raw data */
353  switch_g711a_destroy); /* deinitalize a codec handle using this implementation */
354  }
355 }
static switch_status_t switch_g711a_decode(switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
Definition: switch_pcm.c:237
static switch_status_t switch_g711a_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
Definition: switch_pcm.c:200
static switch_status_t switch_g711a_encode(switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
Definition: switch_pcm.c:214
switch_memory_pool_t * pool
static void switch_core_codec_add_implementation(switch_memory_pool_t *pool, switch_codec_interface_t *codec_interface, const switch_codec_type_t codec_type, switch_payload_t ianacode, const char *iananame, char *fmtp, uint32_t samples_per_second, uint32_t actual_samples_per_second, int bits_per_second, int microseconds_per_packet, uint32_t samples_per_packet, uint32_t decoded_bytes_per_packet, uint32_t encoded_bytes_per_packet, uint8_t number_of_channels, int codec_frames_per_packet, switch_core_codec_init_func_t init, switch_core_codec_encode_func_t encode, switch_core_codec_decode_func_t decode, switch_core_codec_destroy_func_t destroy)
static switch_status_t switch_g711u_encode(switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
Definition: switch_pcm.c:143
Top level module interface to implement a series of codec implementations.
static switch_status_t switch_g711u_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
Definition: switch_pcm.c:129
#define SWITCH_ADD_CODEC(codec_int, int_name)
static switch_status_t switch_g711a_destroy(switch_codec_t *codec)
Definition: switch_pcm.c:265
static switch_status_t switch_g711u_destroy(switch_codec_t *codec)
Definition: switch_pcm.c:194
static switch_status_t switch_g711u_decode(switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
Definition: switch_pcm.c:166
static switch_status_t switch_g711a_decode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  encoded_data,
uint32_t  encoded_data_len,
uint32_t  encoded_rate,
void *  decoded_data,
uint32_t *  decoded_data_len,
uint32_t *  decoded_rate,
unsigned int *  flag 
)
static

Definition at line 237 of file switch_pcm.c.

References alaw_to_linear(), switch_codec_implementation::decoded_bytes_per_packet, switch_codec::implementation, memset(), SWITCH_CODEC_FLAG_SILENCE, and SWITCH_STATUS_SUCCESS.

Referenced by mod_g711_load().

243 {
244  short *dbuf;
245  unsigned char *ebuf;
246  uint32_t i;
247 
248  dbuf = decoded_data;
249  ebuf = encoded_data;
250 
251  if (*flag & SWITCH_CODEC_FLAG_SILENCE) {
253  *decoded_data_len = codec->implementation->decoded_bytes_per_packet;
254  } else {
255  for (i = 0; i < encoded_data_len; i++) {
256  dbuf[i] = alaw_to_linear(ebuf[i]);
257  }
258 
259  *decoded_data_len = i * 2;
260  }
261 
262  return SWITCH_STATUS_SUCCESS;
263 }
const switch_codec_implementation_t * implementation
static __inline__ int16_t alaw_to_linear(uint8_t alaw)
Decode an A-law sample to a linear value.
Definition: g711.h:311
memset(buf, 0, buflen)
static switch_status_t switch_g711a_destroy ( switch_codec_t codec)
static

Definition at line 265 of file switch_pcm.c.

References SWITCH_STATUS_SUCCESS.

Referenced by mod_g711_load().

266 {
267  return SWITCH_STATUS_SUCCESS;
268 }
static switch_status_t switch_g711a_encode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  decoded_data,
uint32_t  decoded_data_len,
uint32_t  decoded_rate,
void *  encoded_data,
uint32_t *  encoded_data_len,
uint32_t *  encoded_rate,
unsigned int *  flag 
)
static

Definition at line 214 of file switch_pcm.c.

References linear_to_alaw(), and SWITCH_STATUS_SUCCESS.

Referenced by mod_g711_load().

220 {
221  short *dbuf;
222  unsigned char *ebuf;
223  uint32_t i;
224 
225  dbuf = decoded_data;
226  ebuf = encoded_data;
227 
228  for (i = 0; i < decoded_data_len / sizeof(short); i++) {
229  ebuf[i] = linear_to_alaw(dbuf[i]);
230  }
231 
232  *encoded_data_len = i;
233 
234  return SWITCH_STATUS_SUCCESS;
235 }
static __inline__ uint8_t linear_to_alaw(int linear)
Encode a linear sample to A-law.
Definition: g711.h:279
static switch_status_t switch_g711a_init ( switch_codec_t codec,
switch_codec_flag_t  flags,
const switch_codec_settings_t codec_settings 
)
static

Definition at line 200 of file switch_pcm.c.

References SWITCH_CODEC_FLAG_DECODE, SWITCH_CODEC_FLAG_ENCODE, SWITCH_STATUS_FALSE, and SWITCH_STATUS_SUCCESS.

Referenced by mod_g711_load().

201 {
202  int encoding, decoding;
203 
204  encoding = (flags & SWITCH_CODEC_FLAG_ENCODE);
205  decoding = (flags & SWITCH_CODEC_FLAG_DECODE);
206 
207  if (!(encoding || decoding)) {
208  return SWITCH_STATUS_FALSE;
209  } else {
210  return SWITCH_STATUS_SUCCESS;
211  }
212 }
static switch_status_t switch_g711u_decode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  encoded_data,
uint32_t  encoded_data_len,
uint32_t  encoded_rate,
void *  decoded_data,
uint32_t *  decoded_data_len,
uint32_t *  decoded_rate,
unsigned int *  flag 
)
static

Definition at line 166 of file switch_pcm.c.

References switch_codec_implementation::decoded_bytes_per_packet, switch_codec::implementation, memset(), SWITCH_CODEC_FLAG_SILENCE, SWITCH_STATUS_SUCCESS, and ulaw_to_linear().

Referenced by mod_g711_load().

172 {
173  short *dbuf;
174  unsigned char *ebuf;
175  uint32_t i;
176 
177  dbuf = decoded_data;
178  ebuf = encoded_data;
179 
180  if (*flag & SWITCH_CODEC_FLAG_SILENCE) {
182  *decoded_data_len = codec->implementation->decoded_bytes_per_packet;
183  } else {
184  for (i = 0; i < encoded_data_len; i++) {
185  dbuf[i] = ulaw_to_linear(ebuf[i]);
186  }
187 
188  *decoded_data_len = i * 2;
189  }
190 
191  return SWITCH_STATUS_SUCCESS;
192 }
const switch_codec_implementation_t * implementation
static __inline__ int16_t ulaw_to_linear(uint8_t ulaw)
Decode an u-law sample to a linear value.
Definition: g711.h:241
memset(buf, 0, buflen)
static switch_status_t switch_g711u_destroy ( switch_codec_t codec)
static

Definition at line 194 of file switch_pcm.c.

References SWITCH_STATUS_SUCCESS.

Referenced by mod_g711_load().

195 {
196  return SWITCH_STATUS_SUCCESS;
197 }
static switch_status_t switch_g711u_encode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  decoded_data,
uint32_t  decoded_data_len,
uint32_t  decoded_rate,
void *  encoded_data,
uint32_t *  encoded_data_len,
uint32_t *  encoded_rate,
unsigned int *  flag 
)
static

Definition at line 143 of file switch_pcm.c.

References linear_to_ulaw(), and SWITCH_STATUS_SUCCESS.

Referenced by mod_g711_load().

149 {
150  short *dbuf;
151  unsigned char *ebuf;
152  uint32_t i;
153 
154  dbuf = decoded_data;
155  ebuf = encoded_data;
156 
157  for (i = 0; i < decoded_data_len / sizeof(short); i++) {
158  ebuf[i] = linear_to_ulaw(dbuf[i]);
159  }
160 
161  *encoded_data_len = i;
162 
163  return SWITCH_STATUS_SUCCESS;
164 }
static __inline__ uint8_t linear_to_ulaw(int linear)
Encode a linear sample to u-law.
Definition: g711.h:204
static switch_status_t switch_g711u_init ( switch_codec_t codec,
switch_codec_flag_t  flags,
const switch_codec_settings_t codec_settings 
)
static

Definition at line 129 of file switch_pcm.c.

References SWITCH_CODEC_FLAG_DECODE, SWITCH_CODEC_FLAG_ENCODE, SWITCH_STATUS_FALSE, and SWITCH_STATUS_SUCCESS.

Referenced by mod_g711_load().

130 {
131  int encoding, decoding;
132 
133  encoding = (flags & SWITCH_CODEC_FLAG_ENCODE);
134  decoding = (flags & SWITCH_CODEC_FLAG_DECODE);
135 
136  if (!(encoding || decoding)) {
137  return SWITCH_STATUS_FALSE;
138  } else {
139  return SWITCH_STATUS_SUCCESS;
140  }
141 }
SWITCH_MODULE_DEFINITION ( CORE_PCM_MODULE  ,
core_pcm_load  ,
core_pcm_shutdown  ,
NULL   
)
SWITCH_MODULE_LOAD_FUNCTION ( core_pcm_load  )

Definition at line 357 of file switch_pcm.c.

References mod_g711_load(), pool, SWITCH_ADD_CODEC, SWITCH_CODEC_TYPE_AUDIO, SWITCH_CODEC_TYPE_VIDEO, switch_core_codec_add_implementation(), switch_loadable_module_create_module_interface(), switch_proxy_decode(), switch_proxy_destroy(), switch_proxy_encode(), switch_proxy_init(), switch_raw_decode(), switch_raw_destroy(), switch_raw_encode(), switch_raw_init(), and SWITCH_STATUS_SUCCESS.

358 {
359  switch_codec_interface_t *codec_interface;
360  int mpf = 10000, spf = 80, bpf = 160, ebpf = 160, bps = 128000, rate = 8000, counta = 1, countb = 12;
361  int samples_per_frame, bytes_per_frame, ms_per_frame, x;
362 
363  /* connect my internal structure to the blank pointer passed to me */
364  *module_interface = switch_loadable_module_create_module_interface(pool, modname);
365 
366  SWITCH_ADD_CODEC(codec_interface, "PROXY VIDEO PASS-THROUGH");
367  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_VIDEO, /* enumeration defining the type of the codec */
368  31, /* the IANA code number */
369  "PROXY-VID", /* the IANA code name */
370  NULL, /* default fmtp to send (can be overridden by the init function) */
371  90000, /* samples transferred per second */
372  90000, /* actual samples transferred per second */
373  0, /* bits transferred per second */
374  0, /* number of microseconds per frame */
375  0, /* number of samples per frame */
376  0, /* number of bytes per frame decompressed */
377  0, /* number of bytes per frame compressed */
378  1, /* number of channels represented */
379  1, /* number of frames per network packet */
380  switch_proxy_init, /* function to initialize a codec handle using this implementation */
381  switch_proxy_encode, /* function to encode raw data into encoded data */
382  switch_proxy_decode, /* function to encode raw data into encoded data */
383  switch_proxy_destroy); /* deinitalize a codec handle using this implementation */
384 
385 
386  SWITCH_ADD_CODEC(codec_interface, "PROXY PASS-THROUGH");
387  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
388  0, /* the IANA code number */
389  "PROXY", /* the IANA code name */
390  NULL, /* default fmtp to send (can be overridden by the init function) */
391  8000, /* samples transferred per second */
392  8000, /* actual samples transferred per second */
393  0, /* bits transferred per second */
394  20000, /* number of microseconds per frame */
395  160, /* number of samples per frame */
396  320, /* number of bytes per frame decompressed */
397  320, /* number of bytes per frame compressed */
398  1, /* number of channels represented */
399  1, /* number of frames per network packet */
400  switch_proxy_init, /* function to initialize a codec handle using this implementation */
401  switch_proxy_encode, /* function to encode raw data into encoded data */
402  switch_proxy_decode, /* function to decode encoded data into raw data */
403  switch_proxy_destroy); /* deinitalize a codec handle using this implementation */
404 
405 
406  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
407  0, /* the IANA code number */
408  "PROXY", /* the IANA code name */
409  NULL, /* default fmtp to send (can be overridden by the init function) */
410  8000, /* samples transferred per second */
411  8000, /* actual samples transferred per second */
412  0, /* bits transferred per second */
413  20000, /* number of microseconds per frame */
414  160, /* number of samples per frame */
415  320 * 2, /* number of bytes per frame decompressed */
416  320 * 2, /* number of bytes per frame compressed */
417  2, /* number of channels represented */
418  1, /* number of frames per network packet */
419  switch_proxy_init, /* function to initialize a codec handle using this implementation */
420  switch_proxy_encode, /* function to encode raw data into encoded data */
421  switch_proxy_decode, /* function to decode encoded data into raw data */
422  switch_proxy_destroy); /* deinitalize a codec handle using this implementation */
423 
424  SWITCH_ADD_CODEC(codec_interface, "RAW Signed Linear (16 bit)");
425 
426  for (counta = 1; counta <= 3; counta++) {
427  if (rate == 8000) {
428  countb = 12;
429  } else {
430  countb = 6;
431  }
432  for (; countb > 0; countb--) {
434  SWITCH_CODEC_TYPE_AUDIO, 100, "L16", NULL, rate, rate, bps,
435  mpf * countb, spf * countb, bpf * countb, ebpf * countb, 1, spf * countb,
437 
439  SWITCH_CODEC_TYPE_AUDIO, 100, "L16", NULL, rate, rate, bps,
440  mpf * countb, spf * countb, bpf * countb * 2, ebpf * countb, 2, spf * countb,
442  }
443  rate = rate * 2;
444  bps = bps * 2;
445  spf = spf * 2;
446  bpf = bpf * 2;
447  ebpf = ebpf * 2;
448  }
449 
450  samples_per_frame = 240;
451  bytes_per_frame = 480;
452  ms_per_frame = 20000;
453 
454  for (x = 0; x < 5; x++) {
455  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
456  100, /* the IANA code number */
457  "L16", /* the IANA code name */
458  NULL, /* default fmtp to send (can be overridden by the init function) */
459  12000, /* samples transferred per second */
460  12000, /* actual samples transferred per second */
461  192000, /* bits transferred per second */
462  ms_per_frame, /* number of microseconds per frame */
463  samples_per_frame, /* number of samples per frame */
464  bytes_per_frame, /* number of bytes per frame decompressed */
465  bytes_per_frame, /* number of bytes per frame compressed */
466  1, /* number of channels represented */
467  1, /* number of frames per network packet */
468  switch_raw_init, /* function to initialize a codec handle using this implementation */
469  switch_raw_encode, /* function to encode raw data into encoded data */
470  switch_raw_decode, /* function to decode encoded data into raw data */
471  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
472 
473  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
474  100, /* the IANA code number */
475  "L16", /* the IANA code name */
476  NULL, /* default fmtp to send (can be overridden by the init function) */
477  12000, /* samples transferred per second */
478  12000, /* actual samples transferred per second */
479  192000 * 2, /* bits transferred per second */
480  ms_per_frame, /* number of microseconds per frame */
481  samples_per_frame, /* number of samples per frame */
482  bytes_per_frame * 2, /* number of bytes per frame decompressed */
483  bytes_per_frame * 2, /* number of bytes per frame compressed */
484  2, /* number of channels represented */
485  1, /* number of frames per network packet */
486  switch_raw_init, /* function to initialize a codec handle using this implementation */
487  switch_raw_encode, /* function to encode raw data into encoded data */
488  switch_raw_decode, /* function to decode encoded data into raw data */
489  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
490 
491  samples_per_frame += 240;
492  bytes_per_frame += 480;
493  ms_per_frame += 20000;
494 
495  }
496 
497  samples_per_frame = 480;
498  bytes_per_frame = 960;
499  ms_per_frame = 20000;
500 
501  for (x = 0; x < 3; x++) {
502  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
503  100, /* the IANA code number */
504  "L16", /* the IANA code name */
505  NULL, /* default fmtp to send (can be overridden by the init function) */
506  24000, /* samples transferred per second */
507  24000, /* actual samples transferred per second */
508  384000, /* bits transferred per second */
509  ms_per_frame, /* number of microseconds per frame */
510  samples_per_frame, /* number of samples per frame */
511  bytes_per_frame, /* number of bytes per frame decompressed */
512  bytes_per_frame, /* number of bytes per frame compressed */
513  1, /* number of channels represented */
514  1, /* number of frames per network packet */
515  switch_raw_init, /* function to initialize a codec handle using this implementation */
516  switch_raw_encode, /* function to encode raw data into encoded data */
517  switch_raw_decode, /* function to decode encoded data into raw data */
518  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
519 
520  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
521  100, /* the IANA code number */
522  "L16", /* the IANA code name */
523  NULL, /* default fmtp to send (can be overridden by the init function) */
524  24000, /* samples transferred per second */
525  24000, /* actual samples transferred per second */
526  384000 * 2, /* bits transferred per second */
527  ms_per_frame, /* number of microseconds per frame */
528  samples_per_frame, /* number of samples per frame */
529  bytes_per_frame * 2, /* number of bytes per frame decompressed */
530  bytes_per_frame * 2, /* number of bytes per frame compressed */
531  2, /* number of channels represented */
532  1, /* number of frames per network packet */
533  switch_raw_init, /* function to initialize a codec handle using this implementation */
534  switch_raw_encode, /* function to encode raw data into encoded data */
535  switch_raw_decode, /* function to decode encoded data into raw data */
536  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
537 
538  samples_per_frame += 480;
539  bytes_per_frame += 960;
540  ms_per_frame += 20000;
541 
542  }
543 
544  /* these formats below are for file playing. */
545 
546  samples_per_frame = 96;
547  bytes_per_frame = 192;
548  ms_per_frame = 2000;
549 
550  for (x = 0; x < 5; x++) {
551  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
552  100, /* the IANA code number */
553  "L16", /* the IANA code name */
554  NULL, /* default fmtp to send (can be overridden by the init function) */
555  48000, /* samples transferred per second */
556  48000, /* actual samples transferred per second */
557  768000, /* bits transferred per second */
558  ms_per_frame, /* number of microseconds per frame */
559  samples_per_frame, /* number of samples per frame */
560  bytes_per_frame, /* number of bytes per frame decompressed */
561  bytes_per_frame, /* number of bytes per frame compressed */
562  1, /* number of channels represented */
563  1, /* number of frames per network packet */
564  switch_raw_init, /* function to initialize a codec handle using this implementation */
565  switch_raw_encode, /* function to encode raw data into encoded data */
566  switch_raw_decode, /* function to decode encoded data into raw data */
567  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
568 
569  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
570  100, /* the IANA code number */
571  "L16", /* the IANA code name */
572  NULL, /* default fmtp to send (can be overridden by the init function) */
573  48000, /* samples transferred per second */
574  48000, /* actual samples transferred per second */
575  768000 * 2, /* bits transferred per second */
576  ms_per_frame, /* number of microseconds per frame */
577  samples_per_frame, /* number of samples per frame */
578  bytes_per_frame * 2, /* number of bytes per frame decompressed */
579  bytes_per_frame * 2, /* number of bytes per frame compressed */
580  2, /* number of channels represented */
581  1, /* number of frames per network packet */
582  switch_raw_init, /* function to initialize a codec handle using this implementation */
583  switch_raw_encode, /* function to encode raw data into encoded data */
584  switch_raw_decode, /* function to decode encoded data into raw data */
585  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
586 
587  samples_per_frame += 96;
588  bytes_per_frame += 192;
589  ms_per_frame += 2000;
590 
591  }
592 
593 
594  samples_per_frame = 16;
595  bytes_per_frame = 32;
596  ms_per_frame = 2000;
597 
598  for (x = 0; x < 4; x++) {
599  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
600  100, /* the IANA code number */
601  "L16", /* the IANA code name */
602  NULL, /* default fmtp to send (can be overridden by the init function) */
603  8000, /* samples transferred per second */
604  8000, /* actual samples transferred per second */
605  128000, /* bits transferred per second */
606  ms_per_frame, /* number of microseconds per frame */
607  samples_per_frame, /* number of samples per frame */
608  bytes_per_frame, /* number of bytes per frame decompressed */
609  bytes_per_frame, /* number of bytes per frame compressed */
610  1, /* number of channels represented */
611  1, /* number of frames per network packet */
612  switch_raw_init, /* function to initialize a codec handle using this implementation */
613  switch_raw_encode, /* function to encode raw data into encoded data */
614  switch_raw_decode, /* function to decode encoded data into raw data */
615  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
616 
617  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
618  100, /* the IANA code number */
619  "L16", /* the IANA code name */
620  NULL, /* default fmtp to send (can be overridden by the init function) */
621  8000, /* samples transferred per second */
622  8000, /* actual samples transferred per second */
623  128000 * 2, /* bits transferred per second */
624  ms_per_frame, /* number of microseconds per frame */
625  samples_per_frame, /* number of samples per frame */
626  bytes_per_frame * 2, /* number of bytes per frame decompressed */
627  bytes_per_frame * 2, /* number of bytes per frame compressed */
628  2, /* number of channels represented */
629  1, /* number of frames per network packet */
630  switch_raw_init, /* function to initialize a codec handle using this implementation */
631  switch_raw_encode, /* function to encode raw data into encoded data */
632  switch_raw_decode, /* function to decode encoded data into raw data */
633  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
634 
635  samples_per_frame += 16;
636  bytes_per_frame += 32;
637  ms_per_frame += 2000;
638 
639  }
640 
641  samples_per_frame = 32;
642  bytes_per_frame = 64;
643  ms_per_frame = 2000;
644 
645  for (x = 0; x < 4; x++) {
646  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
647  100, /* the IANA code number */
648  "L16", /* the IANA code name */
649  NULL, /* default fmtp to send (can be overridden by the init function) */
650  16000, /* samples transferred per second */
651  16000, /* actual samples transferred per second */
652  256000, /* bits transferred per second */
653  ms_per_frame, /* number of microseconds per frame */
654  samples_per_frame, /* number of samples per frame */
655  bytes_per_frame, /* number of bytes per frame decompressed */
656  bytes_per_frame, /* number of bytes per frame compressed */
657  1, /* number of channels represented */
658  1, /* number of frames per network packet */
659  switch_raw_init, /* function to initialize a codec handle using this implementation */
660  switch_raw_encode, /* function to encode raw data into encoded data */
661  switch_raw_decode, /* function to decode encoded data into raw data */
662  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
663 
664  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
665  100, /* the IANA code number */
666  "L16", /* the IANA code name */
667  NULL, /* default fmtp to send (can be overridden by the init function) */
668  16000, /* samples transferred per second */
669  16000, /* actual samples transferred per second */
670  256000 * 2, /* bits transferred per second */
671  ms_per_frame, /* number of microseconds per frame */
672  samples_per_frame, /* number of samples per frame */
673  bytes_per_frame * 2, /* number of bytes per frame decompressed */
674  bytes_per_frame * 2, /* number of bytes per frame compressed */
675  2, /* number of channels represented */
676  1, /* number of frames per network packet */
677  switch_raw_init, /* function to initialize a codec handle using this implementation */
678  switch_raw_encode, /* function to encode raw data into encoded data */
679  switch_raw_decode, /* function to decode encoded data into raw data */
680  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
681 
682  samples_per_frame += 32;
683  bytes_per_frame += 64;
684  ms_per_frame += 2000;
685 
686  }
687 
688 
689  samples_per_frame = 64;
690  bytes_per_frame = 128;
691  ms_per_frame = 2000;
692 
693  for (x = 0; x < 4; x++) {
694  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
695  100, /* the IANA code number */
696  "L16", /* the IANA code name */
697  NULL, /* default fmtp to send (can be overridden by the init function) */
698  32000, /* samples transferred per second */
699  32000, /* actual samples transferred per second */
700  512000, /* bits transferred per second */
701  ms_per_frame, /* number of microseconds per frame */
702  samples_per_frame, /* number of samples per frame */
703  bytes_per_frame, /* number of bytes per frame decompressed */
704  bytes_per_frame, /* number of bytes per frame compressed */
705  1, /* number of channels represented */
706  1, /* number of frames per network packet */
707  switch_raw_init, /* function to initialize a codec handle using this implementation */
708  switch_raw_encode, /* function to encode raw data into encoded data */
709  switch_raw_decode, /* function to decode encoded data into raw data */
710  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
711 
712  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
713  100, /* the IANA code number */
714  "L16", /* the IANA code name */
715  NULL, /* default fmtp to send (can be overridden by the init function) */
716  32000, /* samples transferred per second */
717  32000, /* actual samples transferred per second */
718  512000 * 2, /* bits transferred per second */
719  ms_per_frame, /* number of microseconds per frame */
720  samples_per_frame, /* number of samples per frame */
721  bytes_per_frame * 2, /* number of bytes per frame decompressed */
722  bytes_per_frame * 2, /* number of bytes per frame compressed */
723  2, /* number of channels represented */
724  1, /* number of frames per network packet */
725  switch_raw_init, /* function to initialize a codec handle using this implementation */
726  switch_raw_encode, /* function to encode raw data into encoded data */
727  switch_raw_decode, /* function to decode encoded data into raw data */
728  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
729 
730  samples_per_frame += 64;
731  bytes_per_frame += 128;
732  ms_per_frame += 2000;
733 
734  }
735 
736  samples_per_frame = 960;
737  bytes_per_frame = 1920;
738  ms_per_frame = 20000;
739  /* 10ms is already registered */
740  for (x = 0; x < 3; x++) {
741  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
742  100, /* the IANA code number */
743  "L16", /* the IANA code name */
744  NULL, /* default fmtp to send (can be overridden by the init function) */
745  48000, /* samples transferred per second */
746  48000, /* actual samples transferred per second */
747  768000, /* bits transferred per second */
748  ms_per_frame, /* number of microseconds per frame */
749  samples_per_frame, /* number of samples per frame */
750  bytes_per_frame, /* number of bytes per frame decompressed */
751  bytes_per_frame, /* number of bytes per frame compressed */
752  1, /* number of channels represented */
753  1, /* number of frames per network packet */
754  switch_raw_init, /* function to initialize a codec handle using this implementation */
755  switch_raw_encode, /* function to encode raw data into encoded data */
756  switch_raw_decode, /* function to decode encoded data into raw data */
757  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
758 
759  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
760  100, /* the IANA code number */
761  "L16", /* the IANA code name */
762  NULL, /* default fmtp to send (can be overridden by the init function) */
763  48000, /* samples transferred per second */
764  48000, /* actual samples transferred per second */
765  768000 * 2, /* bits transferred per second */
766  ms_per_frame, /* number of microseconds per frame */
767  samples_per_frame, /* number of samples per frame */
768  bytes_per_frame * 2, /* number of bytes per frame decompressed */
769  bytes_per_frame * 2, /* number of bytes per frame compressed */
770  2, /* number of channels represented */
771  1, /* number of frames per network packet */
772  switch_raw_init, /* function to initialize a codec handle using this implementation */
773  switch_raw_encode, /* function to encode raw data into encoded data */
774  switch_raw_decode, /* function to decode encoded data into raw data */
775  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
776 
777  samples_per_frame += 480;
778  bytes_per_frame += 960;
779  ms_per_frame += 10000;
780  }
781 
782  samples_per_frame = 441;
783  bytes_per_frame = 882;
784  ms_per_frame = 10000;
785 
786  for (x = 0; x < 3; x++) {
787  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
788  100, /* the IANA code number */
789  "L16", /* the IANA code name */
790  NULL, /* default fmtp to send (can be overridden by the init function) */
791  44100, /* samples transferred per second */
792  44100, /* actual samples transferred per second */
793  705600, /* bits transferred per second */
794  ms_per_frame, /* number of microseconds per frame */
795  samples_per_frame, /* number of samples per frame */
796  bytes_per_frame, /* number of bytes per frame decompressed */
797  bytes_per_frame, /* number of bytes per frame compressed */
798  1, /* number of channels represented */
799  1, /* number of frames per network packet */
800  switch_raw_init, /* function to initialize a codec handle using this implementation */
801  switch_raw_encode, /* function to encode raw data into encoded data */
802  switch_raw_decode, /* function to decode encoded data into raw data */
803  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
804 
805  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
806  100, /* the IANA code number */
807  "L16", /* the IANA code name */
808  NULL, /* default fmtp to send (can be overridden by the init function) */
809  44100, /* samples transferred per second */
810  44100, /* actual samples transferred per second */
811  705600, /* bits transferred per second */
812  ms_per_frame, /* number of microseconds per frame */
813  samples_per_frame, /* number of samples per frame */
814  bytes_per_frame * 2, /* number of bytes per frame decompressed */
815  bytes_per_frame * 2, /* number of bytes per frame compressed */
816  2, /* number of channels represented */
817  1, /* number of frames per network packet */
818  switch_raw_init, /* function to initialize a codec handle using this implementation */
819  switch_raw_encode, /* function to encode raw data into encoded data */
820  switch_raw_decode, /* function to decode encoded data into raw data */
821  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
822 
823  samples_per_frame += 441;
824  bytes_per_frame += 882;
825  ms_per_frame += 10000;
826 
827  }
828 
829 
830 
831  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
832  100, /* the IANA code number */
833  "L16", /* the IANA code name */
834  NULL, /* default fmtp to send (can be overridden by the init function) */
835  22050, /* samples transferred per second */
836  22050, /* actual samples transferred per second */
837  352800, /* bits transferred per second */
838  20000, /* number of microseconds per frame */
839  441, /* number of samples per frame */
840  882, /* number of bytes per frame decompressed */
841  882, /* number of bytes per frame compressed */
842  1, /* number of channels represented */
843  1, /* number of frames per network packet */
844  switch_raw_init, /* function to initialize a codec handle using this implementation */
845  switch_raw_encode, /* function to encode raw data into encoded data */
846  switch_raw_decode, /* function to decode encoded data into raw data */
847  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
848 
849  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
850  100, /* the IANA code number */
851  "L16", /* the IANA code name */
852  NULL, /* default fmtp to send (can be overridden by the init function) */
853  22050, /* samples transferred per second */
854  22050, /* actual samples transferred per second */
855  352800 * 2, /* bits transferred per second */
856  20000, /* number of microseconds per frame */
857  441, /* number of samples per frame */
858  882 * 2, /* number of bytes per frame decompressed */
859  882 * 2, /* number of bytes per frame compressed */
860  2, /* number of channels represented */
861  1, /* number of frames per network packet */
862  switch_raw_init, /* function to initialize a codec handle using this implementation */
863  switch_raw_encode, /* function to encode raw data into encoded data */
864  switch_raw_decode, /* function to decode encoded data into raw data */
865  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
866 
867  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
868  100, /* the IANA code number */
869  "L16", /* the IANA code name */
870  NULL, /* default fmtp to send (can be overridden by the init function) */
871  11025, /* samples transferred per second */
872  11025, /* actual samples transferred per second */
873  176400, /* bits transferred per second */
874  40000, /* number of microseconds per frame */
875  441, /* number of samples per frame */
876  882, /* number of bytes per frame decompressed */
877  882, /* number of bytes per frame compressed */
878  1, /* number of channels represented */
879  1, /* number of frames per network packet */
880  switch_raw_init, /* function to initialize a codec handle using this implementation */
881  switch_raw_encode, /* function to encode raw data into encoded data */
882  switch_raw_decode, /* function to decode encoded data into raw data */
883  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
884 
885  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
886  100, /* the IANA code number */
887  "L16", /* the IANA code name */
888  NULL, /* default fmtp to send (can be overridden by the init function) */
889  11025, /* samples transferred per second */
890  11025, /* actual samples transferred per second */
891  176400 * 2, /* bits transferred per second */
892  40000, /* number of microseconds per frame */
893  441, /* number of samples per frame */
894  882 * 2, /* number of bytes per frame decompressed */
895  882 * 2, /* number of bytes per frame compressed */
896  2, /* number of channels represented */
897  1, /* number of frames per network packet */
898  switch_raw_init, /* function to initialize a codec handle using this implementation */
899  switch_raw_encode, /* function to encode raw data into encoded data */
900  switch_raw_decode, /* function to decode encoded data into raw data */
901  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
902 
903 
904  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
905  100, /* the IANA code number */
906  "L16", /* the IANA code name */
907  NULL, /* default fmtp to send (can be overridden by the init function) */
908  11025, /* samples transferred per second */
909  11025, /* actual samples transferred per second */
910  176400, /* bits transferred per second */
911  32000, /* number of microseconds per frame */
912  256, /* number of samples per frame */
913  512, /* number of bytes per frame decompressed */
914  512, /* number of bytes per frame compressed */
915  1, /* number of channels represented */
916  1, /* number of frames per network packet */
917  switch_raw_init, /* function to initialize a codec handle using this implementation */
918  switch_raw_encode, /* function to encode raw data into encoded data */
919  switch_raw_decode, /* function to decode encoded data into raw data */
920  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
921 
922  switch_core_codec_add_implementation(pool, codec_interface, SWITCH_CODEC_TYPE_AUDIO, /* enumeration defining the type of the codec */
923  100, /* the IANA code number */
924  "L16", /* the IANA code name */
925  NULL, /* default fmtp to send (can be overridden by the init function) */
926  11025, /* samples transferred per second */
927  11025, /* actual samples transferred per second */
928  176400 * 2, /* bits transferred per second */
929  32000, /* number of microseconds per frame */
930  256, /* number of samples per frame */
931  512 * 2, /* number of bytes per frame decompressed */
932  512 * 2, /* number of bytes per frame compressed */
933  2, /* number of channels represented */
934  1, /* number of frames per network packet */
935  switch_raw_init, /* function to initialize a codec handle using this implementation */
936  switch_raw_encode, /* function to encode raw data into encoded data */
937  switch_raw_decode, /* function to decode encoded data into raw data */
938  switch_raw_destroy); /* deinitalize a codec handle using this implementation */
939 
940  /* indicate that the module should continue to be loaded */
941 
942  mod_g711_load(module_interface, pool);
943 
944  return SWITCH_STATUS_SUCCESS;
945  //return SWITCH_STATUS_NOUNLOAD;
946 }
static switch_status_t switch_raw_destroy(switch_codec_t *codec)
Definition: switch_pcm.c:91
static switch_status_t switch_proxy_decode(switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
Definition: switch_pcm.c:113
switch_memory_pool_t * pool
static void switch_core_codec_add_implementation(switch_memory_pool_t *pool, switch_codec_interface_t *codec_interface, const switch_codec_type_t codec_type, switch_payload_t ianacode, const char *iananame, char *fmtp, uint32_t samples_per_second, uint32_t actual_samples_per_second, int bits_per_second, int microseconds_per_packet, uint32_t samples_per_packet, uint32_t decoded_bytes_per_packet, uint32_t encoded_bytes_per_packet, uint8_t number_of_channels, int codec_frames_per_packet, switch_core_codec_init_func_t init, switch_core_codec_encode_func_t encode, switch_core_codec_decode_func_t decode, switch_core_codec_destroy_func_t destroy)
static switch_status_t switch_proxy_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
Definition: switch_pcm.c:98
static switch_status_t switch_raw_encode(switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
Definition: switch_pcm.c:58
static switch_status_t switch_raw_decode(switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag)
Definition: switch_pcm.c:75
Top level module interface to implement a series of codec implementations.
static switch_status_t switch_raw_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
Definition: switch_pcm.c:44
static switch_status_t switch_proxy_destroy(switch_codec_t *codec)
Definition: switch_pcm.c:123
#define SWITCH_ADD_CODEC(codec_int, int_name)
switch_loadable_module_interface_t * switch_loadable_module_create_module_interface(switch_memory_pool_t *pool, const char *name)
static void mod_g711_load(switch_loadable_module_interface_t **module_interface, switch_memory_pool_t *pool)
Definition: switch_pcm.c:271
static switch_status_t switch_proxy_encode(switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag)
Definition: switch_pcm.c:103
SWITCH_MODULE_SHUTDOWN_FUNCTION ( core_pcm_shutdown  )

Definition at line 948 of file switch_pcm.c.

References SWITCH_STATUS_NOUNLOAD.

949 {
950  return SWITCH_STATUS_NOUNLOAD;
951 }
static switch_status_t switch_proxy_decode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  encoded_data,
uint32_t  encoded_data_len,
uint32_t  encoded_rate,
void *  decoded_data,
uint32_t *  decoded_data_len,
uint32_t *  decoded_rate,
unsigned int *  flag 
)
static

Definition at line 113 of file switch_pcm.c.

References SWITCH_STATUS_FALSE.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

119 {
120  return SWITCH_STATUS_FALSE;
121 }
static switch_status_t switch_proxy_destroy ( switch_codec_t codec)
static

Definition at line 123 of file switch_pcm.c.

References SWITCH_STATUS_SUCCESS.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

124 {
125  return SWITCH_STATUS_SUCCESS;
126 }
static switch_status_t switch_proxy_encode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  decoded_data,
uint32_t  decoded_data_len,
uint32_t  decoded_rate,
void *  encoded_data,
uint32_t *  encoded_data_len,
uint32_t *  encoded_rate,
unsigned int *  flag 
)
static

Definition at line 103 of file switch_pcm.c.

References SWITCH_STATUS_FALSE.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

109 {
110  return SWITCH_STATUS_FALSE;
111 }
static switch_status_t switch_proxy_init ( switch_codec_t codec,
switch_codec_flag_t  flags,
const switch_codec_settings_t codec_settings 
)
static

Definition at line 98 of file switch_pcm.c.

References SWITCH_STATUS_SUCCESS.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

99 {
100  return SWITCH_STATUS_SUCCESS;
101 }
static switch_status_t switch_raw_decode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  encoded_data,
uint32_t  encoded_data_len,
uint32_t  encoded_rate,
void *  decoded_data,
uint32_t *  decoded_data_len,
uint32_t *  decoded_rate,
unsigned int *  flag 
)
static

Definition at line 75 of file switch_pcm.c.

References switch_codec_implementation::actual_samples_per_second, switch_codec::implementation, SWITCH_STATUS_NOOP, and SWITCH_STATUS_RESAMPLE.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

81 {
82  if (codec && other_codec && codec->implementation && other_codec->implementation &&
84  memcpy(decoded_data, encoded_data, encoded_data_len);
85  *decoded_data_len = encoded_data_len;
87  }
88  return SWITCH_STATUS_NOOP;
89 }
const switch_codec_implementation_t * implementation
static switch_status_t switch_raw_destroy ( switch_codec_t codec)
static

Definition at line 91 of file switch_pcm.c.

References SWITCH_STATUS_SUCCESS.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

static switch_status_t switch_raw_encode ( switch_codec_t codec,
switch_codec_t other_codec,
void *  decoded_data,
uint32_t  decoded_data_len,
uint32_t  decoded_rate,
void *  encoded_data,
uint32_t *  encoded_data_len,
uint32_t *  encoded_rate,
unsigned int *  flag 
)
static

Definition at line 58 of file switch_pcm.c.

References switch_codec_implementation::actual_samples_per_second, switch_codec::implementation, SWITCH_STATUS_NOOP, and SWITCH_STATUS_RESAMPLE.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

64 {
65  /* NOOP indicates that the audio in is already the same as the audio out, so no conversion was necessary. */
66  if (codec && other_codec && codec->implementation && other_codec->implementation &&
68  memcpy(encoded_data, decoded_data, decoded_data_len);
69  *encoded_data_len = decoded_data_len;
71  }
72  return SWITCH_STATUS_NOOP;
73 }
const switch_codec_implementation_t * implementation
static switch_status_t switch_raw_init ( switch_codec_t codec,
switch_codec_flag_t  flags,
const switch_codec_settings_t codec_settings 
)
static

Definition at line 44 of file switch_pcm.c.

References SWITCH_CODEC_FLAG_DECODE, SWITCH_CODEC_FLAG_ENCODE, SWITCH_STATUS_FALSE, and SWITCH_STATUS_SUCCESS.

Referenced by SWITCH_MODULE_LOAD_FUNCTION().

45 {
46  int encoding, decoding;
47 
48  encoding = (flags & SWITCH_CODEC_FLAG_ENCODE);
49  decoding = (flags & SWITCH_CODEC_FLAG_DECODE);
50 
51  if (!(encoding || decoding)) {
52  return SWITCH_STATUS_FALSE;
53  } else {
54  return SWITCH_STATUS_SUCCESS;
55  }
56 }