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_CameraManager.cpp
20 * @brief This file contains the implementation of the %_CameraManager class.
26 #include <FBaseSysLog.h>
27 #include "FMedia_CameraManager.h"
31 using namespace Tizen::Base;
32 using namespace Tizen::Base::Collection;
34 namespace Tizen { namespace Media
36 _CameraManagerSafeHashMapT* _CameraManager::__pMap = null;
38 _CameraManagerSafeHashMapT::_CameraManagerSafeHashMapT(void)
42 _CameraManagerSafeHashMapT::~_CameraManagerSafeHashMapT(void)
45 _CameraManager::__pMap = null;
49 _CameraManagerSafeHashMapT::RemoveItems(void)
51 IListT <_CameraDeviceType>* pList = null;
52 _CameraManager* pManager = null;
56 SysTryReturn(NID_MEDIA, pList != null, , E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] There is no instance.");
58 for (int i = 0; i < GetCount(); i++)
60 _CameraDeviceType deviceType = _CAMERA_DEVICE_NONE;
61 r = pList->GetAt(i, deviceType);
62 if (IsFailed(r) && deviceType == _CAMERA_DEVICE_NONE)
67 r = GetValue(deviceType, pManager);
68 if (IsFailed(r) && pManager == null)
79 _CameraManager::_CameraManager()
80 : __handle(MM_INVALID_HANDLE)
84 _CameraManager::~_CameraManager()
89 err = camera_destroy(__handle);
90 r = ConvertResult(err);
91 SysLog(NID_MEDIA, "[%s] destroyed.", GetErrorMessage(r));
95 _CameraManager::Construct(_CameraDeviceType cameraDevice)
98 camera_device_e device = CAMERA_DEVICE_CAMERA0;
100 SysLog(NID_MEDIA, "Enter. device:%d", cameraDevice);
102 device = cameraDevice == _CAMERA_DEVICE_PRIMARY ? CAMERA_DEVICE_CAMERA0 : CAMERA_DEVICE_CAMERA1;
104 err = camera_create(device, &__handle);
105 r = ConvertResult(err);
106 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
115 _CameraManager::InitSafeHashMapInst()
117 static _CameraManagerSafeHashMapT map;
118 result r = E_SUCCESS;
121 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
130 _CameraManager::AddInstance(_CameraDeviceType cameraDevice)
132 result r = E_SUCCESS;
135 _CameraManager* pManager = null;
137 SysTryReturn(NID_MEDIA, cameraDevice > _CAMERA_DEVICE_NONE && cameraDevice < _CAMERA_DEVICE_MAX,
138 null, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument(cameraDevice) is used. camderDevice:%d is wrong.", cameraDevice);
140 static pthread_once_t once_block = PTHREAD_ONCE_INIT;
144 pthread_once(&once_block, InitSafeHashMapInst);
146 SysTryCatch(NID_MEDIA, __pMap != null, , r, "[%s] Propagating.", GetErrorMessage(r));
149 r = __pMap->ContainsKey(cameraDevice, out);
150 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
154 r = __pMap->GetValue(cameraDevice, pManager);
155 SysTryCatch(NID_MEDIA, r == E_SUCCESS && pManager != null, , r, "[%s] Propagating.", GetErrorMessage(r));
159 pManager = new (std::nothrow) _CameraManager();
160 SysTryCatch(NID_MEDIA, pManager !=null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. The object is not created.");
162 r = pManager->Construct(cameraDevice);
163 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
165 r = __pMap->Add(cameraDevice, pManager);
166 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
172 if (pManager != null)
180 _CameraManager::Release(_CameraDeviceType cameraDevice)
182 result r = E_SUCCESS;
186 _CameraManager* pManager = null;
187 r = __pMap->GetValue(cameraDevice, pManager);
188 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
190 if (pManager->ReleaseRefCount() == 0)
193 r = __pMap->Remove(cameraDevice);
194 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
200 _CameraManager::GetHandle(void) const
206 _CameraManager::ConvertResult(int err) const
209 if (err != ::CAMERA_ERROR_NONE)
211 SysLog(NID_MEDIA, "MM Err:0x%x", err);
215 if (err == ::CAMERA_ERROR_NONE)
219 else if (err == ::CAMERA_ERROR_INVALID_PARAMETER)
223 else if (err == ::CAMERA_ERROR_INVALID_STATE)
227 else if (err == ::CAMERA_ERROR_OUT_OF_MEMORY)
231 else if (err == ::CAMERA_ERROR_DEVICE)
235 else if (err == ::CAMERA_ERROR_INVALID_OPERATION
236 || err == ::CAMERA_ERROR_SOUND_POLICY
237 || err == ::CAMERA_ERROR_SECURITY_RESTRICTED)
241 else if (err == ::CAMERA_ERROR_DEVICE_BUSY)
245 else if (err == ::CAMERA_ERROR_DEVICE_NOT_FOUND)
247 r = E_DEVICE_UNAVAILABLE;