|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 #include <ECamOrientationCustomInterface2.h> |
|
18 #include <ecamfacetrackingcustomapi.h> |
|
19 |
|
20 #include "cxecameradevice.h" |
|
21 #include "cxeerrormappingsymbian.h" |
|
22 #include "cxutils.h" |
|
23 |
|
24 #include "cxedummycamera.h" |
|
25 |
|
26 CxeCameraDevice::CxeCameraDevice() : |
|
27 mCamera(NULL), |
|
28 mAdvancedSettings(NULL), |
|
29 mImageProcessor(NULL), |
|
30 mCameraSnapshot(NULL), |
|
31 mCameraOrientation(NULL), |
|
32 mFaceTracking(NULL) |
|
33 { |
|
34 |
|
35 } |
|
36 |
|
37 CxeCameraDevice::~CxeCameraDevice() |
|
38 { |
|
39 CX_DEBUG_ENTER_FUNCTION(); |
|
40 // Exiting, release all resources |
|
41 releaseResources(); |
|
42 CX_DEBUG_EXIT_FUNCTION(); |
|
43 } |
|
44 |
|
45 void CxeCameraDevice::deleteCamera() |
|
46 { |
|
47 CX_DEBUG_ENTER_FUNCTION(); |
|
48 |
|
49 emit prepareForCameraDelete(); |
|
50 |
|
51 // preparing for new camera, release old resources |
|
52 releaseResources(); |
|
53 |
|
54 CX_DEBUG_EXIT_FUNCTION(); |
|
55 } |
|
56 |
|
57 void CxeCameraDevice::releaseCamera() |
|
58 { |
|
59 CX_DEBUG_ENTER_FUNCTION(); |
|
60 |
|
61 if (mCamera) { |
|
62 emit prepareForRelease(); |
|
63 mCamera->Release(); |
|
64 } |
|
65 |
|
66 CX_DEBUG_EXIT_FUNCTION(); |
|
67 } |
|
68 |
|
69 void CxeCameraDevice::setCamera( CCamera *camera ) |
|
70 { |
|
71 CX_DEBUG_ENTER_FUNCTION(); |
|
72 |
|
73 if (mCamera != camera) { |
|
74 |
|
75 // new camera, delete old resources |
|
76 releaseResources(); |
|
77 |
|
78 mCamera = camera; |
|
79 |
|
80 // initialize resources |
|
81 CxeError::Id err = initResources(); |
|
82 |
|
83 emit cameraAllocated(err); |
|
84 } |
|
85 |
|
86 CX_DEBUG_EXIT_FUNCTION(); |
|
87 } |
|
88 |
|
89 CCamera* CxeCameraDevice::camera() |
|
90 { |
|
91 return mCamera; |
|
92 } |
|
93 |
|
94 CCamera::CCameraAdvancedSettings* CxeCameraDevice::advancedSettings() |
|
95 { |
|
96 return mAdvancedSettings; |
|
97 } |
|
98 |
|
99 CCamera::CCameraImageProcessing* CxeCameraDevice::imageProcessor() |
|
100 { |
|
101 return mImageProcessor; |
|
102 } |
|
103 |
|
104 |
|
105 CCamera::CCameraSnapshot* CxeCameraDevice::cameraSnapshot() |
|
106 { |
|
107 return mCameraSnapshot; |
|
108 } |
|
109 |
|
110 |
|
111 MCameraOrientation* CxeCameraDevice::cameraOrientation() |
|
112 { |
|
113 return mCameraOrientation; |
|
114 } |
|
115 |
|
116 MCameraFaceTracking* CxeCameraDevice::faceTracking() |
|
117 { |
|
118 return mFaceTracking; |
|
119 } |
|
120 |
|
121 CxeError::Id CxeCameraDevice::initResources() |
|
122 { |
|
123 CX_DEBUG_ENTER_FUNCTION(); |
|
124 |
|
125 TInt status = KErrNone; |
|
126 |
|
127 if (mCamera) { |
|
128 CX_DEBUG(("Get CCamera extensions..")); |
|
129 |
|
130 mCameraOrientation = static_cast<MCameraOrientation*>( |
|
131 mCamera->CustomInterface(KCameraOrientationUid)); |
|
132 CX_DEBUG(("MCameraOrientation interface 0x%08x", mCameraOrientation)); |
|
133 |
|
134 mFaceTracking = static_cast<MCameraFaceTracking*>( |
|
135 mCamera->CustomInterface(KCameraFaceTrackingUid)); |
|
136 CX_DEBUG(("MCameraFaceTracking interface 0x%08x", mFaceTracking)); |
|
137 |
|
138 TRAPD(errorAdvSet, mAdvancedSettings = |
|
139 CCamera::CCameraAdvancedSettings::NewL(*mCamera)); |
|
140 CX_DEBUG(("CCameraAdvancedSettings status: %d", errorAdvSet)); |
|
141 |
|
142 TRAPD(errorImgPr, mImageProcessor = |
|
143 CCamera::CCameraImageProcessing::NewL(*mCamera)); |
|
144 CX_DEBUG(("CCameraImageProcessing status: %d", errorImgPr)); |
|
145 |
|
146 TRAPD(errorSnap, mCameraSnapshot = |
|
147 CCamera::CCameraSnapshot::NewL(*mCamera)); |
|
148 CX_DEBUG(("CCameraSnapshot status: %d", errorSnap)); |
|
149 |
|
150 // Check all statuses and set first error code encountered. |
|
151 // Imageprocessing is not supported by 2nd camera so we just ignore the error. |
|
152 status = errorAdvSet != KErrNone |
|
153 ? errorAdvSet : errorSnap; |
|
154 CX_DEBUG(("Total status: %d", status)); |
|
155 } |
|
156 |
|
157 CX_DEBUG_EXIT_FUNCTION(); |
|
158 return CxeErrorHandlingSymbian::map(status); |
|
159 } |
|
160 |
|
161 void CxeCameraDevice::releaseResources() |
|
162 { |
|
163 CX_DEBUG_ENTER_FUNCTION(); |
|
164 |
|
165 // not owned. |
|
166 mCameraOrientation = NULL; |
|
167 mFaceTracking = NULL; |
|
168 |
|
169 delete mCameraSnapshot; |
|
170 mCameraSnapshot = NULL; |
|
171 |
|
172 delete mAdvancedSettings; |
|
173 mAdvancedSettings = NULL; |
|
174 |
|
175 delete mImageProcessor; |
|
176 mImageProcessor = NULL; |
|
177 |
|
178 delete mCamera; |
|
179 mCamera = NULL; |
|
180 |
|
181 CX_DEBUG_EXIT_FUNCTION(); |
|
182 } |
|
183 |
|
184 CxeError::Id CxeCameraDevice::newCamera( Cxe::CameraIndex cameraIndex, MCameraObserver2 *observer ) |
|
185 { |
|
186 CX_DEBUG_ENTER_FUNCTION(); |
|
187 CX_DEBUG(("Cxe: using camera index %d", cameraIndex)); |
|
188 |
|
189 CX_DEBUG_ASSERT(cameraIndex == Cxe::PrimaryCameraIndex || cameraIndex == Cxe::SecondaryCameraIndex); |
|
190 |
|
191 CCamera* camera = NULL; |
|
192 |
|
193 #if defined(CXE_USE_DUMMY_CAMERA) || defined(__WINSCW__) |
|
194 TRAPD(err, camera = CxeDummyCamera::NewL(*observer, cameraIndex, 100, 2)); |
|
195 CX_DEBUG(("CxeCameraDevice::newCamera <> new CxeDummyCamera")); |
|
196 #else |
|
197 TRAPD(err, camera = CCamera::New2L(*observer, cameraIndex, 100 /*KCameraClientPriority*/)); |
|
198 CX_DEBUG(("CxeCameraDevice::newCamera <> new CCamera")); |
|
199 #endif |
|
200 |
|
201 if (!err) { |
|
202 setCamera(camera); |
|
203 } |
|
204 |
|
205 CX_DEBUG_EXIT_FUNCTION(); |
|
206 return CxeErrorHandlingSymbian::map(err); |
|
207 } |
|
208 |
|
209 // end of file |