X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcpp%2FCAudioIO.cpp;h=3115d7508fdf71fdb3a0bc58f597bbd4b29391d7;hb=7e68f23b5f16efde5e3e15148f186058516a131a;hp=00cfd59828dff64cada43f43fddcbeaf37112afc;hpb=21d318cb7a2937e83f885654746467855b0798ba;p=platform%2Fcore%2Fapi%2Faudio-io.git diff --git a/src/cpp/CAudioIO.cpp b/src/cpp/CAudioIO.cpp index 00cfd59..3115d75 100644 --- a/src/cpp/CAudioIO.cpp +++ b/src/cpp/CAudioIO.cpp @@ -15,7 +15,6 @@ */ -#include #include #include "CAudioIODef.h" #include @@ -32,9 +31,6 @@ using namespace tizen_media_audio; //LCOV_EXCL_START CAudioIO::CAudioIO() : mpPulseAudioClient(nullptr), - __mMutex(PTHREAD_MUTEX_INITIALIZER), - __mCondMutex(PTHREAD_MUTEX_INITIALIZER), - __mCond(PTHREAD_COND_INITIALIZER), __mIsInit(false) { mDirection = CAudioInfo::EAudioDirection::AUDIO_DIRECTION_MAX; mState = CAudioInfo::EAudioIOState::AUDIO_IO_STATE_NONE; @@ -45,9 +41,6 @@ CAudioIO::CAudioIO() : CAudioIO::CAudioIO(CAudioInfo& audioInfo) : mpPulseAudioClient(nullptr), - __mMutex(PTHREAD_MUTEX_INITIALIZER), - __mCondMutex(PTHREAD_MUTEX_INITIALIZER), - __mCond(PTHREAD_COND_INITIALIZER), __mIsInit(false) { mAudioInfo = audioInfo; mDirection = CAudioInfo::EAudioDirection::AUDIO_DIRECTION_MAX; @@ -69,89 +62,11 @@ bool CAudioIO::IsReady() { mState == CAudioInfo::EAudioIOState::AUDIO_IO_STATE_PAUSED)); } -void CAudioIO::internalLock() { - if (!__mIsInit) - THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); //LCOV_EXCL_LINE - - if (pthread_mutex_lock(&__mMutex) != 0) - THROW_ERROR_MSG(CAudioError::EError::ERROR_INTERNAL_OPERATION, "Failed pthread_mutex_lock()"); //LCOV_EXCL_LINE - -#ifdef _AUDIO_IO_DEBUG_TIMING_ - AUDIO_IO_LOGD(COLOR_RED "%p LOCKED" COLOR_END, &__mMutex); -#endif -} - -void CAudioIO::internalUnlock() { - if (!__mIsInit) - THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); //LCOV_EXCL_LINE - - if (pthread_mutex_unlock(&__mMutex) != 0) - THROW_ERROR_MSG(CAudioError::EError::ERROR_INTERNAL_OPERATION, "Failed pthread_mutex_lock()"); //LCOV_EXCL_LINE - -#ifdef _AUDIO_IO_DEBUG_TIMING_ - AUDIO_IO_LOGD(COLOR_GREEN "%p UNLOCKED" COLOR_END, &__mMutex); -#endif -} - -void CAudioIO::internalWait() { - if (!__mIsInit) - THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); //LCOV_EXCL_LINE - -#ifdef _AUDIO_IO_DEBUG_TIMING_ - AUDIO_IO_LOGD(COLOR_RED "WAIT" COLOR_END); -#endif - pthread_mutex_lock(&__mCondMutex); - - struct timeval now = { 0, }; - struct timeval to_wait = { 0, }; - struct timeval until = { 0, }; - struct timespec until_ts = { 0, }; - - constexpr int COND_TIMEOUT_MS = 200; - - gettimeofday(&now, nullptr); - to_wait.tv_sec = COND_TIMEOUT_MS / 1000UL; - to_wait.tv_usec = (COND_TIMEOUT_MS % 1000UL) * 1000UL; - timeradd(&now, &to_wait, &until); - until_ts.tv_sec = until.tv_sec; - until_ts.tv_nsec = until.tv_usec * 1000UL; - - int ret = pthread_cond_timedwait(&__mCond, &__mCondMutex, &until_ts); - if (ret != 0) { - char str_error[256]; - AUDIO_IO_LOGE("pthread_cond_timedwait error=[%d][%s]", ret, strerror_r(ret, str_error, sizeof(str_error))); - } - - pthread_mutex_unlock(&__mCondMutex); -} - -void CAudioIO::internalSignal() { - if (!__mIsInit) - THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); //LCOV_EXCL_LINE - -#ifdef _AUDIO_IO_DEBUG_TIMING_ - AUDIO_IO_LOGD(COLOR_GREEN "SIGNAL" COLOR_END); -#endif - - pthread_mutex_lock(&__mCondMutex); - pthread_cond_signal(&__mCond); - pthread_mutex_unlock(&__mCondMutex); -} - void CAudioIO::initialize() { if (__mIsInit) return; AUDIO_IO_LOGD("initialize"); - - int ret = pthread_mutex_init(&__mMutex, NULL); - if (ret != 0) - THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pthread_mutex_init()"); //LCOV_EXCL_LINE - - ret = pthread_cond_init(&__mCond, NULL); - if (ret != 0) - THROW_ERROR_MSG(CAudioError::EError::ERROR_OUT_OF_MEMORY, "Failed pthread_cond_init()"); //LCOV_EXCL_LINE - __mIsInit = true; } @@ -160,35 +75,6 @@ void CAudioIO::finalize() { return; AUDIO_IO_LOGD("finalize"); - - bool error_occured = false; - int ret = pthread_mutex_destroy(&__mMutex); - if (ret != 0) { -//LCOV_EXCL_START - AUDIO_IO_LOGE("Failed pthread_mutex_destroy(%p) errno:%d", &__mMutex, ret); - error_occured = true; -//LCOV_EXCL_STOP - } - - ret = pthread_mutex_destroy(&__mCondMutex); - if (ret != 0) { -//LCOV_EXCL_START - AUDIO_IO_LOGE("Failed cond pthread_mutex_destroy(%p) errno:%d", &__mCondMutex, ret); - error_occured = true; -//LCOV_EXCL_STOP - } - - ret = pthread_cond_destroy(&__mCond); - if (ret != 0) { -//LCOV_EXCL_START - AUDIO_IO_LOGE("Failed pthread_cond_destroy(%p) errno:%d", &__mCond, ret); - error_occured = true; -//LCOV_EXCL_STOP - } - - if (error_occured) - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, "Finalize Failed"); //LCOV_EXCL_LINE - __mIsInit = false; } @@ -251,48 +137,27 @@ void CAudioIO::pause() { if (!__mIsInit || !IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioIO"); //LCOV_EXCL_LINE - try { - internalLock(); - AUDIO_IO_LOGD("pause"); - mpPulseAudioClient->cork(true); - internalUnlock(); - } catch (const CAudioError& e) { - internalUnlock(); - throw; - } + std::lock_guard guard(mMutex); + AUDIO_IO_LOGD("pause"); + mpPulseAudioClient->cork(true); } void CAudioIO::resume() { if (!__mIsInit || !IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioIO"); //LCOV_EXCL_LINE - try { - internalLock(); - AUDIO_IO_LOGD("resume"); - mpPulseAudioClient->cork(false); - internalUnlock(); - } catch (const CAudioError& e) { - internalUnlock(); - throw; - } + std::lock_guard guard(mMutex); + mpPulseAudioClient->cork(false); } + void CAudioIO::flush() { if (!__mIsInit || !IsReady()) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioIO"); //LCOV_EXCL_LINE - try { - if (mpPulseAudioClient->isInThread()) { - mpPulseAudioClient->flush(); - } else { - internalLock(); - mpPulseAudioClient->flush(); - internalUnlock(); - } - } catch (const CAudioError& e) { - if (!mpPulseAudioClient->isInThread()) - internalUnlock(); - throw; - } + std::unique_lock defer_mutex(mMutex, std::defer_lock); + if (!mpPulseAudioClient->isInThread()) + defer_mutex.lock(); + mpPulseAudioClient->flush(); } CAudioInfo& CAudioIO::getAudioInfo() {