43 qRegisterMetaType<CxeCameraDeviceControl::State>(); |
43 qRegisterMetaType<CxeCameraDeviceControl::State>(); |
44 initializeStates(); |
44 initializeStates(); |
45 |
45 |
46 mCameraDevice = new CxeCameraDevice(); |
46 mCameraDevice = new CxeCameraDevice(); |
47 |
47 |
|
48 //!@todo Temporary delay before reserving camera to avoid timing issues |
|
49 connect(&mReserveTimer, SIGNAL(timeout()), this, SLOT(doReserve())); |
|
50 mReserveTimer.setSingleShot(true); |
|
51 |
48 CX_DEBUG_EXIT_FUNCTION(); |
52 CX_DEBUG_EXIT_FUNCTION(); |
49 } |
53 } |
50 |
54 |
51 CxeCameraDeviceControlSymbian::~CxeCameraDeviceControlSymbian() |
55 CxeCameraDeviceControlSymbian::~CxeCameraDeviceControlSymbian() |
52 { |
56 { |
74 } |
78 } |
75 |
79 |
76 void CxeCameraDeviceControlSymbian::reserve() |
80 void CxeCameraDeviceControlSymbian::reserve() |
77 { |
81 { |
78 CX_DEBUG_ENTER_FUNCTION(); |
82 CX_DEBUG_ENTER_FUNCTION(); |
79 |
83 CX_ASSERT_ALWAYS(mCameraDevice); |
80 CX_DEBUG_ASSERT(mCameraDevice && mCameraDevice->camera()); |
|
81 |
84 |
82 if (state() == Idle) { |
85 if (state() == Idle) { |
83 setState(Initializing); |
86 setState(Initializing); |
84 mCameraDevice->reserveCamera(); |
87 //!@todo Temporary delay before reserving camera to avoid timing issues |
|
88 mReserveTimer.start(2000); |
85 OstTrace0(camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_RESERVE, "msg: e_CX_RESERVE 1"); |
89 OstTrace0(camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_RESERVE, "msg: e_CX_RESERVE 1"); |
|
90 CX_DEBUG(("HACK: Waiting for 2000ms before really doing reserve()")); |
86 } else if (state() == PendingRelease) { |
91 } else if (state() == PendingRelease) { |
87 // if we get a reserve request and if there is a pending release |
92 // if we get a reserve request and if there is a pending release |
88 // it is just fine to continue the init operation. |
93 // it is just fine to continue the init operation. |
89 setState(Initializing); |
94 setState(Initializing); |
90 } else { |
95 } else { |
91 // nothing to do |
96 // nothing to do |
92 } |
97 } |
93 |
98 |
94 CX_DEBUG_EXIT_FUNCTION(); |
99 CX_DEBUG_EXIT_FUNCTION(); |
95 } |
100 } |
|
101 |
|
102 void CxeCameraDeviceControlSymbian::doReserve() |
|
103 { |
|
104 CX_DEBUG_ENTER_FUNCTION(); |
|
105 CX_ASSERT_ALWAYS(mCameraDevice); |
|
106 mCameraDevice->reserveCamera(); |
|
107 CX_DEBUG_EXIT_FUNCTION(); |
|
108 } |
|
109 |
96 |
110 |
97 void CxeCameraDeviceControlSymbian::powerOn() |
111 void CxeCameraDeviceControlSymbian::powerOn() |
98 { |
112 { |
99 CX_DEBUG_ENTER_FUNCTION(); |
113 CX_DEBUG_ENTER_FUNCTION(); |
100 |
114 |
224 |
238 |
225 void CxeCameraDeviceControlSymbian::release() |
239 void CxeCameraDeviceControlSymbian::release() |
226 { |
240 { |
227 CX_DEBUG_ENTER_FUNCTION(); |
241 CX_DEBUG_ENTER_FUNCTION(); |
228 |
242 |
|
243 //!@todo Temporary delay before reserving camera to avoid timing issues |
|
244 if (mReserveTimer.isActive()) { |
|
245 // release() was called when the timer was active |
|
246 mReserveTimer.stop(); |
|
247 mCameraDevice->releaseCamera(); |
|
248 setState(Idle); |
|
249 CX_DEBUG_EXIT_FUNCTION(); |
|
250 return; |
|
251 } |
|
252 |
229 if (state() == Idle) { |
253 if (state() == Idle) { |
230 // nothing to do |
254 // nothing to do |
231 return; |
255 return; |
232 } |
256 } |
233 |
257 |