, __orientationFlag(0)
, __cameraOrientation(CAMERA_EXIF_ORIENTATION_TOP_LEFT)
, __recordingRotation(RECORDING_ROTATION_NONE)
+ , __reloadCameraPreviewFormat(::CAMERA_PIXEL_FORMAT_I420)
{
}
{
result r = E_SUCCESS;
r = __pListenerList->Add(&listener);
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
return r;
}
{
result r = E_SUCCESS;
r = __pListenerList->Remove(&listener);
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = NotifyOtherRemoved();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
return r;
}
}
result
+_CameraCoordinator::NotifyOtherRemoved(void)
+{
+ result r = E_SUCCESS;
+ _ICameraCoordinatorListener* pListener = null;
+ SysLog(NID_MEDIA, "Enter");
+
+ std::unique_ptr <IEnumeratorT <_ICameraCoordinatorListener*> > pEnum (__pListenerList->GetEnumeratorN());
+ SysTryReturn(NID_MEDIA, pEnum.get() != null, GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+ while (pEnum->MoveNext() == E_SUCCESS)
+ {
+ r = pEnum->GetCurrent(pListener);
+ SysTryReturn(NID_MEDIA, pListener != null && r == E_SUCCESS, E_SYSTEM, E_SYSTEM,
+ "[E_SYSTEM] A system error has been occurred. The listener is not proper");
+
+ r = pListener->OnCameraCoordinatorOtherRemoved();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+ return r;
+}
+
+result
_CameraCoordinator::StartMmPreview(void)
{
result r = E_SUCCESS;
}
result
+_CameraCoordinator::CreateVideoRecorder(void)
+{
+ result r = E_SUCCESS;
+ _RecorderDeviceType recorderDevice = _RECORDER_DEVICE_NONE;
+ 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;
+ }
+ return r;
+CATCH:
+ return r;
+}
+
+result
+_CameraCoordinator::DestroyVideoRecorder(void)
+{
+ result r = E_SUCCESS;
+ int err = MM_SUCCESS;
+ recorder_state_e recorderState = ::RECORDER_STATE_NONE;
+ _RecorderDeviceType recorderDevice = _RECORDER_DEVICE_NONE;
+ SysLog(NID_MEDIA, "enter.");
+
+ if ( __recorderHandle != MM_INVALID_HANDLE )
+ {
+ recorderState = GetRecorderState();
+ // Stop the recorder
+ switch (recorderState)
+ {
+ case ::RECORDER_STATE_NONE:
+ break;
+
+ case ::RECORDER_STATE_CREATED:
+ //fall through
+ case ::RECORDER_STATE_READY:
+ recorderDevice = __cameraDevice == _CAMERA_DEVICE_PRIMARY ?
+ _RECORDER_DEVICE_VIDEO_PRIMARY_CAMERA : _RECORDER_DEVICE_VIDEO_SECONDARY_CAMERA;
+ RemoveRecorder(recorderDevice);
+ __mode = _CAMERA_MODE_IMAGE;
+ break;
+
+ case ::RECORDER_STATE_RECORDING:
+ //fall through
+ case ::RECORDER_STATE_PAUSED:
+ err = recorder_cancel(__recorderHandle);
+ r = ConvertResult(err);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ recorderDevice = __cameraDevice == _CAMERA_DEVICE_PRIMARY ?
+ _RECORDER_DEVICE_VIDEO_PRIMARY_CAMERA : _RECORDER_DEVICE_VIDEO_SECONDARY_CAMERA;
+ RemoveRecorder(recorderDevice);
+ __mode = _CAMERA_MODE_IMAGE;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return r;
+CATCH:
+ return r;
+}
+
+
+result
+_CameraCoordinator::ChangeFormat(_CameraMode mode, bool callback, camera_pixel_format_e reloadCameraPreviewFormat)
+{
+ result r = E_SUCCESS;
+ int err = MM_SUCCESS;
+ _RecorderDeviceType recorderDevice = _RECORDER_DEVICE_NONE;
+ camera_state_e cameraState = ::CAMERA_STATE_NONE;
+ recorder_state_e recorderState = ::RECORDER_STATE_NONE;
+ SysLog(NID_MEDIA, "enter. mode:%d, callback:%d, reloadCameraPreviewFormat:%d", mode, callback, reloadCameraPreviewFormat);
+
+ if (mode == _CAMERA_MODE_VIDEO)
+ {
+ cameraState = GetCameraState();
+
+ switch (cameraState)
+ {
+ case ::CAMERA_STATE_CREATED:
+ //fall through
+ case ::CAMERA_STATE_NONE:
+ break;
+
+ case ::CAMERA_STATE_PREVIEW:
+ //fall through
+ case ::CAMERA_STATE_CAPTURED:
+ r = ChangeCameraStateTo(::CAMERA_STATE_CREATED);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ break;
+
+ case ::CAMERA_STATE_CAPTURING:
+ r = E_INVALID_STATE;
+ SysLogException(NID_MEDIA, r, "[E_INVALID_STATE] cameraState(%d) is in an invalid state. While the camera is capturing, the mode cannot be changed.", cameraState);
+ goto CATCH;
+ break;
+
+ default:
+ break;
+ }
+
+ __mode = _CAMERA_MODE_VIDEO;
+ __reloadCameraPreviewFormat = reloadCameraPreviewFormat;
+ if (callback)
+ {
+ r = NotifyModeChangePrepared(mode);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+
+ switch (cameraState)
+ {
+ case ::CAMERA_STATE_NONE:
+ //fall through
+ case ::CAMERA_STATE_CREATED:
+ break;
+
+ case ::CAMERA_STATE_PREVIEW:
+ r = ChangeRecorderStateTo(::RECORDER_STATE_READY);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ break;
+
+ case ::CAMERA_STATE_CAPTURED:
+ default:
+ break;
+ }
+ }
+ else if ( mode == _CAMERA_MODE_IMAGE )
+ {
+ recorderState = GetRecorderState();
+
+ switch (recorderState)
+ {
+ case ::RECORDER_STATE_NONE:
+ break;
+ case ::RECORDER_STATE_CREATED:
+ __mode = _CAMERA_MODE_IMAGE;
+ __reloadCameraPreviewFormat = reloadCameraPreviewFormat;
+ if (callback)
+ {
+ r = NotifyModeChangePrepared(mode);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+ break;
+
+ case ::RECORDER_STATE_READY:
+ r = ChangeRecorderStateTo(::RECORDER_STATE_CREATED);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+ __mode = _CAMERA_MODE_IMAGE;
+ __reloadCameraPreviewFormat = reloadCameraPreviewFormat;
+ if (callback)
+ {
+ r = NotifyModeChangePrepared(mode);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+ r = ChangeCameraStateTo(::CAMERA_STATE_PREVIEW);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ break;
+
+ case ::RECORDER_STATE_RECORDING:
+ //fall through
+ case ::RECORDER_STATE_PAUSED:
+ err = recorder_cancel(__recorderHandle); // TODO
+ r = ConvertResult(err);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = ChangeRecorderStateTo(::RECORDER_STATE_CREATED);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ recorderDevice = __cameraDevice == _CAMERA_DEVICE_PRIMARY ?
+ _RECORDER_DEVICE_VIDEO_PRIMARY_CAMERA : _RECORDER_DEVICE_VIDEO_SECONDARY_CAMERA;
+
+ __mode = _CAMERA_MODE_IMAGE;
+ __reloadCameraPreviewFormat = reloadCameraPreviewFormat;
+ if (callback)
+ {
+ r = NotifyModeChangePrepared(mode);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+ r = ChangeCameraStateTo(::CAMERA_STATE_PREVIEW);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (callback)
+ {
+ // Notify that the mode is changed to callback camera and video recorder's configurations.
+ r = NotifyModeChanged(mode);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+ return r;
+CATCH:
+ return r;
+}
+
+result
_CameraCoordinator::ChangeMode(_CameraMode mode, bool callback)
{
result r = E_SUCCESS;
SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
}
+ __mode = _CAMERA_MODE_IMAGE;
err = camera_start_capture(__cameraHandle, capturingCb, completedCb, pUserData);
r = ConvertResult(err);
SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Camera capture failed.", GetErrorMessage(r));
SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
}
+ __mode = _CAMERA_MODE_VIDEO;
err = recorder_start(__recorderHandle);
r = ConvertResult(err);
SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Recorder record failed.", GetErrorMessage(r));
return r;
}
+camera_pixel_format_e
+_CameraCoordinator::GetReloadPreviewFormat(void) const
+{
+ SysLog(NID_MEDIA, "reloadCameraPreviewFormat is :%d", __reloadCameraPreviewFormat);
+ return __reloadCameraPreviewFormat;
+}
}}