Bug fix for camera handle with one camera
authorKyungYoun <ky99.won@samsung.com>
Mon, 6 May 2013 10:24:41 +0000 (19:24 +0900)
committerKyungYoun <ky99.won@samsung.com>
Mon, 6 May 2013 10:24:41 +0000 (19:24 +0900)
Change-Id: I758840a104b46c6d1e3cb973c528386b9ebf415d
Signed-off-by: KyungYoun <ky99.won@samsung.com>
src/FMedia_CameraCoordinator.cpp
src/FMedia_RecorderManager.cpp
src/FMedia_RecorderManager.h

index 95efa09..5862216 100755 (executable)
@@ -174,7 +174,10 @@ _CameraCoordinator::RemoveRecorder(_RecorderDeviceType recorderDevice)
 {
        SysLog(NID_MEDIA, "Enter. recorder device:%d", recorderDevice);
        _RecorderManager::Release(recorderDevice);
-       __recorderHandle = MM_INVALID_HANDLE;
+       if (_RecorderManager::HasInstance(recorderDevice) == null)
+       {
+               __recorderHandle = MM_INVALID_HANDLE;
+       }
 }
 
 _CameraCoordinator*
@@ -553,14 +556,12 @@ _CameraCoordinator::CreateVideoRecorder(void)
        SysLog(NID_MEDIA, "enter.");
 
        // Start recorder
-       if ( __recorderHandle == MM_INVALID_HANDLE )
-       {
-               recorderDevice = __cameraDevice == _CAMERA_DEVICE_PRIMARY ?
-               _RECORDER_DEVICE_VIDEO_PRIMARY_CAMERA : _RECORDER_DEVICE_VIDEO_SECONDARY_CAMERA;
-               r = AddRecorder(recorderDevice);                // recorder_create() will be called.
-               SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-               __mode = _CAMERA_MODE_VIDEO;
-       }
+       recorderDevice = __cameraDevice == _CAMERA_DEVICE_PRIMARY ?
+       _RECORDER_DEVICE_VIDEO_PRIMARY_CAMERA : _RECORDER_DEVICE_VIDEO_SECONDARY_CAMERA;
+       r = AddRecorder(recorderDevice);                // recorder_create() will be called.
+       SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+       __mode = _CAMERA_MODE_VIDEO;
+
        return r;
 CATCH:
        return r;
@@ -790,14 +791,11 @@ _CameraCoordinator::ChangeMode(_CameraMode mode, bool callback)
                }
 
                // Start recorder
-               if ( __recorderHandle == MM_INVALID_HANDLE )
-               {
-                       recorderDevice = __cameraDevice == _CAMERA_DEVICE_PRIMARY ?
-                               _RECORDER_DEVICE_VIDEO_PRIMARY_CAMERA : _RECORDER_DEVICE_VIDEO_SECONDARY_CAMERA;
-                       r = AddRecorder(recorderDevice);                // recorder_create() will be called.
-                       SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-                       __mode = _CAMERA_MODE_VIDEO;
-               }
+               recorderDevice = __cameraDevice == _CAMERA_DEVICE_PRIMARY ?
+                       _RECORDER_DEVICE_VIDEO_PRIMARY_CAMERA : _RECORDER_DEVICE_VIDEO_SECONDARY_CAMERA;
+               r = AddRecorder(recorderDevice);                // recorder_create() will be called.
+               SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+               __mode = _CAMERA_MODE_VIDEO;
 
                if (callback)
                {
index 3048f21..aa479c7 100755 (executable)
@@ -226,6 +226,20 @@ _RecorderManager::Release(_RecorderDeviceType recorderDevice)
        }
 }
 
+_RecorderManager*
+_RecorderManager::HasInstance(_RecorderDeviceType recorderDevice)
+{
+       result r = E_SUCCESS;
+       _RecorderManager* pManager = null;
+
+       if (__pMap != null)
+       {
+               r = __pMap->GetValue(recorderDevice, pManager);
+               SysTryReturn(NID_MEDIA, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
+       }
+       return pManager;
+}
+
 _RecorderHandle
 _RecorderManager::GetHandle(void) const
 {
index f4cf148..f19578e 100755 (executable)
@@ -71,6 +71,16 @@ public:
        static void Release(_RecorderDeviceType recorderDevice);
 
        /**
+       * Get the instance of _RecorderManager if it exists.
+       *
+       * @return               The _RecorderManager instance
+       * @param[in]    recorderDevice                  The recorder device id.
+       * @exception    E_SUCCESS                               The method is successful.
+       * @exception    E_SYSTEM                                A system error has occurred.
+       */
+       static _RecorderManager* HasInstance(_RecorderDeviceType recorderDevice);
+
+       /**
        * Gets the recorder's handle
        *
        * @return               The handle of camera