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
sayer/1.4-spce2.6
Stefan Sayer 17 years ago
parent 7da9be991b
commit b627feec06

@ -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<AmAudio*> deleted_audios; // don't delete them twice
for (std::list<AudioQueueEntry>::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<AmAudio*> deleted_audios; // don't delete them twice
for (std::list<AudioQueueEntry>::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<AudioQueueEntry>::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<AudioQueueEntry>::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;

@ -63,6 +63,8 @@ class AmAudioQueue : public AmAudio {
std::list<AudioQueueEntry> inputQueue;
AmMutex outputQueue_mut;
std::list<AudioQueueEntry> 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);

Loading…
Cancel
Save