add reason error about storage full when recording
authorjs1002.kim <js1002.kim@samsung.com>
Fri, 7 Jun 2013 12:05:59 +0000 (21:05 +0900)
committerjs1002.kim <js1002.kim@samsung.com>
Fri, 7 Jun 2013 12:05:59 +0000 (21:05 +0900)
Change-Id: I26259ae771510e67bc46cc1b19f72904c16dc812
Signed-off-by: js1002.kim <js1002.kim@samsung.com>
src/FMedia_AudioRecorderImpl.cpp
src/FMedia_AudioRecorderImpl.h
src/FMedia_CameraCoordinator.cpp
src/FMedia_VideoRecorderImpl.cpp
src/FMedia_VideoRecorderImpl.h

index e4661b1..3dea491 100755 (executable)
@@ -98,6 +98,20 @@ static const _AudioCallbackEventTable _AUDIO_CALLBACK_EVENT[] =
        {::RECORDER_STATE_READY, ::RECORDER_STATE_CREATED, _RECORDER_STATE_REASON_NORMAL, _RECORDER_EVENT_CLOSED, E_SUCCESS },
 };
 
+typedef struct
+{
+       recorder_state_e prevState;
+       recorder_state_e postState;
+       result ex;
+       RecorderErrorReason error;
+}_AudioExceptionToErrorTable;
+
+static const _AudioExceptionToErrorTable _AUDIO_EXCEPTION_TO_ERROR[] =
+{
+       {::RECORDER_STATE_READY, ::RECORDER_STATE_RECORDING, E_STORAGE_FULL, RECORDER_ERROR_OUT_OF_STORAGE},
+       {::RECORDER_STATE_PAUSED, ::RECORDER_STATE_RECORDING, E_STORAGE_FULL, RECORDER_ERROR_OUT_OF_STORAGE},
+};
+
 _AudioRecorderImpl::_AudioRecorderImpl(void)
        : __pRecorderRef(null)
        , __pAudioRecorderEvent(null)
@@ -682,7 +696,7 @@ _AudioRecorderImpl::GetSupportedCodecListN(void) const
 
                r = pAudioCodecList->Add((CodecType)pInteger->ToInt());
                SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-               SysLog(NID_MEDIA, "Pixel format : %d was added.", pInteger->ToInt());
+               SysLog(NID_MEDIA, "Codec : 0x%x was added.", pInteger->ToInt());
        }
 
        return pAudioCodecList.release();
@@ -720,7 +734,7 @@ _AudioRecorderImpl::GetSupportedContainerListN(void) const
 
                r = pContainerList->Add((MediaContainerType)pInteger->ToInt());
                SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-               SysLog(NID_MEDIA, "Pixel format : %d was added.", pInteger->ToInt());
+               SysLog(NID_MEDIA, "Container : 0x%x was added.", pInteger->ToInt());
        }
 
        return pContainerList.release();
@@ -792,7 +806,7 @@ _AudioRecorderImpl::SetMute(bool mute)
        SysTryReturn(NID_MEDIA, state == RECORDER_STATE_INITIALIZED
                                || state == RECORDER_STATE_OPENED || state == RECORDER_STATE_ENDOF_FILE || state == RECORDER_STATE_CLOSED
                                || state == RECORDER_STATE_STOPPED || state == RECORDER_STATE_PAUSED || state == RECORDER_STATE_RECORDING
-                          , E_INVALID_STATE, r, "[E_INVALID_STATE] state:%d, AudioRecorder is in an invalid state. AudioRecorder state is %d.", state);
+                          , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] State:%d.", state);
 
        err = recorder_attr_set_mute(__handle, mute);
        r = ConvertResult(err);
@@ -837,7 +851,8 @@ _AudioRecorderImpl::ConvertResult(int err) const
        {
                r = E_OUT_OF_MEMORY;
        }
-       else if (err == ::RECORDER_ERROR_DEVICE)
+       else if (err == ::RECORDER_ERROR_DEVICE
+               || err == ::RECORDER_ERROR_ESD)
        {
                r = E_DEVICE_FAILED;
        }
