From b627feec069578a0cf48d2ed26e00e05a222897f Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Wed, 28 Apr 2010 12:01:56 +0000 Subject: [PATCH] another mode for the AmAudioQueue where it doesn't own the entries in it git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1858 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- core/AmAdvancedAudio.cpp | 31 +++++++++++++++++++------------ core/AmAdvancedAudio.h | 3 +++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/core/AmAdvancedAudio.cpp b/core/AmAdvancedAudio.cpp index 5fa6c5b9..55495212 100644 --- a/core/AmAdvancedAudio.cpp +++ b/core/AmAdvancedAudio.cpp @@ -34,27 +34,34 @@ using std::set; /* AudioQueue */ AmAudioQueue::AmAudioQueue() - : AmAudio(new AmAudioSimpleFormat(CODEC_PCM16)) // we get and put in this (internal) fmt + : AmAudio(new AmAudioSimpleFormat(CODEC_PCM16)), // we get and put in this (internal) fmt + owning(true) { } AmAudioQueue::~AmAudioQueue() { - set deleted_audios; // don't delete them twice - for (std::list::iterator it = inputQueue.begin();it != inputQueue.end(); it++) { - if (deleted_audios.find(it->audio) == deleted_audios.end()) { - deleted_audios.insert(it->audio); - delete it->audio; + if (owning) { + set deleted_audios; // don't delete them twice + for (std::list::iterator it = inputQueue.begin();it != inputQueue.end(); it++) { + if (deleted_audios.find(it->audio) == deleted_audios.end()) { + deleted_audios.insert(it->audio); + delete it->audio; + } } - } - - for (std::list::iterator it = outputQueue.begin();it != outputQueue.end(); it++) { - if (deleted_audios.find(it->audio) == deleted_audios.end()) { - deleted_audios.insert(it->audio); - delete it->audio; + + for (std::list::iterator it = outputQueue.begin();it != outputQueue.end(); it++) { + if (deleted_audios.find(it->audio) == deleted_audios.end()) { + deleted_audios.insert(it->audio); + delete it->audio; + } } } } +void AmAudioQueue::setOwning(bool _owning) { + owning = _owning; +} + int AmAudioQueue::write(unsigned int user_ts, unsigned int size) { inputQueue_mut.lock(); unsigned int size_trav = size; diff --git a/core/AmAdvancedAudio.h b/core/AmAdvancedAudio.h index d97c6efd..d61c4136 100644 --- a/core/AmAdvancedAudio.h +++ b/core/AmAdvancedAudio.h @@ -63,6 +63,8 @@ class AmAudioQueue : public AmAudio { std::list inputQueue; AmMutex outputQueue_mut; std::list outputQueue; + + bool owning; public: AmAudioQueue(); ~AmAudioQueue(); @@ -79,6 +81,7 @@ class AmAudioQueue : public AmAudio { /** this removes the audio if it is in on of the queues and does not delete them */ int removeAudio(AmAudio* audio); + void setOwning(bool _owning); protected: int write(unsigned int user_ts, unsigned int size);