Enhance the scen mode setting
authorKyungYoun <ky99.won@samsung.com>
Fri, 5 Apr 2013 07:42:35 +0000 (16:42 +0900)
committerKyungYoun <ky99.won@samsung.com>
Fri, 5 Apr 2013 07:42:35 +0000 (16:42 +0900)
Change-Id: Ib8fad46efe74dac8dcc2518d08a207064c4858d6
Signed-off-by: KyungYoun <ky99.won@samsung.com>
src/FMedia_CameraImpl.cpp
src/FMedia_CameraImpl.h

index 6a1c214..1ba8d80 100755 (executable)
@@ -75,9 +75,11 @@ static const int _RELOAD_INTERNAL_PREVIEW_FORMAT = 0x1 << 20;
 static const int _RELOAD_FOCUS_MODE = 0x1 << 21;
 static const int _RELOAD_ZERO_SHUTTER_LAG = 0x1 << 22;
 static const int _RELOAD_METERING_MODE = 0x1 << 23;
-static const int _RELOAD_SCENE_MODE = 0x1 << 24;
+static const int _RELOAD_SCENE_MODE_SET = 0x1 << 24;
 static const int _RELOAD_EXTRA = 0x1 << 25;
 
+static const int _RELOAD_SCEN_MODE_OFF = _RELOAD_BRIGHTNESS  | _RELOAD_WB  |_RELOAD_ISO  | _RELOAD_METERING_MODE | _RELOAD_FOCUS_MODE | _RELOAD_FLASH;
+
 static const int _PREVIEW_PRE_PROCESSING = 0x01;
 static const int _PREVIEW_POST_PROCESSING = 0x01 << 1;
 
@@ -436,7 +438,12 @@ _CameraImpl::PowerOn(void)
        // re-configuration for new camera handle. active conf.
        if (__sceneMode == CAMERA_SCENE_OFF)
        {
-               r = ReloadConfiguration(_RELOAD_BRIGHTNESS  | _RELOAD_WB  |  _RELOAD_ISO  | _RELOAD_METERING_MODE | _RELOAD_FLASH);
+               r = ReloadConfiguration(_RELOAD_SCEN_MODE_OFF);
+               SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera reload configuration failed", GetErrorMessage(r));
+       }
+       else
+       {
+               r = ReloadConfiguration(_RELOAD_SCENE_MODE_SET);
                SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera reload configuration failed", GetErrorMessage(r));
        }
 
@@ -444,7 +451,7 @@ _CameraImpl::PowerOn(void)
                                                        | _RELOAD_PREVIEW_RESOLUTION  | _RELOAD_CAPTURE_RESOLUTION  | _RELOAD_PREVIEW_FORMAT
                                                        | _RELOAD_CAPTURE_FORMAT  | _RELOAD_FPS  | _RELOAD_EFFECT  | _RELOAD_QUALITY
                                                        | _RELOAD_EXIF_ORIENTATION  | _RELOAD_EXIF_GPS_COORDINATES
-                                                       | _RELOAD_FLIP  | _RELOAD_PREVIEW_ROTATION | _RELOAD_SCENE_MODE
+                                                       | _RELOAD_FLIP  | _RELOAD_PREVIEW_ROTATION
                                                        | _RELOAD_EXTRA);
        SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera reload configuration failed", GetErrorMessage(r));
        return r;
@@ -801,8 +808,8 @@ _CameraImpl::SetBrightness(int brightness)
        {
                if(__sceneMode != CAMERA_SCENE_OFF)
                {//because this attribute is related to scene mode.
-                       r = SetSceneModeAttr(CAMERA_SCENE_OFF);
-                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
+                       r = SetSceneModeOff(_RELOAD_SCEN_MODE_OFF & (~_RELOAD_BRIGHTNESS));
+                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
                }
                operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_BRIGHTNESS : _COP_SECONDARY_BRIGHTNESS);
                r = SetProperty(operation, _MIN_PROPERTY, _MAX_PROPERTY, brightness);
@@ -1122,8 +1129,8 @@ _CameraImpl::SetFlashMode(CameraFlashMode flashMode)
 
        if(__sceneMode != CAMERA_SCENE_OFF)
        {//because this attribute is related to scene mode.
-               r = SetSceneModeAttr(CAMERA_SCENE_OFF);
-               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
+               r = SetSceneModeOff(_RELOAD_SCEN_MODE_OFF & (~_RELOAD_FLASH));
+               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
        }
        r = _CameraUtil::GetMmFlashMode(flashMode, attr);
        SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. flashMode:%d", GetErrorMessage(r), flashMode);
