Add error case of device policy restriction for audio_in_prepare() 45/69845/7 accepted/tizen/common/20160531.141855 accepted/tizen/ivi/20160602.022052 accepted/tizen/mobile/20160602.022128 accepted/tizen/tv/20160602.021912 accepted/tizen/wearable/20160602.022023 submit/tizen/20160530.013417
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 17 May 2016 04:37:57 +0000 (13:37 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 24 May 2016 05:59:58 +0000 (14:59 +0900)
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
include/audio_io.h
packaging/capi-media-audio-io.spec
src/cpp/CAudioError.cpp
src/cpp/CPulseAudioClient.cpp
src/cpp/cpp_audio_io.cpp
test/audio_io_test.c

index 61ed141..e683c6c 100644 (file)
@@ -47,6 +47,7 @@ namespace tizen_media_audio {
 
             ERROR_PERMISSION_DENIED,
 
+            ERROR_DEVICE_POLICY_RESTRICTION,
             ERROR_DEVICE_NOT_OPENED,
             ERROR_DEVICE_NOT_CLOSED,
 
index 47e6e62..f9100e2 100644 (file)
@@ -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.
index 6c38ccb..f368524 100644 (file)
@@ -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
index 6ff56b3..d429f66 100644 (file)
@@ -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;
index ca3eb61..da71fe3 100644 (file)
@@ -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 */
index 667381d..936873f 100644 (file)
@@ -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;
index f6ad177..81043ce 100644 (file)
@@ -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;
                }