summaryrefslogtreecommitdiff
path: root/src/opusencoder.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 11:53:40 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 11:53:40 +0200
commit808225629721c2f7d5c751edc60e5c6744be7886 (patch)
tree3d97fc3b7319b5f94e688a454de51b32321ebfd7 /src/opusencoder.cc
parent46d4e577bceb12c9463fdf4ef1d9a9a348f13543 (diff)
First (crashing) prototype.
Diffstat (limited to 'src/opusencoder.cc')
-rw-r--r--src/opusencoder.cc70
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;
}