@@ -1205,8 +1212,8 @@ _CameraImpl::SetWhiteBalance(CameraWhiteBalance whiteBalance)
 
                if(__sceneMode != CAMERA_SCENE_OFF)
                {//because this attribute is related to scene mode.
-                       r = SetSceneModeAttr(CAMERA_SCENE_OFF);
-                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
+                       r = SetSceneModeOff(_RELOAD_SCEN_MODE_OFF & (~_RELOAD_WB));
+                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
                }
                camera_attr_whitebalance_e attr = ::CAMERA_ATTR_WHITE_BALANCE_NONE;
                r = _CameraUtil::GetMmWhiteBalance(whiteBalance, attr);
@@ -1290,8 +1297,8 @@ _CameraImpl::SetFocusMode(CameraFocusMode focusMode)
 
        if(__sceneMode != CAMERA_SCENE_OFF)
        {//because this attribute is related to scene mode.
-               r = SetSceneModeAttr(CAMERA_SCENE_OFF);
-               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
+               r = SetSceneModeOff(_RELOAD_SCEN_MODE_OFF & (~_RELOAD_FOCUS_MODE));
+               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
        }
        // Set the __focusCallback to false not to call the focus callback in case of CAF.
        r = ChangeFocusModeTo(__focusMode, focusMode);
@@ -1629,8 +1636,8 @@ _CameraImpl::SetIsoLevel(CameraIsoLevel isoLevel)
 
                if(__sceneMode != CAMERA_SCENE_OFF)
                {//because this attribute is related to scene mode.
-                       r = SetSceneModeAttr(CAMERA_SCENE_OFF);
-                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
+                       r = SetSceneModeOff(_RELOAD_SCEN_MODE_OFF & (~_RELOAD_ISO));
+                       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
                }
                r = _CameraUtil::GetMmIso(isoLevel, attr);
                SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. isoLevel :%d", GetErrorMessage(r), isoLevel);
@@ -1952,8 +1959,8 @@ _CameraImpl::SetMeteringMode(CameraMeteringMode meteringMode)
 
        if(__sceneMode != CAMERA_SCENE_OFF)
        {//because this attribute is related to scene mode.
-               r = SetSceneModeAttr(CAMERA_SCENE_OFF);
-               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
+               r = SetSceneModeOff(_RELOAD_SCEN_MODE_OFF & (~_RELOAD_METERING_MODE));
+               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
        }
        r = _CameraUtil::GetMmMeteringMode(meteringMode, attr);
        SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. rotation:%d", GetErrorMessage(r), meteringMode);
@@ -2000,21 +2007,20 @@ _CameraImpl::SetSceneMode(CameraSceneMode sceneMode)
        SysTryCatch(NID_MEDIA, pSceneModeList->Contains(Integer(sceneMode))
                , r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This mode(%d) is not supported in the device.\n",  sceneMode);
 
-       r = _CameraUtil::GetMmSceneMode(sceneMode, attr);
-       SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. sceneMode:%d", GetErrorMessage(r), sceneMode);
-
-       err = camera_attr_set_scene_mode(__handle, attr);
-       r = ConvertResult(err);
-       SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera scene mode failed. sceneMode:%d", GetErrorMessage(r), sceneMode);
-
        if ((sceneMode == CAMERA_SCENE_OFF) && (__sceneMode != CAMERA_SCENE_OFF))
        {
-               __sceneMode = sceneMode;
-               r = ReloadConfiguration(_RELOAD_BRIGHTNESS  | _RELOAD_WB  |  _RELOAD_ISO  | _RELOAD_METERING_MODE | _RELOAD_FOCUS_MODE | _RELOAD_FLASH);
+               r = SetSceneModeOff(_RELOAD_SCEN_MODE_OFF);
                SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
+               __sceneMode = CAMERA_SCENE_OFF;
        }
        else
        {
+               r = _CameraUtil::GetMmSceneMode(sceneMode, attr);
+               SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. sceneMode:%d", GetErrorMessage(r), sceneMode);
+
+               err = camera_attr_set_scene_mode(__handle, attr);
+               r = ConvertResult(err);
+               SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera scene mode failed. sceneMode:%d", GetErrorMessage(r), sceneMode);
                __sceneMode = sceneMode;
        }
 CATCH:
@@ -2028,26 +2034,23 @@ _CameraImpl::GetSceneMode(void) const
 }
 
 result
