summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/README2
-rw-r--r--modules/celt/celt.c417
-rw-r--r--modules/celt/module.mk11
3 files changed, 0 insertions, 430 deletions
diff --git a/docs/README b/docs/README
index f7667b3..fbb8cf1 100644
--- a/docs/README
+++ b/docs/README
@@ -58,7 +58,6 @@ Features:
* Audio-codecs:
- AMR narrowband, AMR wideband
- BroadVoice32 BV32
- - CELT
- G.711
- G.722
- G.726
@@ -145,7 +144,6 @@ avcodec Video codec using FFmpeg/libav libavcodec
avformat Video source using FFmpeg/libav libavformat
bv32 BroadVoice32 audio codec
cairo Cairo video source
-celt CELT audio codec (obsolete, use opus instead)
cons UDP/TCP console UI driver
contact Contacts module
coreaudio Apple Coreaudio driver
diff --git a/modules/celt/celt.c b/modules/celt/celt.c
deleted file mode 100644
index 7460637..0000000
--- a/modules/celt/celt.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/**
- * @file celt.c CELT (Code-Excited Lapped Transform) audio codec
- *
- * Copyright (C) 2010 Creytiv.com
- */
-#include <stdlib.h>
-#include <celt/celt.h>
-#include <re.h>
-#include <baresip.h>
-
-
-#define DEBUG_MODULE "celt"
-#define DEBUG_LEVEL 5
-#include <re_dbg.h>
-
-
-/**
- * @defgroup celt celt
- *
- * CELT audio codec (deprecated, replaced by opus)
- *
- * @deprecated Replaced by the @ref opus module
- *
- * NOTE:
- *
- * The CELT codec has been merged into the IETF Opus codec and is now obsolete
- */
-
-
-#ifdef CELT_GET_FRAME_SIZE
-#define CELT_OLD_API 1
-#endif
-
-
-/** Celt constants */
-enum {
- DEFAULT_FRAME_SIZE = 640, /**< Framesize in [samples] */
- DEFAULT_BITRATE = 64000, /**< 32-128 kbps */
- DEFAULT_PTIME = 20, /**< Packet time in [ms] */
- MAX_FRAMES = 16 /**< Maximum frames per packet */
-};
-
-
-struct aucodec_st {
- struct aucodec *ac; /**< Inheritance - base class */
- CELTMode *mode; /**< Shared CELT mode */
- CELTEncoder *enc; /**< CELT Encoder state */
- CELTDecoder *dec; /**< CELT Decoder state */
- int32_t frame_size; /**< Frame size in [samples] */
- uint32_t bitrate; /**< Bit-rate in [bit/s] */
- uint32_t fsize; /**< PCM Frame size in bytes */
- uint32_t bytes_per_packet; /**< Encoded packet size in bytes */
- bool low_overhead; /**< Low-Overhead Mode */
- uint16_t bpfv[MAX_FRAMES]; /**< Bytes per Frame vector */
- uint16_t bpfn; /**< Number of 'Bytes per Frame' */
-};
-
-
-/* Configurable items: */
-static uint32_t celt_low_overhead = 0; /* can be 0 or 1 */
-static struct aucodec *celtv[2];
-
-
-static void celt_destructor(void *arg)
-{
- struct aucodec_st *st = arg;
-
- if (st->enc)
- celt_encoder_destroy(st->enc);
- if (st->dec)
- celt_decoder_destroy(st->dec);
-
- if (st->mode)
- celt_mode_destroy(st->mode);
-
- mem_deref(st->ac);
-}
-
-
-static void decode_param(const struct pl *name, const struct pl *val,
- void *arg)
-{
- struct aucodec_st *st = arg;
- int err;
-
- if (0 == pl_strcasecmp(name, "bitrate")) {
- st->bitrate = pl_u32(val) * 1000;
- }
- else if (0 == pl_strcasecmp(name, "frame-size")) {
- st->frame_size = pl_u32(val);
-
- if (st->frame_size & 0x1) {
- DEBUG_WARNING("frame-size is NOT even: %u\n",
- st->frame_size);
- }
- }
- else if (0 == pl_strcasecmp(name, "low-overhead")) {
- struct pl fs, bpfv;
- uint32_t i;
-
- st->low_overhead = true;
-
- err = re_regex(val->p, val->l, "[0-9]+/[0-9,]+", &fs, &bpfv);
- if (err)
- return;
-
- st->frame_size = pl_u32(&fs);
-
- for (i=0; i<ARRAY_SIZE(st->bpfv) && bpfv.l > 0; i++) {
- struct pl bpf, co;
-
- co.l = 0;
- if (re_regex(bpfv.p, bpfv.l, "[0-9]+[,]*", &bpf, &co))
- break;
-
- pl_advance(&bpfv, bpf.l + co.l);
-
- st->bpfv[i] = pl_u32(&bpf);
- }
- st->bpfn = i;
- }
- else {
- DEBUG_NOTICE("unknown param: %r = %r\n", name, val);
- }
-}
-
-
-static int decode_params(struct aucodec_st *st, const char *fmtp)
-{
- struct pl params;
-
- pl_set_str(&params, fmtp);
-
- fmt_param_apply(&params, decode_param, st);
-
- return 0;
-}
-
-
-static int alloc(struct aucodec_st **stp, struct aucodec *ac,
- struct aucodec_prm *encp, struct aucodec_prm *decp,
- const char *fmtp)
-{
- struct aucodec_st *st;
- const uint32_t srate = aucodec_srate(ac);
- const uint8_t ch = aucodec_ch(ac);
- int err = 0;
-
- (void)decp;
-
- st = mem_zalloc(sizeof(*st), celt_destructor);
- if (!st)
- return ENOMEM;
-
- st->ac = mem_ref(ac);
-
- st->bitrate = DEFAULT_BITRATE;
- st->low_overhead = celt_low_overhead;
-
- if (encp && encp->ptime) {
- st->frame_size = srate * ch * encp->ptime / 1000;
- DEBUG_NOTICE("calc ptime=%u ---> frame_size=%u\n",
- encp->ptime, st->frame_size);
- }
- else {
- st->frame_size = DEFAULT_FRAME_SIZE;
- }
-
- if (str_isset(fmtp))
- decode_params(st, fmtp);
-
- /* Common mode */
- st->mode = celt_mode_create(srate, st->frame_size, NULL);
- if (!st->mode) {
- DEBUG_WARNING("alloc: could not create CELT mode\n");
- err = EPROTO;
- goto out;
- }
-
-#ifdef CELT_GET_FRAME_SIZE
- celt_mode_info(st->mode, CELT_GET_FRAME_SIZE, &st->frame_size);
-#endif
-
- st->fsize = 2 * st->frame_size * ch;
- st->bytes_per_packet = (st->bitrate * st->frame_size / srate + 4)/8;
-
- DEBUG_NOTICE("alloc: frame_size=%u bitrate=%ubit/s fsize=%u"
- " bytes_per_packet=%u\n",
- st->frame_size, st->bitrate, st->fsize,
- st->bytes_per_packet);
-
- /* Encoder */
-#ifdef CELT_OLD_API
- st->enc = celt_encoder_create(st->mode, ch, NULL);
-#else
- st->enc = celt_encoder_create(srate, ch, NULL);
-#endif
- if (!st->enc) {
- DEBUG_WARNING("alloc: could not create CELT encoder\n");
- err = EPROTO;
- goto out;
- }
-
- /* Decoder */
-#ifdef CELT_OLD_API
- st->dec = celt_decoder_create(st->mode, ch, NULL);
-#else
- st->dec = celt_decoder_create(srate, ch, NULL);
-#endif
- if (!st->dec) {
- DEBUG_WARNING("alloc: could not create CELT decoder\n");
- err = EPROTO;
- goto out;
- }
-
- out:
- if (err)
- mem_deref(st);
- else
- *stp = st;
-
- return err;
-}
-
-
-static int encode_frame(struct aucodec_st *st, uint16_t *size, uint8_t *buf,
- struct mbuf *src)
-{
- int len;
-
- /* NOTE: PCM audio in signed 16-bit format (native endian) */
- len = celt_encode(st->enc, (short *)mbuf_buf(src), st->frame_size,
- buf, st->bytes_per_packet);
- if (len < 0) {
- DEBUG_WARNING("celt_encode: returned %d\n", len);
- return EINVAL;
- }
-
- DEBUG_INFO("encode: %u -> %d\n", mbuf_get_left(src), len);
-
- *size = len;
-
- mbuf_advance(src, st->fsize);
-
- return 0;
-}
-
-
-static int encode(struct aucodec_st *st, struct mbuf *dst, struct mbuf *src)
-{
- struct {
- uint8_t buf[1024];
- uint16_t len;
- } framev[MAX_FRAMES];
- uint32_t i;
- size_t n;
- int err = 0;
-
- n = src->end / st->fsize;
- if (n > MAX_FRAMES) {
- n = MAX_FRAMES;
- DEBUG_WARNING("number of frames truncated to %u\n", n);
- }
-
- DEBUG_INFO("enc: %u bytes into %u frames\n", src->end, n);
-
- if (n ==0) {
- DEBUG_WARNING("enc: short frame (%u < %u)\n",
- src->end, st->fsize);
- return EINVAL;
- }
-
- /* Encode all frames into temp buffer */
- for (i=0; i<n && !err; i++) {
- framev[i].len = sizeof(framev[i].buf);
- err = encode_frame(st, &framev[i].len, framev[i].buf, src);
- }
-
- if (!st->low_overhead) {
- /* Encode all length headers */
- for (i=0; i<n && !err; i++) {
- uint16_t len = framev[i].len;
-
- while (len >= 0xff) {
- err = mbuf_write_u8(dst, 0xff);
- len -= 0xff;
- }
- err = mbuf_write_u8(dst, len);
- }
- }
-
- /* Encode all frame buffers */
- for (i=0; i<n && !err; i++) {
- err = mbuf_write_mem(dst, framev[i].buf, framev[i].len);
- }
-
- return err;
-}
-
-
-static int decode_frame(struct aucodec_st *st, struct mbuf *dst,
- struct mbuf *src, uint16_t src_len)
-{
- int ret, err;
-
- if (mbuf_get_left(src) < src_len) {
- DEBUG_WARNING("dec: corrupt frame %u < %u\n",
- mbuf_get_left(src), src_len);
- return EPROTO;
- }
-
- /* Make sure there is enough space in the buffer */
- if (mbuf_get_space(dst) < st->fsize) {
- err = mbuf_resize(dst, dst->size + st->fsize);
- if (err)
- return err;
- }
-
- ret = celt_decode(st->dec, mbuf_buf(src), src_len,
- (short *)mbuf_buf(dst), st->frame_size);
- if (CELT_OK != ret) {
- DEBUG_WARNING("celt_decode: ret=%d\n", ret);
- }
-
- DEBUG_INFO("decode: %u -> %u\n", src_len, st->fsize);
-
- if (src)
- mbuf_advance(src, src_len);
-
- dst->end += st->fsize;
-
- return 0;
-}
-
-
-/* src=NULL means lost packet */
-static int decode(struct aucodec_st *st, struct mbuf *dst, struct mbuf *src)
-{
- uint16_t lengthv[MAX_FRAMES];
- uint16_t total_length = 0;
- uint32_t i, n;
- int err = 0;
-
- DEBUG_INFO("decode %u bytes\n", mbuf_get_left(src));
-
- if (st->low_overhead) {
- /* No length bytes */
- for (i=0; i<st->bpfn && !err; i++) {
- err = decode_frame(st, dst, src, st->bpfv[i]);
- }
- }
- else {
- bool done = false;
-
- /* Read the length bytes */
- for (i=0; i<ARRAY_SIZE(lengthv) && !done; i++) {
- uint8_t byte;
-
- if (mbuf_get_left(src) < 1)
- return EPROTO;
-
- /* Decode length */
- lengthv[i] = 0;
- do {
- byte = mbuf_read_u8(src);
- lengthv[i] += byte;
- }
- while (byte == 0xff);
-
- total_length += lengthv[i];
-
- if (total_length >= mbuf_get_left(src))
- done = true;
- }
- n = i;
- DEBUG_INFO("decoded %d frames\n", n);
-
- for (i=0; i<n && !err; i++) {
- err = decode_frame(st, dst, src, lengthv[i]);
- }
- }
-
- return err;
-}
-
-
-static int module_init(void)
-{
- int err;
-
- err = aucodec_register(&celtv[0], 0, "CELT", 48000, 1, NULL,
- alloc, encode, decode, NULL);
- err |= aucodec_register(&celtv[1], 0, "CELT", 32000, 1, NULL,
- alloc, encode, decode, NULL);
-
- return err;
-}
-
-
-static int module_close(void)
-{
- size_t i;
-
- for (i=0; i<ARRAY_SIZE(celtv); i++)
- celtv[i] = mem_deref(celtv[i]);
-
- return 0;
-}
-
-
-/** Module exports */
-EXPORT_SYM const struct mod_export DECL_EXPORTS(celt) = {
- "celt",
- "codec",
- module_init,
- module_close
-};
diff --git a/modules/celt/module.mk b/modules/celt/module.mk
deleted file mode 100644
index 47e6ea0..0000000
--- a/modules/celt/module.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# module.mk
-#
-# Copyright (C) 2010 Creytiv.com
-#
-
-MOD := celt
-$(MOD)_SRCS += celt.c
-$(MOD)_LFLAGS += `pkg-config --libs celt`
-
-include mk/mod.mk