Check state and isInThread when pause/resume
[platform/core/api/audio-io.git] / src / cpp / CAudioOutput.cpp
index fbbe8ea..19de90f 100644 (file)
@@ -230,6 +230,15 @@ void CAudioOutput::pause() throw(CAudioError) {
         THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput");
     }
 
+    if (CAudioIO::getState() != CAudioInfo::EAudioIOState::AUDIO_IO_STATE_RUNNING) {
+        THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE,
+                        "Can't pause if not in Running state");
+    }
+
+    if (mpPulseAudioClient->isInThread() == true) {
+        THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_OPERATION, "Can't pause in thread");
+    }
+
     try {
         CAudioIO::pause();
 
@@ -254,6 +263,15 @@ void CAudioOutput::resume() throw(CAudioError) {
         THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput");
     }
 
+    if (CAudioIO::getState() != CAudioInfo::EAudioIOState::AUDIO_IO_STATE_PAUSED) {
+        THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_STATE,
+                        "Can't resume if not in Paused state");
+    }
+
+    if (mpPulseAudioClient->isInThread() == true) {
+        THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_OPERATION, "Can't resume in thread");
+    }
+
     try {
         internalLock();