From: Seungbae Shin Date: Thu, 23 Jun 2016 10:34:00 +0000 (+0900) Subject: Handle pop-timeout event X-Git-Tag: accepted/tizen/common/20160704.145315^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc2b6726dad713920ba385af41a6e2a9ec06cb95;p=platform%2Fcore%2Fapi%2Faudio-io.git Handle pop-timeout event [Version] 0.3.37 [Profile] Common [Issue Type] MPR-381 Change-Id: I0e2f62e63da52b96d6d3f662199a82b9cae753e7 --- diff --git a/include/CPulseAudioClient.h b/include/CPulseAudioClient.h index 33a6681..af3f0c5 100644 --- a/include/CPulseAudioClient.h +++ b/include/CPulseAudioClient.h @@ -111,6 +111,7 @@ namespace tizen_media_audio { static void __streamCaptureCb(pa_stream* s, size_t length, void* user_data); static void __streamPlaybackCb(pa_stream* s, size_t length, void* user_data); static void __streamLatencyUpdateCb(pa_stream* s, void* user_data); + static void __streamEventCb(pa_stream* s, const char *name, pa_proplist *pl, void *user_data); static void __successStreamCb(pa_stream* s, int success, void* user_data); }; diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index f368524..d4f0cfa 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.36 +Version: 0.3.37 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CAudioIO.cpp b/src/cpp/CAudioIO.cpp index d1898f7..e1dd7a2 100644 --- a/src/cpp/CAudioIO.cpp +++ b/src/cpp/CAudioIO.cpp @@ -460,7 +460,7 @@ void CAudioIO::ignoreSession() throw(CAudioError) { try { internalLock(); - if (mpPulseAudioClient != NULL && mpPulseAudioClient->isCorked() == false) { + 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"); } diff --git a/src/cpp/CPulseAudioClient.cpp b/src/cpp/CPulseAudioClient.cpp index da71fe3..f893159 100644 --- a/src/cpp/CPulseAudioClient.cpp +++ b/src/cpp/CPulseAudioClient.cpp @@ -189,6 +189,19 @@ void CPulseAudioClient::__streamLatencyUpdateCb(pa_stream* s, void* user_data) { pa_threaded_mainloop_signal(pClient->__mpMainloop, 0); } +void CPulseAudioClient::__streamEventCb(pa_stream* s, const char *name, pa_proplist *pl, void *user_data) { + assert(s); + assert(user_data); + + AUDIO_IO_LOGE("NAME : %s, Prop : %p", name, pl); + + CPulseAudioClient* pClient = static_cast(user_data); + if (strcmp(name, PA_STREAM_EVENT_POP_TIMEOUT) == 0) { + pa_operation_unref(pa_stream_cork(pClient->__mpStream, 1, NULL, NULL)); + } +} + + void CPulseAudioClient::__successStreamCb(pa_stream* s, int success, void* user_data) { AUDIO_IO_LOGD("pa_stream[%p], success[%d], user_data[%p]", s, success, user_data); assert(s); @@ -296,6 +309,7 @@ void CPulseAudioClient::initialize() throw(CAudioError) { pa_stream_set_read_callback(__mpStream, __streamCaptureCb, this); pa_stream_set_write_callback(__mpStream, __streamPlaybackCb, this); pa_stream_set_latency_update_callback(__mpStream, __streamLatencyUpdateCb, this); + pa_stream_set_event_callback(__mpStream, __streamEventCb, this); // Connect stream with PA Server @@ -572,6 +586,10 @@ int CPulseAudioClient::write(const void* data, size_t length) throw(CAudioError) #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("data[%p], length[%d]", data, length); #endif + if (pa_stream_is_corked(__mpStream)) { + AUDIO_IO_LOGW("stream is corked...do uncork here first!!!!"); + pa_operation_unref(pa_stream_cork(__mpStream, 0, NULL, this)); + } if (isInThread() == false) { pa_threaded_mainloop_lock(__mpMainloop);