diff options
author | fuzzard <fuzzard@users.noreply.github.com> | 2023-02-27 13:41:11 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-27 13:41:11 +1000 |
commit | 7a12e5fea7ffc51c3f09778f1591d7d4985d9f3d (patch) | |
tree | 6ee51a7d27e141f2d541c8d4419bc98510bab7a1 | |
parent | 1807d48c3d91f76254a53d7fc18c666cd3d70321 (diff) | |
parent | fbb6b09c3b9b19009003fdff1ea4baa82a1850ff (diff) |
Merge pull request #22699 from lrusak/ae-smartptr
AudioEngine smart pointers
7 files changed, 25 insertions, 41 deletions
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp index 497591962d..bf668c57ca 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp @@ -1368,12 +1368,12 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt) (*it)->m_processingBuffers->Flush(); m_discardBufferPools.push_back((*it)->m_processingBuffers->GetResampleBuffers()); m_discardBufferPools.push_back((*it)->m_processingBuffers->GetAtempoBuffers()); - delete (*it)->m_processingBuffers; - (*it)->m_processingBuffers = nullptr; + (*it)->m_processingBuffers.reset(); } if (!(*it)->m_processingBuffers) { - (*it)->m_processingBuffers = new CActiveAEStreamBuffers((*it)->m_inputBuffers->m_format, outputFormat, m_settings.resampleQuality); + (*it)->m_processingBuffers = std::make_unique<CActiveAEStreamBuffers>( + (*it)->m_inputBuffers->m_format, outputFormat, m_settings.resampleQuality); (*it)->m_processingBuffers->ForceResampler((*it)->m_forceResampler); (*it)->m_processingBuffers->Create(MAX_CACHE_LEVEL*1000, false, m_settings.stereoupmix, m_settings.normalizelevels); @@ -1481,12 +1481,11 @@ CActiveAEStream* CActiveAE::CreateStream(MsgStreamNew *streamMsg) // create the stream CActiveAEStream *stream; stream = new CActiveAEStream(&streamMsg->format, m_streamIdGen++, this); - stream->m_streamPort = new CActiveAEDataProtocol("stream", - &stream->m_inMsgEvent, &m_outMsgEvent); + stream->m_streamPort = + std::make_unique<CActiveAEDataProtocol>("stream", &stream->m_inMsgEvent, &m_outMsgEvent); // create buffer pool stream->m_inputBuffers = NULL; // create in Configure when we know the sink format - stream->m_processingBuffers = NULL; // create in Configure when we know the sink format stream->m_fadingSamples = 0; stream->m_started = false; stream->m_resampleMode = 0; @@ -1529,10 +1528,8 @@ void CActiveAE::DiscardStream(CActiveAEStream *stream) m_discardBufferPools.push_back((*it)->m_processingBuffers->GetResampleBuffers()); m_discardBufferPools.push_back((*it)->m_processingBuffers->GetAtempoBuffers()); } - delete (*it)->m_processingBuffers; CLog::Log(LOGDEBUG, "CActiveAE::DiscardStream - audio stream deleted"); m_stats.RemoveStream((*it)->m_id); - delete (*it)->m_streamPort; delete (*it); it = m_streams.erase(it); } diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp index 7539a7d597..3ef7c5d52d 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp @@ -29,11 +29,6 @@ CSoundPacket::~CSoundPacket() CActiveAE::FreeSoundSample(data); } -CSampleBuffer::~CSampleBuffer() -{ - delete pkt; -} - CSampleBuffer* CSampleBuffer::Acquire() { refCount++; @@ -112,7 +107,7 @@ bool CActiveAEBufferPool::Create(unsigned int totaltime) { buffer = new CSampleBuffer(); buffer->pool = this; - buffer->pkt = new CSoundPacket(config, m_format.m_frames); + buffer->pkt = std::make_unique<CSoundPacket>(config, m_format.m_frames); m_allSamples.push_back(buffer); m_freeSamples.push_back(buffer); diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h index b8f041abf0..70e51bbd6f 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h @@ -46,10 +46,10 @@ class CSampleBuffer { public: CSampleBuffer() = default; - ~CSampleBuffer(); + ~CSampleBuffer() = default; CSampleBuffer *Acquire(); void Return(); - CSoundPacket *pkt = nullptr; + std::unique_ptr<CSoundPacket> pkt; CActiveAEBufferPool *pool = nullptr; int64_t timestamp; int pkt_start_offset = 0; diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp index 9c3d4ae65d..923655d222 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp @@ -38,6 +38,8 @@ CActiveAESink::CActiveAESink(CEvent *inMsgEvent) : m_streamNoise = true; } +CActiveAESink::~CActiveAESink() = default; + void CActiveAESink::Start() { if (!IsRunning()) @@ -62,11 +64,9 @@ void CActiveAESink::Dispose() m_sink.reset(); } - delete m_sampleOfSilence.pkt; - m_sampleOfSilence.pkt = nullptr; + m_sampleOfSilence.pkt.reset(); - delete m_packer; - m_packer = nullptr; + m_packer.reset(); CAESinkFactory::Cleanup(); } @@ -809,7 +809,7 @@ void CActiveAESink::OpenSink() m_needIecPack = NeedIECPacking(); if (m_needIecPack) { - m_packer = new CAEBitstreamPacker(); + m_packer = std::make_unique<CAEBitstreamPacker>(); m_requestedFormat.m_sampleRate = CAEBitstreamPacker::GetOutputRate(m_requestedFormat.m_streamInfo); m_requestedFormat.m_channelLayout = CAEBitstreamPacker::GetOutputChannelMap(m_requestedFormat.m_streamInfo); } @@ -889,8 +889,7 @@ void CActiveAESink::OpenSink() config.sample_rate = m_sinkFormat.m_sampleRate; // init sample of silence/noise - delete m_sampleOfSilence.pkt; - m_sampleOfSilence.pkt = new CSoundPacket(config, m_sinkFormat.m_frames); + m_sampleOfSilence.pkt = std::make_unique<CSoundPacket>(config, m_sinkFormat.m_frames); m_sampleOfSilence.pkt->nb_samples = m_sampleOfSilence.pkt->max_nb_samples; if (!passthrough) GenerateNoise(); diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h index c95c7fabb9..aab1c315dd 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h @@ -93,6 +93,8 @@ class CActiveAESink : private CThread { public: explicit CActiveAESink(CEvent *inMsgEvent); + ~CActiveAESink(); + void EnumerateSinkList(bool force, std::string driver); void EnumerateOutputDevices(AEDeviceList &devices, bool passthrough); void Start(); @@ -151,7 +153,7 @@ protected: CEngineStats *m_stats; float m_volume; int m_sinkLatency; - CAEBitstreamPacker *m_packer; + std::unique_ptr<CAEBitstreamPacker> m_packer; bool m_needIecPack{false}; bool m_streamNoise; }; diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp index 1b2d7f5854..bdf65d60ae 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp @@ -39,10 +39,8 @@ CActiveAEStream::CActiveAEStream(AEAudioFormat* format, unsigned int streamid, C m_streamIsBuffering = false; m_streamIsFlushed = false; m_streamSlave = NULL; - m_leftoverBuffer = new uint8_t[m_format.m_frameSize]; m_leftoverBytes = 0; m_forceResampler = false; - m_remapBuffer = NULL; m_streamResampleRatio = 1.0; m_streamResampleMode = 0; m_profile = 0; @@ -54,12 +52,6 @@ CActiveAEStream::CActiveAEStream(AEAudioFormat* format, unsigned int streamid, C m_clockSpeed = 1.0; } -CActiveAEStream::~CActiveAEStream() -{ - delete [] m_leftoverBuffer; - delete m_remapBuffer; -} - void CActiveAEStream::IncFreeBuffers() { std::unique_lock<CCriticalSection> lock(m_streamLock); @@ -160,7 +152,9 @@ void CActiveAEStream::InitRemapper() false); // extra sound packet, we can't resample to the same buffer - m_remapBuffer = new CSoundPacket(m_inputBuffers->m_allSamples[0]->pkt->config, m_inputBuffers->m_allSamples[0]->pkt->max_nb_samples); + m_remapBuffer = + std::make_unique<CSoundPacket>(m_inputBuffers->m_allSamples[0]->pkt->config, + m_inputBuffers->m_allSamples[0]->pkt->max_nb_samples); } } @@ -178,9 +172,7 @@ void CActiveAEStream::RemapBuffer() } // swap sound packets - CSoundPacket *tmp = m_currentBuffer->pkt; - m_currentBuffer->pkt = m_remapBuffer; - m_remapBuffer = tmp; + std::swap(m_currentBuffer->pkt, m_remapBuffer); } } diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h index a33a12b7fe..56b9e51f36 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.h @@ -133,7 +133,7 @@ protected: friend class CActiveAE; friend class CEngineStats; CActiveAEStream(AEAudioFormat *format, unsigned int streamid, CActiveAE *ae); - ~CActiveAEStream() override; + ~CActiveAEStream() override = default; void FadingFinished(); void IncFreeBuffers(); void DecFreeBuffers(); @@ -203,10 +203,9 @@ protected: IAEStream *m_streamSlave; CCriticalSection m_streamLock; CCriticalSection m_statsLock; - uint8_t *m_leftoverBuffer; int m_leftoverBytes; CSampleBuffer *m_currentBuffer; - CSoundPacket *m_remapBuffer; + std::unique_ptr<CSoundPacket> m_remapBuffer; std::unique_ptr<IAEResample> m_remapper; double m_lastPts; double m_lastPtsJump; @@ -214,9 +213,9 @@ protected: // only accessed by engine std::unique_ptr<CActiveAEBufferPool> m_inputBuffers; - CActiveAEStreamBuffers *m_processingBuffers; + std::unique_ptr<CActiveAEStreamBuffers> m_processingBuffers; std::deque<CSampleBuffer*> m_processingSamples; - CActiveAEDataProtocol *m_streamPort; + std::unique_ptr<CActiveAEDataProtocol> m_streamPort; CEvent m_inMsgEvent; bool m_drain; bool m_paused; |