X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcpp%2FCAudioOutput.cpp;h=f96f78fdbe9db2336ebd235758ab59af8797c9c5;hb=e80f5c2cd31f1f5c238b6a82849bd31b64107e7b;hp=6760f2e358ac1a963a52a1c96252c4cbbb8ff335;hpb=839418c0eb455971b9bb2ed07eb4aea5b9ecfbfd;p=platform%2Fcore%2Fapi%2Faudio-io.git diff --git a/src/cpp/CAudioOutput.cpp b/src/cpp/CAudioOutput.cpp index 6760f2e..f96f78f 100644 --- a/src/cpp/CAudioOutput.cpp +++ b/src/cpp/CAudioOutput.cpp @@ -147,19 +147,17 @@ void CAudioOutput::prepare() { return; } - try { - internalLock(); - - // Check to invalid AudioType - CAudioInfo::EAudioType audioType = mAudioInfo.getAudioType(); - if (audioType < CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA || audioType >= CAudioInfo::EAudioType::AUDIO_TYPE_MAX) { - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, - "The audioType is invalid [type:%d]", static_cast(audioType)); - } + /* Check invalid AudioType */ + CAudioInfo::EAudioType audioType = mAudioInfo.getAudioType(); + if (audioType < CAudioInfo::EAudioType::AUDIO_OUT_TYPE_MEDIA || audioType >= CAudioInfo::EAudioType::AUDIO_TYPE_MAX) { + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, + "The audioType is invalid [type:%d]", static_cast(audioType)); + } + try { if (mpAudioSessionHandler->getId() < 0) { // Did not registerSound() if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) { - // Register ASM Listener + /* Register ASM Listener */ AUDIO_IO_LOGD("Register ASM Listener"); mpAudioSessionHandler->registerSound(); } @@ -167,7 +165,14 @@ void CAudioOutput::prepare() { CAudioIO::setInternalStreamInfo(); - // Init StreamSpec + if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) + mpAudioSessionHandler->updatePlaying(); + } catch (CAudioError& e) { + throw; + } + + try { + /* Init StreamSpec */ CPulseStreamSpec::EStreamLatency streamSpec = CPulseStreamSpec::EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT; #ifndef DISABLE_MOBILE_BACK_COMP if (!mStreamCallback.onStream) { @@ -180,17 +185,15 @@ void CAudioOutput::prepare() { #endif CPulseStreamSpec spec(streamSpec, mAudioInfo); - // Create PulseAudio Handler + internalLock(); + + /* Create PulseAudio Handler */ mpPulseAudioClient = new CPulseAudioClient(CPulseAudioClient::EStreamDirection::STREAM_DIRECTION_PLAYBACK, spec, this); - // Initialize PulseAudio Handler + /* Initialize PulseAudio Handler */ mpPulseAudioClient->initialize(); - - if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) - mpAudioSessionHandler->updatePlaying(); - #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(); @@ -221,9 +224,7 @@ void CAudioOutput::unprepare() { try { if (mpAudioSessionHandler->getId() >= 0 && !mIsInterrupted) { if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) { - CPulseStreamSpec::EStreamLatency streamSpec; - streamSpec = mpPulseAudioClient->getStreamSpec().getStreamLatency(); - if (CPulseStreamSpec::EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC != streamSpec) + if (mStreamCallback.onStream == NULL) CAudioIO::drain(); } } @@ -236,11 +237,16 @@ void CAudioOutput::unprepare() { internalUnlock(); + } catch (CAudioError& e) { + internalUnlock(); + throw; + } + + try { if (mpAudioSessionHandler->getId() >= 0) { if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) mpAudioSessionHandler->updateStop(); } - CAudioIO::onStateChanged(CAudioInfo::EAudioIOState::AUDIO_IO_STATE_IDLE); } catch (CAudioError& e) { internalUnlock(); @@ -266,17 +272,8 @@ void CAudioOutput::pause() { try { CAudioIO::pause(); - internalLock(); - - /* Updates ASM to STOP */ - if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) - mpAudioSessionHandler->updateStop(); - - internalUnlock(); - CAudioIO::onStateChanged(CAudioInfo::EAudioIOState::AUDIO_IO_STATE_PAUSED); } catch (CAudioError& e) { - internalUnlock(); throw; } } @@ -297,32 +294,21 @@ void CAudioOutput::resume() { } try { - internalLock(); - - if (isForceIgnore() == false && mpAudioSessionHandler->isSkipSession() == false) - mpAudioSessionHandler->updatePlaying(); - - internalUnlock(); - CAudioIO::resume(); CAudioIO::onStateChanged(CAudioInfo::EAudioIOState::AUDIO_IO_STATE_RUNNING); } catch (CAudioError& e) { - internalUnlock(); throw; } } void CAudioOutput::drain() { - CPulseStreamSpec::EStreamLatency streamSpec; - if (__IsInit() == false || __IsReady() == false) { THROW_ERROR_MSG(CAudioError::EError::ERROR_NOT_INITIALIZED, "Did not initialize or prepare CAudioOutput"); } - streamSpec = mpPulseAudioClient->getStreamSpec().getStreamLatency(); - if (CPulseStreamSpec::EStreamLatency::STREAM_LATENCY_OUTPUT_DEFAULT_ASYNC == streamSpec) + if (mStreamCallback.onStream) THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_OPERATION, "async type don't support drain"); try {