-_CameraImpl::SetSceneModeAttr(CameraSceneMode sceneMode)
+_CameraImpl::SetSceneModeOff(int reload)
 {
        result r = E_SUCCESS;
        int err = MM_SUCCESS;
        camera_attr_scene_mode_e attr = ::CAMERA_ATTR_SCENE_MODE_NORMAL;
 
-       r = _CameraUtil::GetMmSceneMode(sceneMode, attr);
-       SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. sceneMode:%d", GetErrorMessage(r), sceneMode);
+       r = _CameraUtil::GetMmSceneMode(CAMERA_SCENE_OFF, attr);
+       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        err = camera_attr_set_scene_mode(__handle, attr);
        r = ConvertResult(err);
-       SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera scene mode failed. sceneMode:%d", GetErrorMessage(r), sceneMode);
-       __sceneMode = sceneMode;
+       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] CAMERA_SCENE_OFF setting failed.", GetErrorMessage(r));
 
-       if(sceneMode == CAMERA_SCENE_OFF)
-       {
-               r = ReloadConfiguration(_RELOAD_BRIGHTNESS  | _RELOAD_WB  |  _RELOAD_ISO  | _RELOAD_METERING_MODE | _RELOAD_FOCUS_MODE | _RELOAD_FLASH);
-               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
-       }
-CATCH:
+       r = ReloadConfiguration(reload);
+       SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
+
+       __sceneMode = CAMERA_SCENE_OFF;
        return r;
 }
 
@@ -2734,7 +2737,7 @@ _CameraImpl::ReloadConfiguration(int reload)
                        SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. metering:%d", GetErrorMessage(r), __meteringMode);
                }
        }
-       if (reload & _RELOAD_SCENE_MODE)
+       if (reload & _RELOAD_SCENE_MODE_SET)
        {
                _CameraOperationType operation = _COP_NONE;
                operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_SCENE_MODE : _COP_SECONDARY_SCENE_MODE);
@@ -3020,13 +3023,18 @@ _CameraImpl::OnCameraCoordinatorModeChanged(_CameraMode mode)
 
        if (__sceneMode == CAMERA_SCENE_OFF)
        {
-               r = ReloadConfiguration(_RELOAD_BRIGHTNESS  | _RELOAD_WB  |  _RELOAD_ISO  | _RELOAD_METERING_MODE | _RELOAD_FLASH  | _RELOAD_FOCUS_MODE );
+               r = ReloadConfiguration(_RELOAD_SCEN_MODE_OFF);
+               SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
+       }
+       else
+       {
+               r = ReloadConfiguration(_RELOAD_SCENE_MODE_SET);
                SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
        }
 
        r = ReloadConfiguration(_RELOAD_CONTRAST  | _RELOAD_EXPOSURE  | _RELOAD_MAX_ZOOM_LEVEL  | _RELOAD_ZOOM_LEVEL  | _RELOAD_EFFECT
                | _RELOAD_QUALITY  | _RELOAD_EXIF_ORIENTATION  | _RELOAD_EXIF_GPS_COORDINATES
-               | _RELOAD_SCENE_MODE  | _RELOAD_EXTRA);
+               |  _RELOAD_EXTRA);
        SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
 
        SysLog(NID_MEDIA, "Post mode changed operation succeeded.");
index cf90dd2..d72a991 100755 (executable)
@@ -1433,15 +1433,15 @@ private:
        result HandleAutoFocus(CameraFocusMode currentMode);
 
        /**
-        * Sets the scene mode of the camera internally.
+        * Sets the scene mode off.
         *
         * @return             An error code
-        * @param[in]       sceneMode                                                  The scene mode
+        * @param[in]       reload                                                  The reload flag
         * @exception       E_SUCCESS                                                               The method is successful.
         * @exception       E_DEVICE_FAILED                                         The device operation has failed.
         * @exception   E_SYSTEM                                A system error has occurred.
         */
-       result SetSceneModeAttr(CameraSceneMode sceneMode);
+       result SetSceneModeOff(int reload);
 
        _CameraImpl(const _CameraImpl& camera);
        _CameraImpl& operator =(const _CameraImpl& camera);