2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FMedia_CameraImpl.cpp
20 * @brief This file contains the implementation of the %_CameraImpl class.
24 #include <unique_ptr.h>
26 #include <FBaseInteger.h>
27 #include <FBaseSysLog.h>
28 #include <FBaseColArrayList.h>
29 #include <FGrpDimension.h>
30 #include <FGrpPoint.h>
31 #include <FGrp_BufferInfoImpl.h>
32 #include <FMediaTypes.h>
33 #include <FMediaImageTypes.h>
34 #include <FMediaCamera.h>
35 #include <FMediaICameraEventListener.h>
36 #include <FMediaCapabilityTypes.h>
37 #include <FMediaIVideoStreamFilter.h>
38 #include "FMedia_CameraImpl.h"
39 #include "FMedia_CameraEvent.h"
40 #include "FMedia_CameraUtil.h"
41 #include "FMedia_CameraCapability.h"
42 #include "FMedia_CameraCoordinator.h"
43 #include "FMedia_CapabilityImpl.h"
44 #include "FMedia_VideoStreamCoordinator.h"
46 #define _CAMERA_EVAS_PIXMAP_ 1
48 using namespace Tizen::Base;
49 using namespace Tizen::Base::Collection;
50 using namespace Tizen::Graphics;
52 namespace Tizen { namespace Media
54 static const int _RELOAD_BRIGHTNESS = 0x1;
55 static const int _RELOAD_CONTRAST = 0x1 << 1;
56 static const int _RELOAD_EXPOSURE = 0x1 << 2;
57 static const int _RELOAD_MAX_ZOOM_LEVEL = 0x1 << 3;
58 static const int _RELOAD_ZOOM_LEVEL = 0x1 << 4;
59 static const int _RELOAD_PREVIEW_RESOLUTION = 0x1 << 5;
60 static const int _RELOAD_CAPTURE_RESOLUTION = 0x1 << 6;
61 static const int _RELOAD_PREVIEW_FORMAT = 0x1 << 7;
62 static const int _RELOAD_CAPTURE_FORMAT = 0x1 << 8;
63 static const int _RELOAD_EFFECT = 0x1 << 9;
64 static const int _RELOAD_WB = 0x1 << 10;
65 static const int _RELOAD_QUALITY = 0x1 << 11;
66 static const int _RELOAD_ISO = 0x1 << 12;
67 static const int _RELOAD_FLASH = 0x1 << 13;
68 static const int _RELOAD_EXIF_ORIENTATION = 0x1 << 14;
69 static const int _RELOAD_EXIF_GPS_COORDINATES = 0x1 << 15;
70 static const int _RELOAD_FLIP = 0x1 << 16;
71 static const int _RELOAD_PREVIEW_ROTATION = 0x1 << 17;
72 static const int _RELOAD_FPS = 0x1 << 18;
73 static const int _RELOAD_PREVIEW_PREPARE = 0x1 << 19;
74 static const int _RELOAD_INTERNAL_PREVIEW_FORMAT = 0x1 << 20;
75 static const int _RELOAD_FOCUS_MODE = 0x1 << 21;
76 static const int _RELOAD_ZERO_SHUTTER_LAG = 0x1 << 22;
77 static const int _RELOAD_METERING_MODE = 0x1 << 23;
78 static const int _RELOAD_SCENE_MODE = 0x1 << 24;
79 static const int _RELOAD_EXTRA = 0x1 << 25;
81 static const int _PREVIEW_PRE_PROCESSING = 0x01;
82 static const int _PREVIEW_POST_PROCESSING = 0x01 << 1;
84 static const double _CAMERA_EXIF_GPS_INVALID_LATITUDE = 90.1;
85 static const double _CAMERA_EXIF_GPS_INVALID_LONGITUDE = 180.1;
87 static const int _MAX_CAPTURE_BUFFER_COUNT = 10;
88 static const int _MAX_PREVIEW_BUFFER_COUNT = 1;
89 static const int _MIN_PROPERTY = 0;
90 static const int _MAX_PROPERTY = 9;
91 static const int _INVALID_FOCUS_COORDINATE = -1;
93 bool _CameraImpl::__isUsed = false;
95 enum _FocusModeOperation
98 _FOCUS_MODE_OP_CONTINUOUS,
99 _FOCUS_MODE_OP_CANCEL,
104 CameraFocusMode currentMode;
105 _FocusModeOperation focusOperation0;
106 CameraFocusMode destMode;
107 _FocusModeOperation focusOperation1;
108 } _CameraFocusModeTransitTable;
110 static const _CameraFocusModeTransitTable _CAMERA_FOCUS_MODE_TRANSIT[] =
112 {CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE},
113 {CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE},
114 {CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE},
115 {CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CONTINUOUS},
116 {CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE},
118 {CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE},
119 {CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE},
120 {CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE},
121 {CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CONTINUOUS},
122 {CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE},
124 {CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE},
125 {CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE},
126 {CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE},
127 {CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CONTINUOUS},
128 {CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE},
130 {CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CANCEL, CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE},
131 {CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CANCEL, CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE},
132 {CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CANCEL, CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE},
133 {CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_NONE},
134 {CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CANCEL, CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE},
136 {CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NONE, _FOCUS_MODE_OP_NONE},
137 {CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_NORMAL, _FOCUS_MODE_OP_NONE},
138 {CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_MACRO, _FOCUS_MODE_OP_NONE},
139 {CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_CONTINUOUS_AUTO, _FOCUS_MODE_OP_CONTINUOUS},
140 {CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE, CAMERA_FOCUS_MODE_INFINITE, _FOCUS_MODE_OP_NONE},
151 CameraFocusMode currentMode;
152 _FocusOperation focusOperation;
154 } _CameraFocusOperationTable;
156 static const _CameraFocusOperationTable _CAMERA_FOCUS_OPERATIONT[] =
158 // {CAMERA_FOCUS_MODE_NONE, _FOCUS_OP_NONE, (CameraState)-1,},
159 {CAMERA_FOCUS_MODE_NORMAL, _FOCUS_OP_ONCE, CAMERA_STATE_AUTO_FOCUSING,},
160 {CAMERA_FOCUS_MODE_MACRO, _FOCUS_OP_ONCE, CAMERA_STATE_AUTO_FOCUSING,},
161 {CAMERA_FOCUS_MODE_CONTINUOUS_AUTO,_FOCUS_OP_NONE, (CameraState)-1,}, //no state change in the continuous mode
162 // {CAMERA_FOCUS_MODE_INFINITE, _FOCUS_OP_NONE, (CameraState)-1,},
165 _CameraImpl::_CameraImpl(void)
166 : __deviceType(_CAMERA_DEVICE_NONE)
167 , __pCoordinator(null)
168 , __pCameraCapability(null)
169 , __state(CAMERA_STATE_INITIALIZED)
170 , __handle(MM_INVALID_HANDLE)
171 , __pCameraEvent(null)
172 , __pVideoStreamCoordinator(null)
173 , __pCameraEventListener(null)
174 , __pCaptureBufferQueue(null, _ListPtrUtil::remover)
175 , __pPreviewBufferQueue(null, _ListPtrUtil::remover)
176 , __isConstructed(false)
177 , __isPoweredOn(false)
178 , __selection(CAMERA_PRIMARY)
179 , __brightness(DEFAULT_CAMERA_BRIGHTNESS)
180 , __contrast(DEFAULT_CAMERA_CONTRAST)
181 , __exposure(DEFAULT_CAMERA_EXPOSURE)
185 , __effect(CAMERA_EFFECT_NONE)
186 , __wb(CAMERA_WHITE_BALANCE_AUTO )
187 , __quality(CAMERA_QUALITY_NORMAL)
188 , __isoLevel(CAMERA_ISO_DEFAULT)
189 , __flashMode(CAMERA_FLASH_MODE_OFF)
190 , __zeroShutterLag(false)
191 , __meteringMode(CAMERA_METERING_MODE_NONE)
192 , __sceneMode(CAMERA_SCENE_OFF)
193 , __focusCallback(false)
194 , __isFocusAreaSet(false)
195 , __exifOrientation(CAMERA_EXIF_ORIENTATION_NONE)
196 , __exifLatitude(_CAMERA_EXIF_GPS_INVALID_LATITUDE)
197 , __exifLongitude(_CAMERA_EXIF_GPS_INVALID_LONGITUDE)
199 , __flip(CAMERA_FLIP_NONE)
200 , __previewRotation(CAMERA_ROTATION_NONE)
201 #if defined(_OSP_EMUL_)
204 , __fps(DEFAULT_CAMERA_PREVIEW_FPS)
206 , __focusMode(CAMERA_FOCUS_MODE_NONE)
207 , __previewProcessing(0)
208 , __previewRegionHandle(_BufferInfoImpl::INVALID_BUFFER_HANDLE)
209 , __previewDisplayType(::CAMERA_DISPLAY_TYPE_NONE)
210 , __displayRotationType(CAMERA_ROTATION_NONE)
211 , __physicalDirection(CAMERA_DIRECTION_BACK)
212 , __physicalRotation(CAMERA_ROTATION_NONE)
213 , __supportedFocusPointCount(0)
215 __previewResolution.width = 0;
216 __previewResolution.height = 0;
217 __deviceDefaultPreviewResolution.width = 0;
218 __deviceDefaultPreviewResolution.height = 0;
220 __captureResolution.width = 0;
221 __captureResolution.height = 0;
222 __deviceDefaultCaptureResolution.width = 0;
223 __deviceDefaultCaptureResolution.height = 0;
225 __previewFormat = PIXEL_FORMAT_YCbCr420_PLANAR;
226 __deviceDefaultPreviewFormat = PIXEL_FORMAT_YCbCr420_PLANAR;
228 __captureFormat = PIXEL_FORMAT_JPEG;
229 __deviceDefaultCaptureFormat = PIXEL_FORMAT_JPEG;
231 for(int i = 0; i < MAX_FOCUS_POINT; i++)
233 __focusPoints[0][i] = _INVALID_FOCUS_COORDINATE;
234 __focusPoints[1][i] = _INVALID_FOCUS_COORDINATE;
238 _CameraImpl::~_CameraImpl(void)
240 if (__handle != MM_INVALID_HANDLE)
242 int err = MM_SUCCESS;
243 err = camera_unset_state_changed_cb(__handle);
244 err = camera_unset_interrupted_cb(__handle);
245 err = camera_unset_error_cb(__handle);
246 err = camera_unset_focus_changed_cb(__handle);
247 err = camera_unset_preview_cb(__handle);
248 __handle = MM_INVALID_HANDLE;
250 if (__pCoordinator != null)
252 __pCoordinator->RemoveCameraCoordinatorListener(*this);
259 _CameraCoordinator::Release(__deviceType);
262 if (__pCameraCapability != null)
264 _CameraCapability::Release(__deviceType);
267 if ( __isConstructed )
272 SysLog(NID_MEDIA, "Destroyed");
276 _CameraImpl::Construct(ICameraEventListener& listener, CameraSelection camSel)
278 result r = E_SUCCESS;
279 int err = MM_SUCCESS;
280 SysLog(NID_MEDIA, "Enter. camSel:%d", camSel);
282 SysTryReturn(NID_MEDIA, !__isUsed, E_DEVICE_BUSY, E_DEVICE_BUSY, "[E_DEVICE_BUSY] A camera device is already used.");
283 SysTryReturn(NID_MEDIA, !__isConstructed, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] _CameraImpl is in an invalid state. A camera device is already constructed.");
284 SysTryReturn(NID_MEDIA, camSel >= CAMERA_PRIMARY && camSel <= CAMERA_SECONDARY, E_DEVICE_UNAVAILABLE, E_DEVICE_UNAVAILABLE, "[E_DEVICE_UNAVAILABLE] The camsel(%d) is invalid.", camSel);
286 // _CapablityImpl object should be created before the camera_create() is called to get the recorder capability without problem. camera c-api.
287 // _CapabilityImpl is not deleted until the application exits.
289 _CapabilityImpl* pCapabilityImpl = _CapabilityImpl::GetInstance();
290 SysTryReturn(NID_MEDIA, pCapabilityImpl != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Capability is not obtained.");
292 r = pCapabilityImpl->GetValue(L"Camera.Count", cameraCount);
293 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Number of Camera was not obtained.");
294 SysTryReturn(NID_MEDIA, camSel < cameraCount, E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The camSel(%d) is not available.", camSel);
295 __selection = camSel;
297 // Get the _CameraCapability.
298 // This is just for the performance enhancement by incrementing ref counts of _CameraCapability.
299 // It forbiddens creating and deleting the _CameraCapability object repeatedly.
300 __deviceType = (camSel == CAMERA_PRIMARY ? _CAMERA_DEVICE_PRIMARY : _CAMERA_DEVICE_SECONDARY);
301 __pCameraCapability = _CameraCapability::AddInstance(__deviceType);
302 SysTryReturn(NID_MEDIA, __pCameraCapability != null, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Capability instance is not available.");
307 r = pCapabilityImpl->GetValue(camSel == CAMERA_PRIMARY ? String(L"Camera.Primary.Direction") : String(L"Camera.Secondary.Direction"), direction);
308 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
310 r = pCapabilityImpl->GetValue(camSel == CAMERA_PRIMARY ? String(L"Camera.Primary.Rotation") : String(L"Camera.Secondary.Rotation"), rotation);
311 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
313 __physicalDirection = static_cast<CameraDirection>(direction);
314 __physicalRotation = static_cast<CameraRotation>(rotation);
316 r = pCapabilityImpl->GetValue(camSel == CAMERA_PRIMARY ? String(L"Camera.Primary.FocusPoint") : String(L"Camera.Secondary.FocusPoint"), focusPoint);
317 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
318 __supportedFocusPointCount = focusPoint;
321 __pCameraEvent.reset(new (std::nothrow) _CameraEvent());
322 SysTryReturn(NID_MEDIA, __pCameraEvent.get() != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
324 r = __pCameraEvent->Construct(*this);
325 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
327 r = __pCameraEvent->AddListener(listener);
328 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
329 __pCameraEventListener = &listener;
331 // Video stream coordinator
332 __pVideoStreamCoordinator.reset(new (std::nothrow) _VideoStreamCoordinator());
333 SysTryReturn(NID_MEDIA, __pVideoStreamCoordinator.get() != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
335 r = __pVideoStreamCoordinator->Construct();
336 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
338 // Prepare captured buffer list
339 __pCaptureBufferQueue.reset(new (std::nothrow) Tizen::Base::Collection::Queue());
340 SysTryCatch(NID_MEDIA, __pCaptureBufferQueue.get() != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
342 r = __pCaptureBufferQueue->Construct(_MAX_CAPTURE_BUFFER_COUNT); // For async panorama shot.
343 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
345 // Prepare preview buffer list
346 __pPreviewBufferQueue.reset(new (std::nothrow) Tizen::Base::Collection::Queue());
347 SysTryCatch(NID_MEDIA, __pPreviewBufferQueue.get() != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
349 r = __pPreviewBufferQueue->Construct(_MAX_PREVIEW_BUFFER_COUNT); // For async preview data.
350 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
352 // Get the _CameraCoordinator
353 __pCoordinator = _CameraCoordinator::AddInstance(__deviceType);
355 // To do : return should be checked. (E_DEVICE_UNAVAILABLE or E_DEVICE_BUSY)
356 SysTryCatch(NID_MEDIA, __pCoordinator != null, , r, "[E_OBJ_NOT_FOUND] _CameraCoordinator instance is not available.");
358 // Add this to _CameraCoordinator
359 r = __pCoordinator->AddCameraCoordinatorListener(*this);
360 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
362 __handle = __pCoordinator->GetCameraHandle();
364 err = camera_set_state_changed_cb(__handle, StateChangedCb, this);
365 r = ConvertResult(err);
366 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
368 err = camera_set_interrupted_cb(__handle, InterruptedCb, this);
369 r = ConvertResult(err);
370 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
372 err = camera_set_error_cb(__handle, ErrorCb, this);
373 r = ConvertResult(err);
374 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
376 err = camera_set_focus_changed_cb(__handle, FocusStateChangedCb, this);
377 r = ConvertResult(err);
378 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to set the focus changed callback.", GetErrorMessage(r));
380 // Get the default properties
381 r = LoadDefaultConfiguration(_RELOAD_PREVIEW_RESOLUTION | _RELOAD_CAPTURE_RESOLUTION | _RELOAD_PREVIEW_FORMAT | _RELOAD_CAPTURE_FORMAT
382 | _RELOAD_FOCUS_MODE |_RELOAD_ZERO_SHUTTER_LAG | _RELOAD_METERING_MODE);
383 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
385 SetState(CAMERA_STATE_INITIALIZED);
386 __isConstructed = true;
393 err = camera_unset_state_changed_cb(__handle);
394 err = camera_unset_interrupted_cb(__handle);
395 err = camera_unset_error_cb(__handle);
396 err = camera_unset_focus_changed_cb(__handle);
399 if (__pCoordinator != null)
401 __pCoordinator->RemoveCameraCoordinatorListener(*this);
404 if (__pCameraEventListener != null)
406 __pCameraEvent->RemoveListener(*__pCameraEventListener);
407 __pCameraEventListener = null;
410 __pCameraEvent.reset(null);
411 __pVideoStreamCoordinator.reset(null);
412 __pCaptureBufferQueue.reset(null);
418 _CameraImpl::PowerOn(void)
420 result r = E_SUCCESS;
421 CameraState state = CAMERA_STATE_ERROR;
422 int err = MM_SUCCESS;
423 SysLog(NID_MEDIA, "Camera powerON");
425 SysTryReturn(NID_MEDIA, __isPoweredOn == false, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was already powered on.");
428 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state(%d), Camera is not in initialized state.", state);
430 __isPoweredOn = true;
432 err = camera_set_display(__handle, ::CAMERA_DISPLAY_TYPE_NONE, null);
433 r = ConvertResult(err);
434 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Temporarily forbidden the preview callback.", GetErrorMessage(r));
436 // re-configuration for new camera handle. active conf.
437 if (__sceneMode == CAMERA_SCENE_OFF)
439 r = ReloadConfiguration(_RELOAD_BRIGHTNESS | _RELOAD_WB | _RELOAD_ISO | _RELOAD_METERING_MODE | _RELOAD_FLASH);
440 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera reload configuration failed", GetErrorMessage(r));
443 r = ReloadConfiguration(_RELOAD_CONTRAST | _RELOAD_EXPOSURE | _RELOAD_MAX_ZOOM_LEVEL
444 | _RELOAD_PREVIEW_RESOLUTION | _RELOAD_CAPTURE_RESOLUTION | _RELOAD_PREVIEW_FORMAT
445 | _RELOAD_CAPTURE_FORMAT | _RELOAD_FPS | _RELOAD_EFFECT | _RELOAD_QUALITY
446 | _RELOAD_EXIF_ORIENTATION | _RELOAD_EXIF_GPS_COORDINATES
447 | _RELOAD_FLIP | _RELOAD_PREVIEW_ROTATION | _RELOAD_SCENE_MODE
449 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera reload configuration failed", GetErrorMessage(r));
453 __isPoweredOn = false;
458 _CameraImpl::PowerOff(void)
460 result r = E_SUCCESS;
461 camera_state_e mmState = ::CAMERA_STATE_NONE;
462 SysLog(NID_MEDIA, "Camera powerOFF");
464 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
466 mmState = GetMmState();
469 case ::CAMERA_STATE_PREVIEW:
470 r = __pCoordinator->StopMmPreview();
471 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
474 case ::CAMERA_STATE_CAPTURING:
475 // Camera's destroy while capturing should be done by waiting until the state is changed to CAPTURED..
477 const int timeoutCount = 100;
478 const long sleepTime = 50;
480 while (GetMmState() == ::CAMERA_STATE_CAPTURING && ( i++ < timeoutCount) )
482 r = Tizen::Base::Runtime::Thread::Sleep(sleepTime);
483 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_DEVICE_FAILED, E_DEVICE_FAILED, "[E_DEVICE_FAILED] Sleep failed while waiting the state changing to CAPTURED.");
484 SysLog(NID_MEDIA, "Sleep try %dst", i);
486 SysTryCatch(NID_MEDIA, i < timeoutCount, r = E_DEVICE_BUSY, E_DEVICE_BUSY, "[E_DEVICE_BUSY] Sleep failed while waiting the state changing to CAPTURED.");
487 SysLog(NID_MEDIA, "PowerOff succeeded from capturing state in %d msec.", (int)sleepTime*i);
489 mmState = GetMmState();
490 // The captured buffer inserted via CaptureCb should be deleted.
491 ByteBuffer* pBuffer = null;
492 while ((pBuffer = DequeueDataN(_CAMERA_BUFFER_CAPTURE)) != null)
498 //The state is changed synchronously
499 SetState(CAMERA_STATE_CAPTURED);
501 r = __pCoordinator->StartMmPreview();
502 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
504 r = __pCoordinator->StopMmPreview();
505 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
508 case ::CAMERA_STATE_CAPTURED:
509 r = __pCoordinator->StartMmPreview();
510 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
512 r = __pCoordinator->StopMmPreview();
513 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
516 case ::CAMERA_STATE_CREATED:
518 case ::CAMERA_STATE_NONE:
522 SysLogException(NID_MEDIA, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. mmState:%d", mmState);
527 __isPoweredOn = false;
529 SetState(CAMERA_STATE_INITIALIZED);
537 _CameraImpl::IsPoweredOn(void) const
539 return __isPoweredOn;
543 _CameraImpl::StartPreview(const Tizen::Graphics::BufferInfo* pBufferInfo, bool previewedData)
545 result r = E_SUCCESS;
546 int err = MM_SUCCESS;
547 camera_state_e mmState = ::CAMERA_STATE_NONE;
548 CameraState state = CAMERA_STATE_ERROR;
549 Rectangle tempDisplayRect;
550 int tempDisplayHandle = _BufferInfoImpl::INVALID_BUFFER_HANDLE;
551 CameraRotation tempDisplayRotationType = CAMERA_ROTATION_NONE;
552 camera_display_type_e tempDisplayType = ::CAMERA_DISPLAY_TYPE_NONE;
554 SysLog(NID_MEDIA, "Camera StartPreview. pBufferInfo:%d, previewedData:%d", (int) pBufferInfo, previewedData);
555 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on");
558 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_CAPTURED
559 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera state[%d] is not ready to start preview.", state);
561 // Set preview callback
562 if (previewedData || (__previewProcessing & _PREVIEW_PRE_PROCESSING))
564 err = camera_set_preview_cb(__handle, PreviewCb, this);
568 err = camera_unset_preview_cb(__handle);
570 r = ConvertResult(err);
571 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
573 mmState = GetMmState();
575 if ( pBufferInfo != null )
577 const _BufferInfoImpl* pBufferInfoImpl = null;
578 int displayHandle = _BufferInfoImpl::INVALID_BUFFER_HANDLE;
580 camera_display_type_e displayType = CAMERA_DISPLAY_TYPE_NONE;
582 pBufferInfoImpl = _BufferInfoImpl::GetInstance(*pBufferInfo);
583 SysTryCatch(NID_MEDIA, pBufferInfoImpl != null, r = E_SYSTEM, r, "[E_SYSTEM] A system error has been occurred. BufferInfo is not found.");
584 if (pBufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION))
586 displayHandle = pBufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION);
587 displayType = ::CAMERA_DISPLAY_TYPE_X11;
589 else if (pBufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_CANVAS_TEXTURE))
591 displayHandle = pBufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_CANVAS_TEXTURE);
592 displayType = ::CAMERA_DISPLAY_TYPE_X11;
594 else if (pBufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE))
596 displayHandle = pBufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE);
597 displayType = ::CAMERA_DISPLAY_TYPE_EVAS;
599 SysLog(NID_MEDIA, "Display type %d", displayType);
600 SysTryCatch(NID_MEDIA, displayHandle != _BufferInfoImpl::INVALID_BUFFER_HANDLE, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. displayHandle:%d is wrong", displayHandle);
602 if ((displayHandle != __previewRegionHandle) || (state != CAMERA_STATE_CAPTURED))
604 rect = pBufferInfoImpl->GetBounds();
606 err = camera_set_display(__handle, displayType, (camera_display_h)displayHandle);
607 r = ConvertResult(err);
608 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Camera set display failed. displayHandle:%d, previewedData:%d", GetErrorMessage(r), displayHandle, previewedData);
610 if ( displayType == ::CAMERA_DISPLAY_TYPE_X11 )
612 err = camera_set_x11_display_mode(__handle, ::CAMERA_DISPLAY_MODE_FULL);
613 r = ConvertResult(err);
614 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Camera set display mode failed. displayHandle:%d, previewedData:%d", GetErrorMessage(r), displayHandle, previewedData);
616 err = camera_set_x11_display_visible(__handle, true);
617 r = ConvertResult(err);
618 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Camera enabling display visible failed. displayHandle:%d, previewedData:%d", GetErrorMessage(r), displayHandle, previewedData);
620 #if defined (_CAMERA_EVAS_PIXMAP_)
621 SysLog(NID_MEDIA, "Evas pixamp buffer is used. It doesn't rotate the display.");
623 err = camera_set_x11_display_rotation(__handle, ::CAMERA_ROTATION_NONE); // No rotation.
624 r = ConvertResult(err);
625 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Camera rotate display 0 failed. displayHandle:%d, previewedData:%d", GetErrorMessage(r), displayHandle, previewedData);
626 tempDisplayRotationType = CAMERA_ROTATION_NONE;
628 //Only for h/w back buffer. Currently not used.
629 CameraRotation displayRotation = CAMERA_ROTATION_NONE;
630 _BufferInfoImpl::Rotation bufferInfoRotation = pBufferInfoImpl->GetRotation();
631 SysLog(NID_MEDIA, "X11. BufferInfo's rotation is %d", bufferInfoRotation);
633 _BufferInfoImpl::Orientation orientation = pBufferInfoImpl->GetOrientation();
634 SysLog(NID_MEDIA, "X11. Orientation is %d", orientation);
636 // Rotate the display corresponding the LCD orientationation.
637 // This makes the unity of preview shape and the preview callback. This is osp camera concept.
638 if ( bufferInfoRotation == _BufferInfoImpl::ROTATION_0 ) // If the OverlayRegion type is NORMAL
640 r = _CameraUtil::GetDisplayRotation(__physicalDirection, orientation, displayRotation);
641 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Camera display rotation failed in normal mode. physicalDirection:%d, orientationation:%d"
642 , GetErrorMessage(r), __physicalDirection, orientation);
644 else // If the OverlayRegion type is AUTO
646 r = _CameraUtil::GetDisplayRotation(__physicalDirection, __physicalRotation, orientation, displayRotation);
647 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Camera display rotation failed in automatic mode. physicalDirection:%d, physicalRotation:%d, orientationation:%d"
648 , GetErrorMessage(r), __physicalDirection, __physicalRotation, orientation);
651 camera_rotation_e mmRotation = ::CAMERA_ROTATION_NONE;
652 r = _CameraUtil::GetMmRotation( displayRotation, mmRotation);
653 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
655 SysLog(NID_MEDIA, "X11. Try rotation Rotation MM value : %d", mmRotation);
656 err = camera_set_x11_display_rotation(__handle, mmRotation); // Auto adjust rotation - Primary Camera 270, Secondary Camera 90
657 r = ConvertResult(err);
658 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera rotate display failed. displayHandle:%d, previewedData:%d", GetErrorMessage(r), displayHandle, previewedData);
660 tempDisplayRotationType = displayRotation;
663 tempDisplayRect = rect;
664 tempDisplayHandle = displayHandle;
665 tempDisplayType = displayType;
667 __previewRegionRect = tempDisplayRect; //currently not used.
668 __previewRegionHandle = tempDisplayHandle;
669 __previewDisplayType = tempDisplayType;
670 __displayRotationType = tempDisplayRotationType;
675 err = camera_set_display(__handle, ::CAMERA_DISPLAY_TYPE_NONE, null);
676 r = ConvertResult(err);
677 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set display(null) failed. previewedData:%d", GetErrorMessage(r), previewedData);
678 __previewRegionHandle = _BufferInfoImpl::INVALID_BUFFER_HANDLE;
683 case ::CAMERA_STATE_CREATED:
684 case ::CAMERA_STATE_CAPTURED:
685 r = __pCoordinator->StartMmPreview();
686 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera start.", GetErrorMessage(r));
690 SysTryCatch(NID_MEDIA, false, r = E_INVALID_STATE , E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. The mmState is %d:", mmState);
696 __previewProcessing = __previewProcessing | _PREVIEW_POST_PROCESSING;
700 __previewProcessing = __previewProcessing & (~_PREVIEW_POST_PROCESSING);
704 SetState(CAMERA_STATE_PREVIEW);
708 err = camera_unset_preview_cb(__handle);
709 __previewRegionHandle = _BufferInfoImpl::INVALID_BUFFER_HANDLE;
710 __previewDisplayType = ::CAMERA_DISPLAY_TYPE_NONE;
711 __displayRotationType = CAMERA_ROTATION_NONE;
716 _CameraImpl::StopPreview(void)
718 result r = E_SUCCESS;
719 CameraState state = CAMERA_STATE_ERROR;
720 SysLog(NID_MEDIA, "Camera stop preview");
721 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
724 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_PREVIEW, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state(%d). Camera is not in preview state.", state);
726 r = __pCoordinator->StopMmPreview();
727 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] camera stop preview.");
729 if(__previewDisplayType == CAMERA_DISPLAY_TYPE_EVAS)
731 if(__previewRegionHandle != _BufferInfoImpl::INVALID_BUFFER_HANDLE)
733 evas_object_image_data_set((Evas_Object*)__previewRegionHandle, null);
737 SetState(CAMERA_STATE_INITIALIZED);
742 _CameraImpl::Capture(void)
744 result r = E_SUCCESS;
745 CameraState state = CAMERA_STATE_ERROR;
746 camera_pixel_format_e previewFormat = ::CAMERA_PIXEL_FORMAT_INVALID;
747 SysLog(NID_MEDIA, "Camera Capture");
748 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
751 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_PREVIEW, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state(%d). Camera is not in preview state.", state);
753 if ( __pCoordinator->GetMode() != _CAMERA_MODE_IMAGE )
755 r = _CameraUtil::GetMmPixelFormat(__previewFormat, previewFormat);
756 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. __previewFormat:%d", GetErrorMessage(r), __previewFormat);
757 if (previewFormat != __pCoordinator->GetCameraSourceFormat())
759 r = __pCoordinator->ChangeFormat(_CAMERA_MODE_IMAGE, true, previewFormat);
760 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
764 r = __pCoordinator->StartCapture(CaptureCb, CaptureCompletedCb, this);
765 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Start capture failed.", GetErrorMessage(r));
767 SetState(CAMERA_STATE_CAPTURING);
772 _CameraImpl::GetState(void) const
774 if (__state == CAMERA_STATE_PREVIEW || __state == CAMERA_STATE_AUTO_FOCUSING || __state == CAMERA_STATE_CAPTURING)
776 camera_state_e mmState = GetMmState();
777 if (mmState == ::CAMERA_STATE_CREATED) // If the preview is stopped by some internal policy.
779 return CAMERA_STATE_INITIALIZED;
786 _CameraImpl::SetBrightness(int brightness)
788 result r = E_SUCCESS;
789 _CameraOperationType operation = _COP_NONE;
790 CameraState state = CAMERA_STATE_ERROR;
791 SysLog(NID_MEDIA, "Enter. brightness:%d", brightness);
794 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
795 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
797 SysTryReturn(NID_MEDIA, (brightness >= MIN_CAMERA_BRIGHTNESS && brightness <= MAX_CAMERA_BRIGHTNESS), E_OUT_OF_RANGE, E_OUT_OF_RANGE,
798 "[E_OUT_OF_RANGE] The brightness(%d) is out of range. The brightness must be in the range between 0 ~ 9.", brightness);
802 if(__sceneMode != CAMERA_SCENE_OFF)
803 {//because this attribute is related to scene mode.
804 r = SetSceneModeAttr(CAMERA_SCENE_OFF);
805 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
807 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_BRIGHTNESS : _COP_SECONDARY_BRIGHTNESS);
808 r = SetProperty(operation, _MIN_PROPERTY, _MAX_PROPERTY, brightness);
809 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. brightness:%d", GetErrorMessage(r), brightness);
812 __brightness = brightness;
817 _CameraImpl::GetBrightness(void) const
823 _CameraImpl::SetContrast(int contrast)
825 result r = E_SUCCESS;
826 _CameraOperationType operation = _COP_NONE;
827 CameraState state = CAMERA_STATE_ERROR;
828 SysLog(NID_MEDIA, "Enter. contrast:%d", contrast);
831 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
832 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
834 SysTryReturn(NID_MEDIA, contrast >= MIN_CAMERA_CONTRAST && contrast <= MAX_CAMERA_CONTRAST, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
835 "[E_OUT_OF_RANGE] The contrast(%d) is out of range. The contrast must be in the range between 0 ~ 9.", contrast);
839 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_CONTRAST : _COP_SECONDARY_CONTRAST);
840 r = SetProperty(operation, _MIN_PROPERTY, _MAX_PROPERTY, contrast);
841 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. contrast:%d", GetErrorMessage(r), contrast);
844 __contrast = contrast;
849 _CameraImpl::GetContrast(void) const
855 _CameraImpl::ZoomIn(void)
857 result r = E_SUCCESS;
859 CameraState state = CAMERA_STATE_ERROR;
860 _CameraOperationType operation = _COP_NONE;
861 SysLog(NID_MEDIA, "Camera zoomIn");
862 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
865 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_PREVIEW
866 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
868 bool supported = false;
869 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ZOOM_LEVEL : _COP_SECONDARY_ZOOM_LEVEL);
870 supported = _CameraCapability::IsSupported(operation);
871 SysTryReturn(NID_MEDIA, supported == true, E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The operation:%d is not supported.", operation);
873 zoomLevel = __zoomLevel + 1;
874 SysTryReturn(NID_MEDIA, zoomLevel <= __maxZoomLevel && zoomLevel >= __minZoomLevel ,
875 E_DEVICE_FAILED, E_DEVICE_FAILED, "[E_DEVICE_FAILED] No more ZoomIn. zoomLevel:%d", zoomLevel);
877 r = SetProperty(operation, __minZoomLevel, __maxZoomLevel, zoomLevel);
879 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
881 __zoomLevel = zoomLevel;
886 _CameraImpl::ZoomOut(void)
888 result r = E_SUCCESS;
890 CameraState state = CAMERA_STATE_ERROR;
891 _CameraOperationType operation = _COP_NONE;
892 SysLog(NID_MEDIA, "Camera zoomOut");
893 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
896 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_PREVIEW
897 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
899 bool supported = false;
900 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ZOOM_LEVEL : _COP_SECONDARY_ZOOM_LEVEL);
901 supported = _CameraCapability::IsSupported(operation);
902 SysTryReturn(NID_MEDIA, supported == true, E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The operation:%d is not supported.", operation);
904 zoomLevel = __zoomLevel - 1;
905 SysTryReturn(NID_MEDIA, zoomLevel <= __maxZoomLevel, E_DEVICE_FAILED, E_DEVICE_FAILED, "[E_DEVICE_FAILED] No more ZoomOut. zoomLevel:%d", zoomLevel);
906 SysTryReturn(NID_MEDIA, zoomLevel >= __minZoomLevel, E_DEVICE_FAILED, E_DEVICE_FAILED, "[E_DEVICE_FAILED] No more ZoomIn. ZoomOut:%d", zoomLevel);
908 r = SetProperty(operation, __minZoomLevel, __maxZoomLevel, zoomLevel);
910 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
912 __zoomLevel = zoomLevel;
917 _CameraImpl::GetMaxZoomLevel(void) const
919 result r = E_SUCCESS;
920 int returnMaxZoomLevel = 0;
923 _CameraOperationType operation = _COP_NONE;
924 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ZOOM_LEVEL : _COP_SECONDARY_ZOOM_LEVEL);
925 r = GetProperty(operation, minZoom, maxZoom);
926 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. minZoom:%d, maxZoom:%d", GetErrorMessage(r), minZoom, maxZoom);
928 returnMaxZoomLevel = maxZoom - minZoom;
929 SysTryCatch(NID_MEDIA, returnMaxZoomLevel > 0, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Retrived zoom values are wrong. minZoom:%d, maxZoom:%d", GetErrorMessage(r), minZoom, maxZoom);
931 SysLog(NID_MEDIA, "Max zoom level is %d", returnMaxZoomLevel);
932 return returnMaxZoomLevel;
935 return MEDIA_INVALID_VALUE;
939 _CameraImpl::GetZoomLevel(void) const
945 _CameraImpl::SetPreviewResolution(const Tizen::Graphics::Dimension& resolution)
947 result r = E_SUCCESS;
948 CameraState state = CAMERA_STATE_ERROR;
949 int err = MM_SUCCESS;
950 SysLog(NID_MEDIA, "Enter. resolution(%d,%d)", resolution.width, resolution.height);
953 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED, E_INVALID_STATE, E_INVALID_STATE,
954 "[E_INVALID_STATE] Camera is in an invalid state. This method is working in CAMERA_STATE_INITIALIZED state. Current state is :%d", state);
956 std::unique_ptr <IList, _ListPtrUtil::Remover> pList (GetSupportedPreviewResolutionListN(), _ListPtrUtil::remover);
957 SysTryCatch(NID_MEDIA, pList.get() != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Getting the supported list was failed.\n");
958 SysTryCatch(NID_MEDIA, pList->Contains(resolution), r = E_OUT_OF_RANGE, E_OUT_OF_RANGE,
959 "[E_OUT_OF_RANGE]The resolution(%d,%d) is out of range. This resolution is not supported in the device.\n", resolution.width, resolution.height);
961 err = camera_set_preview_resolution(__handle, resolution.width, resolution.height);
962 r = ConvertResult(err);
963 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
965 __previewResolution.width = resolution.width;
966 __previewResolution.height = resolution.height;
972 Tizen::Graphics::Dimension
973 _CameraImpl::GetPreviewResolution(void) const
975 return __previewResolution;
978 Tizen::Base::Collection::IList*
979 _CameraImpl::GetSupportedPreviewResolutionListN(void) const
981 result r = E_SUCCESS;
982 _CameraOperationType operation = _COP_NONE;
984 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_PREVIEW_RESOLUTION : _COP_SECONDARY_PREVIEW_RESOLUTION);
985 std::unique_ptr <IList, _ListPtrUtil::Remover> pResolutionList (GetPropertyListN(operation, _RESULT_DIMENSION_LIST), _ListPtrUtil::remover);
986 SysTryCatch(NID_MEDIA, pResolutionList.get() != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Supported list was wrong.");
987 SysTryCatch(NID_MEDIA, pResolutionList->GetCount() > 0, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The list was empty.");
989 return pResolutionList.release();
996 _CameraImpl::SetCaptureResolution(const Tizen::Graphics::Dimension& resolution)
998 result r = E_SUCCESS;
999 CameraState state = CAMERA_STATE_ERROR;
1000 int err = MM_SUCCESS;
1001 SysLog(NID_MEDIA, "Enter. resolution(%d,%d)", resolution.width, resolution.height);
1004 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1005 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1007 std::unique_ptr <IList, _ListPtrUtil::Remover> pList (GetSupportedCaptureResolutionListN(), _ListPtrUtil::remover);
1008 SysTryCatch(NID_MEDIA, pList.get() != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Getting the supported list was failed.\n");
1009 SysTryCatch(NID_MEDIA, pList->Contains(resolution), r = E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1010 "[E_OUT_OF_RANGE]. This resolution(%d,%d)is out of range. This resolution is not supported in the device.\n", resolution.width, resolution.height);
1012 err = camera_set_capture_resolution(__handle, resolution.width, resolution.height);
1013 r = ConvertResult(err);
1014 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1016 __captureResolution.width = resolution.width;
1017 __captureResolution.height = resolution.height;
1024 Tizen::Graphics::Dimension
1025 _CameraImpl::GetCaptureResolution(void) const
1027 return __captureResolution;
1031 Tizen::Base::Collection::IList*
1032 _CameraImpl::GetSupportedCaptureResolutionListN(void) const
1034 result r = E_SUCCESS;
1035 _CameraOperationType operation = _COP_NONE;
1037 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_CAPTURE_RESOLUTION : _COP_SECONDARY_CAPTURE_RESOLUTION);
1038 std::unique_ptr <IList, _ListPtrUtil::Remover> pResolutionList (GetPropertyListN(operation, _RESULT_DIMENSION_LIST), _ListPtrUtil::remover);
1039 SysTryCatch(NID_MEDIA, pResolutionList.get() != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Supported list was wrong.");
1040 SysTryCatch(NID_MEDIA, pResolutionList->GetCount() > 0, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The list was empty.");
1042 return pResolutionList.release();
1049 _CameraImpl::SetEffect(CameraEffect effect)
1051 result r = E_SUCCESS;
1052 CameraState state = CAMERA_STATE_ERROR;
1053 int err = MM_SUCCESS;
1054 _ResultType itemType = _RESULT_INTEGER_LIST;
1056 SysLog(NID_MEDIA, "Enter. effect:%d", effect);
1059 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1060 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1062 SysTryReturn(NID_MEDIA, effect >= CAMERA_EFFECT_NONE && effect <= CAMERA_EFFECT_NIGHT, E_INVALID_ARG, E_INVALID_ARG
1063 , "[E_INVALID_ARG] Invalid argument(effect) is used. effect=%d.", effect);
1067 _CameraOperationType operation = _COP_NONE;
1069 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_EFFECT : _COP_SECONDARY_EFFECT);
1071 std::unique_ptr <IList, _ListPtrUtil::Remover> pEffectList (GetPropertyListN(operation, itemType), _ListPtrUtil::remover);
1072 SysTryCatch(NID_MEDIA, pEffectList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The operation:%d is not supported.", operation);
1073 SysTryCatch(NID_MEDIA, pEffectList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1074 SysTryCatch(NID_MEDIA, pEffectList->Contains(Integer(effect)), r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This effect(%d) is not supported in the device.\n", effect);
1076 camera_attr_effect_mode_e attr = ::CAMERA_ATTR_EFFECT_NONE;
1077 r = _CameraUtil::GetMmEffect(effect, attr);
1078 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. effect:%d", GetErrorMessage(r), effect);
1080 err = camera_attr_set_effect(__handle, attr);
1081 r = ConvertResult(err);
1082 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. effect:%d", GetErrorMessage(r), effect);
1092 _CameraImpl::GetEffect(void) const
1098 _CameraImpl::SetFlashMode(CameraFlashMode flashMode)
1100 result r = E_SUCCESS;
1101 CameraState state = CAMERA_STATE_ERROR;
1102 int err = MM_SUCCESS;
1103 _ResultType itemType = _RESULT_INTEGER_LIST;
1104 SysLog(NID_MEDIA, "Enter. flashMode:%d", flashMode);
1106 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
1109 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1110 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1111 SysTryReturn(NID_MEDIA, flashMode >= CAMERA_FLASH_MODE_OFF, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(flashMode) is used. flashMode=%d", flashMode);
1113 _CameraOperationType operation = _COP_NONE;
1114 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_FLASH_MODE : _COP_SECONDARY_FLASH_MODE);
1115 camera_attr_flash_mode_e attr = ::CAMERA_ATTR_FLASH_MODE_OFF;
1117 std::unique_ptr <IList, _ListPtrUtil::Remover> pFlashModeList (GetPropertyListN(operation, itemType), _ListPtrUtil::remover);
1118 SysTryCatch(NID_MEDIA, pFlashModeList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The operation:%d is not supported.", operation);
1119 SysTryCatch(NID_MEDIA, pFlashModeList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1120 SysTryCatch(NID_MEDIA, pFlashModeList->Contains(Integer(flashMode)) || flashMode == CAMERA_FLASH_MODE_OFF,
1121 r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This flashMode(%d) is not supported in the device.\n", flashMode);
1123 if(__sceneMode != CAMERA_SCENE_OFF)
1124 {//because this attribute is related to scene mode.
1125 r = SetSceneModeAttr(CAMERA_SCENE_OFF);
1126 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
1128 r = _CameraUtil::GetMmFlashMode(flashMode, attr);
1129 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. flashMode:%d", GetErrorMessage(r), flashMode);
1131 err = camera_attr_set_flash_mode(__handle, attr);
1132 r = ConvertResult(err);
1133 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. flashMode:%d", GetErrorMessage(r), flashMode);
1135 __flashMode = flashMode;
1143 _CameraImpl::GetFlashMode(void) const
1149 _CameraImpl::SetExposure(int exposure)
1151 result r = E_SUCCESS;
1152 CameraState state = CAMERA_STATE_ERROR;
1153 _CameraOperationType operation = _COP_NONE;
1154 SysLog(NID_MEDIA, "Enter. exposure:%d", exposure);
1157 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1158 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1160 SysTryReturn(NID_MEDIA, exposure >= MIN_CAMERA_EXPOSURE && exposure <= MAX_CAMERA_EXPOSURE, E_OUT_OF_RANGE, E_OUT_OF_RANGE
1161 , "[E_OUT_OF_RANGE] This exposure(%d)is out of range. The exposure MUST be in the range between 0 ~ 9.", exposure);
1165 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_EXPOSURE : _COP_SECONDARY_EXPOSURE);
1166 r = SetProperty(operation, _MIN_PROPERTY, _MAX_PROPERTY, exposure);
1167 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. exposure:%d", GetErrorMessage(r), exposure);
1170 __exposure = exposure;
1175 _CameraImpl::GetExposure(void) const
1181 _CameraImpl::SetWhiteBalance(CameraWhiteBalance whiteBalance)
1183 result r = E_SUCCESS;
1184 CameraState state = CAMERA_STATE_ERROR;
1185 int err = MM_SUCCESS;
1186 _ResultType itemType = _RESULT_INTEGER_LIST;
1187 SysLog(NID_MEDIA, "Enter. whiteBalance:%d", whiteBalance);
1190 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1191 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1193 SysTryReturn(NID_MEDIA, whiteBalance >= CAMERA_WHITE_BALANCE_AUTO && whiteBalance <= CAMERA_WHITE_BALANCE_TUNGSTEN,
1194 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(whiteBalance) is used. whiteBalance:%d", whiteBalance);
1198 _CameraOperationType operation = _COP_NONE;
1199 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_WHITE_BALANCE : _COP_SECONDARY_WHITE_BALANCE);
1201 std::unique_ptr <IList, _ListPtrUtil::Remover> pWbList (GetPropertyListN(operation, itemType), _ListPtrUtil::remover);
1202 SysTryCatch(NID_MEDIA, pWbList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The operation:%d is not supported.", operation);
1203 SysTryCatch(NID_MEDIA, pWbList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1204 SysTryCatch(NID_MEDIA, pWbList->Contains(Integer(whiteBalance)), r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This whiteBalance(%d) is not supported in the device.\n", whiteBalance);
1206 if(__sceneMode != CAMERA_SCENE_OFF)
1207 {//because this attribute is related to scene mode.
1208 r = SetSceneModeAttr(CAMERA_SCENE_OFF);
1209 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
1211 camera_attr_whitebalance_e attr = ::CAMERA_ATTR_WHITE_BALANCE_NONE;
1212 r = _CameraUtil::GetMmWhiteBalance(whiteBalance, attr);
1213 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. whiteBalance:%d", GetErrorMessage(r), whiteBalance);
1215 err = camera_attr_set_whitebalance(__handle, attr);
1216 r = ConvertResult(err);
1217 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. whiteBalance:%d", GetErrorMessage(r), whiteBalance);
1219 __wb = whiteBalance;
1226 _CameraImpl::GetWhiteBalance(void) const
1232 _CameraImpl::SetQuality(CameraQuality quality)
1234 result r = E_SUCCESS;
1235 CameraState state = CAMERA_STATE_ERROR;
1236 int err = MM_SUCCESS;
1237 SysLog(NID_MEDIA, "Enter. quality:%d", quality);
1240 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1241 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state.This method is not working in this state. Current state is :%d", state);
1243 SysTryReturn(NID_MEDIA, quality >= CAMERA_QUALITY_NORMAL && quality <= CAMERA_QUALITY_MAX, E_OUT_OF_RANGE, E_OUT_OF_RANGE
1244 , "[E_OUT_OF_RANGE] This quality(%d)is out of range.", quality);
1249 r = _CameraUtil::GetMmQuality(quality, attr);
1250 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. quality:%d", GetErrorMessage(r), quality);
1252 err = camera_attr_set_image_quality(__handle, attr);
1253 r = ConvertResult(err);
1254 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. quality:%d", GetErrorMessage(r), quality);
1256 __quality = quality;
1265 _CameraImpl::GetQuality(void) const
1271 _CameraImpl::SetFocusMode(CameraFocusMode focusMode)
1273 result r = E_SUCCESS;
1274 CameraState state = CAMERA_STATE_ERROR;
1275 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_FOCUS_MODE : CAMERA_SECONDARY_FOCUS_MODE);
1276 SysLog(NID_MEDIA, "Enter. focusMode:%d", focusMode);
1278 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
1281 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1282 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1283 SysTryReturn(NID_MEDIA, focusMode > CAMERA_FOCUS_MODE_NONE, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(focusMode) is used. focusMode=%d", focusMode);
1285 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
1286 SysTryCatch(NID_MEDIA, pSupportedList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1287 SysTryCatch(NID_MEDIA, pSupportedList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1288 SysTryCatch(NID_MEDIA, pSupportedList->Contains(Integer(focusMode))
1289 , r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This mode(%d) is not supported in the device.\n", focusMode);
1291 if(__sceneMode != CAMERA_SCENE_OFF)
1292 {//because this attribute is related to scene mode.
1293 r = SetSceneModeAttr(CAMERA_SCENE_OFF);
1294 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
1296 // Set the __focusCallback to false not to call the focus callback in case of CAF.
1297 r = ChangeFocusModeTo(__focusMode, focusMode);
1298 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. current focus mode is %d, new focus mode is %d", GetErrorMessage(r), __focusMode, focusMode);
1300 __focusCallback = false;
1301 __focusMode = focusMode;
1308 _CameraImpl::GetFocusMode(void) const
1314 _CameraImpl::SetAutoFocus(bool callback)
1316 result r = E_SUCCESS;
1317 CameraState state = CAMERA_STATE_ERROR;
1318 SysLog(NID_MEDIA, "Enter. callback:%d, focus mode:%d", callback, __focusMode);
1320 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
1321 SysTryReturn(NID_MEDIA, __focusMode >= CAMERA_FOCUS_MODE_NORMAL && __focusMode <= CAMERA_FOCUS_MODE_CONTINUOUS_AUTO
1322 , E_DEVICE_FAILED, E_DEVICE_FAILED, "[E_DEVICE_FAILED] In the focus mode:%d, this method is not working.", __focusMode);
1325 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_PREVIEW, E_INVALID_STATE, E_INVALID_STATE,
1326 "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1328 r = HandleAutoFocus(__focusMode);
1329 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. focus mode is %d, callback:%s", GetErrorMessage(r), __focusMode, callback);
1331 __focusCallback = callback;
1339 _CameraImpl::ReadyToAutoFocusCallback(void) const
1341 return __focusCallback;
1345 _CameraImpl::SetAutoFocusPoint(const Tizen::Base::Collection::IList& pointList)
1347 result r = E_SUCCESS;
1348 int err = MM_SUCCESS;
1349 CameraState state = CAMERA_STATE_ERROR;
1352 pointCount = pointList.GetCount();
1353 SysLog(NID_MEDIA, "Enter. pointList count :%d", pointCount);
1355 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. Camera was not powered on.");
1358 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_PREVIEW
1359 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1361 SysTryReturn(NID_MEDIA, __focusMode == CAMERA_FOCUS_MODE_NORMAL || __focusMode == CAMERA_FOCUS_MODE_MACRO
1362 , E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE , "[E_UNSUPPORTED_TYPE ] The method is not supported in the current focus mode(%d).", __focusMode);
1364 SysTryCatch(NID_MEDIA, pointCount >= 0 && pointCount <= __supportedFocusPointCount
1365 , r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(pointCount) is used. pointCount=%d");
1369 // Total input points
1370 while (i < pointCount && i < MAX_FOCUS_POINT)
1372 Object* pObj = null;
1373 Point* pPoint = null;
1375 pObj = const_cast<Object*>(pointList.GetAt(i));
1376 SysTryCatch(NID_MEDIA, pObj != null, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(item) is used. %d item is not found.", i);
1378 pPoint = dynamic_cast<Point*>(pObj);
1379 SysTryCatch(NID_MEDIA, pPoint != null, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(item's format) is used. %d item's format is invalid.", i);
1381 err = camera_attr_set_af_area(__handle, pPoint->x, pPoint->y);
1382 r = ConvertResult(err);
1383 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1384 SysLog(NID_MEDIA, "%dst af area(%d, %d) was set successfully", i, pPoint->x, pPoint->y);
1386 // Preserve the points
1387 __focusPoints[0][i] = pPoint->x;
1388 __focusPoints[1][i] = pPoint->y;
1393 if ( i < MAX_FOCUS_POINT )
1395 __focusPoints[0][i] = _INVALID_FOCUS_COORDINATE;
1396 __focusPoints[1][i] = _INVALID_FOCUS_COORDINATE;
1399 __isFocusAreaSet = true;
1401 else //If pointCount is zero, Set focus point to defualt area.
1403 if (__isFocusAreaSet)
1405 err = camera_attr_clear_af_area(__handle);
1406 r = ConvertResult(err);
1407 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1408 SysLog(NID_MEDIA, "the focus area is changed to the center.");
1410 for(int j = 0; j < MAX_FOCUS_POINT; j++)
1412 __focusPoints[0][j] = _INVALID_FOCUS_COORDINATE;
1413 __focusPoints[1][j] = _INVALID_FOCUS_COORDINATE;
1415 __isFocusAreaSet = false;
1424 Tizen::Base::Collection::IList*
1425 _CameraImpl::GetAutoFocusPointN(void) const
1427 result r = E_SUCCESS;
1431 std::unique_ptr <_MediaSafeArrayList, _ListPtrUtil::Remover> pFocusPointList (new (std::nothrow) _MediaSafeArrayList(), _ListPtrUtil::remover);
1432 SysTryCatch(NID_MEDIA, pFocusPointList.get() != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
1434 r = pFocusPointList->Construct();
1435 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1437 while (__focusPoints[0][i] != _INVALID_FOCUS_COORDINATE && __focusPoints[1][i] != _INVALID_FOCUS_COORDINATE)
1439 std::unique_ptr <Object> pPoint (new (std::nothrow) Point(__focusPoints[0][i], __focusPoints[1][i]));
1440 SysTryCatch(NID_MEDIA, pPoint.get() != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
1442 r = pFocusPointList->AddPtr(std::move(pPoint));
1443 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1446 return pFocusPointList.release();
1453 _CameraImpl::SetCaptureFormat(const Tizen::Graphics::PixelFormat format)
1455 result r = E_SUCCESS;
1456 int err = MM_SUCCESS;
1457 CameraState state = CAMERA_STATE_ERROR;
1458 camera_pixel_format_e attr = ::CAMERA_PIXEL_FORMAT_INVALID;
1459 SysLog(NID_MEDIA, "Enter. format:%d", format);
1462 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1463 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1465 std::unique_ptr <IListT<Tizen::Graphics::PixelFormat>, _ListPtrUtil::Remover> pList (GetSupportedCaptureFormatListN(), _ListPtrUtil::remover);
1466 SysTryCatch(NID_MEDIA, pList.get() != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Getting the supported list was failed.\n");
1467 SysTryCatch(NID_MEDIA, pList->Contains(format), r = E_UNSUPPORTED_FORMAT, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT]. This format(%d) is not supported in the device.\n", format);
1469 r = _CameraUtil::GetMmPixelFormat(format, attr);
1470 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. pixel format:%d", GetErrorMessage(r), format);
1472 err = camera_set_capture_format(__handle, attr);
1473 r = ConvertResult(err);
1474 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1476 __captureFormat = format;
1482 Tizen::Graphics::PixelFormat
1483 _CameraImpl::GetCaptureFormat(void) const
1485 return __captureFormat;
1489 Tizen::Base::Collection::IListT<Tizen::Graphics::PixelFormat>*
1490 _CameraImpl::GetSupportedCaptureFormatListN(void) const
1492 result r = E_SUCCESS;
1493 _CameraOperationType operation = _COP_NONE;
1495 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_CAPTURE_FORMAT : _COP_SECONDARY_CAPTURE_FORMAT);
1496 std::unique_ptr <IList, _ListPtrUtil::Remover> pIntegerList (GetPropertyListN(operation, _RESULT_INTEGER_LIST), _ListPtrUtil::remover);
1497 SysTryReturn(NID_MEDIA, pIntegerList.get() != null, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Supported list was wrong.");
1498 SysTryReturn(NID_MEDIA, pIntegerList->GetCount() > 0, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The list was empty.");
1500 std::unique_ptr <Tizen::Base::Collection::ArrayListT<Tizen::Graphics::PixelFormat>, _ListPtrUtil::Remover> pFormatList (new (std::nothrow) ArrayListT<Tizen::Graphics::PixelFormat>(), _ListPtrUtil::remover);
1501 SysTryReturn(NID_MEDIA, pFormatList.get() != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
1503 r = pFormatList->Construct();
1504 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1506 for (int i = 0; i < pIntegerList->GetCount(); i++)
1508 Object* pObj = null;
1509 Integer* pInteger = null;
1510 pObj = pIntegerList->GetAt(i);
1511 SysTryCatch(NID_MEDIA, pObj != null, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Object instance is not available. %d item is not found.", i);
1513 pInteger = dynamic_cast<Integer*>(pObj);
1514 SysTryCatch(NID_MEDIA, pInteger != null, r = E_INVALID_FORMAT, E_INVALID_FORMAT, "[E_INVALID_FORMAT] %d item's format is invalid.", i);
1516 r = pFormatList->Add((Tizen::Graphics::PixelFormat)pInteger->ToInt());
1517 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1518 SysLog(NID_MEDIA, "Pixel format : %d was added.", pInteger->ToInt());
1521 return pFormatList.release();
1528 _CameraImpl::SetPreviewFormat(const Tizen::Graphics::PixelFormat format)
1530 result r = E_SUCCESS;
1531 CameraState state = CAMERA_STATE_ERROR;
1532 camera_pixel_format_e attr = ::CAMERA_PIXEL_FORMAT_INVALID;
1533 SysLog(NID_MEDIA, "Enter. format:%d", format);
1536 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_CAPTURED , E_INVALID_STATE, E_INVALID_STATE,
1537 "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1539 std::unique_ptr <IListT<Tizen::Graphics::PixelFormat>, _ListPtrUtil::Remover> pList (GetSupportedPreviewFormatListN(), _ListPtrUtil::remover);
1540 SysTryCatch(NID_MEDIA, pList.get() != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Getting the supported list was failed.\n");
1541 SysTryCatch(NID_MEDIA, pList->Contains(format), r = E_UNSUPPORTED_FORMAT, E_UNSUPPORTED_FORMAT,
1542 "[E_UNSUPPORTED_FORMAT]. This format(%d) is not supported in the device.\n", format);
1544 r = _CameraUtil::GetMmPixelFormat(format, attr);
1545 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. pixel format:%d", GetErrorMessage(r), format);
1547 r = __pCoordinator->SetCameraSourceFormat(attr);
1548 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1550 __previewFormat = format;
1556 Tizen::Graphics::PixelFormat
1557 _CameraImpl::GetPreviewFormat(void) const
1559 return __previewFormat;
1563 Tizen::Base::Collection::IListT<Tizen::Graphics::PixelFormat>*
1564 _CameraImpl::GetSupportedPreviewFormatListN(void) const
1566 result r = E_SUCCESS;
1567 _CameraOperationType operation = _COP_NONE;
1569 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_PREVIEW_FORMAT : _COP_SECONDARY_PREVIEW_FORMAT);
1570 std::unique_ptr <IList, _ListPtrUtil::Remover> pIntegerList (GetPropertyListN(operation, _RESULT_INTEGER_LIST), _ListPtrUtil::remover);
1571 SysTryReturn(NID_MEDIA, pIntegerList.get() != null, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Supported list was wrong.");
1572 SysTryReturn(NID_MEDIA, pIntegerList->GetCount() > 0, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The list was empty.");
1574 std::unique_ptr <Tizen::Base::Collection::ArrayListT<Tizen::Graphics::PixelFormat>, _ListPtrUtil::Remover> pFormatList (new (std::nothrow) ArrayListT<Tizen::Graphics::PixelFormat>(), _ListPtrUtil::remover);
1575 SysTryReturn(NID_MEDIA, pFormatList.get() != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
1577 r = pFormatList->Construct();
1578 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1580 for (int i = 0; i < pIntegerList->GetCount(); i++)
1582 Object* pObj = null;
1583 Integer* pInteger = null;
1584 pObj = pIntegerList->GetAt(i);
1585 SysTryCatch(NID_MEDIA, pObj != null, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Object instance is not available. %d item is not found.", i);
1587 pInteger = dynamic_cast<Integer*>(pObj);
1588 SysTryCatch(NID_MEDIA, pInteger != null, r = E_INVALID_FORMAT, E_INVALID_FORMAT, "[E_INVALID_FORMAT] %d item's format is invalid.", i);
1590 r = pFormatList->Add((Tizen::Graphics::PixelFormat)pInteger->ToInt());
1591 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1592 SysLog(NID_MEDIA, "Pixel format : %d was added.", pInteger->ToInt());
1595 return pFormatList.release();
1602 _CameraImpl::SetIsoLevel(CameraIsoLevel isoLevel)
1604 result r = E_SUCCESS;
1605 CameraState state = CAMERA_STATE_ERROR;
1606 int err = MM_SUCCESS;
1607 _ResultType itemType = _RESULT_INTEGER_LIST;
1609 camera_attr_iso_e attr = ::CAMERA_ATTR_ISO_AUTO;
1610 SysLog(NID_MEDIA, "Enter. isoLevel:%d", isoLevel);
1613 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1614 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1616 SysTryReturn(NID_MEDIA, isoLevel >= CAMERA_ISO_DEFAULT && isoLevel <= CAMERA_ISO_MAX , E_OUT_OF_RANGE, E_OUT_OF_RANGE
1617 , "[E_OUT_OF_RANGE] This isoLevel(%d) is out of range.", isoLevel);
1621 _CameraOperationType operation = _COP_NONE;
1622 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ISO_LEVEL : _COP_SECONDARY_ISO_LEVEL);
1624 std::unique_ptr <IList, _ListPtrUtil::Remover> pIsoList (GetPropertyListN(operation, itemType), _ListPtrUtil::remover);
1625 SysTryCatch(NID_MEDIA, pIsoList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The operation:%d is not supported.", operation);
1626 SysTryCatch(NID_MEDIA, pIsoList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1627 SysTryCatch(NID_MEDIA, pIsoList->Contains(Integer(isoLevel)) || isoLevel == CAMERA_ISO_DEFAULT || isoLevel == CAMERA_ISO_MIN
1628 || isoLevel == CAMERA_ISO_MAX, r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This isoLevel(%d) is not supported in the device.\n", isoLevel);
1630 if(__sceneMode != CAMERA_SCENE_OFF)
1631 {//because this attribute is related to scene mode.
1632 r = SetSceneModeAttr(CAMERA_SCENE_OFF);
1633 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
1635 r = _CameraUtil::GetMmIso(isoLevel, attr);
1636 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. isoLevel :%d", GetErrorMessage(r), isoLevel);
1638 err = camera_attr_set_iso(__handle, attr);
1639 r = ConvertResult(err);
1640 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. isoLevel :%d", GetErrorMessage(r), isoLevel);
1642 __isoLevel = isoLevel;
1650 _CameraImpl::GetIsoLevel(void) const
1656 _CameraImpl::SetPreviewFrameRate(int fps)
1658 result r = E_SUCCESS;
1659 CameraState state = CAMERA_STATE_ERROR;
1660 int err = MM_SUCCESS;
1661 camera_attr_fps_e attr = ::CAMERA_ATTR_FPS_AUTO;
1662 SysLog(NID_MEDIA, "Enter. fps:%d", fps);
1665 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED, E_INVALID_STATE, E_INVALID_STATE,
1666 "[E_INVALID_STATE] Camera is in an invalid state. This method is working in CAMERA_STATE_INITIALIZED state. Current state is :%d", (
1669 std::unique_ptr <IListT<int>, _ListPtrUtil::Remover> pList (GetSupportedPreviewFrameRateListN(), _ListPtrUtil::remover);
1670 SysTryCatch(NID_MEDIA, pList.get() != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Getting the supported list was failed.\n");
1671 SysTryCatch(NID_MEDIA, pList->Contains(fps), r = E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1672 "[E_OUT_OF_RANGE]. This fps(%d) is out of range.", fps);
1674 r = _CameraUtil::GetMmFps(fps, attr);
1675 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. fps:%d", GetErrorMessage(r), fps);
1677 err = camera_attr_set_preview_fps(__handle, attr);
1678 r = ConvertResult(err);
1679 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1688 _CameraImpl::GetPreviewFrameRate(void) const
1693 Tizen::Base::Collection::IListT <int>*
1694 _CameraImpl::GetSupportedPreviewFrameRateListN(void) const
1696 result r = E_SUCCESS;
1697 _CameraOperationType operation = _COP_NONE;
1699 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_PREVIEW_FRAMERATE : _COP_SECONDARY_PREVIEW_FRAMERATE);
1700 std::unique_ptr <IList, _ListPtrUtil::Remover> pIntegerList (GetPropertyListN(operation, _RESULT_INTEGER_LIST), _ListPtrUtil::remover);
1701 SysTryReturn(NID_MEDIA, pIntegerList.get() != null, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Supported list was wrong.");
1702 SysTryReturn(NID_MEDIA, pIntegerList->GetCount() > 0, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The list was empty.");
1704 std::unique_ptr <Tizen::Base::Collection::ArrayListT<int>, _ListPtrUtil::Remover> pListT (new (std::nothrow) ArrayListT<int>(), _ListPtrUtil::remover);
1705 SysTryReturn(NID_MEDIA, pListT.get() != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
1707 r = pListT->Construct();
1708 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1710 for (int i = 0; i < pIntegerList->GetCount(); i++)
1712 Object* pObj = null;
1713 Integer* pInteger = null;
1714 pObj = pIntegerList->GetAt(i);
1715 SysTryCatch(NID_MEDIA, pObj != null, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Object instance is not available. %d item is not found.", i);
1717 pInteger = dynamic_cast<Integer*>(pObj);
1718 SysTryCatch(NID_MEDIA, pInteger != null, r = E_INVALID_FORMAT, E_INVALID_FORMAT, "[E_INVALID_FORMAT] %d item's fps is invalid.", i);
1720 r = pListT->Add(pInteger->ToInt());
1721 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1722 SysLog(NID_MEDIA, "FPS : %d was added.", pInteger->ToInt());
1725 return pListT.release();
1731 Tizen::Base::Collection::IListT<int>*
1732 _CameraImpl::GetSupportedPreviewFrameRateListN(const Tizen::Graphics::Dimension& dim) const
1734 result r = E_SUCCESS;
1735 Object *pObj = null;
1736 _CameraDeviceType device = _CAMERA_DEVICE_NONE;
1737 _ResultType itemType = _RESULT_NONE;
1739 device = (__selection == CAMERA_PRIMARY ? _CAMERA_DEVICE_PRIMARY : _CAMERA_DEVICE_SECONDARY);
1740 pObj = _CameraCapability::GetSupportedPreviewFrameRateN(device, _QUERY_LIST, dim, itemType);
1741 std::unique_ptr <ArrayList, _ListPtrUtil::Remover> pIntegerList (dynamic_cast<ArrayList*>(pObj), _ListPtrUtil::remover);
1742 SysTryReturn(NID_MEDIA, pIntegerList.get() != null, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. Supported list was wrong.");
1743 SysTryReturn(NID_MEDIA, pIntegerList->GetCount() > 0, null, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The list was empty.");
1745 std::unique_ptr <Tizen::Base::Collection::ArrayListT<int>, _ListPtrUtil::Remover> pListT (new (std::nothrow) ArrayListT<int>(), _ListPtrUtil::remover);
1746 SysTryCatch(NID_MEDIA, pListT.get() != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
1748 r = pListT->Construct();
1749 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1751 for (int i = 0; i < pIntegerList->GetCount(); i++)
1753 Object* pObj = null;
1754 Integer* pInteger = null;
1755 pObj = pIntegerList->GetAt(i);
1756 SysTryCatch(NID_MEDIA, pObj != null, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Object instance is not available. %d item is not found.", i);
1758 pInteger = dynamic_cast<Integer*>(pObj);
1759 SysTryCatch(NID_MEDIA, pInteger != null, r = E_INVALID_FORMAT, E_INVALID_FORMAT, "[E_INVALID_FORMAT] %d item's fps is invalid.", i);
1761 r = pListT->Add(pInteger->ToInt());
1762 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1763 SysLog(NID_MEDIA, "FPS : %d was added.", pInteger->ToInt());
1766 return pListT.release();
1773 _CameraImpl::SetExifOrientation(CameraExifOrientation orientation)
1775 result r = E_SUCCESS;
1776 CameraState state = CAMERA_STATE_ERROR;
1777 SysLog(NID_MEDIA, "Enter. orientation:%d", orientation);
1780 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1781 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1783 SysTryCatch(NID_MEDIA, CAMERA_EXIF_ORIENTATION_TOP_LEFT <= orientation && orientation <= CAMERA_EXIF_ORIENTATION_LEFT_BOTTOM,
1784 r = E_OUT_OF_RANGE, r, "[E_OUT_OF_RANGE] This orientation(%d) is out of range.", orientation);
1786 if ( __isPoweredOn )
1788 __pCoordinator->SetCameraOrientation(orientation);
1790 __exifOrientation = orientation;
1798 _CameraImpl::SetExifGpsCoordinates(double latitude, double longitude, float altitude)
1800 result r = E_SUCCESS;
1801 CameraState state = CAMERA_STATE_ERROR;
1802 int err = MM_SUCCESS;
1803 SysLog(NID_MEDIA, "Enter. latitude:%f, longitude:%f, altitude:%f", latitude, longitude, altitude);
1806 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1807 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1809 SysTryCatch(NID_MEDIA, -90.0 <= latitude && latitude <= 90.0 , r = E_OUT_OF_RANGE, r, "[E_OUT_OF_RANGE] This latitude(%f) is out of range.", latitude);
1810 SysTryCatch(NID_MEDIA, -180.0 <= longitude && longitude <= 180.0 , r = E_OUT_OF_RANGE, r, "[E_OUT_OF_RANGE] This longitude(%f) is out of range.", longitude);
1812 if ( __isPoweredOn )
1814 err = camera_attr_set_geotag(__handle, latitude, longitude, (double)altitude);
1815 r = ConvertResult(err);
1816 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. latitude:%f, longitude:%f, altitude:%f", GetErrorMessage(r), latitude, longitude, altitude);
1818 __exifLatitude = latitude;
1819 __exifLongitude = longitude;
1820 __exifAltitude = altitude;
1828 _CameraImpl::DisableExifGpsCoordinates(void)
1830 result r = E_SUCCESS;
1831 CameraState state = CAMERA_STATE_ERROR;
1832 int err = MM_SUCCESS;
1833 SysLog(NID_MEDIA, "Disable exif gps co-ordinates");
1836 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1837 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera is in an invalid state. This method is not working in this state. Current state is :%d", state);
1839 err = camera_attr_remove_geotag(__handle);
1840 r = ConvertResult(err);
1841 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1843 __exifLatitude = _CAMERA_EXIF_GPS_INVALID_LATITUDE;
1844 __exifLongitude = _CAMERA_EXIF_GPS_INVALID_LONGITUDE;
1853 _CameraImpl::SetFlip(CameraFlipType flip)
1855 result r = E_SUCCESS;
1856 CameraState state = CAMERA_STATE_ERROR;
1857 int err = MM_SUCCESS;
1858 camera_flip_e attr = ::CAMERA_FLIP_NONE;
1859 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_FLIP : CAMERA_SECONDARY_FLIP);
1860 SysLog(NID_MEDIA, "Enter. flip:%d", flip);
1863 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED, E_INVALID_STATE, E_INVALID_STATE,
1864 "[E_INVALID_STATE] Camera is in an invalid state. This method is working in CAMERA_STATE_INITIALIZED state. Current state is :%d", state);
1865 SysTryReturn(NID_MEDIA, flip >= CAMERA_FLIP_NONE && flip <= CAMERA_FLIP_VERTICAL , E_INVALID_ARG , E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(flip) is used. flip=%d.", flip);
1867 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
1868 SysTryCatch(NID_MEDIA, pSupportedList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1869 SysTryCatch(NID_MEDIA, pSupportedList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1870 SysTryCatch(NID_MEDIA, pSupportedList->Contains(Integer(flip)), r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This flip(%d) is not supported in the device.\n", flip);
1872 r = _CameraUtil::GetMmFlip(__selection, flip, attr);
1873 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. flip:%d", GetErrorMessage(r), flip);
1875 err = camera_attr_set_stream_flip(__handle, attr);
1876 r = ConvertResult(err);
1877 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. flip:%d", GetErrorMessage(r), flip);
1886 _CameraImpl::GetFlip(void) const
1892 _CameraImpl::SetPreviewRotation(CameraRotation rotation)
1894 result r = E_SUCCESS;
1895 CameraState state = CAMERA_STATE_ERROR;
1896 int err = MM_SUCCESS;
1897 camera_rotation_e attr = ::CAMERA_ROTATION_NONE;
1898 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_PREVIEW_ROTATION : CAMERA_SECONDARY_PREVIEW_ROTATION);
1899 SysLog(NID_MEDIA, "Enter. rotation:%d", rotation);
1902 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED, E_INVALID_STATE, E_INVALID_STATE,
1903 "[E_INVALID_STATE] Camera is in an invalid state. This method is working in CAMERA_STATE_INITIALIZED state. Current state is :%d", state);
1904 SysTryReturn(NID_MEDIA, rotation >= CAMERA_ROTATION_NONE && rotation <= CAMERA_ROTATION_270, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(rotation) is used. rotation=%d.", rotation);
1906 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
1907 SysTryCatch(NID_MEDIA, pSupportedList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1908 SysTryCatch(NID_MEDIA, pSupportedList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1909 SysTryCatch(NID_MEDIA, pSupportedList->Contains(Integer(rotation)), r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This rotation(%d) is not supported in the device.\n", rotation);
1911 r = _CameraUtil::GetMmRotation(rotation, attr);
1912 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. rotation:%d", GetErrorMessage(r), rotation);
1914 err = camera_attr_set_stream_rotation(__handle, attr);
1915 r = ConvertResult(err);
1916 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera rotate stream failed. displayHandle:%d, previewedData:%d", GetErrorMessage(r), __previewRegionHandle, __previewProcessing);
1918 __previewRotation = rotation;
1925 _CameraImpl::GetPreviewRotation(void) const
1927 return __previewRotation;
1931 _CameraImpl::SetMeteringMode(CameraMeteringMode meteringMode)
1933 result r = E_SUCCESS;
1934 CameraState state = CAMERA_STATE_ERROR;
1935 int err = MM_SUCCESS;
1936 camera_attr_exposure_mode_e attr = ::CAMERA_ATTR_EXPOSURE_MODE_OFF;
1937 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_METERING_MODE : CAMERA_SECONDARY_METERING_MODE);
1938 SysLog(NID_MEDIA, "Enter. meteringMode:%d", meteringMode);
1940 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera was not powered on.");
1943 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1944 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] This method is not working in this state. Current state is :%d", state);
1945 SysTryReturn(NID_MEDIA, meteringMode >= CAMERA_METERING_MODE_NONE, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This mode %d cannot be set.", meteringMode);
1947 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
1948 SysTryCatch(NID_MEDIA, pSupportedList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1949 SysTryCatch(NID_MEDIA, pSupportedList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1950 SysTryCatch(NID_MEDIA, pSupportedList->Contains(Integer(meteringMode)) || meteringMode == CAMERA_METERING_MODE_NONE
1951 , r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This mode(%d) is not supported in the device.\n", meteringMode);
1953 if(__sceneMode != CAMERA_SCENE_OFF)
1954 {//because this attribute is related to scene mode.
1955 r = SetSceneModeAttr(CAMERA_SCENE_OFF);
1956 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. ResetSceneMode", GetErrorMessage(r));
1958 r = _CameraUtil::GetMmMeteringMode(meteringMode, attr);
1959 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. rotation:%d", GetErrorMessage(r), meteringMode);
1961 err = camera_attr_set_exposure_mode(__handle, attr);
1962 r = ConvertResult(err);
1963 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera metering mode failed. meteringMode:%d", GetErrorMessage(r), meteringMode);
1965 __meteringMode = meteringMode;
1972 _CameraImpl::GetMeteringMode(void) const
1974 return __meteringMode;
1978 _CameraImpl::SetSceneMode(CameraSceneMode sceneMode)
1980 result r = E_SUCCESS;
1981 CameraState state = CAMERA_STATE_ERROR;
1982 int err = MM_SUCCESS;
1983 camera_attr_scene_mode_e attr = ::CAMERA_ATTR_SCENE_MODE_NORMAL;
1984 SysLog(NID_MEDIA, "Enter. sceneMode:%d", sceneMode);
1986 SysTryReturn(NID_MEDIA, __isPoweredOn == true, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Camera was not powered on.");
1989 SysTryReturn(NID_MEDIA, state == CAMERA_STATE_INITIALIZED || state == CAMERA_STATE_PREVIEW || state == CAMERA_STATE_CAPTURED
1990 , E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] This method is not working in this state. Current state is :%d", state);
1991 SysTryReturn(NID_MEDIA, sceneMode >= CAMERA_SCENE_OFF, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This mode %d cannot be set.", sceneMode);
1993 _CameraOperationType operation = _COP_NONE;
1994 _ResultType itemType = _RESULT_INTEGER_LIST;
1995 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_SCENE_MODE : _COP_SECONDARY_SCENE_MODE);
1996 std::unique_ptr <IList, _ListPtrUtil::Remover> pSceneModeList (GetPropertyListN(operation, itemType), _ListPtrUtil::remover);
1997 SysTryCatch(NID_MEDIA, pSceneModeList.get() != null, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
1999 SysTryCatch(NID_MEDIA, pSceneModeList->GetCount() > 0, r = E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION]");
2000 SysTryCatch(NID_MEDIA, pSceneModeList->Contains(Integer(sceneMode))
2001 , r = E_UNSUPPORTED_TYPE, E_UNSUPPORTED_TYPE, "[E_UNSUPPORTED_TYPE]. This mode(%d) is not supported in the device.\n", sceneMode);
2003 r = _CameraUtil::GetMmSceneMode(sceneMode, attr);
2004 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. sceneMode:%d", GetErrorMessage(r), sceneMode);
2006 err = camera_attr_set_scene_mode(__handle, attr);
2007 r = ConvertResult(err);
2008 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera scene mode failed. sceneMode:%d", GetErrorMessage(r), sceneMode);
2010 if ((sceneMode == CAMERA_SCENE_OFF) && (__sceneMode != CAMERA_SCENE_OFF))
2012 __sceneMode = sceneMode;
2013 r = ReloadConfiguration(_RELOAD_BRIGHTNESS | _RELOAD_WB | _RELOAD_ISO | _RELOAD_METERING_MODE | _RELOAD_FOCUS_MODE | _RELOAD_FLASH);
2014 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
2018 __sceneMode = sceneMode;
2025 _CameraImpl::GetSceneMode(void) const
2031 _CameraImpl::SetSceneModeAttr(CameraSceneMode sceneMode)
2033 result r = E_SUCCESS;
2034 int err = MM_SUCCESS;
2035 camera_attr_scene_mode_e attr = ::CAMERA_ATTR_SCENE_MODE_NORMAL;
2037 r = _CameraUtil::GetMmSceneMode(sceneMode, attr);
2038 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. sceneMode:%d", GetErrorMessage(r), sceneMode);
2040 err = camera_attr_set_scene_mode(__handle, attr);
2041 r = ConvertResult(err);
2042 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera scene mode failed. sceneMode:%d", GetErrorMessage(r), sceneMode);
2043 __sceneMode = sceneMode;
2045 if(sceneMode == CAMERA_SCENE_OFF)
2047 r = ReloadConfiguration(_RELOAD_BRIGHTNESS | _RELOAD_WB | _RELOAD_ISO | _RELOAD_METERING_MODE | _RELOAD_FOCUS_MODE | _RELOAD_FLASH);
2048 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
2055 _CameraImpl::AddVideoStreamFilter(IVideoStreamFilter& filter)
2057 result r = E_SUCCESS;
2059 r = __pVideoStreamCoordinator->AddVideoStreamFilter(filter);
2060 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
2062 __previewProcessing = __previewProcessing | _PREVIEW_PRE_PROCESSING;
2068 _CameraImpl::RemoveVideoStreamFilter(IVideoStreamFilter& filter)
2070 result r = E_SUCCESS;
2072 r = __pVideoStreamCoordinator->RemoveVideoStreamFilter(filter);
2073 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
2075 if (__pVideoStreamCoordinator->GetFilterListCount() == 0)
2077 __previewProcessing = __previewProcessing & (~_PREVIEW_PRE_PROCESSING);
2084 _CameraImpl::ConvertResult(int err) const
2086 result r = E_SYSTEM;
2087 if (err != ::CAMERA_ERROR_NONE)
2089 SysLog(NID_MEDIA, "MM Err:0x%x", err);
2093 if (err == ::CAMERA_ERROR_NONE)
2097 else if (err == ::CAMERA_ERROR_INVALID_PARAMETER)
2101 else if (err == ::CAMERA_ERROR_INVALID_STATE)
2103 r = E_INVALID_STATE;
2105 else if (err == ::CAMERA_ERROR_OUT_OF_MEMORY)
2107 r = E_OUT_OF_MEMORY;
2109 else if (err == ::CAMERA_ERROR_DEVICE)
2111 r = E_DEVICE_FAILED;
2113 else if (err == ::CAMERA_ERROR_INVALID_OPERATION
2114 || err == ::CAMERA_ERROR_SECURITY_RESTRICTED)
2118 else if (err == ::CAMERA_ERROR_DEVICE_BUSY
2119 || err == ::CAMERA_ERROR_SOUND_POLICY)
2123 else if (err == ::CAMERA_ERROR_DEVICE_NOT_FOUND)
2125 r = E_DEVICE_UNAVAILABLE;
2136 _CameraImpl::GetMmState(void) const
2138 result r = E_SUCCESS;
2139 int err = MM_SUCCESS;
2140 camera_state_e mmState = ::CAMERA_STATE_NONE;
2142 err = camera_get_state(__handle, &mmState);
2143 r = ConvertResult(err);
2144 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2149 return ::CAMERA_STATE_NONE;
2153 _CameraImpl::SetState(CameraState state)
2159 _CameraImpl::GetSelection(void) const
2165 _CameraImpl::EnqueueData(_CameraBuffer& cameraBuffer)
2167 result r = E_SUCCESS;
2168 _CameraBufferType bufferType = cameraBuffer.GetBufferType();
2169 SysTryReturn(NID_MEDIA, cameraBuffer.GetLimit() > 0, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] Propagating. bufferType:%d", GetErrorMessage(r), bufferType);
2171 std::unique_ptr <_CameraBuffer> pCameraBuffer (new (std::nothrow) _CameraBuffer());
2172 SysTryReturn(NID_MEDIA, pCameraBuffer.get() != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
2174 r = pCameraBuffer->Construct(cameraBuffer);
2175 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. bufferType:%d", GetErrorMessage(r), bufferType);
2179 case _CAMERA_BUFFER_CAPTURE:
2180 r = __pCaptureBufferQueue->Enqueue(*pCameraBuffer.get());
2181 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. bufferType:%d", GetErrorMessage(r), bufferType);
2184 case _CAMERA_BUFFER_PREVIEW:
2185 r = __pPreviewBufferQueue->Enqueue(*pCameraBuffer.get());
2186 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating. bufferType:%d", GetErrorMessage(r), bufferType);
2191 SysLogException(NID_MEDIA, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(bufferType) is used. bufferType=%d.", bufferType);
2195 pCameraBuffer.release();
2201 _CameraImpl::DequeueDataN(_CameraBufferType bufferType)
2203 result r = E_SUCCESS;
2204 _CameraBuffer* pBuffer = null;
2208 case _CAMERA_BUFFER_CAPTURE:
2209 pBuffer = static_cast<_CameraBuffer*>(__pCaptureBufferQueue->Dequeue());
2212 case _CAMERA_BUFFER_PREVIEW:
2213 pBuffer = static_cast<_CameraBuffer*>(__pPreviewBufferQueue->Dequeue());
2216 case _CAMERA_BUFFER_NONE:
2220 SysTryCatch(NID_MEDIA, pBuffer != null, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] Propagating. bufferType:%d", GetErrorMessage(E_OBJ_NOT_FOUND), bufferType);
2225 SysLogException(NID_MEDIA, E_UNDERFLOW, "[E_UNDERFLOW] Queue is empty.");
2230 _CameraImpl::GetCoordinator(void)
2232 return __pCoordinator;
2236 _CameraImpl::IsZeroShutterLag(void) const
2238 return __zeroShutterLag;
2241 Tizen::Graphics::PixelFormat
2242 _CameraImpl::GetDeviceRecommendPreviewFormat(void) const
2244 return __deviceDefaultPreviewFormat;
2248 _CameraImpl::SetProperty(_CameraOperationType operation, int min, int max, int value)
2250 result r = E_SUCCESS;
2251 bool supported = false;
2255 int err = MM_SUCCESS;
2257 SysLog(NID_MEDIA, "Enter. operation:%d, min:%d, max:%d, value:%d", operation, min, max, value);
2259 SysTryReturn(NID_MEDIA, max - min > 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(Min, Max) is used. Min:%d, Max:%d wrong. value is :%d", min, max, value);
2260 SysTryReturn(NID_MEDIA, value >= min && value <= max, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(Min, Max) is used. Min:%d, Max:%d value is :%d", min, max, value);
2262 supported = _CameraCapability::IsSupported(operation);
2263 SysTryReturn(NID_MEDIA, supported == true, E_UNSUPPORTED_OPERATION, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] The operation:%d is not supported.", operation);
2267 case _COP_PRIMARY_BRIGHTNESS:
2268 case _COP_SECONDARY_BRIGHTNESS:
2269 err = camera_attr_get_brightness_range(__handle, &mmMin, &mmMax);
2270 r = ConvertResult(err);
2271 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera get attribute range failed. operation:%d, value:%d", GetErrorMessage(r), operation, value);
2273 mmValue = (int) ((double) (mmMax - mmMin) / (double) (max - min) * (double) value);
2274 if (mmValue < mmMin)
2278 else if (mmValue > mmMax)
2282 err = camera_attr_set_brightness(__handle, mmValue);
2283 r = ConvertResult(err);
2284 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set attribute range failed. operation:%d, value:%d, mmValue:%d", GetErrorMessage(r), operation, value, mmValue);
2287 case _COP_PRIMARY_CONTRAST:
2288 case _COP_SECONDARY_CONTRAST:
2289 err = camera_attr_get_contrast_range(__handle, &mmMin, &mmMax);
2290 r = ConvertResult(err);
2291 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera get attribute range failed. operation:%d, value:%d", GetErrorMessage(r), operation, value);
2293 mmValue = (int) ((double) (mmMax - mmMin) / (double) (max - min) * (double) value);
2294 if (mmValue < mmMin)
2298 else if (mmValue > mmMax)
2302 err = camera_attr_set_contrast(__handle, mmValue);
2303 r = ConvertResult(err);
2304 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set attribute range failed. operation:%d, value:%d, mmValue:%d", GetErrorMessage(r), operation, value, mmValue);
2307 case _COP_PRIMARY_EXPOSURE:
2308 case _COP_SECONDARY_EXPOSURE:
2309 err = camera_attr_get_exposure_range(__handle, &mmMin, &mmMax);
2310 r = ConvertResult(err);
2311 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera get attribute range failed. operation:%d, value:%d", GetErrorMessage(r), operation, value);
2313 mmValue = (int) ((double) (mmMax - mmMin) / (double) (max - min) * (double) value);
2314 if (mmValue < mmMin)
2318 else if (mmValue > mmMax)
2322 err = camera_attr_set_exposure(__handle, mmValue);
2323 r = ConvertResult(err);
2324 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set attribute range failed. operation:%d, value:%d, mmValue:%d", GetErrorMessage(r), operation, value, mmValue);
2327 case _COP_PRIMARY_ZOOM_LEVEL:
2328 case _COP_SECONDARY_ZOOM_LEVEL:
2329 err = camera_attr_get_zoom_range(__handle, &mmMin, &mmMax);
2330 r = ConvertResult(err);
2331 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera get attribute range failed. operation:%d, value:%d", GetErrorMessage(r), operation, value);
2333 mmValue = (int) ((double) (mmMax - mmMin) / (double) (max - min) * (double) value);
2334 if (mmValue < mmMin)
2338 else if (mmValue > mmMax)
2342 err = camera_attr_set_zoom(__handle, mmValue);
2343 r = ConvertResult(err);
2344 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set attribute range failed. operation:%d, value:%d, mmValue:%d", GetErrorMessage(r), operation, value, mmValue);
2357 _CameraImpl::GetProperty(_CameraOperationType operation, int& mmMin, int& mmMax) const
2359 result r = E_SUCCESS;
2360 int err = MM_SUCCESS;
2364 case _COP_PRIMARY_ZOOM_LEVEL:
2365 case _COP_SECONDARY_ZOOM_LEVEL:
2366 err = camera_attr_get_zoom_range(__handle, &mmMin, &mmMax);
2367 r = ConvertResult(err);
2368 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera get attribute range failed. operation:%d", GetErrorMessage(r), operation);
2380 Tizen::Base::Collection::IList*
2381 _CameraImpl::GetPropertyListN(_CameraOperationType operation, _ResultType itemQueryType) const
2383 result r = E_SUCCESS;
2384 _ResultType itemType = _RESULT_NONE;
2386 std::unique_ptr <IList, _ListPtrUtil::Remover> pList (_CameraCapability::GetListN(operation, itemType), _ListPtrUtil::remover);
2387 SysTryCatch(NID_MEDIA, pList.get() != null, , GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2388 SysTryCatch(NID_MEDIA, itemType == itemQueryType, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. itemQueryType%d, itemType:%d are not same", itemQueryType, itemType);
2390 return pList.release();
2396 Tizen::Base::Collection::IList*
2397 _CameraImpl::GetPropertyListN(const Tizen::Base::String& key) const
2399 result r = E_SUCCESS;
2400 _CapabilityImpl* pCapability = null;
2402 std::unique_ptr <ArrayList, _ListPtrUtil::Remover> pList (new (std::nothrow) ArrayList(), _ListPtrUtil::remover);
2403 SysTryCatch(NID_MEDIA, pList.get() != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
2405 r = pList->Construct();
2406 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2408 pCapability = _CapabilityImpl::GetInstance();
2409 SysTryCatch(NID_MEDIA, pCapability != null, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] _CapabilityImpl instance is not available.");
2410 r = pCapability->GetValueN(key, *(pList.get())); //TODO check
2411 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2413 return pList.release();
2420 _CameraImpl::ReloadConfiguration(int reload)
2422 result r = E_SUCCESS;
2423 int err = MM_SUCCESS;
2424 SysLog(NID_MEDIA, "Enter. reload:0x%x", reload);
2426 if (reload & _RELOAD_PREVIEW_RESOLUTION)
2428 err = camera_set_preview_resolution(__handle, __previewResolution.width, __previewResolution.height);
2429 r = ConvertResult(err);
2430 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating", GetErrorMessage(r));
2432 if (reload & _RELOAD_CAPTURE_RESOLUTION)
2434 err = camera_set_capture_resolution(__handle, __captureResolution.width, __captureResolution.height);
2435 r = ConvertResult(err);
2436 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating", GetErrorMessage(r));
2438 if (reload & _RELOAD_PREVIEW_FORMAT)
2440 camera_pixel_format_e attr = ::CAMERA_PIXEL_FORMAT_INVALID;
2441 r = _CameraUtil::GetMmPixelFormat(__previewFormat, attr);
2442 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. pixel format:%d", GetErrorMessage(r), __previewFormat);
2444 err = camera_set_preview_format(__handle, attr);
2445 r = ConvertResult(err);
2446 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating", GetErrorMessage(r));
2448 if (reload & _RELOAD_INTERNAL_PREVIEW_FORMAT)
2450 err = camera_set_preview_format(__handle, __pCoordinator->GetReloadPreviewFormat());
2451 r = ConvertResult(err);
2452 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating", GetErrorMessage(r));
2454 if (reload & _RELOAD_CAPTURE_FORMAT)
2456 camera_pixel_format_e attr = ::CAMERA_PIXEL_FORMAT_INVALID;
2457 r = _CameraUtil::GetMmPixelFormat(__captureFormat, attr);
2458 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. pixel format:%d", GetErrorMessage(r), __captureFormat);
2460 err = camera_set_capture_format(__handle, attr);
2461 r = ConvertResult(err);
2462 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2464 if (reload & _RELOAD_FPS)
2466 camera_attr_fps_e attr = ::CAMERA_ATTR_FPS_AUTO;
2467 r = _CameraUtil::GetMmFps(__fps, attr);
2468 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. fps:%d", GetErrorMessage(r), __fps);
2470 err = camera_attr_set_preview_fps(__handle, attr);
2471 r = ConvertResult(err);
2472 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2474 if (reload & _RELOAD_BRIGHTNESS)
2476 _CameraOperationType operation = _COP_NONE;
2477 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_BRIGHTNESS : _COP_SECONDARY_BRIGHTNESS);
2478 if ( _CameraCapability::IsSupported(operation))
2480 r = SetProperty(operation, _MIN_PROPERTY, _MAX_PROPERTY, __brightness);
2481 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2484 if (reload & _RELOAD_CONTRAST)
2486 _CameraOperationType operation = _COP_NONE;
2487 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_CONTRAST : _COP_SECONDARY_CONTRAST);
2488 if ( _CameraCapability::IsSupported(operation))
2490 r = SetProperty(operation, _MIN_PROPERTY, _MAX_PROPERTY, __contrast);
2491 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2494 if (reload & _RELOAD_EXPOSURE)
2496 _CameraOperationType operation = _COP_NONE;
2497 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_EXPOSURE : _COP_SECONDARY_EXPOSURE);
2498 if ( _CameraCapability::IsSupported(operation))
2500 r = SetProperty(operation, _MIN_PROPERTY, _MAX_PROPERTY, __exposure);
2501 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2504 if (reload & _RELOAD_MAX_ZOOM_LEVEL)
2506 _CameraOperationType operation = _COP_NONE;
2507 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ZOOM_LEVEL : _COP_SECONDARY_ZOOM_LEVEL);
2510 if ( _CameraCapability::IsSupported(operation))
2512 r = GetProperty(operation, minZoom, maxZoom);
2513 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2515 __maxZoomLevel = maxZoom - minZoom;
2517 if (reload & _RELOAD_ZOOM_LEVEL)
2519 _CameraOperationType operation = _COP_NONE;
2520 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ZOOM_LEVEL : _COP_SECONDARY_ZOOM_LEVEL);
2521 if ( _CameraCapability::IsSupported(operation))
2524 while (zoomLevel < __zoomLevel)
2527 r = SetProperty(operation, __minZoomLevel, __maxZoomLevel, zoomLevel);
2528 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2532 if (reload & _RELOAD_EFFECT)
2534 _CameraOperationType operation = _COP_NONE;
2535 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_EFFECT : _COP_SECONDARY_EFFECT);
2536 if ( _CameraCapability::IsSupported(operation))
2538 camera_attr_effect_mode_e attr = ::CAMERA_ATTR_EFFECT_NONE;
2539 r = _CameraUtil::GetMmEffect(__effect, attr);
2540 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. effect:%d", GetErrorMessage(r), __effect);
2542 err = camera_attr_set_effect(__handle, attr);
2543 r = ConvertResult(err);
2544 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2547 if (reload & _RELOAD_WB)
2549 _CameraOperationType operation = _COP_NONE;
2550 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_WHITE_BALANCE : _COP_SECONDARY_WHITE_BALANCE);
2551 if ( _CameraCapability::IsSupported(operation))
2553 camera_attr_whitebalance_e attr = ::CAMERA_ATTR_WHITE_BALANCE_NONE;
2554 r = _CameraUtil::GetMmWhiteBalance(__wb, attr);
2555 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. whiteBalance:%d", GetErrorMessage(r), __wb);
2557 err = camera_attr_set_whitebalance(__handle, attr);
2558 r = ConvertResult(err);
2559 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2562 if ((reload & _RELOAD_QUALITY) && (__quality != CAMERA_QUALITY_NORMAL))
2565 r = _CameraUtil::GetMmQuality(__quality, attr);
2566 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. quality:%d", GetErrorMessage(r), __quality);
2568 err = camera_attr_set_image_quality(__handle, attr);
2569 r = ConvertResult(err);
2570 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2572 if (reload & _RELOAD_ISO)
2574 _CameraOperationType operation = _COP_NONE;
2575 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ISO_LEVEL : _COP_SECONDARY_ISO_LEVEL);
2576 if ( _CameraCapability::IsSupported(operation))
2578 camera_attr_iso_e attr = ::CAMERA_ATTR_ISO_AUTO;
2580 r = _CameraUtil::GetMmIso(__isoLevel, attr);
2581 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. iso:%d", GetErrorMessage(r), __isoLevel);
2583 err = camera_attr_set_iso(__handle, attr);
2584 r = ConvertResult(err);
2585 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2588 if ((reload & _RELOAD_EXIF_ORIENTATION) && (__exifOrientation != CAMERA_EXIF_ORIENTATION_NONE)) //TODO check whether the exif data is lasting or one-time.
2590 __pCoordinator->SetCameraOrientation(__exifOrientation);
2592 if (reload & _RELOAD_EXIF_GPS_COORDINATES)
2594 if ( __exifLatitude < _CAMERA_EXIF_GPS_INVALID_LATITUDE && __exifLongitude < _CAMERA_EXIF_GPS_INVALID_LONGITUDE )
2596 err = camera_attr_set_geotag(__handle, __exifLatitude, __exifLongitude, (double)__exifAltitude);
2597 r = ConvertResult(err);
2598 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2602 err = camera_attr_remove_geotag(__handle);
2603 r = ConvertResult(err);
2604 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2607 if (reload & _RELOAD_FLASH)
2609 _CameraOperationType operation = _COP_NONE;
2610 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_FLASH_MODE : _COP_SECONDARY_FLASH_MODE);
2612 if ( _CameraCapability::IsSupported(operation))
2614 camera_attr_flash_mode_e attr = ::CAMERA_ATTR_FLASH_MODE_OFF;
2615 r = _CameraUtil::GetMmFlashMode(__flashMode, attr);
2617 err = camera_attr_set_flash_mode(__handle, attr);
2618 r = ConvertResult(err);
2619 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2622 if (reload & _RELOAD_FLIP) // Flip shoud be called before rotation set.
2624 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_FLIP : CAMERA_SECONDARY_FLIP);
2625 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
2627 if (pSupportedList.get() != null)
2629 if (pSupportedList->GetCount() > 0)
2631 camera_flip_e attr = ::CAMERA_FLIP_NONE;
2632 r = _CameraUtil::GetMmFlip(__selection, __flip, attr);
2633 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. flip:%d", GetErrorMessage(r), __flip);
2635 err = camera_attr_set_stream_flip(__handle, attr);
2636 r = ConvertResult(err);
2637 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2641 if (reload & _RELOAD_PREVIEW_ROTATION)
2643 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_PREVIEW_ROTATION : CAMERA_SECONDARY_PREVIEW_ROTATION);
2644 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
2646 if (pSupportedList.get() != null)
2648 if (pSupportedList->GetCount() > 0)
2650 camera_rotation_e attr = ::CAMERA_ROTATION_NONE;
2651 r = _CameraUtil::GetMmRotation(__previewRotation, attr);
2652 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. rotation:%d", GetErrorMessage(r), __previewRotation);
2654 err = camera_attr_set_stream_rotation(__handle, attr);
2655 r = ConvertResult(err);
2656 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2660 if (reload & _RELOAD_PREVIEW_PREPARE)
2662 if ((__previewProcessing & _PREVIEW_PRE_PROCESSING) || (__previewProcessing & _PREVIEW_POST_PROCESSING))
2664 err = camera_set_preview_cb(__handle, PreviewCb, this);
2668 err = camera_unset_preview_cb(__handle);
2670 r = ConvertResult(err);
2671 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Preview callback setting failed. Process:%b", GetErrorMessage(r), __previewProcessing);
2673 if ( __previewRegionHandle != _BufferInfoImpl::INVALID_BUFFER_HANDLE )
2675 err = camera_set_display(__handle, __previewDisplayType, (camera_display_h)__previewRegionHandle);
2676 r = ConvertResult(err);
2677 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set display failed. displayHandle:%d, Process:%b",
2678 GetErrorMessage(r), __previewRegionHandle, __previewProcessing);
2680 if ( __previewDisplayType == ::CAMERA_DISPLAY_TYPE_X11 )
2682 err = camera_set_x11_display_mode(__handle, ::CAMERA_DISPLAY_MODE_FULL);
2683 r = ConvertResult(err);
2684 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set display mode failed. displayHandle:%d, Process:%b",
2685 GetErrorMessage(r), __previewRegionHandle, __previewProcessing);
2687 err = camera_set_x11_display_visible(__handle, true);
2688 r = ConvertResult(err);
2689 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera enabling display visible failed. displayHandle:%d, Process:%b",
2690 GetErrorMessage(r), __previewRegionHandle, __previewProcessing);
2692 camera_rotation_e attr = ::CAMERA_ROTATION_NONE;
2693 r = _CameraUtil::GetMmRotation(__displayRotationType, attr);
2694 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2696 err = camera_set_x11_display_rotation(__handle, attr);
2697 r = ConvertResult(err);
2698 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera rotate display failed. displayHandle:%d, Process:%b, __displayRotationType:%d",
2699 GetErrorMessage(r), __previewRegionHandle, __previewProcessing, __displayRotationType);
2705 err = camera_set_display(__handle, ::CAMERA_DISPLAY_TYPE_NONE, null);
2706 r = ConvertResult(err);
2707 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera set display(null) failed. Process:%b", GetErrorMessage(r), __previewProcessing);
2710 if (reload & _RELOAD_FOCUS_MODE)
2712 _CameraOperationType operation = _COP_NONE;
2713 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_FOCUS_MODE : _COP_SECONDARY_FOCUS_MODE);
2715 if ( _CameraCapability::IsSupported(operation))
2717 r = ChangeFocusModeTo(__focusMode, __focusMode);
2718 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. focus mode is %d", GetErrorMessage(r), __focusMode);
2721 if (reload & _RELOAD_METERING_MODE)
2723 _CameraOperationType operation = _COP_NONE;
2724 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_METERING_MODE : _COP_SECONDARY_METERING_MODE);
2726 if ( _CameraCapability::IsSupported(operation))
2728 camera_attr_exposure_mode_e attr = ::CAMERA_ATTR_EXPOSURE_MODE_OFF;
2729 r = _CameraUtil::GetMmMeteringMode(__meteringMode, attr);
2730 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. metering:%d", GetErrorMessage(r), __meteringMode);
2732 err = camera_attr_set_exposure_mode(__handle, attr);
2733 r = ConvertResult(err);
2734 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. metering:%d", GetErrorMessage(r), __meteringMode);
2737 if (reload & _RELOAD_SCENE_MODE)
2739 _CameraOperationType operation = _COP_NONE;
2740 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_SCENE_MODE : _COP_SECONDARY_SCENE_MODE);
2742 if ( _CameraCapability::IsSupported(operation))
2744 camera_attr_scene_mode_e attr = ::CAMERA_ATTR_SCENE_MODE_NORMAL;
2745 r = _CameraUtil::GetMmSceneMode(__sceneMode, attr);
2746 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. scenemode:%d", GetErrorMessage(r), __sceneMode);
2748 err = camera_attr_set_scene_mode(__handle, attr);
2749 r = ConvertResult(err);
2750 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. scenemode:%d", GetErrorMessage(r), __sceneMode);
2753 if (reload & _RELOAD_EXTRA)
2755 err = camera_attr_enable_tag(__handle, true);
2756 r = ConvertResult(err);
2757 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] camera enabling tag failed.", GetErrorMessage(r));
2766 _CameraImpl::LoadDefaultConfiguration(int reload)
2768 result r = E_SUCCESS;
2769 SysLog(NID_MEDIA, "Enter.");
2771 // Preview resolution
2772 if (reload & _RELOAD_PREVIEW_RESOLUTION)
2774 _CameraOperationType operation = _COP_NONE;
2775 _ResultType itemType = _RESULT_NONE;
2776 Dimension* pDim = null;
2778 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_PREVIEW_RESOLUTION : _COP_SECONDARY_PREVIEW_RESOLUTION);
2779 std::unique_ptr <Object> pObj (_CameraCapability::GetValueN(operation, _QUERY_DEFAULT_VALUE, itemType));
2780 SysTryReturn(NID_MEDIA, itemType == _RESULT_DIMENSION, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The type is wrong. itemType:%d", itemType);
2781 pDim = dynamic_cast<Dimension*>(pObj.get());
2782 SysTryReturn(NID_MEDIA, pDim != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The preview resolution is wrong.");
2783 __deviceDefaultPreviewResolution = *pDim;
2784 __previewResolution = __deviceDefaultPreviewResolution;
2787 // Capture resolution
2788 if (reload & _RELOAD_CAPTURE_RESOLUTION)
2790 _CameraOperationType operation = _COP_NONE;
2791 _ResultType itemType = _RESULT_NONE;
2792 Dimension* pDim = null;
2794 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_CAPTURE_RESOLUTION : _COP_SECONDARY_CAPTURE_RESOLUTION);
2795 std::unique_ptr <Object> pObj (_CameraCapability::GetValueN(operation, _QUERY_DEFAULT_VALUE, itemType));
2796 SysTryReturn(NID_MEDIA, itemType == _RESULT_DIMENSION, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The type is wrong. itemType:%d", itemType);
2797 pDim = dynamic_cast<Dimension*>(pObj.get());
2798 SysTryReturn(NID_MEDIA, pDim != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The capture resolution is wrong.");
2799 __deviceDefaultCaptureResolution = *pDim;
2800 __captureResolution = __deviceDefaultCaptureResolution;
2804 if (reload & _RELOAD_PREVIEW_FORMAT)
2806 _CameraOperationType operation = _COP_NONE;
2807 _ResultType itemType = _RESULT_NONE;
2808 Integer *pInteger = null;
2810 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_PREVIEW_FORMAT : _COP_SECONDARY_PREVIEW_FORMAT);
2811 std::unique_ptr <Object> pObj (_CameraCapability::GetValueN(operation, _QUERY_DEFAULT_VALUE, itemType));
2812 SysTryReturn(NID_MEDIA, itemType == _RESULT_INTEGER, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The type is wrong. itemType:%d", itemType);
2813 pInteger = dynamic_cast<Integer*>(pObj.get());
2814 SysTryReturn(NID_MEDIA, pInteger != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The preview format is wrong.");
2815 __deviceDefaultPreviewFormat = (Tizen::Graphics::PixelFormat)pInteger->ToInt();
2816 __previewFormat = __deviceDefaultPreviewFormat;
2820 if (reload & _RELOAD_CAPTURE_FORMAT)
2822 _CameraOperationType operation = _COP_NONE;
2823 _ResultType itemType = _RESULT_NONE;
2824 Integer *pInteger = null;
2826 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_CAPTURE_FORMAT : _COP_SECONDARY_CAPTURE_FORMAT);
2827 std::unique_ptr <Object> pObj (_CameraCapability::GetValueN(operation, _QUERY_DEFAULT_VALUE, itemType));
2828 SysTryReturn(NID_MEDIA, itemType == _RESULT_INTEGER, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The type is wrong. itemType:%d", itemType);
2829 pInteger = dynamic_cast<Integer*>(pObj.get());
2830 SysTryReturn(NID_MEDIA, pInteger != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The capture format is wrong.");
2831 __deviceDefaultCaptureFormat = (Tizen::Graphics::PixelFormat)pInteger->ToInt();
2832 __captureFormat = __deviceDefaultCaptureFormat;
2836 if (reload & _RELOAD_FOCUS_MODE)
2838 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_FOCUS_MODE : CAMERA_SECONDARY_FOCUS_MODE);
2839 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
2841 if (pSupportedList.get() != null)
2843 if (pSupportedList->GetCount() > 0)
2845 __focusMode = CAMERA_FOCUS_MODE_NORMAL;
2850 __focusMode = CAMERA_FOCUS_MODE_NONE;
2855 if (reload & _RELOAD_ZERO_SHUTTER_LAG)
2857 _CameraOperationType operation = _COP_NONE;
2858 _ResultType itemType = _RESULT_NONE;
2859 Integer *pInteger = null;
2861 operation = (__selection == CAMERA_PRIMARY ? _COP_PRIMARY_ZERO_SHUTTER_LAG: _COP_SECONDARY_ZERO_SHUTTER_LAG);
2862 std::unique_ptr <Object> pObj (_CameraCapability::GetValueN(operation, _QUERY_DEFAULT_VALUE, itemType));
2863 SysTryReturn(NID_MEDIA, itemType == _RESULT_INTEGER, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The type is wrong. itemType:%d", itemType);
2864 pInteger = dynamic_cast<Integer*>(pObj.get());
2865 SysTryReturn(NID_MEDIA, pInteger != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. The zero shutter lag value is wrong.");
2866 __zeroShutterLag = (bool)pInteger->ToInt();
2870 if (reload & _RELOAD_METERING_MODE)
2872 String key = (__selection == CAMERA_PRIMARY ? CAMERA_PRIMARY_METERING_MODE : CAMERA_SECONDARY_METERING_MODE);
2873 std::unique_ptr <IList, _ListPtrUtil::Remover> pSupportedList (GetPropertyListN(key), _ListPtrUtil::remover);
2875 if (pSupportedList.get() != null)
2877 if (pSupportedList->GetCount() > 0)
2879 __meteringMode = CAMERA_METERING_MODE_AVERAGE;
2884 __meteringMode = CAMERA_METERING_MODE_NONE;
2892 _CameraImpl::ChangeFocusModeTo(CameraFocusMode currentMode, CameraFocusMode destMode)
2894 result r = E_SUCCESS;
2895 int tableTotalCount = 0;
2897 int err = MM_SUCCESS;
2899 tableTotalCount = sizeof(_CAMERA_FOCUS_MODE_TRANSIT) / sizeof(_CAMERA_FOCUS_MODE_TRANSIT[0]);
2900 SysLog(NID_MEDIA, " currentMode:%d, destMode:%d, tableTotalCount:%d", currentMode, destMode, tableTotalCount);
2902 for (i = 0; i < tableTotalCount; i++)
2904 if (currentMode == _CAMERA_FOCUS_MODE_TRANSIT[i].currentMode && destMode == _CAMERA_FOCUS_MODE_TRANSIT[i].destMode)
2906 SysLog(NID_MEDIA, "Exist the matching mode field. loop i:%d, current mode:%d, destMode:%d, operation0:%d", i, currentMode, destMode, _CAMERA_FOCUS_MODE_TRANSIT[i].focusOperation0);
2907 switch (_CAMERA_FOCUS_MODE_TRANSIT[i].focusOperation0)
2909 case _FOCUS_MODE_OP_NONE:
2911 case _FOCUS_MODE_OP_CONTINUOUS:
2913 case _FOCUS_MODE_OP_CANCEL:
2914 err = camera_cancel_focusing(__handle);
2915 r = ConvertResult(err);
2916 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to cancel focus.", GetErrorMessage(r));
2922 // Set the mm's focus mode.
2923 camera_attr_af_mode_e attr = ::CAMERA_ATTR_AF_NONE;
2924 r = _CameraUtil::GetMmFocusMode(destMode, attr);
2925 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. focus mode:%d", GetErrorMessage(r), destMode);
2927 err = camera_attr_set_af_mode (__handle, attr);
2928 r = ConvertResult(err);
2929 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to set the focus mode", GetErrorMessage(r));
2931 switch (_CAMERA_FOCUS_MODE_TRANSIT[i].focusOperation1)
2933 case _FOCUS_MODE_OP_NONE:
2935 case _FOCUS_MODE_OP_CONTINUOUS:
2936 err = camera_start_focusing(__handle, true);
2937 r = ConvertResult(err);
2938 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to start continuous focusing", GetErrorMessage(r));
2940 case _FOCUS_MODE_OP_CANCEL:
2948 SysTryCatch(NID_MEDIA, i != tableTotalCount, r = E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Not found. ");
2952 SysLog(NID_MEDIA, "[%s] Real currentMode:%d, param destMode:%d", GetErrorMessage(r), currentMode, destMode);
2957 _CameraImpl::HandleAutoFocus(CameraFocusMode currentMode)
2959 result r = E_SUCCESS;
2960 int tableTotalCount = 0;
2962 int err = MM_SUCCESS;
2964 tableTotalCount = sizeof(_CAMERA_FOCUS_OPERATIONT) / sizeof(_CAMERA_FOCUS_OPERATIONT[0]);
2965 SysLog(NID_MEDIA, "Current mode:%d", currentMode);
2967 for (i = 0; i < tableTotalCount; i++)
2969 if (currentMode == _CAMERA_FOCUS_OPERATIONT[i].currentMode)
2971 SysLog(NID_MEDIA, "Exist the matching mode field. loop i:%d, current mode:%d, operation:%d", i, currentMode, _CAMERA_FOCUS_OPERATIONT[i].focusOperation);
2972 switch (_CAMERA_FOCUS_OPERATIONT[i].focusOperation)
2974 case _FOCUS_OP_NONE:
2976 case _FOCUS_OP_ONCE:
2977 err = camera_start_focusing(__handle, false);
2978 r = ConvertResult(err);
2979 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to start focus once.", GetErrorMessage(r));
2985 if (_CAMERA_FOCUS_OPERATIONT[i].state >= CAMERA_STATE_INITIALIZED && _CAMERA_FOCUS_OPERATIONT[i].state <= CAMERA_STATE_ERROR)
2987 SetState(_CAMERA_FOCUS_OPERATIONT[i].state);
2988 SysLog(NID_MEDIA, "Set the state to %d", _CAMERA_FOCUS_OPERATIONT[i].state);
2993 SysTryCatch(NID_MEDIA, i != tableTotalCount, r = E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Not found. ");
2997 SysLog(NID_MEDIA, "[%s] Current mode:%d", GetErrorMessage(r), currentMode);
3002 _CameraImpl::OnCameraCoordinatorModeChangePrepared(_CameraMode mode)
3004 result r = E_SUCCESS;
3005 SysLog(NID_MEDIA, "Mode:%d", mode);
3007 r = ReloadConfiguration(_RELOAD_PREVIEW_RESOLUTION | _RELOAD_CAPTURE_RESOLUTION | _RELOAD_INTERNAL_PREVIEW_FORMAT
3008 | _RELOAD_CAPTURE_FORMAT | _RELOAD_FPS | _RELOAD_FLIP | _RELOAD_PREVIEW_ROTATION | _RELOAD_PREVIEW_PREPARE);
3009 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
3011 SysLog(NID_MEDIA, "Pre mode changed operation succeeded.");
3016 _CameraImpl::OnCameraCoordinatorModeChanged(_CameraMode mode)
3018 result r = E_SUCCESS;
3019 SysLog(NID_MEDIA, "Mode:%d", mode);
3021 if (__sceneMode == CAMERA_SCENE_OFF)
3023 r = ReloadConfiguration(_RELOAD_BRIGHTNESS | _RELOAD_WB | _RELOAD_ISO | _RELOAD_METERING_MODE | _RELOAD_FLASH | _RELOAD_FOCUS_MODE );
3024 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
3027 r = ReloadConfiguration(_RELOAD_CONTRAST | _RELOAD_EXPOSURE | _RELOAD_MAX_ZOOM_LEVEL | _RELOAD_ZOOM_LEVEL | _RELOAD_EFFECT
3028 | _RELOAD_QUALITY | _RELOAD_EXIF_ORIENTATION | _RELOAD_EXIF_GPS_COORDINATES
3029 | _RELOAD_SCENE_MODE | _RELOAD_EXTRA);
3030 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating", GetErrorMessage(r));
3032 SysLog(NID_MEDIA, "Post mode changed operation succeeded.");
3037 _CameraImpl::StateChangedCb(camera_state_e previous, camera_state_e current, bool byPolicy, void *pUserData)
3039 _CameraImpl* pImpl = static_cast<_CameraImpl*>( pUserData);
3040 SysTryReturnVoidResult(NID_MEDIA, _CameraImpl::IsAlive(), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
3041 SysTryReturnVoidResult(NID_MEDIA, pImpl != null, E_OBJ_NOT_FOUND, "[%s] _CameraImpl instance is not available.", GetErrorMessage(E_OBJ_NOT_FOUND));
3042 SysLog(NID_MEDIA, "State previous:%d, current:%d, byPolicy:%d", previous, current, byPolicy);
3046 _CameraImpl::CaptureCb(camera_image_data_s* pImage, camera_image_data_s *pPostview, camera_image_data_s* pThumbnail, void* pUserData)
3048 result r = E_SUCCESS;
3049 _CameraImpl* pImpl = static_cast<_CameraImpl*>(pUserData);
3050 MediaPixelFormat format = MEDIA_PIXEL_FORMAT_NONE;
3052 SysTryReturnVoidResult(NID_MEDIA, _CameraImpl::IsAlive(), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
3053 SysTryReturnVoidResult(NID_MEDIA, pImpl != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] _CameraImpl is null.");
3054 SysTryReturnVoidResult(NID_MEDIA, pImpl->GetState() == CAMERA_STATE_CAPTURING, E_INVALID_STATE, "[E_INVALID_STATE] The camera is already capturing");
3055 SysTryCatch(NID_MEDIA, pImage != null, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] image is null.");
3056 SysLog(NID_MEDIA, "Enter. image size:%d, format:%d", pImage->size, pImage->format);
3058 _CameraUtil::GetOspMediaPixelFormat(pImage->format, format, ratio);
3059 if (format == MEDIA_PIXEL_FORMAT_NONE) // if the encoded data
3061 _CameraBuffer cameraBuffer;
3062 CodecType codec = CODEC_NONE;
3064 _CameraUtil::GetOspCodecType(pImage->format, codec);
3065 r = cameraBuffer.Construct(pImage->size, _CAMERA_BUFFER_CAPTURE, codec, true, pImage->width, pImage->height);
3066 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d, format%d", GetErrorMessage(r), pImage->size, pImage->format);
3068 r = cameraBuffer.SetArray((byte*) pImage->data, 0, pImage->size);
3069 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. data:%d, size:%d", GetErrorMessage(r), (int) pImage->data, pImage->size);
3070 cameraBuffer.Flip();
3072 r = pImpl->EnqueueData(cameraBuffer);
3073 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. data:%d, size:%d", GetErrorMessage(r), (int) pImage->data, pImage->size);
3075 else // if the raw data
3077 _CameraBuffer cameraBuffer;
3079 r = cameraBuffer.Construct(pImage->size, _CAMERA_BUFFER_CAPTURE, format, pImage->width, pImage->height);
3080 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d, format%d", GetErrorMessage(r), pImage->size, pImage->format);
3082 r = cameraBuffer.SetArray((byte*) pImage->data, 0, pImage->size);
3083 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. data:%d, size:%d", GetErrorMessage(r), (int) pImage->data, pImage->size);
3084 cameraBuffer.Flip();
3086 r = pImpl->EnqueueData(cameraBuffer);
3087 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. data:%d, size:%d", GetErrorMessage(r), (int) pImage->data, pImage->size);
3092 SysLogException(NID_MEDIA, E_INVALID_DATA, "[E_INVALID_DATA] Invalid data is captured.");
3097 _CameraImpl::CaptureCompletedCb(void *pUserData)
3099 result r = E_SUCCESS;
3100 _CameraImpl* pImpl = static_cast<_CameraImpl*>(pUserData);
3101 SysLog(NID_MEDIA, "CaptureCompletedCb");
3103 SysTryReturnVoidResult(NID_MEDIA, _CameraImpl::IsAlive(), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
3104 SysTryReturnVoidResult(NID_MEDIA, pImpl != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] _CameraImpl instance is not available.");
3106 std::unique_ptr <ByteBuffer> pBuffer (pImpl->DequeueDataN(_CAMERA_BUFFER_CAPTURE));
3107 if (pBuffer.get() != null)
3109 SysLog(NID_MEDIA, "Captured data sending. size is %d", pBuffer->GetLimit());
3110 if (pBuffer->GetLimit() > 0)
3112 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_CAPTURED, CAMERA_ERROR_NONE, E_SUCCESS, pBuffer.release());
3113 SysTryReturnVoidResult(NID_MEDIA, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
3117 SysLogException(NID_MEDIA, E_INVALID_DATA, "[E_INVALID_DATA] The captured data is invalid.");
3118 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_CAPTURED, CAMERA_ERROR_DEVICE_FAILED, E_INVALID_DATA, pBuffer.release());
3119 SysTryReturnVoidResult(NID_MEDIA, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
3124 SysLogException(NID_MEDIA, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Out of memory for capturing anymore.");
3125 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_CAPTURED, CAMERA_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, null);
3126 SysTryReturnVoidResult(NID_MEDIA, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
3133 _CameraImpl::PreviewCb(camera_preview_data_s *pFrame, void *pUserData)
3135 result r = E_SUCCESS;
3137 _CameraImpl* pImpl = static_cast<_CameraImpl*>(pUserData);
3139 SysTryReturnVoidResult(NID_MEDIA, _CameraImpl::IsAlive(), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
3140 SysTryReturnVoidResult(NID_MEDIA, pImpl != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] _CameraImpl instance is not available.");
3141 SysTryReturnVoidResult(NID_MEDIA, pFrame != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] camera_preview_data_s instance is not available.");
3142 SysLog(NID_MEDIA, "Enter. preview format:%d, width:%d, height:%d, num_of_planes:%d", pFrame->format, pFrame->width, pFrame->height, pFrame->num_of_planes);
3144 queueCount = pImpl->__pPreviewBufferQueue->GetCount();
3145 if (queueCount < _MAX_PREVIEW_BUFFER_COUNT)
3147 int previewProcessing = pImpl->__previewProcessing;
3148 if (previewProcessing & _PREVIEW_PRE_PROCESSING)
3151 int size[MAX_CAMERA_PLANE_COUNT] = {0,};
3152 byte* data[MAX_CAMERA_PLANE_COUNT] = {0,};
3153 VideoPlaneType planeType[MAX_CAMERA_PLANE_COUNT] = {VIDEO_PLANE_TYPE_NONE,};
3154 if (pFrame->num_of_planes == 1)
3156 size[0] = pFrame->data.single_plane.size;
3157 data[0] = pFrame->data.single_plane.yuv;
3158 planeType[0] = VIDEO_PLANE_TYPE_YUV;
3161 else if (pFrame->num_of_planes == 2)
3163 size[0] = pFrame->data.double_plane.y_size;
3164 size[1] = pFrame->data.double_plane.uv_size;
3165 data[0] = pFrame->data.double_plane.y;
3166 data[1] = pFrame->data.double_plane.uv;
3167 planeType[0] = VIDEO_PLANE_TYPE_Y;
3168 planeType[1] = VIDEO_PLANE_TYPE_UV;
3170 else if (pFrame->num_of_planes == 3)
3172 size[0] = pFrame->data.triple_plane.y_size;
3173 size[1] = pFrame->data.triple_plane.u_size;
3174 size[2] = pFrame->data.triple_plane.v_size;
3175 data[0] = pFrame->data.triple_plane.y;
3176 data[1] = pFrame->data.triple_plane.u;
3177 data[2] = pFrame->data.triple_plane.v;
3178 planeType[0] = VIDEO_PLANE_TYPE_Y;
3179 planeType[1] = VIDEO_PLANE_TYPE_U;
3180 planeType[2] = VIDEO_PLANE_TYPE_V;
3182 MediaPixelFormat mediaFormat = MEDIA_PIXEL_FORMAT_NONE;
3184 _CameraUtil::GetOspMediaPixelFormat(pFrame->format, mediaFormat, ratio);
3186 r = pImpl->__pVideoStreamCoordinator->ProcessVideoStreamData(mediaFormat, pFrame->width, pFrame->height, pFrame->num_of_planes, data, size, planeType);
3187 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. mediaFormat:%d, plane count:%d, width:%d, height:%d, size:%d"
3188 , GetErrorMessage(r), mediaFormat, pFrame->num_of_planes, pFrame->width, pFrame->height, size);
3191 if (previewProcessing & _PREVIEW_POST_PROCESSING)
3193 int mmPreviewSize = 0;
3194 _CameraBuffer mmCameraBuffer;
3195 MediaPixelFormat format = MEDIA_PIXEL_FORMAT_NONE;
3198 _CameraUtil::GetOspMediaPixelFormat(pFrame->format, format, ratio);
3200 if (pFrame->num_of_planes == 1)
3202 int yuvSize = pFrame->data.single_plane.size;
3203 mmPreviewSize = yuvSize;
3205 r = mmCameraBuffer.Construct( yuvSize, _CAMERA_BUFFER_PREVIEW, format, pFrame->width, pFrame->height);
3206 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), mmPreviewSize);
3208 r = mmCameraBuffer.SetArray((byte*)pFrame->data.single_plane.yuv, 0, yuvSize);
3209 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), mmPreviewSize);
3211 mmCameraBuffer.Flip();
3213 else if (pFrame->num_of_planes == 2)
3215 int ySize = pFrame->data.double_plane.y_size;
3216 int uvSize = pFrame->data.double_plane.uv_size;
3217 mmPreviewSize = ySize + uvSize;
3219 r = mmCameraBuffer.Construct(mmPreviewSize, _CAMERA_BUFFER_PREVIEW, format, pFrame->width, pFrame->height);
3220 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), mmPreviewSize);
3222 r = mmCameraBuffer.SetArray((byte*)pFrame->data.double_plane.y, 0, ySize);
3223 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), ySize);
3225 r = mmCameraBuffer.SetArray((byte*)pFrame->data.double_plane.uv, 0, uvSize);
3226 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), uvSize);
3228 mmCameraBuffer.Flip();
3230 else if (pFrame->num_of_planes == 3)
3232 int ySize = pFrame->data.triple_plane.y_size;
3233 int uSize = pFrame->data.triple_plane.u_size;
3234 int vSize = pFrame->data.triple_plane.v_size;
3235 mmPreviewSize = ySize + uSize + vSize;
3237 r = mmCameraBuffer.Construct(mmPreviewSize, _CAMERA_BUFFER_PREVIEW, format, pFrame->width, pFrame->height);
3238 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), mmPreviewSize);
3240 r = mmCameraBuffer.SetArray((byte*)pFrame->data.triple_plane.y, 0, ySize);
3241 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), ySize);
3243 r = mmCameraBuffer.SetArray((byte*)pFrame->data.triple_plane.u, 0, uSize);
3244 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), uSize);
3246 r = mmCameraBuffer.SetArray((byte*)pFrame->data.triple_plane.v, 0, vSize);
3247 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), vSize);
3249 mmCameraBuffer.Flip();
3252 r = pImpl->EnqueueData(mmCameraBuffer);
3253 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. size:%d", GetErrorMessage(r), mmPreviewSize);
3255 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_PREVIEWED_DATA, CAMERA_ERROR_NONE, E_SUCCESS, null); // For the performance, we don't copy the preview data to the event argument.
3256 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
3262 SysLogException(NID_MEDIA, E_INVALID_DATA, "[E_INVALID_DATA] Invalid data is streamed..");
3263 if (queueCount < pImpl->__pPreviewBufferQueue->GetCount()) // if the queue is increased.
3265 std::unique_ptr <ByteBuffer> pBuffer (pImpl->DequeueDataN(_CAMERA_BUFFER_PREVIEW));
3266 pBuffer.reset(null);
3272 _CameraImpl::InterruptedCb(camera_policy_e policy, camera_state_e previous, camera_state_e current, void *pUserData)
3274 result r = E_SUCCESS;
3275 _CameraImpl* pImpl = static_cast<_CameraImpl*>(pUserData);
3276 SysLog(NID_MEDIA, "InterruptedCb called, policy is %d, previous state is %d, current state is %d, pUserData address is %x ", policy, previous, current, pUserData );
3277 SysTryReturnVoidResult(NID_MEDIA, _CameraImpl::IsAlive(), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
3278 SysTryReturnVoidResult(NID_MEDIA, pImpl != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] _CameraImpl instance is not available.");
3279 SysTryReturnVoidResult(NID_MEDIA, pImpl->IsPoweredOn() == true, E_INVALID_OPERATION ,"The camera is already power-offed");
3280 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_ERROR, CAMERA_ERROR_DEVICE_INTERRUPTED, E_DEVICE_FAILED, null);
3281 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "Sending camera interrupted failed [%s] .", GetErrorMessage(r));
3287 _CameraImpl::ErrorCb(camera_error_e error, camera_state_e current, void *pUserData)
3289 result r = E_SUCCESS;
3290 _CameraImpl* pImpl = static_cast<_CameraImpl*>(pUserData);
3291 SysLog(NID_MEDIA, "ErrorCb called, error is 0x%x, current state is %d, pUserData address is %x ", error, current, pUserData );
3292 SysTryReturnVoidResult(NID_MEDIA, _CameraImpl::IsAlive(), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
3293 SysTryReturnVoidResult(NID_MEDIA, pImpl != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] _CameraImpl instance is not available.");
3296 case ::CAMERA_ERROR_OUT_OF_MEMORY:
3297 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_ERROR, CAMERA_ERROR_OUT_OF_MEMORY, E_DEVICE_FAILED, null);
3299 case ::CAMERA_ERROR_DEVICE:
3301 case ::CAMERA_ERROR_DEVICE_BUSY:
3303 case ::CAMERA_ERROR_DEVICE_NOT_FOUND:
3304 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_ERROR, CAMERA_ERROR_DEVICE_FAILED, E_DEVICE_FAILED, null);
3307 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_ERROR, CAMERA_ERROR_DEVICE_FAILED, E_DEVICE_FAILED, null);
3310 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "Sending camera error failed [%s] .", GetErrorMessage(r));
3316 _CameraImpl::FocusStateChangedCb(camera_focus_state_e state, void *pUserData)
3318 result r = E_SUCCESS;
3319 _CameraImpl* pImpl = static_cast<_CameraImpl*>(pUserData);
3320 CameraErrorReason cameraErrorReason = CAMERA_ERROR_NONE;
3321 result cameraResult = E_SUCCESS;
3322 SysLog(NID_MEDIA, "Enter. state is %d.", state);
3323 SysTryReturnVoidResult(NID_MEDIA, _CameraImpl::IsAlive(), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
3324 SysTryReturnVoidResult(NID_MEDIA, pImpl != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] _CameraImpl instance is not available.");
3326 CameraFocusMode focusMode = pImpl->GetFocusMode();
3330 case ::CAMERA_FOCUS_STATE_ONGOING:
3331 if (pImpl->ReadyToAutoFocusCallback())
3333 if (focusMode == CAMERA_FOCUS_MODE_CONTINUOUS_AUTO)
3335 cameraErrorReason = CAMERA_ERROR_NONE;
3336 cameraResult = E_OPERATION_CANCELED;
3337 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_AUTO_FOCUSED, cameraErrorReason, cameraResult, null);
3338 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
3342 case ::CAMERA_FOCUS_STATE_RELEASED:
3344 case ::CAMERA_FOCUS_STATE_FAILED:
3345 cameraErrorReason = CAMERA_ERROR_DEVICE_FAILED;
3346 cameraResult = E_DEVICE_FAILED;
3347 if (pImpl->ReadyToAutoFocusCallback())
3349 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_AUTO_FOCUSED, cameraErrorReason, cameraResult, null);
3350 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
3352 else // No auto focus event is fired.
3354 if (pImpl->GetState() == CAMERA_STATE_AUTO_FOCUSING)
3356 pImpl->SetState(CAMERA_STATE_PREVIEW);
3360 case ::CAMERA_FOCUS_STATE_FOCUSED:
3361 if (pImpl->ReadyToAutoFocusCallback())
3363 r = pImpl->__pCameraEvent->SendEvent(_CAMERA_EVENT_AUTO_FOCUSED, cameraErrorReason, cameraResult, null);
3364 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
3366 else // No auto focus event is fired.
3368 if (pImpl->GetState() == CAMERA_STATE_AUTO_FOCUSING)
3370 pImpl->SetState(CAMERA_STATE_PREVIEW);
3384 _CameraImpl::IsAlive(void)
3390 _CameraImpl::GetInstance(Camera *pCamera)
3392 if ( pCamera != null)
3394 return pCamera->__pImpl;
3400 _CameraImpl::GetInstance(const Camera *pCamera)
3402 if ( pCamera != null)
3404 return pCamera->__pImpl;