From ffd34c56a7091e7dd9bc5680ad718a4e1a263740 Mon Sep 17 00:00:00 2001 From: Seungbae Shin Date: Mon, 3 Jun 2019 15:01:51 +0900 Subject: [PATCH] Revise cpp codes - remove {} for single statement. - use noexcept keyword for non-throw methods. - use override keyword for overrided function. - remove unused methods. - use default keyword for empty destructors. - use explict keyword on single argument class constructor to prevent auto conversion. - use nullptr instead of NULL if possible. - use ! operator instead of comparing with false. - use auto when initializing with a cast to avoid duplicating the type name. - remove explict end return of void functions. [Version] 0.5.19 [Issue Type] Refactoring Change-Id: I5118a6ff5e85f9d9e02c7875b2cbe691652ef064 --- include/CAudioError.h | 6 +- include/CAudioIO.h | 11 +- include/CAudioInfo.h | 17 ++- include/CAudioInput.h | 35 ++--- include/CAudioOutput.h | 35 ++--- include/CPulseAudioClient.h | 10 +- include/CPulseStreamSpec.h | 17 +-- packaging/capi-media-audio-io.spec | 2 +- src/cpp/CAudioError.cpp | 13 +- src/cpp/CAudioIO.cpp | 116 +++++++------- src/cpp/CAudioInfo.cpp | 37 ++--- src/cpp/CAudioInput.cpp | 78 ++++------ src/cpp/CAudioOutput.cpp | 61 +++----- src/cpp/CPulseAudioClient.cpp | 300 ++++++++++++++----------------------- src/cpp/CPulseStreamSpec.cpp | 30 ++-- src/cpp/cpp_audio_in_privilege.cpp | 8 +- src/cpp/cpp_audio_io.cpp | 291 +++++++++++++++++------------------ 17 files changed, 448 insertions(+), 619 deletions(-) diff --git a/include/CAudioError.h b/include/CAudioError.h index a18d0b0..c066e87 100644 --- a/include/CAudioError.h +++ b/include/CAudioError.h @@ -67,11 +67,11 @@ namespace tizen_media_audio { static const unsigned int MSG_LENGTH = 512; /* Constructor & Destructor */ - CAudioError(EError err); + explicit CAudioError(EError err); CAudioError(EError err, const char* fileName, const char* parentFunc, int lineNum); CAudioError(EError err, const char* msg, const char* fileName, const char* parentFunc, int lineNum); CAudioError(const CAudioError& err); - ~CAudioError(); + virtual ~CAudioError() = default; /* Static Methods */ static EError getLastError(); @@ -95,7 +95,7 @@ namespace tizen_media_audio { static EError __mLastError; static char __mLastErrorMsg[MSG_LENGTH]; EError __mError; - char __mErrorMsg[MSG_LENGTH]; + char __mErrorMsg[MSG_LENGTH]{}; }; diff --git a/include/CAudioIO.h b/include/CAudioIO.h index 3068709..078795d 100644 --- a/include/CAudioIO.h +++ b/include/CAudioIO.h @@ -36,7 +36,7 @@ namespace tizen_media_audio { void* mUserData; void (*onStream)(size_t nbytes, void* user_data); - SStreamCallback() : mUserData(NULL), onStream(NULL) + SStreamCallback() : mUserData(nullptr), onStream(nullptr) { /* Empty Body */ } }; @@ -44,14 +44,14 @@ namespace tizen_media_audio { void* mUserData; void (*onStateChanged)(CAudioInfo::EAudioIOState state, CAudioInfo::EAudioIOState statePrev, bool byPolicy, void* user_data); - SStateChangedCallback() : mUserData(NULL), onStateChanged(NULL) + SStateChangedCallback() : mUserData(nullptr), onStateChanged(nullptr) { /* Empty Body */ } }; /* Constructor & Destructor */ CAudioIO(); - CAudioIO(CAudioInfo& audioInfo); - virtual ~CAudioIO(); + explicit CAudioIO(CAudioInfo& audioInfo); + virtual ~CAudioIO() = default; /* Pure Virtual Methods */ virtual void initialize() = 0; @@ -63,6 +63,7 @@ namespace tizen_media_audio { virtual void pause() = 0; virtual void resume() = 0; + /* FIXME : drain needed to be moved to sub-class */ virtual void drain(); virtual void flush() = 0; @@ -84,7 +85,7 @@ namespace tizen_media_audio { void setStreamInfo(sound_stream_info_h stream_info); - CAudioInfo::EAudioIOState getState(); + CAudioInfo::EAudioIOState getState() noexcept; protected: /* Protected Methods */ diff --git a/include/CAudioInfo.h b/include/CAudioInfo.h index 39b051b..3ccc58f 100644 --- a/include/CAudioInfo.h +++ b/include/CAudioInfo.h @@ -117,19 +117,20 @@ namespace tizen_media_audio { /* Constructors */ CAudioInfo(); CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex); + virtual ~CAudioInfo() = default; /* Setter & Getter */ - unsigned int getSampleRate(); - EChannel getChannel(); - ESampleType getSampleType(); - EAudioType getAudioType(); - void setAudioType(EAudioType audioType); - int getAudioIndex(); - void setAudioIndex(int audioIndex); + unsigned int getSampleRate() noexcept; + EChannel getChannel() noexcept; + ESampleType getSampleType() noexcept; + EAudioType getAudioType() noexcept; + void setAudioType(EAudioType audioType) noexcept; + int getAudioIndex() noexcept; + void setAudioIndex(int audioIndex) noexcept; void convertAudioType2StreamType(CAudioInfo::EAudioType audioType, char **streamType); void convertInputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType); void convertOutputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType); - int getSampleSize(); + int getSampleSize() noexcept; private: const char *__STREAM_TYPE_TABLE[(unsigned int)EAudioType::AUDIO_TYPE_MAX] = { diff --git a/include/CAudioInput.h b/include/CAudioInput.h index 9e64b62..a27bf18 100644 --- a/include/CAudioInput.h +++ b/include/CAudioInput.h @@ -30,33 +30,28 @@ namespace tizen_media_audio { class CAudioInput : public CAudioIO { public: /* Constructor & Destructor */ - CAudioInput(CAudioInfo& info); - CAudioInput( - unsigned int sampleRate, - CAudioInfo::EChannel channel, - CAudioInfo::ESampleType sampleType, - CAudioInfo::EAudioType audioType); - ~CAudioInput(); + explicit CAudioInput(CAudioInfo& info); + ~CAudioInput() = default; /* Overridden Handler */ - virtual void onStream(CPulseAudioClient* pClient, size_t length); + void onStream(CPulseAudioClient* pClient, size_t length) override; /* Implemented Methods */ - virtual void initialize(); - virtual void finalize(); + void initialize() override; + void finalize() override; - virtual void prepare(); - virtual void unprepare(); + void prepare() override; + void unprepare() override; - virtual void pause(); - virtual void resume(); + void pause() override; + void resume() override; - virtual void flush(); + void flush() override; - virtual int getBufferSize(); + int getBufferSize() override; /* Overridden Methods */ - virtual void setStreamCallback(SStreamCallback callback); + void setStreamCallback(SStreamCallback callback) override; /* Methods */ size_t read(void* buffer, size_t length); @@ -65,9 +60,9 @@ namespace tizen_media_audio { private: /* Private Methods */ - void __setInit(bool flag); - bool __IsInit(); - bool __IsReady(); + void __setInit(bool flag) noexcept; + bool __IsInit() noexcept; + bool __IsReady() noexcept; bool __mIsUsedSyncRead; bool __mIsInit; diff --git a/include/CAudioOutput.h b/include/CAudioOutput.h index 1378653..8e57ef5 100644 --- a/include/CAudioOutput.h +++ b/include/CAudioOutput.h @@ -32,40 +32,35 @@ namespace tizen_media_audio { class CAudioOutput : public CAudioIO { public: /* Constructor & Destructor */ - CAudioOutput(CAudioInfo& info); - CAudioOutput( - unsigned int smapleRate, - CAudioInfo::EChannel channel, - CAudioInfo::ESampleType sampleType, - CAudioInfo::EAudioType type); - ~CAudioOutput(); + explicit CAudioOutput(CAudioInfo& info); + ~CAudioOutput() = default; /* Overridden Handler */ - virtual void onStream(CPulseAudioClient* pClient, size_t length); + void onStream(CPulseAudioClient* pClient, size_t length) override; /* Implemented Methods */ - virtual void initialize(); - virtual void finalize(); + void initialize() override; + void finalize() override; - virtual void prepare(); - virtual void unprepare(); + void prepare() override; + void unprepare() override; - virtual void pause(); - virtual void resume(); + void pause() override; + void resume() override; - virtual void drain(); - virtual void flush(); + void drain() override; + void flush() override; - virtual int getBufferSize(); + int getBufferSize() override; /* Methods */ size_t write(const void* buffer, size_t length); private: /* Private Methods */ - void __setInit(bool flag); - bool __IsInit(); - bool __IsReady(); + void __setInit(bool flag) noexcept; + bool __IsInit() noexcept; + bool __IsReady() noexcept; bool __mIsUsedSyncWrite; bool __mIsInit; diff --git a/include/CPulseAudioClient.h b/include/CPulseAudioClient.h index 13b4a1a..4eb774f 100644 --- a/include/CPulseAudioClient.h +++ b/include/CPulseAudioClient.h @@ -30,8 +30,6 @@ namespace tizen_media_audio { /** * PULSE Thread */ - class CPulseAudioVolume; - class CPulseAudioPolicy; class CPulseStreamSpec; class CPulseAudioClient { public: @@ -66,7 +64,7 @@ namespace tizen_media_audio { bool flush(); void checkRunningState(); - bool isInThread(); + bool isInThread() noexcept; size_t getWritableSize(); size_t getReadableSize(); @@ -76,10 +74,6 @@ namespace tizen_media_audio { pa_usec_t getLatency(); pa_usec_t getFinalLatency(); - /* Setter & Getter */ - EStreamDirection getStreamDirection(); - CPulseStreamSpec getStreamSpec(); - private: /* Members */ EStreamDirection __mDirection; @@ -108,8 +102,6 @@ namespace tizen_media_audio { /* Private Calblack Method */ static void __contextStateChangeCb(pa_context* c, void* user_data); - static void __successContextCb(pa_context* c, int success, void* user_data); - static void __streamStateChangeCb(pa_stream* s, void* user_data); static void __streamCaptureCb(pa_stream* s, size_t length, void* user_data); static void __streamPlaybackCb(pa_stream* s, size_t length, void* user_data); diff --git a/include/CPulseStreamSpec.h b/include/CPulseStreamSpec.h index 416884f..44ffe29 100644 --- a/include/CPulseStreamSpec.h +++ b/include/CPulseStreamSpec.h @@ -51,20 +51,19 @@ namespace tizen_media_audio { /* Constructor & Destructor */ CPulseStreamSpec(); CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo); - CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency); - ~CPulseStreamSpec(); + ~CPulseStreamSpec() = default; /* Setter & Getter */ - EStreamLatency getStreamLatency(); - const char* getStreamLatencyToString(); - CAudioInfo& getAudioInfo(); - pa_sample_spec getSampleSpec(); - pa_channel_map getChannelMap(); - const char* getStreamName(); + EStreamLatency getStreamLatency() noexcept; + const char* getStreamLatencyToString() noexcept; + CAudioInfo& getAudioInfo() noexcept; + pa_sample_spec getSampleSpec() noexcept; + pa_channel_map getChannelMap() noexcept; + const char* getStreamName() noexcept; private: /* Private Methods */ - void __adjustSpec(); + void __adjustSpec() noexcept; /* Members */ EStreamLatency __mLatency; diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index 54dc740..1a1f80a 100644 --- a/packaging/capi-media-audio-io.spec +++ b/packaging/capi-media-audio-io.spec @@ -1,6 +1,6 @@ Name: capi-media-audio-io Summary: An Audio Input & Audio Output library in Tizen Native API -Version: 0.5.18 +Version: 0.5.19 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CAudioError.cpp b/src/cpp/CAudioError.cpp index 655c34f..f0b8d1a 100644 --- a/src/cpp/CAudioError.cpp +++ b/src/cpp/CAudioError.cpp @@ -28,7 +28,7 @@ using namespace tizen_media_audio; * class CAudioError */ CAudioError::EError CAudioError::__mLastError = CAudioError::EError::ERROR_NONE; -char CAudioError::__mLastErrorMsg[CAudioError::MSG_LENGTH]; +char CAudioError::__mLastErrorMsg[MSG_LENGTH]; //LCOV_EXCL_START CAudioError::CAudioError(EError err) : @@ -45,12 +45,12 @@ CAudioError::CAudioError(EError err, const char* fileName, const char* parentFun findFileName++; const char* errStr = __convertErrorToString(__mError); - snprintf(__mErrorMsg, CAudioError::MSG_LENGTH, "[" + snprintf(__mErrorMsg, MSG_LENGTH, "[" COLOR_RED "THROW" COLOR_END ":%s|" COLOR_YELLOW "ERR" COLOR_END ":%s|" COLOR_YELLOW "FUNC" COLOR_END ":%s(%d)]", findFileName, errStr, parentFunc, lineNum); - snprintf(__mLastErrorMsg, CAudioError::MSG_LENGTH, "LastError:%s", __mErrorMsg); + snprintf(__mLastErrorMsg, MSG_LENGTH, "LastError:%s", __mErrorMsg); } //LCOV_EXCL_STOP @@ -63,14 +63,14 @@ CAudioError::CAudioError(EError err, const char* msg, const char* fileName, cons findFileName++; const char* errStr = __convertErrorToString(__mError); - snprintf(__mErrorMsg, CAudioError::MSG_LENGTH, "[" + snprintf(__mErrorMsg, MSG_LENGTH, "[" COLOR_RED "THROW" COLOR_END ":%s|" COLOR_YELLOW "ERR" COLOR_END ":%s|" COLOR_YELLOW "FUNC" COLOR_END ":%s(%d)]" COLOR_YELLOW "MSG" COLOR_END ":" COLOR_CYAN "%s" COLOR_END, findFileName, errStr, parentFunc, lineNum, msg); - snprintf(__mLastErrorMsg, CAudioError::MSG_LENGTH, "LastError:%s", __mErrorMsg); + snprintf(__mLastErrorMsg, MSG_LENGTH, "LastError:%s", __mErrorMsg); } //LCOV_EXCL_START @@ -80,9 +80,6 @@ CAudioError::CAudioError(const CAudioError& err) { } //LCOV_EXCL_STOP -CAudioError::~CAudioError() { -} - const char* CAudioError::__convertErrorToString(EError err) { switch (err) { default: diff --git a/src/cpp/CAudioIO.cpp b/src/cpp/CAudioIO.cpp index 2e236ef..55d4d87 100644 --- a/src/cpp/CAudioIO.cpp +++ b/src/cpp/CAudioIO.cpp @@ -29,7 +29,7 @@ using namespace tizen_media_audio; */ //LCOV_EXCL_START CAudioIO::CAudioIO() : - mpPulseAudioClient(NULL), + mpPulseAudioClient(nullptr), __mMutex(PTHREAD_MUTEX_INITIALIZER), __mCondMutex(PTHREAD_MUTEX_INITIALIZER), __mCond(PTHREAD_COND_INITIALIZER), @@ -42,7 +42,7 @@ CAudioIO::CAudioIO() : //LCOV_EXCL_STOP CAudioIO::CAudioIO(CAudioInfo& audioInfo) : - mpPulseAudioClient(NULL), + mpPulseAudioClient(nullptr), __mMutex(PTHREAD_MUTEX_INITIALIZER), __mCondMutex(PTHREAD_MUTEX_INITIALIZER), __mCond(PTHREAD_COND_INITIALIZER), @@ -54,9 +54,6 @@ CAudioIO::CAudioIO(CAudioInfo& audioInfo) : mByPolicy = false; } -CAudioIO::~CAudioIO() { -} - void CAudioIO::setInit(bool flag) { __mIsInit = flag; } @@ -67,11 +64,11 @@ bool CAudioIO::isInit() { bool CAudioIO::IsReady() { return ((mState == CAudioInfo::EAudioIOState::AUDIO_IO_STATE_RUNNING || - mState == CAudioInfo::EAudioIOState::AUDIO_IO_STATE_PAUSED)? true : false); + mState == CAudioInfo::EAudioIOState::AUDIO_IO_STATE_PAUSED)); } void CAudioIO::internalLock() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); if (pthread_mutex_lock(&__mMutex) != 0) @@ -83,7 +80,7 @@ void CAudioIO::internalLock() { } void CAudioIO::internalUnlock() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); if (pthread_mutex_unlock(&__mMutex) != 0) @@ -95,7 +92,7 @@ void CAudioIO::internalUnlock() { } void CAudioIO::internalWait() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); #ifdef _AUDIO_IO_DEBUG_TIMING_ @@ -108,7 +105,7 @@ void CAudioIO::internalWait() { } void CAudioIO::internalSignal() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); #ifdef _AUDIO_IO_DEBUG_TIMING_ @@ -121,7 +118,7 @@ void CAudioIO::internalSignal() { } void CAudioIO::initialize() { - if (__mIsInit == true) + if (__mIsInit) return; AUDIO_IO_LOGD("initialize"); @@ -138,7 +135,7 @@ void CAudioIO::initialize() { } void CAudioIO::finalize() { - if (__mIsInit == false) + if (!__mIsInit) return; AUDIO_IO_LOGD("finalize"); @@ -175,20 +172,20 @@ void CAudioIO::finalize() { } void CAudioIO::onStream(CPulseAudioClient* pClient, size_t length) { - assert(__mIsInit == true); - assert(pClient != NULL); + assert(__mIsInit); + assert(pClient); assert(length > 0); #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("mStreamCallback.onStream(%p), pClient(%p), length(%zu)", mStreamCallback.onStream, pClient, length); #endif - if (mStreamCallback.onStream != NULL) + if (mStreamCallback.onStream) mStreamCallback.onStream(length, mStreamCallback.mUserData); } void CAudioIO::onStateChanged(CAudioInfo::EAudioIOState state, bool byPolicy) { - assert(__mIsInit == true); + assert(__mIsInit); assert(state >= CAudioInfo::EAudioIOState::AUDIO_IO_STATE_NONE && state < CAudioInfo::EAudioIOState::AUDIO_IO_STATE_MAX); mStatePrev = mState; @@ -198,7 +195,7 @@ void CAudioIO::onStateChanged(CAudioInfo::EAudioIOState state, bool byPolicy) { if (mState == mStatePrev) return; - const char* state_string[] = { "NONE", "IDLE", "RUNNING", "PAUSED" }; + static const char* state_string[] = { "NONE", "IDLE", "RUNNING", "PAUSED" }; AUDIO_IO_LOGD("previous(%s,%d) ===> current(%s,%d), by_policy(%d)", state_string[static_cast(mStatePrev)], @@ -207,7 +204,7 @@ void CAudioIO::onStateChanged(CAudioInfo::EAudioIOState state, bool byPolicy) { static_cast(mState), mByPolicy); - if (mStateChangedCallback.onStateChanged != NULL) + if (mStateChangedCallback.onStateChanged) mStateChangedCallback.onStateChanged(mState, mStatePrev, mByPolicy, mStateChangedCallback.mUserData); } @@ -215,22 +212,22 @@ void CAudioIO::onStateChanged(CAudioInfo::EAudioIOState state) { onStateChanged(state, false); } -CAudioInfo::EAudioIOState CAudioIO::getState() { +CAudioInfo::EAudioIOState CAudioIO::getState() noexcept { return mState; } void CAudioIO::prepare() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); } void CAudioIO::unprepare() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); } void CAudioIO::pause() { - if (__mIsInit == false || IsReady() == false) + if (!__mIsInit || !IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioIO"); try { @@ -245,7 +242,7 @@ void CAudioIO::pause() { } void CAudioIO::resume() { - if (__mIsInit == false || IsReady() == false) + if (!__mIsInit || !IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioIO"); try { @@ -260,7 +257,7 @@ void CAudioIO::resume() { } void CAudioIO::drain() { - if (__mIsInit == false || IsReady() == false) + if (!__mIsInit || !IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioIO"); try { @@ -279,7 +276,7 @@ void CAudioIO::drain() { } void CAudioIO::flush() { - if (__mIsInit == false || IsReady() == false) + if (!__mIsInit || !IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioIO"); try { @@ -298,75 +295,70 @@ void CAudioIO::flush() { } CAudioInfo& CAudioIO::getAudioInfo() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); return mAudioInfo; } void CAudioIO::setStreamCallback(SStreamCallback callback) { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); mStreamCallback = callback; } CAudioIO::SStreamCallback CAudioIO::getStreamCallback() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); return mStreamCallback; } void CAudioIO::setStateChangedCallback(SStateChangedCallback callback) { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); mStateChangedCallback = callback; } CAudioIO::SStateChangedCallback CAudioIO::getStateChangedCallback() { - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); return mStateChangedCallback; } void CAudioIO::setStreamInfo(sound_stream_info_h stream_info) { - if (stream_info == NULL) + if (!stream_info) THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_ARGUMENT, "stream_info is NULL"); - if (__mIsInit == false) + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); - try { - if (mState != CAudioInfo::EAudioIOState::AUDIO_IO_STATE_IDLE) - THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE, "it is not permitted while started"); - - int errorCode = SOUND_MANAGER_ERROR_NONE; - CAudioInfo::EAudioType audioType = CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA; - char *type = NULL; - int index = -1; - bool avail = false; - - if ((errorCode = sound_manager_is_available_stream_information(stream_info, NATIVE_API_AUDIO_IO, &avail)) != SOUND_MANAGER_ERROR_NONE) - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter stream_info is invalid [ret:%d]", errorCode); - if (!avail) - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_SUPPORTED_TYPE, "Input stream is not supported"); - - if ((errorCode = sound_manager_get_type_from_stream_information(stream_info, &type)) != SOUND_MANAGER_ERROR_NONE) - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter stream_info->stream_type is invalid [ret:%d]", errorCode); //LCOV_EXCL_LINE - if (mDirection == CAudioInfo::EAudioDirection::AUDIO_DIRECTION_IN) - getAudioInfo().convertInputStreamType2AudioType(type, &audioType); - else - getAudioInfo().convertOutputStreamType2AudioType(type, &audioType); - getAudioInfo().setAudioType(audioType); - - if ((errorCode = sound_manager_get_index_from_stream_information(stream_info, &index)) != SOUND_MANAGER_ERROR_NONE) - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter stream_info->index is invalid [ret:%d]", errorCode); //LCOV_EXCL_LINE - getAudioInfo().setAudioIndex(index); - - } catch (CAudioError& e) { - throw; - } + if (mState != CAudioInfo::EAudioIOState::AUDIO_IO_STATE_IDLE) + THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE, "it is not permitted while started"); + + int errorCode = SOUND_MANAGER_ERROR_NONE; + CAudioInfo::EAudioType audioType = CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA; + char *type = nullptr; + int index = -1; + bool avail = false; + + if ((errorCode = sound_manager_is_available_stream_information(stream_info, NATIVE_API_AUDIO_IO, &avail)) != SOUND_MANAGER_ERROR_NONE) + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter stream_info is invalid [ret:%d]", errorCode); + if (!avail) + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_SUPPORTED_TYPE, "Input stream is not supported"); + + if ((errorCode = sound_manager_get_type_from_stream_information(stream_info, &type)) != SOUND_MANAGER_ERROR_NONE) + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter stream_info->stream_type is invalid [ret:%d]", errorCode); + if (mDirection == CAudioInfo::EAudioDirection::AUDIO_DIRECTION_IN) + getAudioInfo().convertInputStreamType2AudioType(type, &audioType); + else + getAudioInfo().convertOutputStreamType2AudioType(type, &audioType); + getAudioInfo().setAudioType(audioType); + + if ((errorCode = sound_manager_get_index_from_stream_information(stream_info, &index)) != SOUND_MANAGER_ERROR_NONE) + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter stream_info->index is invalid [ret:%d]", errorCode); + getAudioInfo().setAudioIndex(index); } diff --git a/src/cpp/CAudioInfo.cpp b/src/cpp/CAudioInfo.cpp index 997348f..6f6ca9b 100644 --- a/src/cpp/CAudioInfo.cpp +++ b/src/cpp/CAudioInfo.cpp @@ -41,54 +41,48 @@ CAudioInfo::CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sa __mAudioType(audioType), __mAudioIndex(audioIndex) { // Check to invalid AudioInfo - if (sampleRate < CAudioInfo::MIN_SYSTEM_SAMPLERATE || sampleRate > CAudioInfo::MAX_SYSTEM_SAMPLERATE) { + if (sampleRate < CAudioInfo::MIN_SYSTEM_SAMPLERATE || sampleRate > CAudioInfo::MAX_SYSTEM_SAMPLERATE) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "The sampleRate is invalid [sampleRate:%u]", sampleRate); - } - if (channel < CAudioInfo::EChannel::CHANNEL_MONO || channel >= CAudioInfo::EChannel::CHANNEL_MAX) { + if (channel < CAudioInfo::EChannel::CHANNEL_MONO || channel >= CAudioInfo::EChannel::CHANNEL_MAX) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "The channel is invalid [channel:%u]", to_integral(channel)); - } - if (sampleType < CAudioInfo::ESampleType::SAMPLE_TYPE_U8 || sampleType >= CAudioInfo::ESampleType::SAMPLE_TYPE_MAX) { + if (sampleType < CAudioInfo::ESampleType::SAMPLE_TYPE_U8 || sampleType >= CAudioInfo::ESampleType::SAMPLE_TYPE_MAX) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "The sampleType is invalid [sampleType:%u]", to_integral(sampleType)); - } - if (audioType < CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA || audioType >= CAudioInfo::EAudioType::AUDIO_TYPE_MAX) { + if (audioType < CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA || audioType >= CAudioInfo::EAudioType::AUDIO_TYPE_MAX) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "The audioType is invalid [audioType:%u]", to_integral(audioType)); - } } -unsigned int CAudioInfo::getSampleRate() { +unsigned int CAudioInfo::getSampleRate() noexcept { return __mSampleRate; } -CAudioInfo::EChannel CAudioInfo::getChannel() { +CAudioInfo::EChannel CAudioInfo::getChannel() noexcept { return __mChannel; } -CAudioInfo::ESampleType CAudioInfo::getSampleType() { +CAudioInfo::ESampleType CAudioInfo::getSampleType() noexcept { return __mSampleType; } -CAudioInfo::EAudioType CAudioInfo::getAudioType() { +CAudioInfo::EAudioType CAudioInfo::getAudioType() noexcept { return __mAudioType; } -void CAudioInfo::setAudioType(CAudioInfo::EAudioType audioType) { +void CAudioInfo::setAudioType(CAudioInfo::EAudioType audioType) noexcept { __mAudioType = audioType; - return; } -int CAudioInfo::getAudioIndex() { +int CAudioInfo::getAudioIndex() noexcept { return __mAudioIndex; } -void CAudioInfo::setAudioIndex(int audioIndex) { +void CAudioInfo::setAudioIndex(int audioIndex) noexcept { __mAudioIndex = audioIndex; - return; } -int CAudioInfo::getSampleSize() { +int CAudioInfo::getSampleSize() noexcept { int bytes_in_sample = 0; switch (__mSampleType) { @@ -120,28 +114,25 @@ void CAudioInfo::convertAudioType2StreamType(CAudioInfo::EAudioType audioType, c "The audioType is not supported [audioType:%u]", to_integral(audioType)); *streamType = (char *)__STREAM_TYPE_TABLE[(unsigned int)audioType]; - return; } void CAudioInfo::convertInputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType) { - for (unsigned int i = (unsigned int)CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA ; i < (unsigned int)CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA ; i++) { + for (auto i = (unsigned int)CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA ; i < (unsigned int)CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA ; i++) { if (!strcmp((char *)__STREAM_TYPE_TABLE[i], streamType)) { *audioType = (CAudioInfo::EAudioType)i; return; } } THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_SUPPORTED_TYPE, "The streamType of input is not supported [streamType:%s]", streamType); - return; } void CAudioInfo::convertOutputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType) { - for (unsigned int i = (unsigned int)CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA ; i < (unsigned int)CAudioInfo::EAudioType::AUDIO_TYPE_MAX ; i++) { + for (auto i = (unsigned int)CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA ; i < (unsigned int)CAudioInfo::EAudioType::AUDIO_TYPE_MAX ; i++) { if (!strcmp((char *)__STREAM_TYPE_TABLE[i], streamType)) { *audioType = (CAudioInfo::EAudioType)i; return; } } THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_SUPPORTED_TYPE, "The streamType of output is not supported [streamType:%s]", streamType); - return; } diff --git a/src/cpp/CAudioInput.cpp b/src/cpp/CAudioInput.cpp index 0be4dda..7c4863c 100644 --- a/src/cpp/CAudioInput.cpp +++ b/src/cpp/CAudioInput.cpp @@ -37,22 +37,6 @@ CAudioInput::CAudioInput(CAudioInfo& info) : mDirection = CAudioInfo::EAudioDirection::AUDIO_DIRECTION_IN; } -//LCOV_EXCL_START -CAudioInput::CAudioInput( - unsigned int sampleRate, - CAudioInfo::EChannel channel, - CAudioInfo::ESampleType type, - CAudioInfo::EAudioType audioType) : - __mIsUsedSyncRead(true), - __mIsInit(false) { - mDirection = CAudioInfo::EAudioDirection::AUDIO_DIRECTION_IN; - mAudioInfo = CAudioInfo(sampleRate, channel, type, audioType, -1); -} -//LCOV_EXCL_STOP - -CAudioInput::~CAudioInput() { -} - void CAudioInput::onStream(CPulseAudioClient* pClient, size_t length) { assert(pClient); @@ -60,7 +44,7 @@ void CAudioInput::onStream(CPulseAudioClient* pClient, size_t length) { * Does not call CAudioIO::onStream() for synchronization * if a user is using read() */ - if (__mIsUsedSyncRead == true) { + if (__mIsUsedSyncRead) { #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("Sync Read Mode! - pClient:[%p], length:[%zu]", pClient, length); #endif @@ -76,23 +60,23 @@ void CAudioInput::onStream(CPulseAudioClient* pClient, size_t length) { CAudioIO::onStream(pClient, length); } -void CAudioInput::__setInit(bool flag) { +void CAudioInput::__setInit(bool flag) noexcept { __mIsInit = flag; } -bool CAudioInput::__IsInit() { - return (CAudioIO::isInit() == true && __mIsInit == true); +bool CAudioInput::__IsInit() noexcept { + return (CAudioIO::isInit() && __mIsInit); } -bool CAudioInput::__IsReady() { +bool CAudioInput::__IsReady() noexcept { return CAudioIO::IsReady(); } void CAudioInput::initialize() { - if (__IsInit() == true) + if (__IsInit()) return; - if (cpp_audio_in_has_record_privilege() == false) + if (!cpp_audio_in_has_record_privilege()) THROW_ERROR_MSG(CAudioError::EError::ERROR_PERMISSION_DENIED, "No privilege for record"); try { @@ -107,7 +91,7 @@ void CAudioInput::initialize() { } void CAudioInput::finalize() { - if (__IsInit() == false) { + if (!__IsInit()) { AUDIO_IO_LOGD("Did not initialize"); return; } @@ -118,10 +102,10 @@ void CAudioInput::finalize() { } void CAudioInput::prepare() { - if (__IsInit() == false) + if (!__IsInit()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CAudioInput"); - if (__IsReady() == true) { + if (__IsReady()) { AUDIO_IO_LOGD("Already prepared CAudioInput"); CAudioIO::prepare(); return; @@ -168,11 +152,11 @@ void CAudioInput::prepare() { } void CAudioInput::unprepare() { - if (__IsInit() == false) + if (!__IsInit()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CAudioInput"); - if (__IsReady() == false) { + if (!__IsReady()) { AUDIO_IO_LOGD("Already unprepared"); return; } @@ -195,7 +179,7 @@ void CAudioInput::unprepare() { } void CAudioInput::pause() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioInput"); @@ -203,7 +187,7 @@ void CAudioInput::pause() { THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE, "Can't pause if not in Running state"); - if (mpPulseAudioClient->isInThread() == true) + if (mpPulseAudioClient->isInThread()) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_OPERATION, "Can't pause in thread"); CAudioIO::pause(); @@ -211,7 +195,7 @@ void CAudioInput::pause() { } void CAudioInput::resume() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioInput"); @@ -219,7 +203,7 @@ void CAudioInput::resume() { THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE, "Can't resume if not in Paused state"); - if (mpPulseAudioClient->isInThread() == true) + if (mpPulseAudioClient->isInThread()) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_OPERATION, "Can't resume in thread"); CAudioIO::resume(); @@ -227,7 +211,7 @@ void CAudioInput::resume() { } void CAudioInput::flush() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioInput"); @@ -235,7 +219,7 @@ void CAudioInput::flush() { } int CAudioInput::getBufferSize() { - if (__IsInit() == false) + if (!__IsInit()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CAudioInput"); /* FIXME : return calculated size here to satisfy backward compatibility */ @@ -243,24 +227,22 @@ int CAudioInput::getBufferSize() { } void CAudioInput::setStreamCallback(SStreamCallback callback) { - if (__IsInit() == false) + if (!__IsInit()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CAudioInput"); - if (callback.onStream == NULL) - __mIsUsedSyncRead = true; - else - __mIsUsedSyncRead = false; + __mIsUsedSyncRead = (callback.onStream == nullptr); + AUDIO_IO_LOGD("__mIsUsedSyncRead = %d", __mIsUsedSyncRead); CAudioIO::setStreamCallback(callback); } size_t CAudioInput::read(void* buffer, size_t length) { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioInput"); - if (buffer == NULL) + if (!buffer) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL buffer:%p", buffer); @@ -269,7 +251,7 @@ size_t CAudioInput::read(void* buffer, size_t length) { "Can't read if not in Running state"); /* Checks synchronous flag */ - if (__mIsUsedSyncRead == false) + if (!__mIsUsedSyncRead) THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_OPERATION, "Invalid operation of read() if receive stream callback"); @@ -279,7 +261,7 @@ size_t CAudioInput::read(void* buffer, size_t length) { internalLock(); // If another thread did call unprepare, do not read - if (mpPulseAudioClient == NULL) + if (!mpPulseAudioClient) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); @@ -297,16 +279,16 @@ size_t CAudioInput::read(void* buffer, size_t length) { } int CAudioInput::peek(const void** buffer, size_t* length) { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioInput"); - if (buffer == NULL || length == NULL) + if (buffer == nullptr || length == nullptr) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL buffer:%p, length:%p", buffer, length); /* Checks synchronous flag */ - if (__mIsUsedSyncRead == true) + if (__mIsUsedSyncRead) THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_OPERATION, "Invalid operation of peek() if does not receive a stream callback"); @@ -314,12 +296,12 @@ int CAudioInput::peek(const void** buffer, size_t* length) { } int CAudioInput::drop() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioInput"); /* Checks synchronous flag */ - if (__mIsUsedSyncRead == true) + if (__mIsUsedSyncRead) THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_OPERATION, "Invalid operation of drop() if does not receive a stream callback"); diff --git a/src/cpp/CAudioOutput.cpp b/src/cpp/CAudioOutput.cpp index 2aaf058..f122752 100644 --- a/src/cpp/CAudioOutput.cpp +++ b/src/cpp/CAudioOutput.cpp @@ -26,6 +26,7 @@ using namespace tizen_media_audio; /** * class CAudioOutput */ + CAudioOutput::CAudioOutput(CAudioInfo& info) : CAudioIO(info), __mIsUsedSyncWrite(false), @@ -33,22 +34,6 @@ CAudioOutput::CAudioOutput(CAudioInfo& info) : mDirection = CAudioInfo::EAudioDirection::AUDIO_DIRECTION_OUT; } -//LCOV_EXCL_START -CAudioOutput::CAudioOutput( - unsigned int sampleRate, - CAudioInfo::EChannel channel, - CAudioInfo::ESampleType sampleType, - CAudioInfo::EAudioType audioType) : - __mIsUsedSyncWrite(false), - __mIsInit(false) { - mDirection = CAudioInfo::EAudioDirection::AUDIO_DIRECTION_OUT; - mAudioInfo = CAudioInfo(sampleRate, channel, sampleType, audioType, -1); -} -//LCOV_EXCL_STOP - -CAudioOutput::~CAudioOutput() { -} - void CAudioOutput::onStream(CPulseAudioClient* pClient, size_t length) { assert(pClient); @@ -56,7 +41,7 @@ void CAudioOutput::onStream(CPulseAudioClient* pClient, size_t length) { * Does not call CAudioIO::onStream() for synchronization * if a user is using write() */ - if (__mIsUsedSyncWrite == true) { + if (__mIsUsedSyncWrite) { #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("Sync Write Mode! - signal! - pClient:[%p], length:[%zu]", pClient, length); #endif @@ -73,20 +58,20 @@ void CAudioOutput::onStream(CPulseAudioClient* pClient, size_t length) { CAudioIO::onStream(pClient, length); } -void CAudioOutput::__setInit(bool flag) { +void CAudioOutput::__setInit(bool flag) noexcept { __mIsInit = flag; } -bool CAudioOutput::__IsInit() { - return (CAudioIO::isInit() == true && __mIsInit == true); +bool CAudioOutput::__IsInit() noexcept { + return (CAudioIO::isInit() && __mIsInit); } -bool CAudioOutput::__IsReady() { +bool CAudioOutput::__IsReady() noexcept { return CAudioIO::IsReady(); } void CAudioOutput::initialize() { - if (__IsInit() == true) + if (__IsInit()) return; try { @@ -101,7 +86,7 @@ void CAudioOutput::initialize() { } void CAudioOutput::finalize() { - if (__IsInit() == false) { + if (!__IsInit()) { AUDIO_IO_LOGD("Did not initialize"); return; } @@ -112,10 +97,10 @@ void CAudioOutput::finalize() { } void CAudioOutput::prepare() { - if (__IsInit() == false) + if (!__IsInit()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CAudioOutput"); - if (__IsReady() == true) { + if (__IsReady()) { AUDIO_IO_LOGD("Already prepared CAudioOutput"); CAudioIO::prepare(); return; @@ -172,11 +157,11 @@ void CAudioOutput::prepare() { } void CAudioOutput::unprepare() { - if (__IsInit() == false) + if (!__IsInit()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CAudioOutput"); - if (__IsReady() == false) { + if (!__IsReady()) { AUDIO_IO_LOGD("Already unprepared"); return; } @@ -199,7 +184,7 @@ void CAudioOutput::unprepare() { } void CAudioOutput::pause() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput"); @@ -207,7 +192,7 @@ void CAudioOutput::pause() { THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE, "Can't pause if not in Running state"); - if (mpPulseAudioClient->isInThread() == true) + if (mpPulseAudioClient->isInThread() ) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_OPERATION, "Can't pause in thread"); CAudioIO::pause(); @@ -215,7 +200,7 @@ void CAudioOutput::pause() { } void CAudioOutput::resume() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput"); @@ -223,7 +208,7 @@ void CAudioOutput::resume() { THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE, "Can't resume if not in Paused state"); - if (mpPulseAudioClient->isInThread() == true) + if (mpPulseAudioClient->isInThread()) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_OPERATION, "Can't resume in thread"); CAudioIO::resume(); @@ -231,7 +216,7 @@ void CAudioOutput::resume() { } void CAudioOutput::drain() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput"); @@ -242,7 +227,7 @@ void CAudioOutput::drain() { } void CAudioOutput::flush() { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput"); @@ -250,7 +235,7 @@ void CAudioOutput::flush() { } int CAudioOutput::getBufferSize() { - if (__IsInit() == false) + if (!__IsInit()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput"); @@ -259,11 +244,11 @@ int CAudioOutput::getBufferSize() { } size_t CAudioOutput::write(const void* buffer, size_t length) { - if (__IsInit() == false || __IsReady() == false) + if (!__IsInit() || !__IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput"); - if (buffer == NULL) + if (!buffer) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are invalid - buffer:%p, length:%zu", buffer, length); @@ -272,7 +257,7 @@ size_t CAudioOutput::write(const void* buffer, size_t length) { "Can't write if not in Running state"); /* When write() is called in PulseAudio callback, bypass a pcm data to CPulseAudioClient (For Asynchronous) */ - if (mpPulseAudioClient && mpPulseAudioClient->isInThread() == true) { + if (mpPulseAudioClient && mpPulseAudioClient->isInThread()) { int ret = mpPulseAudioClient->write(buffer, length); if (ret < 0) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, @@ -288,7 +273,7 @@ size_t CAudioOutput::write(const void* buffer, size_t length) { internalLock(); // If another thread did call unprepare, do not write - if (mpPulseAudioClient == NULL) + if (!mpPulseAudioClient) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); diff --git a/src/cpp/CPulseAudioClient.cpp b/src/cpp/CPulseAudioClient.cpp index 4423dda..0676cb8 100644 --- a/src/cpp/CPulseAudioClient.cpp +++ b/src/cpp/CPulseAudioClient.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + git st* Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ #include "CAudioIODef.h" #include #include + #ifdef ENABLE_DPM #include #endif @@ -40,13 +41,13 @@ CPulseAudioClient::CPulseAudioClient( __mDirection(direction), __mSpec(spec), __mpListener(listener), - __mpMainloop(NULL), - __mpContext(NULL), - __mpStream(NULL), - __mpPropList(NULL), + __mpMainloop(nullptr), + __mpContext(nullptr), + __mpStream(nullptr), + __mpPropList(nullptr), __mIsInit(false), __mIsOperationSuccess(false), - __mpSyncReadDataPtr(NULL), + __mpSyncReadDataPtr(nullptr), __mSyncReadIndex(0), __mSyncReadLength(0), __mIsUsedSyncRead(false), @@ -60,7 +61,7 @@ CPulseAudioClient::~CPulseAudioClient() { } void CPulseAudioClient::__contextStateChangeCb(pa_context* c, void* user_data) { - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); assert(pClient); assert(c); @@ -85,21 +86,10 @@ void CPulseAudioClient::__contextStateChangeCb(pa_context* c, void* user_data) { } //LCOV_EXCL_START -void CPulseAudioClient::__successContextCb(pa_context* c, int success, void* user_data) { - AUDIO_IO_LOGD("pa_context[%p], success[%d], user_data[%p]", c, success, user_data); - assert(c); - assert(user_data); - - CPulseAudioClient* pClient = static_cast(user_data); - pClient->__mIsOperationSuccess = static_cast(success); - - pa_threaded_mainloop_signal(pClient->__mpMainloop, 0); -} - static bool __is_microphone_restricted(void) { int state = 1; #ifdef ENABLE_DPM - device_policy_manager_h dpm_h = NULL; + device_policy_manager_h dpm_h = nullptr; int ret = 0; if ((dpm_h = dpm_manager_create())) { @@ -120,7 +110,7 @@ void CPulseAudioClient::__streamStateChangeCb(pa_stream* s, void* user_data) { assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); switch (pa_stream_get_state(s)) { case PA_STREAM_READY: @@ -157,13 +147,12 @@ void CPulseAudioClient::__streamCaptureCb(pa_stream* s, size_t length, void* use assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); assert(pClient->__mpListener); assert(pClient->__mpMainloop); - if (pClient->__mIsUsedSyncRead == true) { + if (pClient->__mIsUsedSyncRead) pa_threaded_mainloop_signal(pClient->__mpMainloop, 0); - } pClient->__mpListener->onStream(pClient, length); } @@ -181,11 +170,11 @@ void CPulseAudioClient::__streamPlaybackCb(pa_stream* s, size_t length, void* us assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); assert(pClient->__mpListener); #ifndef DISABLE_MOBILE_BACK_COMP - if (pClient->__mIsInit == false) { + if (!pClient->__mIsInit) { AUDIO_IO_LOGD("Occurred this listener when an out stream is on the way to create : Write dummy, length[%zu]", length); __dummy_write(s, length); return; @@ -215,7 +204,7 @@ void CPulseAudioClient::__streamLatencyUpdateCb(pa_stream* s, void* user_data) { assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); pa_threaded_mainloop_signal(pClient->__mpMainloop, 0); } @@ -224,7 +213,7 @@ void CPulseAudioClient::__streamStartedCb(pa_stream* s, void* user_data) { assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); AUDIO_IO_LOGD("stream %p started.", pClient); @@ -235,7 +224,7 @@ void CPulseAudioClient::__streamUnderflowCb(pa_stream* s, void* user_data) { assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); AUDIO_IO_LOGD("stream %p UnderFlow...", pClient); @@ -249,10 +238,9 @@ void CPulseAudioClient::__streamEventCb(pa_stream* s, const char *name, pa_propl AUDIO_IO_LOGE("NAME : %s, Prop : %p", name, pl); - CPulseAudioClient* pClient = static_cast(user_data); - if (strcmp(name, PA_STREAM_EVENT_POP_TIMEOUT) == 0) { + auto pClient = static_cast(user_data); + if (strcmp(name, PA_STREAM_EVENT_POP_TIMEOUT) == 0) pa_operation_unref(pa_stream_cork(pClient->__mpStream, 1, NULL, NULL)); - } } //LCOV_EXCL_STOP @@ -261,7 +249,7 @@ void CPulseAudioClient::__successStreamCb(pa_stream* s, int success, void* user_ assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); pClient->__mIsOperationSuccess = static_cast(success); pa_threaded_mainloop_signal(pClient->__mpMainloop, 0); @@ -273,7 +261,7 @@ void CPulseAudioClient::__successDrainCbInThread(pa_stream* s, int success, void assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); pClient->__mIsOperationSuccess = static_cast(success); pClient->__mIsDraining = false; } @@ -284,7 +272,7 @@ void CPulseAudioClient::__successDrainCb(pa_stream* s, int success, void* user_d assert(s); assert(user_data); - CPulseAudioClient* pClient = static_cast(user_data); + auto pClient = static_cast(user_data); pClient->__mIsOperationSuccess = static_cast(success); pClient->__mIsDraining = false; @@ -292,9 +280,8 @@ void CPulseAudioClient::__successDrainCb(pa_stream* s, int success, void* user_d } void CPulseAudioClient::initialize() { - if (__mIsInit == true) { + if (__mIsInit) return; - } int ret = 0; int err = 0; @@ -302,20 +289,18 @@ void CPulseAudioClient::initialize() { try { // Allocates PA proplist __mpPropList = pa_proplist_new(); - if (__mpPropList == NULL) { + if (!__mpPropList) THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_proplist_new()"); //LCOV_EXCL_LINE - } // Adds values on proplist for delivery to PULSEAUDIO - char *streamType = NULL; + char *streamType = nullptr; CAudioInfo::EAudioType audioType = __mSpec.getAudioInfo().getAudioType(); __mSpec.getAudioInfo().convertAudioType2StreamType(audioType, &streamType); pa_proplist_sets(__mpPropList, PA_PROP_MEDIA_ROLE, streamType); int index = __mSpec.getAudioInfo().getAudioIndex(); - if (index >= 0) { + if (index >= 0) pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_PARENT_ID, "%u", (unsigned int) index); - } // Adds latency on proplist for delivery to PULSEAUDIO AUDIO_IO_LOGD("LATENCY : %s[%d]", __mSpec.getStreamLatencyToString(), static_cast(__mSpec.getStreamLatency())); @@ -323,23 +308,20 @@ void CPulseAudioClient::initialize() { // Allocates PA mainloop __mpMainloop = pa_threaded_mainloop_new(); - if (__mpMainloop == NULL) { + if (!__mpMainloop) THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_threaded_mainloop_new()"); //LCOV_EXCL_LINE - } // Allocates PA context __mpContext = pa_context_new(pa_threaded_mainloop_get_api(__mpMainloop), CLIENT_NAME); - if (__mpContext == NULL) { + if (!__mpContext) THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_context_new()"); //LCOV_EXCL_LINE - } // Sets context state changed callback pa_context_set_state_callback(__mpContext, __contextStateChangeCb, this); // Connects this client with PA server - if (pa_context_connect(__mpContext, NULL, PA_CONTEXT_NOFLAGS, NULL) < 0) { + if (pa_context_connect(__mpContext, NULL, PA_CONTEXT_NOFLAGS, NULL) < 0) THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_context_connect()"); //LCOV_EXCL_LINE - } // LOCK for synchronous connection pa_threaded_mainloop_lock(__mpMainloop); @@ -357,9 +339,8 @@ void CPulseAudioClient::initialize() { pa_context_state_t state; state = pa_context_get_state(__mpContext); - if (state == PA_CONTEXT_READY) { + if (state == PA_CONTEXT_READY) break; - } if (!PA_CONTEXT_IS_GOOD(state)) { //LCOV_EXCL_START @@ -378,7 +359,7 @@ void CPulseAudioClient::initialize() { pa_channel_map map = __mSpec.getChannelMap(); __mpStream = pa_stream_new_with_proplist(__mpContext, __mSpec.getStreamName(), &ss, &map, __mpPropList); - if (__mpStream == NULL) { + if (!__mpStream) { //LCOV_EXCL_START pa_threaded_mainloop_unlock(__mpMainloop); THROW_ERROR_MSG(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed pa_stream_new_with_proplist()"); @@ -399,7 +380,7 @@ void CPulseAudioClient::initialize() { // Connect stream with PA Server if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) { - pa_stream_flags_t flags = static_cast( + auto flags = static_cast( PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_ADJUST_LATENCY | #ifndef DISABLE_MOBILE_BACK_COMP @@ -409,7 +390,7 @@ void CPulseAudioClient::initialize() { ret = pa_stream_connect_playback(__mpStream, NULL, NULL, flags, NULL, NULL); } else { - pa_stream_flags_t flags = static_cast( + auto flags = static_cast( PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_ADJUST_LATENCY | #ifndef DISABLE_MOBILE_BACK_COMP @@ -429,8 +410,7 @@ void CPulseAudioClient::initialize() { } while (true) { - pa_stream_state_t state; - state = pa_stream_get_state(__mpStream); + pa_stream_state_t state = pa_stream_get_state(__mpStream); if (state == PA_STREAM_READY) { AUDIO_IO_LOGD("STREAM READY"); @@ -440,11 +420,10 @@ void CPulseAudioClient::initialize() { if (!PA_STREAM_IS_GOOD(state)) { err = pa_context_errno(__mpContext); pa_threaded_mainloop_unlock(__mpMainloop); - if (err == PA_ERR_ACCESS) { + if (err == PA_ERR_ACCESS) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_DEVICE_POLICY_RESTRICTION, "pa_stream's state is not good : err[%d]", err); - } else { + else THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, "pa_stream's state is not good : err[%d]", err); //LCOV_EXCL_LINE - } } /* Wait until the stream is ready */ @@ -464,7 +443,7 @@ void CPulseAudioClient::initialize() { void CPulseAudioClient::finalize() { AUDIO_IO_LOGD(""); - if (__mpMainloop && isInThread() == false) + if (__mpMainloop && !isInThread()) pa_threaded_mainloop_lock(__mpMainloop); /* clear callbacks */ @@ -477,62 +456,57 @@ void CPulseAudioClient::finalize() { pa_stream_set_event_callback(__mpStream, NULL, NULL); } - if (__mpMainloop && isInThread() == false) + if (__mpMainloop && !isInThread()) pa_threaded_mainloop_unlock(__mpMainloop); /* Wait for drain complete if draining before finalize */ if (__mIsDraining) { unsigned int drain_wait_count = 0; - while (__mIsDraining && drain_wait_count++ < drain_wait_max_count) { + while (__mIsDraining && drain_wait_count++ < drain_wait_max_count) usleep(drain_wait_interval); - } AUDIO_IO_LOGD("wait for drain complete!!!! [%d * %d usec]", drain_wait_count, drain_wait_interval); } - if (__mpMainloop != NULL) { + if (__mpMainloop) pa_threaded_mainloop_stop(__mpMainloop); - } - if (__mpStream != NULL) { + if (__mpStream) { pa_stream_disconnect(__mpStream); pa_stream_unref(__mpStream); - __mpStream = NULL; + __mpStream = nullptr; } - if (__mpContext != NULL) { + if (__mpContext) { pa_context_disconnect(__mpContext); pa_context_unref(__mpContext); - __mpContext = NULL; + __mpContext = nullptr; } - if (__mpMainloop != NULL) { + if (__mpMainloop) { pa_threaded_mainloop_free(__mpMainloop); - __mpMainloop = NULL; + __mpMainloop = nullptr; } - if (__mpPropList != NULL) { + if (__mpPropList) { pa_proplist_free(__mpPropList); - __mpPropList = NULL; + __mpPropList = nullptr; } __mIsInit = false; } int CPulseAudioClient::read(void* buffer, size_t length) { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); - if (buffer == NULL) { + if (!buffer) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "The parameter is invalid : buffer[%p]", buffer); - } - if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) { + if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "The Playback client couldn't use this function"); - } size_t lengthIter = length; int ret = 0; @@ -545,33 +519,30 @@ int CPulseAudioClient::read(void* buffer, size_t length) { while (lengthIter > 0) { size_t l; - while (__mpSyncReadDataPtr == NULL) { + while (!__mpSyncReadDataPtr) { ret = pa_stream_peek(__mpStream, &__mpSyncReadDataPtr, &__mSyncReadLength); - if (ret != 0) { + if (ret != 0) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, "Failed pa_stream_peek() : ret[%d]", ret); - } if (__mSyncReadLength <= 0) { #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("readLength(%zu byte) is not valid. wait...", __mSyncReadLength); #endif pa_threaded_mainloop_wait(__mpMainloop); - } else if (__mpSyncReadDataPtr == NULL) { + } else if (!__mpSyncReadDataPtr) { // Data peeked, but it doesn't have any data ret = pa_stream_drop(__mpStream); - if (ret != 0) { + if (ret != 0) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, "Failed pa_stream_drop() : ret[%d]", ret); //LCOV_EXCL_LINE - } } else { __mSyncReadIndex = 0; } } - if (__mSyncReadLength < lengthIter) { + if (__mSyncReadLength < lengthIter) l = __mSyncReadLength; - } else { + else l = lengthIter; - } // Copy partial pcm data on out parameter #ifdef _AUDIO_IO_DEBUG_TIMING_ @@ -592,12 +563,11 @@ int CPulseAudioClient::read(void* buffer, size_t length) { AUDIO_IO_LOGD("__mSyncReadLength is zero, do drop()"); #endif ret = pa_stream_drop(__mpStream); - if (ret != 0) { + if (ret != 0) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, "Failed pa_stream_drop() : ret[%d]", ret); //LCOV_EXCL_LINE - } // Reset the internal pointer - __mpSyncReadDataPtr = NULL; + __mpSyncReadDataPtr = nullptr; __mSyncReadLength = 0; __mSyncReadIndex = 0; } @@ -615,23 +585,20 @@ int CPulseAudioClient::read(void* buffer, size_t length) { } int CPulseAudioClient::peek(const void** buffer, size_t* length) { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); - if (buffer == NULL || length == NULL) { + if (!buffer || !length) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "The parameter is invalid : buffer[%p], length[%p]", buffer, length); - } - if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) { + if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "The Playback client couldn't use this function"); - } int ret = 0; - if (isInThread() == false) { + if (!isInThread()) { pa_threaded_mainloop_lock(__mpMainloop); ret = pa_stream_peek(__mpStream, buffer, length); pa_threaded_mainloop_unlock(__mpMainloop); @@ -643,17 +610,15 @@ int CPulseAudioClient::peek(const void** buffer, size_t* length) { AUDIO_IO_LOGD("buffer[%p], length[%zu]", *buffer, *length); #endif - if (ret < 0) { + if (ret < 0) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed pa_stream_peek() : err[%d]", ret); //LCOV_EXCL_LINE - } return ret; } int CPulseAudioClient::drop() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD(""); @@ -661,13 +626,12 @@ int CPulseAudioClient::drop() { checkRunningState(); - if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) { + if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "The Playback client couldn't use this function"); - } int ret = 0; - if (isInThread() == false) { + if (!isInThread()) { pa_threaded_mainloop_lock(__mpMainloop); ret = pa_stream_drop(__mpStream); pa_threaded_mainloop_unlock(__mpMainloop); @@ -675,21 +639,18 @@ int CPulseAudioClient::drop() { ret = pa_stream_drop(__mpStream); } - if (ret < 0) { + if (ret < 0) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed pa_stream_drop() : err[%d]", ret); //LCOV_EXCL_LINE - } return ret; } int CPulseAudioClient::write(const void* data, size_t length) { - if (data == NULL) { + if (!data) THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_ARGUMENT, "The parameter is invalid"); - } - if (__mDirection == EStreamDirection::STREAM_DIRECTION_RECORD) { + if (__mDirection == EStreamDirection::STREAM_DIRECTION_RECORD) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "The Playback client couldn't use this function"); - } int ret = 0; @@ -697,7 +658,7 @@ int CPulseAudioClient::write(const void* data, size_t length) { AUDIO_IO_LOGD("data[%p], length[%zu], First[%d]", data, length, __mIsFirstStream); #endif - if (isInThread() == false) { + if (!isInThread()) { pa_threaded_mainloop_lock(__mpMainloop); if (pa_stream_is_corked(__mpStream)) { AUDIO_IO_LOGW("stream is corked...do uncork here first!!!!"); @@ -730,9 +691,8 @@ int CPulseAudioClient::write(const void* data, size_t length) { ret = pa_stream_write(__mpStream, data, length, NULL, 0LL, PA_SEEK_RELATIVE); } - if (ret < 0) { + if (ret < 0) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed pa_stream_write() : err[%d]", ret); //LCOV_EXCL_LINE - } return ret; } @@ -740,41 +700,36 @@ int CPulseAudioClient::write(const void* data, size_t length) { void CPulseAudioClient::cork(bool cork) { AUDIO_IO_LOGD("cork[%d]", cork); - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } - if (isInThread() == true) { + if (isInThread()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "This operation is not supported in callback"); - } checkRunningState(); // Set __mIsFirstStream flag when uncork(resume) stream, because prebuf will be enable again - if (cork == false) + if (!cork) __mIsFirstStream = true; - if (isInThread() == false) { + if (!isInThread()) { pa_threaded_mainloop_lock(__mpMainloop); pa_operation_unref(pa_stream_cork(__mpStream, static_cast(cork), __successStreamCb, this)); pa_threaded_mainloop_unlock(__mpMainloop); } else { pa_operation_unref(pa_stream_cork(__mpStream, static_cast(cork), __successStreamCb, this)); } - - return; } bool CPulseAudioClient::isCorked() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); int isCork = 0; - if (isInThread() == false) { + if (!isInThread()) { pa_threaded_mainloop_lock(__mpMainloop); isCork = pa_stream_is_corked(__mpStream); pa_threaded_mainloop_unlock(__mpMainloop); @@ -789,9 +744,8 @@ bool CPulseAudioClient::isCorked() { } bool CPulseAudioClient::drain() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); @@ -810,14 +764,14 @@ bool CPulseAudioClient::drain() { return true; } - if (isInThread() == false) { + if (!isInThread()) { AUDIO_IO_LOGD("drain"); pa_threaded_mainloop_lock(__mpMainloop); pa_operation* o = pa_stream_drain(__mpStream, __successDrainCb, this); __mIsDraining = true; - while (pa_operation_get_state(o) == PA_OPERATION_RUNNING) { + while (pa_operation_get_state(o) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(__mpMainloop); - } + pa_operation_unref(o); pa_threaded_mainloop_unlock(__mpMainloop); AUDIO_IO_LOGD("drain done"); @@ -831,13 +785,12 @@ bool CPulseAudioClient::drain() { } bool CPulseAudioClient::flush() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); - if (isInThread() == false) { + if (!isInThread()) { AUDIO_IO_LOGD("flush"); pa_threaded_mainloop_lock(__mpMainloop); pa_operation_unref(pa_stream_flush(__mpStream, __successStreamCb, this)); @@ -851,19 +804,17 @@ bool CPulseAudioClient::flush() { } size_t CPulseAudioClient::getWritableSize() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); - if (__mDirection != EStreamDirection::STREAM_DIRECTION_PLAYBACK) { + if (__mDirection != EStreamDirection::STREAM_DIRECTION_PLAYBACK) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "This client is used for Playback"); - } size_t ret = 0; - if (isInThread() == false) { + if (!isInThread()) { pa_threaded_mainloop_lock(__mpMainloop); ret = pa_stream_writable_size(__mpStream); pa_threaded_mainloop_unlock(__mpMainloop); @@ -875,22 +826,21 @@ size_t CPulseAudioClient::getWritableSize() { } void CPulseAudioClient::checkRunningState() { - if (__mpContext == NULL || PA_CONTEXT_IS_GOOD(pa_context_get_state(__mpContext)) == 0) { + if (!__mpContext || !PA_CONTEXT_IS_GOOD(pa_context_get_state(__mpContext))) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_INITIALIZED, "The context[%p] is not created or not good state", __mpContext); - } - if (__mpStream == NULL || PA_STREAM_IS_GOOD(pa_stream_get_state(__mpStream)) == 0) { + + if (!__mpStream || !PA_STREAM_IS_GOOD(pa_stream_get_state(__mpStream))) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_INITIALIZED, "The stream[%p] is not created or not good state", __mpStream); - } - if (pa_context_get_state(__mpContext) != PA_CONTEXT_READY || pa_stream_get_state(__mpStream) != PA_STREAM_READY) { + + if (pa_context_get_state(__mpContext) != PA_CONTEXT_READY || pa_stream_get_state(__mpStream) != PA_STREAM_READY) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_INITIALIZED, "The context[%p] or stream[%p] state is not ready", __mpContext, __mpStream); - } #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("This client is running"); #endif } -bool CPulseAudioClient::isInThread() { +bool CPulseAudioClient::isInThread() noexcept { int ret = pa_threaded_mainloop_in_thread(__mpMainloop); #ifdef _AUDIO_IO_DEBUG_TIMING_ @@ -901,21 +851,19 @@ bool CPulseAudioClient::isInThread() { //LCOV_EXCL_START size_t CPulseAudioClient::getReadableSize() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); - if (__mDirection != EStreamDirection::STREAM_DIRECTION_RECORD) { + if (__mDirection != EStreamDirection::STREAM_DIRECTION_RECORD) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "This client is used for Capture"); - } size_t ret = 0; - if (isInThread() == false) { + if (!isInThread()) { pa_threaded_mainloop_lock(__mpMainloop); - ret = pa_stream_writable_size(__mpStream); + ret = pa_stream_readable_size(__mpStream); pa_threaded_mainloop_unlock(__mpMainloop); } else { ret = pa_stream_writable_size(__mpStream); @@ -925,21 +873,19 @@ size_t CPulseAudioClient::getReadableSize() { } size_t CPulseAudioClient::getBufferSize() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); size_t ret = 0; try { - if (isInThread() == false) { + if (!isInThread()) pa_threaded_mainloop_lock(__mpMainloop); - } const pa_buffer_attr* attr = pa_stream_get_buffer_attr(__mpStream); - if (attr == NULL) { + if (!attr) { int _err = pa_context_errno(__mpContext); THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed pa_stream_get_buffer_attr() : err[%d]", _err); } @@ -952,35 +898,31 @@ size_t CPulseAudioClient::getBufferSize() { AUDIO_IO_LOGD("RECORD buffer size[%zu]", ret); } } catch (CAudioError& e) { - if (isInThread() == false) { + if (!isInThread()) pa_threaded_mainloop_unlock(__mpMainloop); - } throw; } - if (isInThread() == false) { + if (!isInThread()) pa_threaded_mainloop_unlock(__mpMainloop); - } return ret; } pa_usec_t CPulseAudioClient::getLatency() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); pa_usec_t ret = 0; int negative = 0; - if (isInThread() == false) { + if (!isInThread()) { if (pa_stream_get_latency(__mpStream, &ret, &negative) < 0) { int _err = pa_context_errno(__mpContext); - if (_err != PA_ERR_NODATA) { + if (_err != PA_ERR_NODATA) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed pa_stream_get_latency() : err[%d]", _err); - } } return negative ? 0 : ret; } @@ -989,14 +931,12 @@ pa_usec_t CPulseAudioClient::getLatency() { try { while (true) { - if (pa_stream_get_latency(__mpStream, &ret, &negative) >= 0) { + if (pa_stream_get_latency(__mpStream, &ret, &negative) >= 0) break; - } int _err = pa_context_errno(__mpContext); - if (_err != PA_ERR_NODATA) { + if (_err != PA_ERR_NODATA) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed pa_stream_get_latency() : err[%d]", _err); - } /* Wait until latency data is available again */ pa_threaded_mainloop_wait(__mpMainloop); @@ -1012,30 +952,26 @@ pa_usec_t CPulseAudioClient::getLatency() { } pa_usec_t CPulseAudioClient::getFinalLatency() { - if (__mIsInit == false) { + if (!__mIsInit) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize CPulseAudioClient"); - } checkRunningState(); pa_usec_t ret = 0; - uint32_t ver = 0; try { - if (isInThread() == false) { + if (!isInThread()) pa_threaded_mainloop_lock(__mpMainloop); - } - ver = pa_context_get_server_protocol_version(__mpContext); + uint32_t ver = pa_context_get_server_protocol_version(__mpContext); if (ver >= 13) { const pa_buffer_attr* buffer_attr = pa_stream_get_buffer_attr(__mpStream); const pa_sample_spec* sample_spec = pa_stream_get_sample_spec(__mpStream); const pa_timing_info* timing_info = pa_stream_get_timing_info(__mpStream); - if (buffer_attr == NULL || sample_spec == NULL || timing_info == NULL) { + if (!buffer_attr || !sample_spec || !timing_info) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed to get buffer_attr[%p] or sample_spec[%p] or timing_info[%p] from a pa_stream", buffer_attr, sample_spec, timing_info); - } if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) { ret = (pa_bytes_to_usec(buffer_attr->tlength, sample_spec) + timing_info->configured_sink_usec); @@ -1048,24 +984,14 @@ pa_usec_t CPulseAudioClient::getFinalLatency() { THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_NOT_SUPPORTED, "This version(ver.%d) is not supported", ver); } - if (isInThread() == false) { + if (!isInThread()) pa_threaded_mainloop_unlock(__mpMainloop); - } } catch (CAudioError& e) { - if (isInThread() == false) { + if (!isInThread()) pa_threaded_mainloop_unlock(__mpMainloop); - } throw; } return ret; } - -CPulseAudioClient::EStreamDirection CPulseAudioClient::getStreamDirection() { - return __mDirection; -} - -CPulseStreamSpec CPulseAudioClient::getStreamSpec() { - return __mSpec; -} //LCOV_EXCL_STOP diff --git a/src/cpp/CPulseStreamSpec.cpp b/src/cpp/CPulseStreamSpec.cpp index def1833..d1a5e8b 100644 --- a/src/cpp/CPulseStreamSpec.cpp +++ b/src/cpp/CPulseStreamSpec.cpp @@ -45,7 +45,7 @@ static const char* STREAM_LATENCY_DEFAULT_ASYNC = "default-async"; //LCOV_EXCL_START CPulseStreamSpec::CPulseStreamSpec(): __mLatency(EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT), - __mStreamName(NULL) { + __mStreamName(nullptr) { __adjustSpec(); } //LCOV_EXCL_STOP @@ -53,23 +53,11 @@ CPulseStreamSpec::CPulseStreamSpec(): CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo) : __mLatency(latency), __mAudioInfo(audioInfo), - __mStreamName(NULL) { + __mStreamName(nullptr) { __adjustSpec(); } -//LCOV_EXCL_START -CPulseStreamSpec::CPulseStreamSpec(EStreamLatency latency, CAudioInfo& audioInfo, int customLatency) : - __mLatency(latency), - __mAudioInfo(audioInfo), - __mStreamName(NULL) { - __adjustSpec(); -} -//LCOV_EXCL_STOP - -CPulseStreamSpec::~CPulseStreamSpec() { -} - -void CPulseStreamSpec::__adjustSpec() { +void CPulseStreamSpec::__adjustSpec() noexcept { // Sets a sampleRate __mSampleSpec.rate = __mAudioInfo.getSampleRate(); @@ -164,11 +152,11 @@ void CPulseStreamSpec::__adjustSpec() { //LCOV_EXCL_STOP } -CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() { +CPulseStreamSpec::EStreamLatency CPulseStreamSpec::getStreamLatency() noexcept { return __mLatency; } -const char* CPulseStreamSpec::getStreamLatencyToString() { +const char* CPulseStreamSpec::getStreamLatencyToString() noexcept { const char* latency; switch (__mLatency) { @@ -214,18 +202,18 @@ const char* CPulseStreamSpec::getStreamLatencyToString() { return latency; } -CAudioInfo& CPulseStreamSpec::getAudioInfo() { +CAudioInfo& CPulseStreamSpec::getAudioInfo() noexcept { return __mAudioInfo; } -pa_sample_spec CPulseStreamSpec::getSampleSpec() { +pa_sample_spec CPulseStreamSpec::getSampleSpec() noexcept { return __mSampleSpec; } -pa_channel_map CPulseStreamSpec::getChannelMap() { +pa_channel_map CPulseStreamSpec::getChannelMap() noexcept { return __mChannelMap; } -const char* CPulseStreamSpec::getStreamName() { +const char* CPulseStreamSpec::getStreamName() noexcept { return __mStreamName; } diff --git a/src/cpp/cpp_audio_in_privilege.cpp b/src/cpp/cpp_audio_in_privilege.cpp index d8a56c0..9efc812 100644 --- a/src/cpp/cpp_audio_in_privilege.cpp +++ b/src/cpp/cpp_audio_in_privilege.cpp @@ -74,12 +74,12 @@ bool cpp_audio_in_has_record_privilege(void) { PrivilegeData prData; prData.paMainloop = pa_threaded_mainloop_new(); - if (prData.paMainloop == NULL) - THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_threaded_mainloop_new()"); //LCOV_EXCL_LINE + if (!prData.paMainloop) + THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_threaded_mainloop_new()"); c = pa_context_new(pa_threaded_mainloop_get_api(prData.paMainloop), CLIENT_NAME); - if (c == NULL) - THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_context_new()"); //LCOV_EXCL_LINE + if (!c) + THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pa_context_new()"); pa_context_set_state_callback(c, __contextStateChangeCb, prData.paMainloop); diff --git a/src/cpp/cpp_audio_io.cpp b/src/cpp/cpp_audio_io.cpp index d23f26f..d5370a6 100644 --- a/src/cpp/cpp_audio_io.cpp +++ b/src/cpp/cpp_audio_io.cpp @@ -38,7 +38,7 @@ typedef struct audio_io_stream_cb_s { void* user_data; audio_in_stream_cb onStream; - audio_io_stream_cb_s() : user_data(NULL), onStream(NULL) + audio_io_stream_cb_s() : user_data(nullptr), onStream(nullptr) {/* Empty Body */} } audio_io_stream_cb_s; @@ -52,7 +52,7 @@ typedef struct audio_io_state_changed_cb_s { void* user_data; audio_in_state_changed_cb onStateChanged; - audio_io_state_changed_cb_s() : user_data(NULL), onStateChanged(NULL) + audio_io_state_changed_cb_s() : user_data(nullptr), onStateChanged(nullptr) {/* Empty Body */} } audio_io_state_changed_cb_s; @@ -70,7 +70,7 @@ typedef struct audio_io_s { audio_io_stream_cb_s stream_callback; audio_io_state_changed_cb_s state_changed_callback; - audio_io_s() : audioIoHandle(NULL) + audio_io_s() : audioIoHandle(nullptr) {/* Empty Body */} } audio_io_s; @@ -382,9 +382,9 @@ static void __handle_safe_free(audio_io_s* handle, void *obj, bool is_output) { VALID_POINTER_START(obj) if (is_output) - *(audio_out_h *)obj = NULL; + *(audio_out_h *)obj = nullptr; else - *(audio_in_h *)obj = NULL; + *(audio_in_h *)obj = nullptr; VALID_POINTER_END } @@ -392,25 +392,23 @@ static void __handle_safe_free(audio_io_s* handle, void *obj, bool is_output) { * Implements CAPI functions */ int cpp_audio_in_create(int sample_rate, audio_channel_e channel, audio_sample_type_e type, audio_in_h *input) { - audio_io_s* handle = NULL; + audio_io_s* handle = nullptr; bool mic_enable = false; - int ret = 0; + try { - if (input == NULL) { + if (!input) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); - } __check_audio_param(sample_rate, channel, type, false); AUDIO_IO_LOGD("samplerate:[%d] channel:[0x%x] sample_type:[0x%x]", sample_rate, channel, type); /* If MIC is not supported, return NOT_SUPPORTED error */ - ret = system_info_get_platform_bool(FEATURE_MICROPHONE, &mic_enable); + int ret = system_info_get_platform_bool(FEATURE_MICROPHONE, &mic_enable); AUDIO_IO_LOGD("system_info_platform [%s]=[%d], ret[%d]", FEATURE_MICROPHONE, mic_enable, ret); - if (ret != SYSTEM_INFO_ERROR_NONE || !mic_enable) { + if (ret != SYSTEM_INFO_ERROR_NONE || !mic_enable) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_SUPPORTED, "System doesn't support microphone!"); - } CAudioInfo audioInfo = __generate_audio_input_info(sample_rate, channel, type); @@ -425,8 +423,7 @@ int cpp_audio_in_create(int sample_rate, audio_channel_e channel, audio_sample_t __handle_safe_free(handle, (void *)input, false); return __convert_CAudioError(e); } catch (const std::bad_alloc&) { -//LCOV_EXCL_START - CAudioError e = CAudioError::EError::ERROR_OUT_OF_MEMORY; + CAudioError e(CAudioError::EError::ERROR_OUT_OF_MEMORY); AUDIO_IO_LOGE("Failed to allocate handle"); __handle_safe_free(handle, (void *)input, false); return __convert_CAudioError(e); @@ -437,10 +434,10 @@ int cpp_audio_in_create(int sample_rate, audio_channel_e channel, audio_sample_t } int cpp_audio_in_destroy(audio_in_h input) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); assert(handle->audioIoHandle); @@ -463,10 +460,10 @@ int cpp_audio_in_destroy(audio_in_h input) { } int cpp_audio_in_set_sound_stream_info(audio_in_h input, sound_stream_info_h stream_info) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL || stream_info == NULL) + if (!handle || !stream_info) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, stream_info:%p", input, stream_info); assert(handle->audioIoHandle); @@ -484,10 +481,10 @@ int cpp_audio_in_set_sound_stream_info(audio_in_h input, sound_stream_info_h str } int cpp_audio_in_prepare(audio_in_h input) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); assert(handle->audioIoHandle); @@ -505,10 +502,10 @@ int cpp_audio_in_prepare(audio_in_h input) { } int cpp_audio_in_unprepare(audio_in_h input) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); assert(handle->audioIoHandle); @@ -526,10 +523,10 @@ int cpp_audio_in_unprepare(audio_in_h input) { } int cpp_audio_in_pause(audio_in_h input) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); assert(handle->audioIoHandle); @@ -547,10 +544,10 @@ int cpp_audio_in_pause(audio_in_h input) { } int cpp_audio_in_resume(audio_in_h input) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); assert(handle->audioIoHandle); @@ -568,10 +565,10 @@ int cpp_audio_in_resume(audio_in_h input) { } int cpp_audio_in_flush(audio_in_h input) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); assert(handle->audioIoHandle); @@ -589,21 +586,20 @@ int cpp_audio_in_flush(audio_in_h input) { } int cpp_audio_in_read(audio_in_h input, void *buffer, unsigned int length) { - audio_io_s* handle = static_cast(input); int ret = 0; try { - if (handle == NULL || buffer == NULL) + auto handle = static_cast(input); + if (!handle || !buffer) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, buffer:%p", input, buffer); assert(handle->audioIoHandle); - CAudioInput* inputHandle = static_cast(handle->audioIoHandle); - if (inputHandle == NULL) { + auto inputHandle = static_cast(handle->audioIoHandle); + if (!inputHandle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_HANDLE, "Handle is NULL"); - } - size_t readn = inputHandle->read(buffer, static_cast(length)); + auto readn = inputHandle->read(buffer, static_cast(length)); ret = static_cast(readn); #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("readn:%zu", readn); @@ -617,18 +613,17 @@ int cpp_audio_in_read(audio_in_h input, void *buffer, unsigned int length) { } int cpp_audio_in_get_buffer_size(audio_in_h input, int *size) { - audio_io_s* handle = static_cast(input); - try { - if (handle == NULL || size == NULL) + auto handle = static_cast(input); + if (!handle || !size) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, size:%p", input, size); assert(handle->audioIoHandle); - CAudioIO* inputHandle = static_cast(handle->audioIoHandle); - if (inputHandle == NULL) { + auto inputHandle = static_cast(handle->audioIoHandle); + if (!inputHandle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_HANDLE, "Handle is NULL"); - } + *size = inputHandle->getBufferSize(); } catch (CAudioError& e) { AUDIO_IO_LOGE("%s", e.getErrorMsg()); @@ -639,10 +634,9 @@ int cpp_audio_in_get_buffer_size(audio_in_h input, int *size) { } int cpp_audio_in_get_sample_rate(audio_in_h input, int *sample_rate) { - audio_io_s* handle = static_cast(input); - try { - if (handle == NULL || sample_rate == NULL) + auto handle = static_cast(input); + if (!handle || !sample_rate) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, sample_rate:%p", input, sample_rate); assert(handle->audioIoHandle); @@ -657,16 +651,15 @@ int cpp_audio_in_get_sample_rate(audio_in_h input, int *sample_rate) { } int cpp_audio_in_get_channel(audio_in_h input, audio_channel_e *channel) { - audio_io_s* handle = static_cast(input); - try { - if (handle == NULL || channel == NULL) + auto handle = static_cast(input); + if (!handle || !channel) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, channel:%p", input, channel); assert(handle->audioIoHandle); - const CAudioInfo::EChannel srcChannel = handle->audioIoHandle->getAudioInfo().getChannel(); - audio_channel_e dstChannel = AUDIO_CHANNEL_MONO; + auto srcChannel = handle->audioIoHandle->getAudioInfo().getChannel(); + auto dstChannel = AUDIO_CHANNEL_MONO; __convert_audio_info_channel_2_channel(srcChannel, dstChannel); *channel = dstChannel; @@ -679,16 +672,15 @@ int cpp_audio_in_get_channel(audio_in_h input, audio_channel_e *channel) { } int cpp_audio_in_get_sample_type(audio_in_h input, audio_sample_type_e *type) { - audio_io_s* handle = static_cast(input); - try { - if (handle == NULL || type == NULL) + auto handle = static_cast(input); + if (!handle || !type) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, type:%p", input, type); assert(handle->audioIoHandle); - const CAudioInfo::ESampleType srcSampleType = handle->audioIoHandle->getAudioInfo().getSampleType(); - audio_sample_type_e dstSampleType = AUDIO_SAMPLE_TYPE_U8; + auto srcSampleType = handle->audioIoHandle->getAudioInfo().getSampleType(); + auto dstSampleType = AUDIO_SAMPLE_TYPE_U8; __convert_audio_info_sample_type_2_sample_type(srcSampleType, dstSampleType); *type = dstSampleType; @@ -701,7 +693,7 @@ int cpp_audio_in_get_sample_type(audio_in_h input, audio_sample_type_e *type) { } static void __stream_cb_internal(size_t nbytes, void *user_data) { - audio_io_s* audioIo = static_cast(user_data); + auto audioIo = static_cast(user_data); assert(audioIo); if (audioIo->stream_callback.onStream) @@ -713,7 +705,7 @@ static void __state_changed_cb_internal(CAudioInfo::EAudioIOState state, CAudioInfo::EAudioIOState state_prev, bool by_policy, void *user_data) { - audio_io_s* audioIo = static_cast(user_data); + auto audioIo = static_cast(user_data); assert(audioIo); if (audioIo->state_changed_callback.onStateChanged) @@ -724,10 +716,10 @@ static void __state_changed_cb_internal(CAudioInfo::EAudioIOState state, //LCOV_EXCL_STOP int cpp_audio_in_set_stream_cb(audio_in_h input, audio_in_stream_cb callback, void* user_data) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL || callback == NULL) + if (!handle || !callback) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, callback:%p", input, callback); assert(handle->audioIoHandle); @@ -736,7 +728,7 @@ int cpp_audio_in_set_stream_cb(audio_in_h input, audio_in_stream_cb callback, vo handle->stream_callback.onStream = callback; handle->stream_callback.user_data = user_data; - CAudioIO::SStreamCallback cb = handle->audioIoHandle->getStreamCallback(); + auto cb = handle->audioIoHandle->getStreamCallback(); cb.mUserData = static_cast(handle); cb.onStream = __stream_cb_internal; @@ -752,21 +744,20 @@ int cpp_audio_in_set_stream_cb(audio_in_h input, audio_in_stream_cb callback, vo } int cpp_audio_in_unset_stream_cb(audio_in_h input) { - audio_io_s* handle = static_cast(input); - + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); assert(handle->audioIoHandle); AUDIO_IO_LOGD("[%p]", handle); - handle->stream_callback.onStream = NULL; - handle->stream_callback.user_data = NULL; + handle->stream_callback.onStream = nullptr; + handle->stream_callback.user_data = nullptr; - CAudioIO::SStreamCallback cb = handle->audioIoHandle->getStreamCallback(); - cb.mUserData = NULL; - cb.onStream = NULL; + auto cb = handle->audioIoHandle->getStreamCallback(); + cb.mUserData = nullptr; + cb.onStream = nullptr; handle->audioIoHandle->setStreamCallback(cb); } catch (CAudioError& e) { @@ -780,16 +771,16 @@ int cpp_audio_in_unset_stream_cb(audio_in_h input) { } int cpp_audio_in_peek(audio_in_h input, const void **buffer, unsigned int *length) { - audio_io_s* handle = static_cast(input); size_t _length = 0; try { - if (handle == NULL || buffer == NULL) + auto handle = static_cast(input); + if (!handle || !buffer) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, buffer:%p", input, buffer); - CAudioInput* inputHandle = static_cast(handle->audioIoHandle); - if (inputHandle == NULL) + auto inputHandle = static_cast(handle->audioIoHandle); + if (!inputHandle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_HANDLE, "Handle is NULL"); inputHandle->peek(buffer, &_length); @@ -804,15 +795,14 @@ int cpp_audio_in_peek(audio_in_h input, const void **buffer, unsigned int *lengt } int cpp_audio_in_drop(audio_in_h input) { - audio_io_s* handle = static_cast(input); - try { - if (handle == NULL) + auto handle = static_cast(input); + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p", input); - CAudioInput* inputHandle = static_cast(handle->audioIoHandle); - if (inputHandle == NULL) + auto inputHandle = static_cast(handle->audioIoHandle); + if (!inputHandle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_HANDLE, "Handle is NULL"); inputHandle->drop(); @@ -825,10 +815,10 @@ int cpp_audio_in_drop(audio_in_h input) { } int cpp_audio_in_set_state_changed_cb(audio_in_h input, audio_in_state_changed_cb callback, void* user_data) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL || callback == NULL) + if (!handle || !callback) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL input:%p, callback:%p", input, callback); assert(handle->audioIoHandle); @@ -837,7 +827,7 @@ int cpp_audio_in_set_state_changed_cb(audio_in_h input, audio_in_state_changed_c handle->state_changed_callback.onStateChanged = callback; handle->state_changed_callback.user_data = user_data; - CAudioIO::SStateChangedCallback cb = handle->audioIoHandle->getStateChangedCallback(); + auto cb = handle->audioIoHandle->getStateChangedCallback(); cb.mUserData = static_cast(handle); cb.onStateChanged = __state_changed_cb_internal; @@ -853,21 +843,21 @@ int cpp_audio_in_set_state_changed_cb(audio_in_h input, audio_in_state_changed_c } int cpp_audio_in_unset_state_changed_cb(audio_in_h input) { - audio_io_s* handle = static_cast(input); + auto handle = static_cast(input); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p", input); assert(handle->audioIoHandle); AUDIO_IO_LOGD("[%p]", handle); - handle->state_changed_callback.onStateChanged = NULL; - handle->state_changed_callback.user_data = NULL; + handle->state_changed_callback.onStateChanged = nullptr; + handle->state_changed_callback.user_data = nullptr; - CAudioIO::SStateChangedCallback cb = handle->audioIoHandle->getStateChangedCallback(); - cb.mUserData = NULL; - cb.onStateChanged = NULL; + auto cb = handle->audioIoHandle->getStateChangedCallback(); + cb.mUserData = nullptr; + cb.onStateChanged = nullptr; handle->audioIoHandle->setStateChangedCallback(cb); } catch (CAudioError& e) { @@ -885,9 +875,9 @@ int cpp_audio_in_unset_state_changed_cb(audio_in_h input) { * Audio Out */ int cpp_audio_out_create_new(int sample_rate, audio_channel_e channel, audio_sample_type_e type, audio_out_h *output) { - audio_io_s* handle = NULL; + audio_io_s* handle = nullptr; try { - if (output == NULL) + if (!output) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p", output); @@ -907,8 +897,7 @@ int cpp_audio_out_create_new(int sample_rate, audio_channel_e channel, audio_sam __handle_safe_free(handle, (void *)output, true); return __convert_CAudioError(e); } catch (const std::bad_alloc&) { -//LCOV_EXCL_START - CAudioError e = CAudioError::EError::ERROR_OUT_OF_MEMORY; + CAudioError e(CAudioError::EError::ERROR_OUT_OF_MEMORY); AUDIO_IO_LOGE("Failed to allocate handle"); __handle_safe_free(handle, (void *)output, true); return __convert_CAudioError(e); @@ -919,10 +908,10 @@ int cpp_audio_out_create_new(int sample_rate, audio_channel_e channel, audio_sam } int cpp_audio_out_destroy(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p", output); assert(handle->audioIoHandle); @@ -939,16 +928,16 @@ int cpp_audio_out_destroy(audio_out_h output) { return __convert_CAudioError(e); } - AUDIO_IO_LOGD("destroyed"); + AUDIO_IO_LOGD("[%p] destroyed", handle); return AUDIO_IO_ERROR_NONE; } int cpp_audio_out_set_sound_stream_info(audio_out_h output, sound_stream_info_h stream_info) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL || stream_info == NULL) + if (!handle || !stream_info) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, stream_info:%p", output, stream_info); assert(handle->audioIoHandle); @@ -966,10 +955,10 @@ int cpp_audio_out_set_sound_stream_info(audio_out_h output, sound_stream_info_h } int cpp_audio_out_prepare(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p", output); assert(handle->audioIoHandle); @@ -987,10 +976,10 @@ int cpp_audio_out_prepare(audio_out_h output) { } int cpp_audio_out_unprepare(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p", output); assert(handle->audioIoHandle); @@ -1008,10 +997,10 @@ int cpp_audio_out_unprepare(audio_out_h output) { } int cpp_audio_out_pause(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p", output); assert(handle->audioIoHandle); @@ -1029,10 +1018,10 @@ int cpp_audio_out_pause(audio_out_h output) { } int cpp_audio_out_resume(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p", output); assert(handle->audioIoHandle); @@ -1050,10 +1039,10 @@ int cpp_audio_out_resume(audio_out_h output) { } int cpp_audio_out_drain(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p", output); assert(handle->audioIoHandle); @@ -1071,10 +1060,10 @@ int cpp_audio_out_drain(audio_out_h output) { } int cpp_audio_out_flush(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p", output); assert(handle->audioIoHandle); @@ -1092,20 +1081,20 @@ int cpp_audio_out_flush(audio_out_h output) { } int cpp_audio_out_write(audio_out_h output, void *buffer, unsigned int length) { - audio_io_s* handle = static_cast(output); int ret = 0; try { - if (handle == NULL || buffer == NULL) + auto handle = static_cast(output); + if (!handle || !buffer) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameter is NULL output:%p, buffer:%p", output, buffer); assert(handle->audioIoHandle); - CAudioOutput* outputHandle = static_cast(handle->audioIoHandle); - if (outputHandle == NULL) + auto outputHandle = static_cast(handle->audioIoHandle); + if (!outputHandle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_HANDLE, "Handle is NULL"); - size_t written = outputHandle->write(buffer, static_cast(length)); + auto written = outputHandle->write(buffer, static_cast(length)); ret = static_cast(written); #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("written:%zu", written); @@ -1119,16 +1108,15 @@ int cpp_audio_out_write(audio_out_h output, void *buffer, unsigned int length) { } int cpp_audio_out_get_buffer_size(audio_out_h output, int *size) { - audio_io_s* handle = static_cast(output); - try { - if (handle == NULL || size == NULL) + auto handle = static_cast(output); + if (!handle || !size) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, size:%p", output, size); assert(handle->audioIoHandle); - CAudioOutput* outputHandle = static_cast(handle->audioIoHandle); - if (outputHandle == NULL) + auto outputHandle = static_cast(handle->audioIoHandle); + if (!outputHandle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_HANDLE, "Handle is NULL"); *size = outputHandle->getBufferSize(); @@ -1141,10 +1129,9 @@ int cpp_audio_out_get_buffer_size(audio_out_h output, int *size) { } int cpp_audio_out_get_sample_rate(audio_out_h output, int *sample_rate) { - audio_io_s* handle = static_cast(output); - try { - if (handle == NULL || sample_rate == NULL) + auto handle = static_cast(output); + if (!handle || !sample_rate) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, sample_rate:%p", output, sample_rate); assert(handle->audioIoHandle); @@ -1159,16 +1146,15 @@ int cpp_audio_out_get_sample_rate(audio_out_h output, int *sample_rate) { } int cpp_audio_out_get_channel(audio_out_h output, audio_channel_e *channel) { - audio_io_s* handle = static_cast(output); - try { - if (handle == NULL || channel == NULL) + auto handle = static_cast(output); + if (!handle || !channel) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, channel:%p", output, channel); assert(handle->audioIoHandle); - const CAudioInfo::EChannel srcChannel = handle->audioIoHandle->getAudioInfo().getChannel(); - audio_channel_e dstChannel = AUDIO_CHANNEL_MONO; + auto srcChannel = handle->audioIoHandle->getAudioInfo().getChannel(); + auto dstChannel = AUDIO_CHANNEL_MONO; __convert_audio_info_channel_2_channel(srcChannel, dstChannel); *channel = dstChannel; @@ -1181,16 +1167,15 @@ int cpp_audio_out_get_channel(audio_out_h output, audio_channel_e *channel) { } int cpp_audio_out_get_sample_type(audio_out_h output, audio_sample_type_e *type) { - audio_io_s* handle = static_cast(output); - try { - if (handle == NULL || type == NULL) + auto handle = static_cast(output); + if (!handle || !type) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, type:%p", output, type); assert(handle->audioIoHandle); - const CAudioInfo::ESampleType srcSampleType = handle->audioIoHandle->getAudioInfo().getSampleType(); - audio_sample_type_e dstSampleType = AUDIO_SAMPLE_TYPE_U8; + auto srcSampleType = handle->audioIoHandle->getAudioInfo().getSampleType(); + auto dstSampleType = AUDIO_SAMPLE_TYPE_U8; __convert_audio_info_sample_type_2_sample_type(srcSampleType, dstSampleType); *type = dstSampleType; @@ -1203,16 +1188,16 @@ int cpp_audio_out_get_sample_type(audio_out_h output, audio_sample_type_e *type) } int cpp_audio_out_get_sound_type(audio_out_h output, sound_type_e *type) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL || type == NULL) + if (!handle || !type) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, type:%p", output, type); assert(handle->audioIoHandle); - const CAudioInfo::EAudioType srcAudioType = handle->audioIoHandle->getAudioInfo().getAudioType(); - sound_type_e dstSoundType = SOUND_TYPE_MEDIA; + auto srcAudioType = handle->audioIoHandle->getAudioInfo().getAudioType(); + auto dstSoundType = SOUND_TYPE_MEDIA; __convert_audio_info_audio_type_2_sound_type(srcAudioType, dstSoundType); *type = dstSoundType; @@ -1225,10 +1210,10 @@ int cpp_audio_out_get_sound_type(audio_out_h output, sound_type_e *type) { } int cpp_audio_out_set_stream_cb(audio_out_h output, audio_out_stream_cb callback, void* user_data) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL || callback == NULL) + if (!handle || !callback) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, callback:%p", output, callback); assert(handle->audioIoHandle); @@ -1237,7 +1222,7 @@ int cpp_audio_out_set_stream_cb(audio_out_h output, audio_out_stream_cb callback handle->stream_callback.onStream = callback; handle->stream_callback.user_data = user_data; - CAudioIO::SStreamCallback cb = handle->audioIoHandle->getStreamCallback(); + auto cb = handle->audioIoHandle->getStreamCallback(); cb.mUserData = static_cast(handle); cb.onStream = __stream_cb_internal; @@ -1253,21 +1238,21 @@ int cpp_audio_out_set_stream_cb(audio_out_h output, audio_out_stream_cb callback } int cpp_audio_out_unset_stream_cb(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p", output); assert(handle->audioIoHandle); AUDIO_IO_LOGD("[%p]", handle); - handle->stream_callback.onStream = NULL; - handle->stream_callback.user_data = NULL; + handle->stream_callback.onStream = nullptr; + handle->stream_callback.user_data = nullptr; - CAudioIO::SStreamCallback cb = handle->audioIoHandle->getStreamCallback(); - cb.mUserData = NULL; - cb.onStream = NULL; + auto cb = handle->audioIoHandle->getStreamCallback(); + cb.mUserData = nullptr; + cb.onStream = nullptr; handle->audioIoHandle->setStreamCallback(cb); } catch (CAudioError& e) { @@ -1281,10 +1266,10 @@ int cpp_audio_out_unset_stream_cb(audio_out_h output) { } int cpp_audio_out_set_state_changed_cb(audio_out_h output, audio_in_state_changed_cb callback, void* user_data) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL || callback == NULL) + if (!handle || !callback) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p, callback:%p", output, callback); assert(handle->audioIoHandle); @@ -1293,7 +1278,7 @@ int cpp_audio_out_set_state_changed_cb(audio_out_h output, audio_in_state_change handle->state_changed_callback.onStateChanged = callback; handle->state_changed_callback.user_data = user_data; - CAudioIO::SStateChangedCallback cb = handle->audioIoHandle->getStateChangedCallback(); + auto cb = handle->audioIoHandle->getStateChangedCallback(); cb.mUserData = static_cast(handle); cb.onStateChanged = __state_changed_cb_internal; @@ -1309,21 +1294,21 @@ int cpp_audio_out_set_state_changed_cb(audio_out_h output, audio_in_state_change } int cpp_audio_out_unset_state_changed_cb(audio_out_h output) { - audio_io_s* handle = static_cast(output); + auto handle = static_cast(output); try { - if (handle == NULL) + if (!handle) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Parameters are NULL output:%p", output); assert(handle->audioIoHandle); AUDIO_IO_LOGD("[%p]", handle); - handle->state_changed_callback.onStateChanged = NULL; - handle->state_changed_callback.user_data = NULL; + handle->state_changed_callback.onStateChanged = nullptr; + handle->state_changed_callback.user_data = nullptr; - CAudioIO::SStateChangedCallback cb = handle->audioIoHandle->getStateChangedCallback(); - cb.mUserData = NULL; - cb.onStateChanged = NULL; + auto cb = handle->audioIoHandle->getStateChangedCallback(); + cb.mUserData = nullptr; + cb.onStateChanged = nullptr; handle->audioIoHandle->setStateChangedCallback(cb); } catch (CAudioError& e) { -- 2.7.4