diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2014-09-20 11:53:40 +0200 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2014-09-20 11:53:40 +0200 | 
| commit | 808225629721c2f7d5c751edc60e5c6744be7886 (patch) | |
| tree | 3d97fc3b7319b5f94e688a454de51b32321ebfd7 /src/opusencoder.cc | |
| parent | 46d4e577bceb12c9463fdf4ef1d9a9a348f13543 (diff) | |
First (crashing) prototype.
Diffstat (limited to 'src/opusencoder.cc')
| -rw-r--r-- | src/opusencoder.cc | 70 | 
1 files changed, 16 insertions, 54 deletions
diff --git a/src/opusencoder.cc b/src/opusencoder.cc index 77ea0d1..b5c343a 100644 --- a/src/opusencoder.cc +++ b/src/opusencoder.cc @@ -27,98 +27,62 @@  #include "opusencoder.h"  #include <string.h> -#include <opus/opus.h>  #include <stdio.h> -#include "samplecache.h" -  #define OPUS_BITRATE 64000 -struct opus_encoder_private_t { -  OpusEncoder *ce; -  SampleCache *cache; -}; -  OpusEncoder::OpusEncoder() + : cache(5760 * 10)  { -  prv = new struct opus_encoder_private_t; - -  prv->cache = new SampleCache(5760 * 10); -    int error = 0; - -  samplerate_t srate = opus_samplerate(); - -  prv->ce = -    opus_encoder_create(srate, 1/*channels()*/, OPUS_APPLICATION_AUDIO, &error); -  if(!prv->ce || error != OPUS_OK) { -    printf("srate: %d, ch: %d, Error: %d\n", srate, 1/*channels()*/, error); -    //throw InitException(); +  encoder = +    opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, &error); +  if(!encoder || error != OPUS_OK) { +    printf("opus_encoder_create: %d\n", error);    }    // 500 to 512000 -  opus_encoder_ctl(prv->ce, OPUS_SET_BITRATE(OPUS_BITRATE/*bitrate()*/)); +  opus_encoder_ctl(encoder, OPUS_SET_BITRATE(OPUS_BITRATE));    // [0-10] with 10 representing the highest complexity. -  opus_encoder_ctl(prv->ce, OPUS_SET_COMPLEXITY(10)); - -  /* -  printf("Encoder(fs: %d, ch: %d, bitrate: %d)\n", srate, channels(), -         bitrate()); -  */ +  opus_encoder_ctl(encoder, OPUS_SET_COMPLEXITY(10));  }  OpusEncoder::~OpusEncoder()  { -  if(prv) { -    if(prv->ce) opus_encoder_destroy(prv->ce); -    if(prv->cache) delete prv->cache; -    delete prv; -  } +  if(encoder) opus_encoder_destroy(encoder);  }  unsigned int OpusEncoder::framesize()  { -  return opus_samplerate() / 1000 * OPUS_FRAME_SIZE; // 10ms audio data -} - -samplerate_t OpusEncoder::opus_samplerate() -{ -  return 48000; +  return 48000 / 1000 * OPUS_FRAME_SIZE; // 10ms audio data  }  framelist_t OpusEncoder::encode(const char *pcm, size_t size)  {    framelist_t list; -  //  printf("PCM size: %d\n", size); - -  samplerate_t srate = opus_samplerate(); - -  if(prv->ce == NULL) { +  if(encoder == NULL) {      //throw InitException(); -    printf("prv->ce == NULL\n"); +    printf("encoder == NULL\n");    } -  size_t bytes_per_packet = ((OPUS_BITRATE/*bitrate()*/ *framesize())/srate+4)/8; +  size_t bytes_per_packet = ((OPUS_BITRATE *framesize())/48000+4)/8; -  prv->cache->addSamples((short*)pcm, size / sizeof(short)); +  cache.addSamples((short*)pcm, size / sizeof(short));    //size_t p = 0;    opus_int16 *samples = new opus_int16[framesize()]; -  while(prv->cache->cacheSize() >= framesize()) { -    size_t sz = prv->cache->getSamples(samples, framesize()); +  while(cache.cacheSize() >= framesize()) { +    size_t sz = cache.getSamples(samples, framesize());      Frame *frame = new Frame(bytes_per_packet); -    int n = opus_encode(prv->ce, samples, sz / 1/*channels()*//*sizeof(short)*/, +    int n = opus_encode(encoder, samples, sz / 1,                          (unsigned char *)frame->data, (opus_int32)frame->size); -    //printf("Compressed to %d\n", n); -      if(n < 0) {        printf("n < 0\n"); -      //throw EncodingException();      }      frame->size = n; @@ -127,7 +91,5 @@ framelist_t OpusEncoder::encode(const char *pcm, size_t size)    }    delete[] samples; -  //printf("%d frames in list\n", list.size()); -    return list;  }  | 
