From 2590cfd1e97b814139d65ef85c8c3779b6763150 Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Thu, 2 Feb 2017 13:05:48 +0900 Subject: [PATCH] Fix bug regarding ignore session In case of default session(not registering internal focus handle), ignore session API does not work well. Now, the invalid condition has been fixed and finalizing audio session handler when ignore session API has been added. [Version] 0.3.62 [Profile] Common [Issue Type] Bug fix Change-Id: I9e67127d1f855a51073e17ea4982c3c74ce9ac8c Signed-off-by: Sangchul Lee --- include/CAudioSessionHandler.h | 4 ++-- packaging/capi-media-audio-io.spec | 2 +- src/cpp/CAudioIO.cpp | 15 +++++++-------- src/cpp/CAudioSessionHandler.cpp | 17 +++++++++-------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/include/CAudioSessionHandler.h b/include/CAudioSessionHandler.h index 4b6dedc..1c56af8 100644 --- a/include/CAudioSessionHandler.h +++ b/include/CAudioSessionHandler.h @@ -61,7 +61,7 @@ namespace tizen_media_audio { int getOptions(); EAudioSessionType getAudioSession(); MMSessionType getMultimediaSession(); - int getSubscribeId(); + unsigned int getSubscribeId(); CAudioInfo getAudioInfo(); private: @@ -129,7 +129,7 @@ namespace tizen_media_audio { IAudioSessionEventListener* __mpEventListener; bool __mIsInit; - int __mSubscribeId; + unsigned int __mSubscribeId; bool __mUseFocus; mm_sound_focus_type_e __mFocusType; /* For audio focus */ diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index 365e909..9035ac0 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.3.61 +Version: 0.3.62 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CAudioIO.cpp b/src/cpp/CAudioIO.cpp index 7fe98a9..1afcac2 100644 --- a/src/cpp/CAudioIO.cpp +++ b/src/cpp/CAudioIO.cpp @@ -300,7 +300,7 @@ void CAudioIO::onSignal(CAudioSessionHandler* pHandler, mm_sound_signal_name_t s assert(pHandler); if (signal == MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS) { - if (value == 1 && pHandler->getSubscribeId() >= 0) { + if (value == 1 && pHandler->getSubscribeId() > 0) { // Unregister focus watch callback & disable session handler pHandler->disableSessionHandler(); AUDIO_IO_LOGD("Session handler disabled by signal"); @@ -468,22 +468,21 @@ CAudioIO::SInterruptCallback CAudioIO::getInterruptCallback() throw(CAudioError) void CAudioIO::ignoreSession() throw(CAudioError) { - if (__mIsInit == false) { + if (__mIsInit == false) THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Doesn't initialize CAudioIO"); - } try { internalLock(); - if (mpPulseAudioClient != NULL && mState == CAudioInfo::EAudioIOState::AUDIO_IO_STATE_RUNNING) { + if (mpPulseAudioClient != NULL && mState == CAudioInfo::EAudioIOState::AUDIO_IO_STATE_RUNNING) THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_OPERATION, "An Operation is not permitted while started"); - } bool isSkip = mpAudioSessionHandler->isSkipSessionEvent(); - if (isSkip == false && mpAudioSessionHandler->getId() >= 0) { + if (isSkip == false && mpAudioSessionHandler->getId() >= 0) mpAudioSessionHandler->unregisterSound(); - __mForceIgnore = true; - } + + mpAudioSessionHandler->finalize(); + __mForceIgnore = true; internalUnlock(); } catch (CAudioError e) { diff --git a/src/cpp/CAudioSessionHandler.cpp b/src/cpp/CAudioSessionHandler.cpp index a9bfb1c..5a6dbaf 100644 --- a/src/cpp/CAudioSessionHandler.cpp +++ b/src/cpp/CAudioSessionHandler.cpp @@ -88,7 +88,7 @@ CAudioSessionHandler::CAudioSessionHandler(EAudioSessionType sessionType, CAudio __mMultimediaSession(MM_SESSION_TYPE_MEDIA), __mpEventListener(listener), __mIsInit(false), - __mSubscribeId(-1), + __mSubscribeId(0), __mUseFocus(false), __mFocusType(FOCUS_NONE), __mState(FOCUS_IS_RELEASED), @@ -176,7 +176,7 @@ MMSessionType CAudioSessionHandler::getMultimediaSession() { return __mMultimediaSession; } -int CAudioSessionHandler::getSubscribeId() { +unsigned int CAudioSessionHandler::getSubscribeId() { return __mSubscribeId; } @@ -217,13 +217,13 @@ void CAudioSessionHandler::initialize() throw(CAudioError) { if (err == CAudioError::EError::ERROR_INVALID_HANDLE) { // No session, No stream_info, No focus watch callback before // Use focus watch callback with signal subscribe - unsigned int subscribe_id; - int errorCode = mm_sound_subscribe_signal(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS, &subscribe_id, __sound_pcm_signal_cb, static_cast(this)); - if (errorCode != MM_ERROR_NONE) { - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed mm_sound_subscribe_signal() err:0x%x", errorCode); + + int errorCode = mm_sound_subscribe_signal(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS, &__mSubscribeId, __sound_pcm_signal_cb, static_cast(this)); + if (errorCode != MM_ERROR_NONE || __mSubscribeId == 0) { + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_FAILED_OPERATION, "Failed mm_sound_subscribe_signal() err:0x%x, __mSubscribeId:%u", + errorCode, __mSubscribeId); } - __mSubscribeId = (int)subscribe_id; AUDIO_IO_LOGD("Subscribed mm_sound signal"); sessionOptions = 0; // Mix with others by default @@ -264,8 +264,9 @@ void CAudioSessionHandler::finalize() { __pcmCaptureCountDec(); } - if (__mSubscribeId >= 0) { + if (__mSubscribeId > 0) { mm_sound_unsubscribe_signal(__mSubscribeId); + __mSubscribeId = 0; } __mpEventListener = NULL; -- 2.7.4