@@ -850,6 +865,10 @@ _AudioRecorderImpl::ConvertResult(int err) const
        {
                r = E_DEVICE_BUSY;
        }
+       else if (err == ::RECORDER_ERROR_OUT_OF_STORAGE)
+       {
+               r = E_STORAGE_FULL;
+       }
        else
        {
                r = E_UNKNOWN;
@@ -872,7 +891,7 @@ _AudioRecorderImpl::ConvertErrorReason(int err) const
        {
                r = RECORDER_ERROR_NONE;
        }
-       else if (err == 0x80000006)     //temporary code. until out of storage error type is added.
+       else if (err == ::RECORDER_ERROR_OUT_OF_STORAGE)
        {
                r = RECORDER_ERROR_OUT_OF_STORAGE;
        }
@@ -1093,7 +1112,30 @@ _AudioRecorderImpl::ChangeStateTo(recorder_state_e mmDestState, _RecorderStateCh
 
 CATCH:
        SysLog(NID_MEDIA, "[%s] Real preState:%d, param mmDestState:%d", GetErrorMessage(r), preState, mmDestState);
-       return r;
+       return CheckExceptionToError(preState, mmDestState, r);
+}
+
+result
+_AudioRecorderImpl::CheckExceptionToError(recorder_state_e prevState, recorder_state_e postState, result ex)
+{
+       result r = E_SUCCESS;
+       bool findFlag = false;
+       int tableTotalCount = sizeof(_AUDIO_EXCEPTION_TO_ERROR) / sizeof(_AUDIO_EXCEPTION_TO_ERROR[0]);
+       SysLog(NID_MEDIA, "State prev:%d, post:%d, exception:%s", prevState, postState, GetErrorMessage(ex));
+
+       for (int i = 0; i < tableTotalCount; i++)
+       {
+               if (prevState == _AUDIO_EXCEPTION_TO_ERROR[i].prevState && postState == _AUDIO_EXCEPTION_TO_ERROR[i].postState && ex == _AUDIO_EXCEPTION_TO_ERROR[i].ex)
+               {
+                       r = GetEvent()->SendEvent(_RECORDER_EVENT_ERROR, _AUDIO_EXCEPTION_TO_ERROR[i].error, E_SUCCESS);
+                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. i:%d", GetErrorMessage(r), i);
+
+                       SysLog(NID_MEDIA, "Exception is changed to E_SUCCESS and it sends error event.");
+                       findFlag = true;
+                       break;
+               }
+       }
+       return findFlag == true ? E_SUCCESS : ex;
 }
 
 _RecorderStateChangeReason
index 6937af2..5aa732c 100755 (executable)
@@ -576,6 +576,19 @@ private:
        result ChangeStateTo(recorder_state_e mmDestState, _RecorderStateChangeReason reason);
 
        /**
+       * Check the exception to error.
+       *
+       * @return       An error code
+       * @param[in]    prevState             recorder's previous state
+       * @param[in]    postState             recorder's post state
+       * @param[in]    ex           The exception
+       * @remarks      This method checkes the the recorder's exception. @n
+       *                       If the managed exception is occuring in specific states, recorder makes the exception to E_SUCCESS and sends error event @n
+       *                       to call IAudioRecorderEventListener::OnAudioRecorderErrorOccurred().
+       */
+       result CheckExceptionToError(recorder_state_e prevState, recorder_state_e postState, result ex);
+
+       /**
        * Checks the operation is for completing.
        *
        * @return               The state change reason
index ad0e2b7..60c0562 100755 (executable)
@@ -1019,49 +1019,55 @@ result
 _CameraCoordinator::ConvertResult(int err) const
 {
        result r = E_SYSTEM;
-       if (err != CAMERA_ERROR_NONE)
+       if (err != ::CAMERA_ERROR_NONE)
        {
                SysLog(NID_MEDIA, "MM Err:0x%x", err);
        }
 
        // Global error
-       if (err == CAMERA_ERROR_NONE || err == RECORDER_ERROR_NONE)
+       if (err == ::CAMERA_ERROR_NONE || err == ::RECORDER_ERROR_NONE)
        {
                r = E_SUCCESS;
        }
-       else if (err == CAMERA_ERROR_INVALID_PARAMETER || err == RECORDER_ERROR_INVALID_PARAMETER)
+       else if (err == ::CAMERA_ERROR_INVALID_PARAMETER || err == ::RECORDER_ERROR_INVALID_PARAMETER)
        {
                r = E_INVALID_ARG;
        }
-       else if (err == CAMERA_ERROR_INVALID_STATE || err == RECORDER_ERROR_INVALID_STATE)
+       else if (err == ::CAMERA_ERROR_INVALID_STATE || err == ::RECORDER_ERROR_INVALID_STATE)
        {
                r = E_INVALID_STATE;
        }
-       else if (err == CAMERA_ERROR_OUT_OF_MEMORY || err == RECORDER_ERROR_OUT_OF_MEMORY)
+       else if (err == ::CAMERA_ERROR_OUT_OF_MEMORY || err == ::RECORDER_ERROR_OUT_OF_MEMORY)
        {
                r = E_OUT_OF_MEMORY;
        }
-       else if (err == CAMERA_ERROR_DEVICE || err == RECORDER_ERROR_DEVICE)
+       else if (err == ::CAMERA_ERROR_DEVICE
+               || err == ::RECORDER_ERROR_DEVICE
+               || err == ::RECORDER_ERROR_ESD)
        {
                r = E_DEVICE_FAILED;
        }
-       else if (err == CAMERA_ERROR_INVALID_OPERATION
-                       || err == CAMERA_ERROR_SECURITY_RESTRICTED
-                       || err == RECORDER_ERROR_INVALID_OPERATION
-                       || err == RECORDER_ERROR_SECURITY_RESTRICTED)
+       else if (err == ::CAMERA_ERROR_INVALID_OPERATION
+                       || err == ::CAMERA_ERROR_SECURITY_RESTRICTED
+                       || err == ::RECORDER_ERROR_INVALID_OPERATION
+                       || err == ::RECORDER_ERROR_SECURITY_RESTRICTED)
        {
                r = E_SYSTEM;
        }
-       else if (err == CAMERA_ERROR_DEVICE_BUSY
-                       || err == CAMERA_ERROR_SOUND_POLICY
-                       || err == RECORDER_ERROR_SOUND_POLICY)
+       else if (err == ::CAMERA_ERROR_DEVICE_BUSY
+                       || err == ::CAMERA_ERROR_SOUND_POLICY
+                       || err == ::RECORDER_ERROR_SOUND_POLICY)
        {
                r = E_DEVICE_BUSY;
        }
-       else if (err == CAMERA_ERROR_DEVICE_NOT_FOUND)
+       else if (err == ::CAMERA_ERROR_DEVICE_NOT_FOUND)
        {
                r = E_DEVICE_UNAVAILABLE;
        }
+       else if (err == ::RECORDER_ERROR_OUT_OF_STORAGE)
+       {
+               r = E_STORAGE_FULL;
+       }
        else
        {
                r = E_UNKNOWN;
index 3856937..99f9322 100755 (executable)
@@ -126,6 +126,20 @@ static const _CodecValTable _CODEC_VAL_TABLE[] =
        {null,                                          CODEC_NONE,     CODEC_NONE,     MEDIA_CONTAINER_NONE}
 };
 
+typedef struct
+{
+       recorder_state_e prevState;
+       recorder_state_e postState;
+       result ex;
+       RecorderErrorReason error;
+}_VideoExceptionToErrorTable;
+
+static const _VideoExceptionToErrorTable _VIDEO_EXCEPTION_TO_ERROR[] =
+{
+       {::RECORDER_STATE_READY, ::RECORDER_STATE_RECORDING, E_STORAGE_FULL, RECORDER_ERROR_OUT_OF_STORAGE},
+       {::RECORDER_STATE_PAUSED, ::RECORDER_STATE_RECORDING, E_STORAGE_FULL, RECORDER_ERROR_OUT_OF_STORAGE},
+};
+
 _VideoRecorderImpl::_VideoRecorderImpl(void)
        : __pCoordinator(null)
        , __pRecorderRef(null)
@@ -491,7 +505,7 @@ _VideoRecorderImpl::Record(void)
 
 
 CATCH:
-       return r;
+       return CheckExceptionToError(mmState, ::RECORDER_STATE_RECORDING, r);
 }
 
 result
@@ -1472,7 +1486,8 @@ _VideoRecorderImpl::ConvertResult(int err) const
        {
                r = E_OUT_OF_MEMORY;
        }
-       else if (err == ::RECORDER_ERROR_DEVICE)
+       else if (err == ::RECORDER_ERROR_DEVICE
+                               || err == ::RECORDER_ERROR_ESD)
        {
                r = E_DEVICE_FAILED;
        }
@@ -1485,6 +1500,10 @@ _VideoRecorderImpl::ConvertResult(int err) const
        {
                r = E_DEVICE_BUSY;
        }
+       else if (err == ::RECORDER_ERROR_OUT_OF_STORAGE)
+       {
+               r = E_STORAGE_FULL;
+       }
        else
        {
                r = E_UNKNOWN;
@@ -1507,7 +1526,7 @@ _VideoRecorderImpl::ConvertErrorReason(int err) const
        {
                r = RECORDER_ERROR_NONE;
        }
-       else if (err == 0x80000006)     //temporary code. until out of storage error type is added.
+       else if (err == ::RECORDER_ERROR_OUT_OF_STORAGE)
        {
                r = RECORDER_ERROR_OUT_OF_STORAGE;
        }
@@ -1590,7 +1609,30 @@ _VideoRecorderImpl::ChangeStateTo(recorder_state_e mmDestState, _RecorderStateCh
 
 CATCH:
        SysLog(NID_MEDIA, "[%s] Real mmState:%d, param mmState:%d", GetErrorMessage(r), preState, mmDestState);
-       return r;
+       return CheckExceptionToError(preState, mmDestState, r);
+}
+
+result
+_VideoRecorderImpl::CheckExceptionToError(recorder_state_e prevState, recorder_state_e postState, result ex)
+{
+       result r = E_SUCCESS;
+       bool findFlag = false;
+       int tableTotalCount = sizeof(_VIDEO_EXCEPTION_TO_ERROR) / sizeof(_VIDEO_EXCEPTION_TO_ERROR[0]);
+       SysLog(NID_MEDIA, "State prev:%d, post:%d, exception:%s", prevState, postState, GetErrorMessage(ex));
+
+       for (int i = 0; i < tableTotalCount; i++)
+       {
+               if (prevState == _VIDEO_EXCEPTION_TO_ERROR[i].prevState && postState == _VIDEO_EXCEPTION_TO_ERROR[i].postState && ex == _VIDEO_EXCEPTION_TO_ERROR[i].ex)
+               {
+                       r = GetEvent()->SendEvent(_RECORDER_EVENT_ERROR, _VIDEO_EXCEPTION_TO_ERROR[i].error, E_SUCCESS);
+                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. i:%d", GetErrorMessage(r), i);
+
+                       SysLog(NID_MEDIA, "Exception is changed to E_SUCCESS and it sends error event.");
+                       findFlag = true;
+                       break;
+               }
+       }
+       return findFlag == true ? E_SUCCESS : ex;
 }
 
 _RecorderStateChangeReason
index 7ae9658..b83ba5d 100755 (executable)
@@ -692,6 +692,19 @@ private:
        RecorderErrorReason ConvertErrorReason(int err) const;
 
        /**
+       * Check the exception to error.
+       *
+       * @return       An error code
+       * @param[in]    prevState             recorder's previous state
+       * @param[in]    postState             recorder's post state
+       * @param[in]    ex           The exception
+       * @remarks      This method checkes the the recorder's exception. @n
+       *                       If the managed exception is occuring in specific states, recorder makes the exception to E_SUCCESS and sends error event @n
+       *                       to call IAudioRecorderEventListener::OnAudioRecorderErrorOccurred().
+       */
+       result CheckExceptionToError(recorder_state_e prevState, recorder_state_e postState, result ex);
+
+       /**
        * Converts codecType to String
        *
        * @return          void