Rearrange internalLock()
[platform/core/api/audio-io.git] / src / cpp / CAudioInput.cpp
index 22f2b01..59eeb40 100644 (file)
@@ -255,20 +255,17 @@ void CAudioInput::prepare() {
         return;
     }
 
-    try {
-        internalLock();
-
-        // Check to invalid AudioType
-        CAudioInfo::EAudioType audioType = mAudioInfo.getAudioType();
-        if (audioType < CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA || audioType >= CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA) {
-            THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
-                                   "The audioType is invalid [type:%d]", static_cast<int>(audioType));
-        }
+    /* Check invalid AudioType */
+    CAudioInfo::EAudioType audioType = mAudioInfo.getAudioType();
+    if (audioType < CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA || audioType >= CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA) {
+        THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
+                               "The audioType is invalid [type:%d]", static_cast<int>(audioType));
+    }
 
-        if (mpAudioSessionHandler->getId() < 0) {  // Did not registerSound()
-            // Check session to skip registration
+    try {
+        if (mpAudioSessionHandler->getId() < 0) {
             if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) {
-                // Register ASM Listener
+                /* Register ASM Listener */
                 AUDIO_IO_LOGD("Register ASM Listener");
                 mpAudioSessionHandler->registerSound();
             }
@@ -276,27 +273,32 @@ void CAudioInput::prepare() {
 
         CAudioIO::setInternalStreamInfo();
 
-        // Init StreamSpec
+        if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false)
+            mpAudioSessionHandler->updatePlaying();
+    } catch (CAudioError& e) {
+        throw;
+    }
+
+    try {
+        /* Init StreamSpec */
         AUDIO_IO_LOGD("Set Stream Spec : CPulseStreamSpec::STREAM_LATENCY_INPUT_DEFAULT");
         CPulseStreamSpec::EStreamLatency streamSpec = CPulseStreamSpec::EStreamLatency::STREAM_LATENCY_INPUT_DEFAULT;
         CPulseStreamSpec spec(streamSpec, mAudioInfo);
 
-        // Create PulseAudio Handler
-        mpPulseAudioClient = new CPulseAudioClient(CPulseAudioClient::EStreamDirection::STREAM_DIRECTION_RECORD, spec, this);
+        internalLock();
 
-        if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false)
-            mpAudioSessionHandler->updatePlaying();
+        /* Create PulseAudio Handler */
+        mpPulseAudioClient = new CPulseAudioClient(CPulseAudioClient::EStreamDirection::STREAM_DIRECTION_RECORD, spec, this);
 
-        // Initialize PulseAudio Handler
+        /* Initialize PulseAudio Handler */
         mpPulseAudioClient->initialize();
 #ifndef DISABLE_MOBILE_BACK_COMP
-        // Uncork stream which is created with CORKED flag */
+        /* Uncork stream which is created with CORKED flag */
         mpPulseAudioClient->cork(false);
 #endif
 
         internalUnlock();
 
-        // Do Prepare
         CAudioIO::prepare();
     } catch (CAudioError& e) {
         SAFE_FINALIZE(mpPulseAudioClient);
@@ -329,7 +331,12 @@ void CAudioInput::unprepare() {
         SAFE_DELETE(mpPulseAudioClient);
 
         internalUnlock();
+    } catch (CAudioError& e) {
+        internalUnlock();
+        throw;
+    }
 
+    try {
         if (mpAudioSessionHandler->getId() >= 0) {
             if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false)
                 mpAudioSessionHandler->updateStop();