Use condition variable to suspend audio processing thread
This commit is contained in:
parent
3fd40888aa
commit
87bb570e24
2 changed files with 13 additions and 1 deletions
|
|
@ -70,8 +70,10 @@ qint64 AudioProcessor::readData(char* data, qint64 maxlen)
|
||||||
|
|
||||||
qint64 AudioProcessor::writeData(const char* data, qint64 len)
|
qint64 AudioProcessor::writeData(const char* data, qint64 len)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lock(inputMutex_);
|
std::unique_lock<std::mutex> lock1(inputMutex_);
|
||||||
|
std::unique_lock<std::mutex> lock2(inputEventMutex_);
|
||||||
inputBuffer_.append(data, len);
|
inputBuffer_.append(data, len);
|
||||||
|
inputEvent_.notify_all();
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,6 +124,12 @@ void AudioProcessor::process()
|
||||||
emit readyRead();
|
emit readyRead();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
processLock.unlock();
|
||||||
|
std::unique_lock<std::mutex> lock(inputEventMutex_);
|
||||||
|
inputEvent_.wait(lock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
#include <QIODevice>
|
#include <QIODevice>
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
|
|
||||||
|
#include <condition_variable>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
|
@ -79,6 +80,9 @@ private:
|
||||||
std::thread worker_;
|
std::thread worker_;
|
||||||
bool doWork_ = false;
|
bool doWork_ = false;
|
||||||
|
|
||||||
|
std::condition_variable inputEvent_;
|
||||||
|
std::mutex inputEventMutex_;
|
||||||
|
|
||||||
QScopedPointer<WavFileWriter> sourceEncoder_;
|
QScopedPointer<WavFileWriter> sourceEncoder_;
|
||||||
QScopedPointer<WavFileWriter> processedEncoder_;
|
QScopedPointer<WavFileWriter> processedEncoder_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Reference in a new issue