From 50decba9f24c45652f621373f264123aeba7de9e Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Tue, 17 May 2016 13:37:57 +0900 Subject: [PATCH] Add error case of device policy restriction for audio_in_prepare() audio_in_prepare() can return an error enumerator for device policy restriction when pulseaudio does not work well due to the access denied. print error value in audio_io_test.c [Version] 0.3.36 [Profile] Common [Issue Type] Feature enhancement Change-Id: Icc1573c4ec97116d5455cad50631508aee55030e --- include/CAudioError.h | 1 + include/audio_io.h | 2 ++ packaging/capi-media-audio-io.spec | 2 +- src/cpp/CAudioError.cpp | 1 + src/cpp/CPulseAudioClient.cpp | 6 +++++- src/cpp/cpp_audio_io.cpp | 3 +++ test/audio_io_test.c | 12 ++++++------ 7 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/CAudioError.h b/include/CAudioError.h index 61ed141..e683c6c 100644 --- a/include/CAudioError.h +++ b/include/CAudioError.h @@ -47,6 +47,7 @@ namespace tizen_media_audio { ERROR_PERMISSION_DENIED, + ERROR_DEVICE_POLICY_RESTRICTION, ERROR_DEVICE_NOT_OPENED, ERROR_DEVICE_NOT_CLOSED, diff --git a/include/audio_io.h b/include/audio_io.h index 47e6e62..f9100e2 100644 --- a/include/audio_io.h +++ b/include/audio_io.h @@ -104,6 +104,7 @@ typedef enum { AUDIO_IO_ERROR_INVALID_OPERATION = TIZEN_ERROR_INVALID_OPERATION, /**< Invalid operation */ AUDIO_IO_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Device open error by security */ AUDIO_IO_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */ + AUDIO_IO_ERROR_DEVICE_POLICY_RESTRICTION = TIZEN_ERROR_DEVICE_POLICY_RESTRICTION, /**< Device policy restriction (Since 3.0) */ AUDIO_IO_ERROR_DEVICE_NOT_OPENED = TIZEN_ERROR_AUDIO_IO | 0x01, /**< Device open error */ AUDIO_IO_ERROR_DEVICE_NOT_CLOSED = TIZEN_ERROR_AUDIO_IO | 0x02, /**< Device close error */ AUDIO_IO_ERROR_INVALID_BUFFER = TIZEN_ERROR_AUDIO_IO | 0x03, /**< Invalid buffer pointer */ @@ -299,6 +300,7 @@ int audio_in_set_stream_info(audio_in_h input, sound_stream_info_h stream_info); * @retval #AUDIO_IO_ERROR_NONE Successful * @retval #AUDIO_IO_ERROR_INVALID_PARAMETER Invalid parameter * @retval #AUDIO_IO_ERROR_NOT_SUPPORTED Not supported + * @retval #AUDIO_IO_ERROR_DEVICE_POLICY_RESTRICTION Device policy restriction * @retval #AUDIO_IO_ERROR_INVALID_STATE Invalid state * * @post The state will be #AUDIO_IO_STATE_RUNNING. diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index 6c38ccb..f368524 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.35 +Version: 0.3.36 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CAudioError.cpp b/src/cpp/CAudioError.cpp index 6ff56b3..d429f66 100644 --- a/src/cpp/CAudioError.cpp +++ b/src/cpp/CAudioError.cpp @@ -92,6 +92,7 @@ const char* CAudioError::__convertErrorToString(EError err) { case EError::ERROR_NOT_SUPPORTED: return COLOR_RED "ERROR_NOT_SUPPORTED" COLOR_END; case EError::ERROR_NOT_SUPPORTED_TYPE: return COLOR_RED "ERROR_NOT_SUPPORTED_TYPE" COLOR_END; case EError::ERROR_PERMISSION_DENIED: return COLOR_RED "ERROR_PERMISSION_DENIED" COLOR_END; + case EError::ERROR_DEVICE_POLICY_RESTRICTION: return COLOR_RED "ERROR_DEVICE_POLICY_RESTRICTION" COLOR_END; case EError::ERROR_DEVICE_NOT_OPENED: return COLOR_RED "ERROR_DEVICE_NOT_OPENED" COLOR_END; case EError::ERROR_DEVICE_NOT_CLOSED: return COLOR_RED "ERROR_DEVICE_NOT_CLOSED" COLOR_END; case EError::ERROR_OUT_OF_MEMORY: return COLOR_RED "ERROR_OUT_OF_MEMORY" COLOR_END; diff --git a/src/cpp/CPulseAudioClient.cpp b/src/cpp/CPulseAudioClient.cpp index ca3eb61..da71fe3 100644 --- a/src/cpp/CPulseAudioClient.cpp +++ b/src/cpp/CPulseAudioClient.cpp @@ -333,7 +333,11 @@ void CPulseAudioClient::initialize() throw(CAudioError) { if (!PA_STREAM_IS_GOOD(state)) { err = pa_context_errno(__mpContext); pa_threaded_mainloop_unlock(__mpMainloop); - THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, "pa_stream's state is not good : err[%d]", err); + if (err == PA_ERR_ACCESS) { + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_DEVICE_POLICY_RESTRICTION, "pa_stream's state is not good : err[%d]", err); + } else { + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, "pa_stream's state is not good : err[%d]", err); + } } /* Wait until the stream is ready */ diff --git a/src/cpp/cpp_audio_io.cpp b/src/cpp/cpp_audio_io.cpp index 667381d..936873f 100644 --- a/src/cpp/cpp_audio_io.cpp +++ b/src/cpp/cpp_audio_io.cpp @@ -114,6 +114,9 @@ static audio_io_error_e __convert_CAudioError(CAudioError& error) { case CAudioError::EError::ERROR_PERMISSION_DENIED: ret = AUDIO_IO_ERROR_PERMISSION_DENIED; break; + case CAudioError::EError::ERROR_DEVICE_POLICY_RESTRICTION: + ret = AUDIO_IO_ERROR_DEVICE_POLICY_RESTRICTION; + break; case CAudioError::EError::ERROR_NOT_SUPPORTED: ret = AUDIO_IO_ERROR_NOT_SUPPORTED; break; diff --git a/test/audio_io_test.c b/test/audio_io_test.c index f6ad177..81043ce 100644 --- a/test/audio_io_test.c +++ b/test/audio_io_test.c @@ -246,13 +246,13 @@ int audio_io_loopback_test() ret = audio_in_prepare(input); if (ret != 0) { - printf("audio_in_prepare failed.\n"); + printf("audio_in_prepare failed, err(0x%x)\n", ret); audio_in_destroy(input); return 0; } else { ret = audio_in_get_buffer_size(input, &size); if (ret != AUDIO_IO_ERROR_NONE) { - printf("audio_in_get_buffer_size failed.\n"); + printf("audio_in_get_buffer_size failed, err(0x%x)\n", ret); return 0; } else { printf("size(%d)\n", size); @@ -262,7 +262,7 @@ int audio_io_loopback_test() ret = audio_out_prepare(output); if (ret != 0) { - printf("audio_out_prepare failed.\n"); + printf("audio_out_prepare failed, err(0x%x)\n", ret); audio_out_destroy(output); return 0; } @@ -529,13 +529,13 @@ int audio_io_async_test(int mode) printf("audio_in_prepare\n"); ret = audio_in_prepare(input); if (ret != 0) { - printf("audio_in_prepare failed.\n"); + printf("audio_in_prepare failed, err(0x%x)\n", ret); audio_in_destroy(input); goto EXIT; } else { ret = audio_in_get_buffer_size(input, &size); if (ret != AUDIO_IO_ERROR_NONE) { - printf("audio_in_get_buffer_size failed.\n"); + printf("audio_in_get_buffer_size failed, err(0x%x)\n", ret); goto EXIT; } else { printf("size(%d)\n", size); @@ -555,7 +555,7 @@ int audio_io_async_test(int mode) printf("audio_out_prepare\n"); ret = audio_out_prepare(output); if (ret != 0) { - printf("audio_out_prepare failed.\n"); + printf("audio_out_prepare failed, err(0x%x)\n", ret); audio_out_destroy(output); goto EXIT; } -- 2.7.4