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 61ed141be02f9da057f3fe12095a9b631a04d056..e683c6c0cfad95a3156c2e6bd681dc667c34ed9b 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 47e6e621b80d2e96d259fcd201459b6a4c71d4f0..f9100e2c4df27d9a02e6e5798b83d76dd00db1c6 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 6c38ccb19b0bc9091d5252a321ae73628315e1d0..f368524844c09e5bf7d660596f1c14a5c58e577d 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 6ff56b3058cfd31824f019ffa8b8f6895b9a857a..d429f66381279810079abbc62599e60d86d72d67 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 ca3eb6132af979ed181ddbcf2fc6c2a9508170cb..da71fe3569e2b0184fac7cbffc9c4f4b77f65c58 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 667381d959428d314b543909a09a891a80ca3620..936873fba6128c2e8af6d1cf145d350f826e36c7 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 f6ad17777d01a66b33fc4ea0a345e1cee47dc09e..81043ce6a0a58e8518db5151086b88eb4c3ff36d 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;
                }