Fix bug regarding ignore session 15/112615/1 accepted/tizen/3.0/common/20170203.150913 accepted/tizen/3.0/ivi/20170203.090338 accepted/tizen/3.0/mobile/20170203.090131 accepted/tizen/3.0/tv/20170203.090236 accepted/tizen/3.0/wearable/20170203.090309 submit/tizen_3.0/20170202.094603
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 2 Feb 2017 04:05:48 +0000 (13:05 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 2 Feb 2017 04:09:16 +0000 (13:09 +0900)
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 <sc11.lee@samsung.com>
include/CAudioSessionHandler.h
packaging/capi-media-audio-io.spec
src/cpp/CAudioIO.cpp
src/cpp/CAudioSessionHandler.cpp

index 4b6dedc..1c56af8 100644 (file)
@@ -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 */
index 365e909..9035ac0 100644 (file)
@@ -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
index 7fe98a9..1afcac2 100644 (file)
@@ -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) {
index a9bfb1c..5a6dbaf 100644 (file)
@@ -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<void*>(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<void*>(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;