diff --git a/src/blackcore/voice_vatlib.cpp b/src/blackcore/voice_vatlib.cpp index e18a12dcb..71a09f35e 100644 --- a/src/blackcore/voice_vatlib.cpp +++ b/src/blackcore/voice_vatlib.cpp @@ -7,6 +7,8 @@ #include #include +#include + using namespace BlackMisc; using namespace BlackMisc::Audio; using namespace BlackMisc::Aviation; @@ -18,7 +20,7 @@ namespace BlackCore */ CVoiceVatlib::CVoiceVatlib(QObject *parent) : IVoice(parent), - m_voice(nullptr), + m_voice(Cvatlib_Voice_Simple::Create(), Cvatlib_Voice_Simple_Deleter::cleanup), // m_audioOutput(nullptr), // removed #227 m_inputSquelch(-1), m_micTestResult(Cvatlib_Voice_Simple::agc_Ok), @@ -34,14 +36,12 @@ namespace BlackCore m_lockTestResult(QReadWriteLock::Recursive), m_lockMyCallsign(QReadWriteLock::Recursive), m_lockConnectionStatus(QReadWriteLock::Recursive), - m_mutexVatlib(QMutex::Recursive) { try { // we use reset here until issue #277 is resolved // easier to find root cause // m_audioOutput.reset(new QAudioOutput()); - m_voice.reset(Cvatlib_Voice_Simple::Create()); m_voice->Setup(true, 3290, 2, 1, onRoomStatusUpdate, this); m_voice->GetInputDevices(onInputHardwareDeviceReceived, this); m_voice->GetOutputDevices(onOutputHardwareDeviceReceived, this); @@ -120,7 +120,7 @@ namespace BlackCore */ void CVoiceVatlib::setInputDevice(const BlackMisc::Audio::CAudioDevice &device) { - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); if (!device.isValid()) { @@ -152,7 +152,7 @@ namespace BlackCore */ void CVoiceVatlib::setOutputDevice(const BlackMisc::Audio::CAudioDevice &device) { - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); if (!device.isValid()) { @@ -237,7 +237,7 @@ namespace BlackCore if (enable == m_isAudioLoopbackEnabled) return; - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); try { @@ -257,7 +257,7 @@ namespace BlackCore */ void CVoiceVatlib::runSquelchTest() { - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); try @@ -278,7 +278,7 @@ namespace BlackCore */ void CVoiceVatlib::runMicrophoneTest() { - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); try @@ -549,7 +549,7 @@ namespace BlackCore */ void CVoiceVatlib::timerEvent(QTimerEvent *) { - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); try @@ -567,7 +567,7 @@ namespace BlackCore */ void CVoiceVatlib::onEndFindSquelch() { - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); try @@ -585,7 +585,7 @@ namespace BlackCore void CVoiceVatlib::onEndMicTest() { - QMutexLocker lockerVatlib(&m_mutexVatlib); + std::lock_guard locker(m_voice); Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!"); try diff --git a/src/blackcore/voice_vatlib.h b/src/blackcore/voice_vatlib.h index 230e39fb7..9fa2cde73 100644 --- a/src/blackcore/voice_vatlib.h +++ b/src/blackcore/voice_vatlib.h @@ -11,13 +11,14 @@ #include "../blackmisc/audiodevicelist.h" #include "../blackmisc/nwuserlist.h" #include "../blackmisc/avcallsignlist.h" +#include "../blackmisc/sharedlockablepointer.h" -#include #include #include #include #include #include +#include #ifdef Q_OS_WIN #ifndef NOMINMAX @@ -26,8 +27,28 @@ #include #endif +//! \file + namespace BlackCore { + /*! + * \brief Deleter + */ + struct Cvatlib_Voice_Simple_Deleter + { + /*! + * \brief Cleanup + * \param pointer + */ + static inline void cleanup(Cvatlib_Voice_Simple *pointer) + { + if (pointer) pointer->Destroy(); + } + }; + + //! Shared lockable pointer to Cvatlib_Voice_Simple + typedef BlackMisc::SharedLockablePtr TVatlibPointer; + /*! * Vatlib implementation of the IVoice interface. */ @@ -210,22 +231,7 @@ namespace BlackCore void enableAudio(const ComUnit comUnit); void changeConnectionStatus(ComUnit comUnit, ConnectionStatus newStatus); - /*! - * \brief Deleter - */ - struct Cvatlib_Voice_Simple_Deleter - { - /*! - * \brief Cleanup - * \param pointer - */ - static inline void cleanup(Cvatlib_Voice_Simple *pointer) - { - if (pointer) pointer->Destroy(); - } - }; - - QScopedPointer m_voice; + TVatlibPointer m_voice; // QScopedPointer m_audioOutput; #227 BlackMisc::Aviation::CCallsign m_aircraftCallsign; /*!< own callsign to join voice rooms */ BlackMisc::Audio::CVoiceRoomList m_voiceRooms; @@ -257,7 +263,6 @@ namespace BlackCore mutable QReadWriteLock m_lockTestResult; mutable QReadWriteLock m_lockMyCallsign; mutable QReadWriteLock m_lockConnectionStatus; - mutable QMutex m_mutexVatlib; };