diff options
Diffstat (limited to 'modules/audio_device/linux/audio_device_pulse_linux.cc')
-rw-r--r-- | modules/audio_device/linux/audio_device_pulse_linux.cc | 55 |
1 files changed, 19 insertions, 36 deletions
diff --git a/modules/audio_device/linux/audio_device_pulse_linux.cc b/modules/audio_device/linux/audio_device_pulse_linux.cc index 3256a05803..7742420fc2 100644 --- a/modules/audio_device/linux/audio_device_pulse_linux.cc +++ b/modules/audio_device/linux/audio_device_pulse_linux.cc @@ -15,6 +15,7 @@ #include "modules/audio_device/linux/latebindingsymboltable_linux.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" +#include "rtc_base/platform_thread.h" WebRTCPulseSymbolTable* GetPulseSymbolTable() { static WebRTCPulseSymbolTable* pulse_symbol_table = @@ -158,18 +159,22 @@ AudioDeviceGeneric::InitStatus AudioDeviceLinuxPulse::Init() { #endif // RECORDING - _ptrThreadRec.reset(new rtc::PlatformThread(RecThreadFunc, this, - "webrtc_audio_module_rec_thread", - rtc::kRealtimePriority)); - - _ptrThreadRec->Start(); + const auto attributes = + rtc::ThreadAttributes().SetPriority(rtc::ThreadPriority::kRealtime); + _ptrThreadRec = rtc::PlatformThread::SpawnJoinable( + [this] { + while (RecThreadProcess()) { + } + }, + "webrtc_audio_module_rec_thread", attributes); // PLAYOUT - _ptrThreadPlay.reset(new rtc::PlatformThread( - PlayThreadFunc, this, "webrtc_audio_module_play_thread", - rtc::kRealtimePriority)); - _ptrThreadPlay->Start(); - + _ptrThreadPlay = rtc::PlatformThread::SpawnJoinable( + [this] { + while (PlayThreadProcess()) { + } + }, + "webrtc_audio_module_play_thread", attributes); _initialized = true; return InitStatus::OK; @@ -187,22 +192,12 @@ int32_t AudioDeviceLinuxPulse::Terminate() { _mixerManager.Close(); // RECORDING - if (_ptrThreadRec) { - rtc::PlatformThread* tmpThread = _ptrThreadRec.release(); - - _timeEventRec.Set(); - tmpThread->Stop(); - delete tmpThread; - } + _timeEventRec.Set(); + _ptrThreadRec.Finalize(); // PLAYOUT - if (_ptrThreadPlay) { - rtc::PlatformThread* tmpThread = _ptrThreadPlay.release(); - - _timeEventPlay.Set(); - tmpThread->Stop(); - delete tmpThread; - } + _timeEventPlay.Set(); + _ptrThreadPlay.Finalize(); // Terminate PulseAudio if (TerminatePulseAudio() < 0) { @@ -1981,18 +1976,6 @@ int32_t AudioDeviceLinuxPulse::ProcessRecordedData(int8_t* bufferData, return 0; } -void AudioDeviceLinuxPulse::PlayThreadFunc(void* pThis) { - AudioDeviceLinuxPulse* device = static_cast<AudioDeviceLinuxPulse*>(pThis); - while (device->PlayThreadProcess()) { - } -} - -void AudioDeviceLinuxPulse::RecThreadFunc(void* pThis) { - AudioDeviceLinuxPulse* device = static_cast<AudioDeviceLinuxPulse*>(pThis); - while (device->RecThreadProcess()) { - } -} - bool AudioDeviceLinuxPulse::PlayThreadProcess() { if (!_timeEventPlay.Wait(1000)) { return true; |