From 7e22318a6e78be9dfc0528e11a57faa1af8e503c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 11 Oct 2019 17:08:40 +0200 Subject: [PATCH] [AFV] Ref T730, made OPUS decoder not copyable/assignable (avoid resource conflicts) --- src/blacksound/codecs/opusdecoder.cpp | 19 +++++++++---------- src/blacksound/codecs/opusdecoder.h | 10 +++++++--- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/blacksound/codecs/opusdecoder.cpp b/src/blacksound/codecs/opusdecoder.cpp index 4215f661b..4b686e16c 100644 --- a/src/blacksound/codecs/opusdecoder.cpp +++ b/src/blacksound/codecs/opusdecoder.cpp @@ -12,17 +12,15 @@ namespace BlackSound { namespace Codecs { - COpusDecoder::COpusDecoder(int sampleRate, int channels) : - m_sampleRate(sampleRate), - m_channels(channels) + COpusDecoder::COpusDecoder(int sampleRate, int channels) : m_channels(channels) { int error; - opusDecoder = opus_decoder_create(sampleRate, channels, &error); + m_opusDecoder = opus_decoder_create(sampleRate, channels, &error); } COpusDecoder::~COpusDecoder() { - opus_decoder_destroy(opusDecoder); + opus_decoder_destroy(m_opusDecoder); } int COpusDecoder::frameCount(int bufferSize) @@ -35,12 +33,12 @@ namespace BlackSound QVector COpusDecoder::decode(const QByteArray opusData, int dataLength, int *decodedLength) { - QVector decoded(maxDataBytes, 0); - int count = frameCount(maxDataBytes); + QVector decoded(MaxDataBytes, 0); + int count = frameCount(MaxDataBytes); - if (! opusData.isEmpty()) + if (!opusData.isEmpty()) { - *decodedLength = opus_decode(opusDecoder, reinterpret_cast(opusData.data()), dataLength, decoded.data(), count, 0); + *decodedLength = opus_decode(m_opusDecoder, reinterpret_cast(opusData.data()), dataLength, decoded.data(), count, 0); } decoded.resize(*decodedLength); return decoded; @@ -48,7 +46,8 @@ namespace BlackSound void COpusDecoder::resetState() { - opus_decoder_ctl(opusDecoder, OPUS_RESET_STATE); + if (!m_opusDecoder) { return; } + opus_decoder_ctl(m_opusDecoder, OPUS_RESET_STATE); } } // ns } // ns diff --git a/src/blacksound/codecs/opusdecoder.h b/src/blacksound/codecs/opusdecoder.h index bae7ab60f..9db72449a 100644 --- a/src/blacksound/codecs/opusdecoder.h +++ b/src/blacksound/codecs/opusdecoder.h @@ -30,6 +30,11 @@ namespace BlackSound //! Dtor ~COpusDecoder(); + //! Not copyable and assignable @{ + COpusDecoder(const COpusDecoder &decoder) = delete; + COpusDecoder& operator=(COpusDecoder const&) = delete; + //! @} + //! Frame count int frameCount(int bufferSize); @@ -40,11 +45,10 @@ namespace BlackSound void resetState(); private: - OpusDecoder *opusDecoder = nullptr; - int m_sampleRate; + OpusDecoder *m_opusDecoder = nullptr; int m_channels; - static constexpr int maxDataBytes = 4000; + static constexpr int MaxDataBytes = 4000; }; } // ns } // ns