From: Sangchul Lee Date: Thu, 28 Apr 2016 07:57:36 +0000 (+0900) Subject: Forward stream state change callback with "policy = true" when it is caused by Device... X-Git-Tag: accepted/tizen/common/20160504.125843~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e2e925a07ae1b75aa8300aeed0419d16c4eccb2c;p=platform%2Fcore%2Fapi%2Faudio-io.git Forward stream state change callback with "policy = true" when it is caused by Device Policy Manager [Version] 0.3.31 [Profile] Common [Issue Type] Feature enhancement Change-Id: I39e97c0818d9fe7fec1978a9f84f0b261e98b225 Signed-off-by: Sangchul Lee --- diff --git a/CMakeLists.txt b/CMakeLists.txt index d74b452..4eceba8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(INC_DIR include) INCLUDE_DIRECTORIES(${INC_DIR}) -SET(dependents "dlog mm-sound capi-base-common capi-media-sound-manager mm-common mm-session libpulse vconf") +SET(dependents "dlog mm-sound capi-base-common capi-media-sound-manager mm-common mm-session libpulse vconf dpm") SET(pc_dependents "capi-base-common capi-media-sound-manager") INCLUDE(FindPkgConfig) @@ -31,6 +31,7 @@ ENDIF("${ARCH}" STREQUAL "arm") ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") ADD_DEFINITIONS("-DTIZEN_DEBUG") +ADD_DEFINITIONS("-DENABLE_DPM") #ADD_DEFINITIONS("-D_AUDIO_IO_DEBUG_TIMING_") SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIB_INSTALL_DIR}") diff --git a/include/IPulseStreamListener.h b/include/IPulseStreamListener.h index 3a2e75d..5f55b33 100644 --- a/include/IPulseStreamListener.h +++ b/include/IPulseStreamListener.h @@ -35,6 +35,7 @@ namespace tizen_media_audio { public: virtual void onStream(CPulseAudioClient* pClient, size_t length) = 0; virtual void onStateChanged(CAudioInfo::EAudioIOState state) = 0; + virtual void onStateChanged(CAudioInfo::EAudioIOState state, bool policy) = 0; }; diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index 3fc298a..a28f416 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.30 +Version: 0.3.31 Release: 0 Group: Multimedia/API License: Apache-2.0 @@ -15,6 +15,7 @@ BuildRequires: pkgconfig(vconf) BuildRequires: pkgconfig(capi-media-sound-manager) BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(dpm) %description An Audio Input & Audio Output library in Tizen Native API diff --git a/src/cpp/CPulseAudioClient.cpp b/src/cpp/CPulseAudioClient.cpp index ed065cb..ca3eb61 100644 --- a/src/cpp/CPulseAudioClient.cpp +++ b/src/cpp/CPulseAudioClient.cpp @@ -17,7 +17,10 @@ #include #include "CAudioIODef.h" - +#ifdef ENABLE_DPM +#include +#include +#endif using namespace std; using namespace tizen_media_audio; @@ -87,6 +90,28 @@ void CPulseAudioClient::__successContextCb(pa_context* c, int success, void* use pa_threaded_mainloop_signal(pClient->__mpMainloop, 0); } +static bool __is_microphone_restricted(void) { + int state = 1; +#ifdef ENABLE_DPM + dpm_context_h dpm_ctx_h; + dpm_restriction_policy_h dpm_policy_h; + int ret = 0; + + if ((dpm_ctx_h = dpm_context_create())) { + if ((dpm_policy_h = dpm_context_acquire_restriction_policy(dpm_ctx_h))) { + /* state: 0(disallowed), 1(allowed) */ + if ((ret = dpm_restriction_get_microphone_state(dpm_policy_h, &state))) + AUDIO_IO_LOGE("Failed to dpm_restriction_get_microphone_state(), ret(0x%x)", ret); + dpm_context_release_restriction_policy(dpm_ctx_h, dpm_policy_h); + } else + AUDIO_IO_LOGE("Failed to dpm_context_acquire_restriction_policy()"); + dpm_context_destroy(dpm_ctx_h); + } else + AUDIO_IO_LOGE("Failed to dpm_context_create()"); +#endif + return (state ? false : true); +} + void CPulseAudioClient::__streamStateChangeCb(pa_stream* s, void* user_data) { assert(s); assert(user_data); @@ -102,7 +127,8 @@ void CPulseAudioClient::__streamStateChangeCb(pa_stream* s, void* user_data) { case PA_STREAM_FAILED: AUDIO_IO_LOGD("The stream is failed"); - pClient->__mpListener->onStateChanged(CAudioInfo::EAudioIOState::AUDIO_IO_STATE_IDLE); + pClient->__mpListener->onStateChanged(CAudioInfo::EAudioIOState::AUDIO_IO_STATE_IDLE, + __is_microphone_restricted()); pa_threaded_mainloop_signal(pClient->__mpMainloop, 0); break;