diff options
author | Stéphane Lepin <stephane.lepin@gmail.com> | 2019-01-08 22:56:36 +0100 |
---|---|---|
committer | Stéphane Lepin <stephane.lepin@gmail.com> | 2019-01-08 22:56:36 +0100 |
commit | 175ee31376bf74de648b7d7acbe0fa17259ff227 (patch) | |
tree | 1932d5c15bfe9f283537792053676a518c2fdcc4 /src/encoder | |
parent | f776c48cac2a7d35a6ab5a99f483282688e2334a (diff) |
encoderopus: fix minor issues
Diffstat (limited to 'src/encoder')
-rw-r--r-- | src/encoder/encoderopus.cpp | 106 | ||||
-rw-r--r-- | src/encoder/encoderopus.h | 9 |
2 files changed, 57 insertions, 58 deletions
diff --git a/src/encoder/encoderopus.cpp b/src/encoder/encoderopus.cpp index cf67296dee..51a4e4ff38 100644 --- a/src/encoder/encoderopus.cpp +++ b/src/encoder/encoderopus.cpp @@ -25,11 +25,59 @@ namespace { // From libjitsi's Opus encoder: // 1 byte TOC + maximum frame size (1275) // See https://tools.ietf.org/html/rfc6716#section-3.2 -static const int kMaxOpusBufferSize = 1+1275; +constexpr int kMaxOpusBufferSize = 1+1275; // Opus frame duration in milliseconds. Fixed to 60ms -static const int kOpusFrameMs = 60; +constexpr int kOpusFrameMs = 60; + +constexpr int kOpusChannelCount = 2; const mixxx::Logger kLogger("EncoderOpus"); + +QString opusErrorString(int error) { + QString errorString = ""; + switch (error) { + case OPUS_OK: + errorString = "OPUS_OK"; + break; + case OPUS_BAD_ARG: + errorString = "OPUS_BAD_ARG"; + break; + case OPUS_BUFFER_TOO_SMALL: + errorString = "OPUS_BUFFER_TOO_SMALL"; + break; + case OPUS_INTERNAL_ERROR: + errorString = "OPUS_INTERNAL_ERROR"; + break; + case OPUS_INVALID_PACKET: + errorString = "OPUS_INVALID_PACKET"; + break; + case OPUS_UNIMPLEMENTED: + errorString = "OPUS_UNIMPLEMENTED"; + break; + case OPUS_INVALID_STATE: + errorString = "OPUS_INVALID_STATE"; + break; + case OPUS_ALLOC_FAIL: + errorString = "OPUS_ALLOC_FAIL"; + break; + default: + return "Unknown error"; + } + return errorString + (QString(" (%1)").arg(error)); +} + +int getSerial() { + static int prevSerial = 0; + + int serial; + do { + serial = qrand(); + } while(prevSerial == serial); + + prevSerial = serial; + kLogger.debug() << "RETURNING SERIAL " << serial; + return serial; +} } EncoderOpus::EncoderOpus(EncoderCallback* pCallback) @@ -39,8 +87,8 @@ EncoderOpus::EncoderOpus(EncoderCallback* pCallback) m_samplerate(0), m_readRequired(0), m_pCallback(pCallback), - m_fifoBuffer(EngineSideChain::SIDECHAIN_BUFFER_SIZE * 2), - m_pFifoChunkBuffer(nullptr), + m_fifoBuffer(EngineSideChain::SIDECHAIN_BUFFER_SIZE * kOpusChannelCount), + m_pFifoChunkBuffer(), m_pOpus(nullptr), m_opusDataBuffer(kMaxOpusBufferSize), m_header_write(false), @@ -65,7 +113,6 @@ EncoderOpus::~EncoderOpus() { } ogg_stream_clear(&m_oggStream); - delete m_pFifoChunkBuffer; } void EncoderOpus::setEncoderSettings(const EncoderSettings& settings) { @@ -134,7 +181,7 @@ int EncoderOpus::initEncoder(int samplerate, QString errorMessage) { double samplesPerChannel = kOpusFrameMs / samplingPeriodMs; m_readRequired = samplesPerChannel * m_channels; - m_pFifoChunkBuffer = new mixxx::SampleBuffer(m_readRequired); + m_pFifoChunkBuffer = std::make_unique<mixxx::SampleBuffer>(m_readRequired); initStream(); return 0; @@ -417,50 +464,3 @@ void EncoderOpus::flush() { // At this point there may still be samples in the FIFO buffer processFIFO(); } - -QString EncoderOpus::opusErrorString(int error) { - QString errorString = ""; - switch (error) { - case OPUS_OK: - errorString = "OPUS_OK"; - break; - case OPUS_BAD_ARG: - errorString = "OPUS_BAD_ARG"; - break; - case OPUS_BUFFER_TOO_SMALL: - errorString = "OPUS_BUFFER_TOO_SMALL"; - break; - case OPUS_INTERNAL_ERROR: - errorString = "OPUS_INTERNAL_ERROR"; - break; - case OPUS_INVALID_PACKET: - errorString = "OPUS_INVALID_PACKET"; - break; - case OPUS_UNIMPLEMENTED: - errorString = "OPUS_UNIMPLEMENTED"; - break; - case OPUS_INVALID_STATE: - errorString = "OPUS_INVALID_STATE"; - break; - case OPUS_ALLOC_FAIL: - errorString = "OPUS_ALLOC_FAIL"; - break; - default: - return "Unknown error"; - } - return errorString + (QString(" (%1)").arg(error)); -} - -int EncoderOpus::getSerial() { - static int prevSerial = 0; - - int serial; - do { - serial = qrand(); - } while(prevSerial == serial); - - prevSerial = serial; - kLogger.debug() << "RETURNING SERIAL " << serial; - return serial; -} - diff --git a/src/encoder/encoderopus.h b/src/encoder/encoderopus.h index 77c9b3c0b7..8c1e5a31e2 100644 --- a/src/encoder/encoderopus.h +++ b/src/encoder/encoderopus.h @@ -14,6 +14,7 @@ #include "encoder/encoder.h" #include "encoder/encodercallback.h" #include "util/fifo.h" +#include "util/memory.h" #include "util/sample.h" #include "util/samplebuffer.h" @@ -22,8 +23,8 @@ class EncoderOpus: public Encoder { static const int MASTER_SAMPLERATE; static const char* INVALID_SAMPLERATE_MESSAGE; - EncoderOpus(EncoderCallback* pCallback = nullptr); - virtual ~EncoderOpus(); + explicit EncoderOpus(EncoderCallback* pCallback = nullptr); + ~EncoderOpus() override; int initEncoder(int samplerate, QString errorMessage) override; void encodeBuffer(const CSAMPLE *samples, const int size) override; @@ -32,8 +33,6 @@ class EncoderOpus: public Encoder { void setEncoderSettings(const EncoderSettings& settings) override; private: - static QString opusErrorString(int error); - static int getSerial(); void initStream(); void pushHeaderPacket(); void pushTagsPacket(); @@ -47,7 +46,7 @@ class EncoderOpus: public Encoder { int m_readRequired; EncoderCallback* m_pCallback; FIFO<CSAMPLE> m_fifoBuffer; - mixxx::SampleBuffer* m_pFifoChunkBuffer; + std::unique_ptr<mixxx::SampleBuffer> m_pFifoChunkBuffer; OpusEncoder* m_pOpus; QVector<unsigned char> m_opusDataBuffer; ogg_stream_state m_oggStream; |