BaseCameraAdapter.cpp revision 524cc0cda6ed8cb07e0469fc931657ac60335aa1
1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*
2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (C) Texas Instruments - http://www.ti.com/
3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License");
5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * you may not use this file except in compliance with the License.
6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * You may obtain a copy of the License at
7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *      http://www.apache.org/licenses/LICENSE-2.0
9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *
10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Unless required by applicable law or agreed to in writing, software
11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS,
12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * See the License for the specific language governing permissions and
14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * limitations under the License.
15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */
16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LOG_TAG "CameraHAL"
20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "BaseCameraAdapter.h"
22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android {
24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------------------Camera Adapter Class STARTS here-----------------------------*/
26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevBaseCameraAdapter::BaseCameraAdapter()
28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mReleaseImageBuffersCallback = NULL;
30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mEndImageCaptureCallback = NULL;
31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mErrorNotifier = NULL;
32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mEndCaptureData = NULL;
33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mReleaseData = NULL;
34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mRecording = false;
35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mPreviewBuffers = NULL;
37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mPreviewBufferCount = 0;
38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mPreviewBuffersLength = 0;
39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mVideoBuffers = NULL;
41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mVideoBuffersCount = 0;
42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mVideoBuffersLength = 0;
43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mCaptureBuffers = NULL;
45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mCaptureBuffersCount = 0;
46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mCaptureBuffersLength = 0;
47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mPreviewDataBuffers = NULL;
49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mPreviewDataBuffersCount = 0;
50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mPreviewDataBuffersLength = 0;
51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mAdapterState = INTIALIZED_STATE;
53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mStartFocus.tv_sec = 0;
56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mStartFocus.tv_usec = 0;
57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mStartCapture.tv_sec = 0;
58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mStartCapture.tv_usec = 0;
59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevBaseCameraAdapter::~BaseCameraAdapter()
64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     LOG_FUNCTION_NAME;
66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     Mutex::Autolock lock(mSubscriberLock);
68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mFrameSubscribers.clear();
70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mImageSubscribers.clear();
71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mRawSubscribers.clear();
72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mVideoSubscribers.clear();
73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mFocusSubscribers.clear();
74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mShutterSubscribers.clear();
75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mZoomSubscribers.clear();
76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     mFaceSubscribers.clear();
77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     LOG_FUNCTION_NAME_EXIT;
79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::registerImageReleaseCallback(release_image_buffers_callback callback, void *user_data)
82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mReleaseImageBuffersCallback = callback;
88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mReleaseData = user_data;
89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::registerEndCaptureCallback(end_image_capture_callback callback, void *user_data)
96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mEndImageCaptureCallback= callback;
102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mEndCaptureData = user_data;
103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::setErrorHandler(ErrorNotifier *errorNotifier)
110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == errorNotifier )
116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Invalid Error Notifier reference");
118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = -EINVAL;
119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mErrorNotifier = errorNotifier;
124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::enableMsgType(int32_t msgs, frame_callback callback, event_callback eventCb, void* cookie)
132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mSubscriberLock);
134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( CameraFrame::PREVIEW_FRAME_SYNC == msgs )
138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFrameSubscribers.add((int) cookie, callback);
140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::FRAME_DATA_SYNC == msgs )
142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFrameDataSubscribers.add((int) cookie, callback);
144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::IMAGE_FRAME == msgs)
146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mImageSubscribers.add((int) cookie, callback);
148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::RAW_FRAME == msgs)
150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mRawSubscribers.add((int) cookie, callback);
152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::VIDEO_FRAME_SYNC == msgs)
154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mVideoSubscribers.add((int) cookie, callback);
156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraHalEvent::ALL_EVENTS == msgs)
158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFocusSubscribers.add((int) cookie, eventCb);
160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mShutterSubscribers.add((int) cookie, eventCb);
161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mZoomSubscribers.add((int) cookie, eventCb);
162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFaceSubscribers.add((int) cookie, eventCb);
163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else
165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Message type subscription no supported yet!");
167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::disableMsgType(int32_t msgs, void* cookie)
173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mSubscriberLock);
175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( CameraFrame::PREVIEW_FRAME_SYNC == msgs )
179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFrameSubscribers.removeItem((int) cookie);
181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::FRAME_DATA_SYNC == msgs )
183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFrameDataSubscribers.removeItem((int) cookie);
185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::IMAGE_FRAME == msgs)
187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mImageSubscribers.removeItem((int) cookie);
189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::RAW_FRAME == msgs)
191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mRawSubscribers.removeItem((int) cookie);
193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::VIDEO_FRAME_SYNC == msgs)
195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mVideoSubscribers.removeItem((int) cookie);
197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraFrame::ALL_FRAMES  == msgs )
199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFrameSubscribers.removeItem((int) cookie);
201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFrameDataSubscribers.removeItem((int) cookie);
202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mImageSubscribers.removeItem((int) cookie);
203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mRawSubscribers.removeItem((int) cookie);
204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mVideoSubscribers.removeItem((int) cookie);
205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else if ( CameraHalEvent::ALL_EVENTS == msgs)
207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         //Subscribe only for focus
209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         //TODO: Process case by case
210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFocusSubscribers.removeItem((int) cookie);
211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mShutterSubscribers.removeItem((int) cookie);
212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mZoomSubscribers.removeItem((int) cookie);
213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mFaceSubscribers.removeItem((int) cookie);
214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    else
216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEB("Message type 0x%x subscription no supported yet!", msgs);
218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frameType)
224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t res = NO_ERROR;
226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t subscriberCount = 0;
227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int refCount = -1;
228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mReturnFrameLock);
230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == frameBuf )
232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Invalid frameBuf");
234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return;
235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == res)
238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        refCount = getFrameRefCount(frameBuf,  frameType);
241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( 0 < refCount )
243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refCount--;
246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            setFrameRefCount(frameBuf, frameType, refCount);
247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ( mRecording ) && (  CameraFrame::VIDEO_FRAME_SYNC == frameType ) )
249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                refCount += getFrameRefCount(frameBuf, CameraFrame::PREVIEW_FRAME_SYNC);
251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else if ( ( mRecording ) && (  CameraFrame::PREVIEW_FRAME_SYNC == frameType ) )
253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                refCount += getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return;
261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == res )
265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        //check if someone is holding this buffer
267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( 0 == refCount )
268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            res = fillThisBuffer(frameBuf, frameType);
270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, int value2, int value3)
276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    struct timeval *refTimestamp;
279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    BuffersDescriptor *desc = NULL;
280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraFrame *frame = NULL;
281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( operation ) {
285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW:
286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("Use buffers for preview");
287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                desc = ( BuffersDescriptor * ) value1;
288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL == desc )
290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEA("Invalid preview buffers!");
292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -EINVAL;
293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = setState(operation);
298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    Mutex::Autolock lock(mPreviewBufferLock);
303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mPreviewBuffers = (int *) desc->mBuffers;
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mPreviewBuffersLength = desc->mLength;
305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mPreviewBuffersAvailable.clear();
306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewBuffersAvailable.add(mPreviewBuffers[i], 0);
309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    // initial ref count for undeqeueued buffers is 1 since buffer provider
311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    // is still holding on to it
312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ )
313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewBuffersAvailable.add(mPreviewBuffers[i], 1);
315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL != desc )
319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = useBuffers(CameraAdapter::CAMERA_PREVIEW,
321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mBuffers,
322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mCount,
323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mLength,
324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mMaxQueueable);
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = commitState();
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                else
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret |= rollbackState();
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW_DATA:
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDA("Use buffers for preview data");
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    desc = ( BuffersDescriptor * ) value1;
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( NULL == desc )
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        CAMHAL_LOGEA("Invalid preview data buffers!");
345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        return -EINVAL;
346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( ret == NO_ERROR )
349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        ret = setState(operation);
351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( ret == NO_ERROR )
354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        Mutex::Autolock lock(mPreviewDataBufferLock);
356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewDataBuffers = (int *) desc->mBuffers;
357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewDataBuffersLength = desc->mLength;
358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewDataBuffersAvailable.clear();
359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            {
361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            mPreviewDataBuffersAvailable.add(mPreviewDataBuffers[i], true);
362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            }
363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        // initial ref count for undeqeueued buffers is 1 since buffer provider
364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        // is still holding on to it
365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ )
366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            {
367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            mPreviewDataBuffersAvailable.add(mPreviewBuffers[i], 1);
368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            }
369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( NULL != desc )
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        ret = useBuffers(CameraAdapter::CAMERA_MEASUREMENT,
374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         desc->mBuffers,
375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         desc->mCount,
376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         desc->mLength,
377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                         desc->mMaxQueueable);
378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( ret == NO_ERROR )
381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        ret = commitState();
383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    else
385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        ret |= rollbackState();
387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("Use buffers for image capture");
393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                desc = ( BuffersDescriptor * ) value1;
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL == desc )
396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEA("Invalid capture buffers!");
398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -EINVAL;
399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = setState(operation);
404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    Mutex::Autolock lock(mCaptureBufferLock);
409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mCaptureBuffers = (int *) desc->mBuffers;
410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mCaptureBuffersLength = desc->mLength;
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mCaptureBuffersAvailable.clear();
412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mCaptureBuffersAvailable.add(mCaptureBuffers[i], true);
415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    // initial ref count for undeqeueued buffers is 1 since buffer provider
417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    // is still holding on to it
418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ )
419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mCaptureBuffersAvailable.add(mPreviewBuffers[i], 1);
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL != desc )
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = useBuffers(CameraAdapter::CAMERA_IMAGE_CAPTURE,
427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mBuffers,
428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mCount,
429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mLength,
430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mMaxQueueable);
431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = commitState();
436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                else
438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret |= rollbackState();
440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_SMOOTH_ZOOM:
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startSmoothZoom(value1);
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_SMOOTH_ZOOM:
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopSmoothZoom();
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_PREVIEW:
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("Start Preview");
500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startPreview();
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_PREVIEW:
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Stop Preview");
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopPreview();
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_VIDEO:
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Start video recording");
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startVideoCapture();
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_VIDEO:
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Stop video recording");
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopVideoCapture();
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_PREVIEW_FLUSH_BUFFERS:
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = flushBuffers();
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_IMAGE_CAPTURE:
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refTimestamp = ( struct timeval * ) value1;
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( NULL != refTimestamp )
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval ));
643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = takePicture();
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_IMAGE_CAPTURE:
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopImageCapture();
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_BRACKET_CAPTURE:
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refTimestamp = ( struct timeval * ) value2;
702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( NULL != refTimestamp )
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval ));
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startBracketing(value1);
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_BRACKET_CAPTURE:
733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopBracketing();
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_PERFORM_AUTOFOCUS:
759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refTimestamp = ( struct timeval * ) value1;
763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( NULL != refTimestamp )
764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                memcpy( &mStartFocus, refTimestamp, sizeof( struct timeval ));
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = autoFocus();
778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_CANCEL_AUTOFOCUS:
792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = cancelAutoFocus();
801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_QUERY_RESOLUTION_PREVIEW:
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = setState(operation);
819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 frame = ( CameraFrame * ) value1;
824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 if ( NULL != frame )
826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = getFrameSize(frame->mWidth, frame->mHeight);
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 else
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = -EINVAL;
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = commitState();
838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             else
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret |= rollbackState();
842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = setState(operation);
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 frame = ( CameraFrame * ) value1;
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 if ( NULL != frame )
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = getPictureBufferSize(frame->mLength, value2);
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 else
862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = -EINVAL;
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = commitState();
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             else
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret |= rollbackState();
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = setState(operation);
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 frame = ( CameraFrame * ) value1;
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 if ( NULL != frame )
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = getFrameDataSize(frame->mLength, value2);
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 else
894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = -EINVAL;
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = commitState();
902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             else
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret |= rollbackState();
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_START_FD:
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             ret = startFaceDetection();
913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_STOP_FD:
917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             ret = stopFaceDetection();
919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Command 0x%x unsupported!", operation);
924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyFocusSubscribers(bool status)
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent focusEvent;
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mFocusSubscribers.size() == 0 ) {
940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("No Focus Subscribers!");
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     //dump the AF latency
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     CameraHal::PPM("Focus finished in: ", &mStartFocus);
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData = new CameraHalEvent::CameraHalEventData();
952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == focusEvent.mEventData.get() ) {
953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventType = CameraHalEvent::EVENT_FOCUS_LOCKED;
957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData->focusEvent.focusLocked = status;
958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData->focusEvent.focusError = !status;
959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mFocusSubscribers.size(); i++ )
961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        focusEvent.mCookie = (void *) mFocusSubscribers.keyAt(i);
963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = (event_callback) mFocusSubscribers.valueAt(i);
964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &focusEvent );
965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData.clear();
968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyShutterSubscribers()
975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent shutterEvent;
977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mShutterSubscribers.size() == 0 )
983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("No shutter Subscribers!");
985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventData = new CameraHalEvent::CameraHalEventData();
989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == shutterEvent.mEventData.get() ) {
990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventType = CameraHalEvent::EVENT_SHUTTER;
994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventData->shutterEvent.shutterClosed = true;
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mShutterSubscribers.size() ; i++ ) {
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        shutterEvent.mCookie = ( void * ) mShutterSubscribers.keyAt(i);
998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = ( event_callback ) mShutterSubscribers.valueAt(i);
999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Sending shutter callback");
1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &shutterEvent );
1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventData.clear();
1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyZoomSubscribers(int zoomIdx, bool targetReached)
1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent zoomEvent;
1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mZoomSubscribers.size() == 0 ) {
1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("No zoom Subscribers!");
1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData = new CameraHalEvent::CameraHalEventData();
1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == zoomEvent.mEventData.get() ) {
1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventType = CameraHalEvent::EVENT_ZOOM_INDEX_REACHED;
1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData->zoomEvent.currentZoomIndex = zoomIdx;
1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData->zoomEvent.targetZoomIndexReached = targetReached;
1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mZoomSubscribers.size(); i++ ) {
1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        zoomEvent.mCookie = (void *) mZoomSubscribers.keyAt(i);
1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = (event_callback) mZoomSubscribers.valueAt(i);
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &zoomEvent );
1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData.clear();
1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyFaceSubscribers(sp<CameraFDResult> &faces)
1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent faceEvent;
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mFaceSubscribers.size() == 0 ) {
1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("No face detection subscribers!");
1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventData = new CameraHalEvent::CameraHalEventData();
1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == faceEvent.mEventData.get() ) {
1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventType = CameraHalEvent::EVENT_FACE;
1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventData->faceEvent = faces;
1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mFaceSubscribers.size(); i++ ) {
1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        faceEvent.mCookie = (void *) mFaceSubscribers.keyAt(i);
1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = (event_callback) mFaceSubscribers.valueAt(i);
1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &faceEvent );
1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventData.clear();
1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame)
1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
10865e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    unsigned int mask;
1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == frame )
1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Invalid CameraFrame");
10915e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        return -EINVAL;
1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
10945e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    for( mask = 1; mask < CameraFrame::ALL_FRAMES; mask <<= 1){
10955e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      if( mask & frame->mFrameMask ){
10965e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        switch( mask ){
1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
10985e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::IMAGE_FRAME:
10995e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
11015e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng            CameraHal::PPM("Shot to Jpeg: ", &mStartCapture);
11025e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng#endif
1103348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mImageSubscribers, CameraFrame::IMAGE_FRAME);
11045e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11055e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11065e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::RAW_FRAME:
11075e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1108348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mRawSubscribers, CameraFrame::RAW_FRAME);
11095e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11105e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11115e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::PREVIEW_FRAME_SYNC:
11125e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1113348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::PREVIEW_FRAME_SYNC);
11145e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11155e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11165e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::SNAPSHOT_FRAME:
11175e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1118348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::SNAPSHOT_FRAME);
11195e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11205e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11215e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::VIDEO_FRAME_SYNC:
11225e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1123348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mVideoSubscribers, CameraFrame::VIDEO_FRAME_SYNC);
11245e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11255e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11265e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::FRAME_DATA_SYNC:
11275e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1128348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mFrameDataSubscribers, CameraFrame::FRAME_DATA_SYNC);
11295e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11305e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11315e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        default:
11325e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", mask);
11335e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
11345e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }//SWITCH
11355e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        frame->mFrameMask &= ~mask;
1136348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1137348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        if (ret != NO_ERROR) {
1138348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            goto EXIT;
1139348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
11405e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      }//IF
11415e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    }//FOR
1142348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1143348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu EXIT:
1144348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    return ret;
1145348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu}
1146348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1147348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luustatus_t BaseCameraAdapter::__sendFrameToSubscribers(CameraFrame* frame,
1148348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                                                     KeyedVector<int, frame_callback> *subscribers,
1149348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                                                     CameraFrame::FrameType frameType)
1150348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu{
1151348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    size_t refCount = 0;
1152348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    status_t ret = NO_ERROR;
1153348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    frame_callback callback = NULL;
1154348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1155348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    frame->mFrameType = frameType;
1156348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1157348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    if (NULL != subscribers) {
1158348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        refCount = getFrameRefCount(frame->mBuffer, frameType);
1159348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1160348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        if (refCount == 0) {
1161348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            CAMHAL_LOGEB("Invalid ref count of 0");
1162348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            return -EINVAL;
1163348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
1164348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1165348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        if (refCount > subscribers->size()) {
1166348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            CAMHAL_LOGEB("Invalid ref count for frame type: 0x%x", frameType);
1167348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            return -EINVAL;
1168348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
1169348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1170348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        CAMHAL_LOGVB("Type of Frame: 0x%x address: 0x%x refCount start %d",
1171348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                     frame->mFrameType,
1172348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                     ( uint32_t ) frame->mBuffer,
1173348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                     refCount);
1174348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1175348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        for ( unsigned int i = 0 ; i < refCount; i++ ) {
1176348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            frame->mCookie = ( void * ) subscribers->keyAt(i);
1177348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            callback = (frame_callback) subscribers->valueAt(i);
1178348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1179348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            if (!callback) {
1180348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                CAMHAL_LOGEB("callback not set for frame type: 0x%x", frameType);
1181348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                return -EINVAL;
1182348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            }
1183348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1184348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            callback(frame);
1185348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
1186348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    } else {
1187348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        CAMHAL_LOGEB("Subscribers is null??");
1188348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        return -EINVAL;
1189348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    }
1190348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
11915e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    return ret;
11925e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng}
1193348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
11945e02dd977e79ee977ee063496033bbc363a70780Akwasi Boatengint BaseCameraAdapter::setInitFrameRefCount(void* buf, unsigned int mask)
11955e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng{
11965e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  int ret = NO_ERROR;
11975e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  unsigned int lmask;
1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
11995e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  LOG_FUNCTION_NAME;
1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
12015e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  if (buf == NULL)
12025e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    {
12035e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      return -EINVAL;
12045e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    }
1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
12065e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  for( lmask = 1; lmask < CameraFrame::ALL_FRAMES; lmask <<= 1){
12075e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    if( lmask & mask ){
12085e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      switch( lmask ){
1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
12105e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::IMAGE_FRAME:
12115e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
1212524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman          setFrameRefCount(buf, CameraFrame::IMAGE_FRAME, (int) mImageSubscribers.size());
1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
12145e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12155e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::RAW_FRAME:
1216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
12175e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::RAW_FRAME, mRawSubscribers.size());
1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
12195e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12205e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::PREVIEW_FRAME_SYNC:
1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
12225e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::PREVIEW_FRAME_SYNC, mFrameSubscribers.size());
1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
12245e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12255e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::SNAPSHOT_FRAME:
12265e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
12275e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mFrameSubscribers.size());
12285e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }
12295e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12305e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::VIDEO_FRAME_SYNC:
12315e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
12325e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf,CameraFrame::VIDEO_FRAME_SYNC, mVideoSubscribers.size());
12335e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }
12345e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12355e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::FRAME_DATA_SYNC:
12365e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
12375e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::FRAME_DATA_SYNC, mFrameDataSubscribers.size());
12385e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }
12395e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12405e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      default:
12415e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", lmask);
12425e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12435e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      }//SWITCH
12445e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      mask &= ~lmask;
12455e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    }//IF
12465e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  }//FOR
12475e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  LOG_FUNCTION_NAME_EXIT;
12485e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  return ret;
1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint BaseCameraAdapter::getFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType)
1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int res = -1;
1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( frameType )
1258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::IMAGE_FRAME:
1260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::RAW_FRAME:
1261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mCaptureBufferLock);
1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mCaptureBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::PREVIEW_FRAME_SYNC:
1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::SNAPSHOT_FRAME:
1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewBufferLock);
1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mPreviewBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::FRAME_DATA_SYNC:
1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewDataBufferLock);
1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mPreviewDataBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::VIDEO_FRAME_SYNC:
1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mVideoBufferLock);
1282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mVideoBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return res;
1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::setFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType, int refCount)
1295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( frameType )
1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::IMAGE_FRAME:
1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::RAW_FRAME:
1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mCaptureBufferLock);
1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mCaptureBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::PREVIEW_FRAME_SYNC:
1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::SNAPSHOT_FRAME:
1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewBufferLock);
1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mPreviewBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::FRAME_DATA_SYNC:
1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewDataBufferLock);
1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mPreviewDataBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::VIDEO_FRAME_SYNC:
1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mVideoBufferLock);
1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mVideoBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startVideoCapture()
1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mVideoBufferLock);
1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //If the capture is already ongoing, return from here.
1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mRecording )
1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = NO_INIT;
1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        for ( unsigned int i = 0 ; i < mPreviewBuffersAvailable.size() ; i++ )
1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            mVideoBuffersAvailable.add(mPreviewBuffersAvailable.keyAt(i), 0);
1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mRecording = true;
1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopVideoCapture()
1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( !mRecording )
1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = NO_INIT;
1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        for ( unsigned int i = 0 ; i < mVideoBuffersAvailable.size() ; i++ )
1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            void *frameBuf = ( void * ) mVideoBuffersAvailable.keyAt(i);
1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if( getFrameRefCount(frameBuf,  CameraFrame::VIDEO_FRAME_SYNC) > 0)
1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                returnFrame(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mVideoBuffersAvailable.clear();
1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mRecording = false;
1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//-----------------Stub implementation of the interface ------------------------------
1399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::takePicture()
1401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopImageCapture()
1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startBracketing(int range)
1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopBracketing()
1434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::autoFocus()
1445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    notifyFocusSubscribers(false);
1451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::cancelAutoFocus()
1458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startSmoothZoom(int targetIdx)
1469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopSmoothZoom()
1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startPreview()
1491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopPreview()
1502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable)
1513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType)
1524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getFrameSize(size_t &width, size_t &height)
1535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getFrameDataSize(size_t &dataFrameSize, size_t bufferCount)
1546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getPictureBufferSize(size_t &length, size_t bufferCount)
1557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startFaceDetection()
1568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopFaceDetection()
1579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::setState(CameraCommands operation)
1590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mLock.lock();
1596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( mAdapterState )
1598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case INTIALIZED_STATE:
1601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_USE_BUFFERS_PREVIEW:
1606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->LOADED_PREVIEW_STATE event = 0x%x",
1607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = LOADED_PREVIEW_STATE;
1609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                //These events don't change the current state
1612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_RESOLUTION_PREVIEW:
1613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
1615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->INTIALIZED_STATE event = 0x%x",
1616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = INTIALIZED_STATE;
1618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch INTIALIZED_STATE Invalid Op! event = 0x%x",
1622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case LOADED_PREVIEW_STATE:
1631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_PREVIEW:
1636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->PREVIEW_STATE event = 0x%x",
1637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                //These events don't change the current state
1642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
1644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_USE_BUFFERS_PREVIEW_DATA:
1645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->LOADED_PREVIEW_STATE event = 0x%x",
1646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = LOADED_PREVIEW_STATE;
1648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW Invalid Op! event = 0x%x",
1652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case PREVIEW_STATE:
1661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_PREVIEW:
1666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->INTIALIZED_STATE event = 0x%x",
1667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = INTIALIZED_STATE;
1669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_PERFORM_AUTOFOCUS:
1672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->AF_STATE event = 0x%x",
1673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_STATE;
1675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_SMOOTH_ZOOM:
1678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->ZOOM_STATE event = 0x%x",
1679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = ZOOM_STATE;
1681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
1684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->LOADED_CAPTURE_STATE event = 0x%x",
1685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = LOADED_CAPTURE_STATE;
1687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_VIDEO:
1690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->VIDEO_STATE event = 0x%x",
1691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = VIDEO_STATE;
1693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
169585c859b69b3c003b8db810371e24fe41599fc7deSundar Raman                case CAMERA_CANCEL_AUTOFOCUS:
1696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
1698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_ACTIVE->PREVIEW_ACTIVE event = 0x%x",
1699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch PREVIEW_ACTIVE Invalid Op! event = 0x%x",
1705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case LOADED_CAPTURE_STATE:
1714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_IMAGE_CAPTURE:
1719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = 0x%x",
1720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = CAPTURE_STATE;
1722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_BRACKET_CAPTURE:
1725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->BRACKETING_STATE event = 0x%x",
1726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = BRACKETING_STATE;
1728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = 0x%x",
1732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CAPTURE_STATE:
1741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_IMAGE_CAPTURE:
1745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x",
1746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = 0x%x",
1752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case BRACKETING_STATE:
1761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_BRACKET_CAPTURE:
1766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->PREVIEW_STATE event = 0x%x",
1767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_IMAGE_CAPTURE:
1772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->CAPTURE_STATE event = 0x%x",
1773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = CAPTURE_STATE;
1775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch BRACKETING_STATE Invalid Op! event = 0x%x",
1779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case AF_STATE:
1788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_CANCEL_AUTOFOCUS:
1793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = 0x%x",
1794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_SMOOTH_ZOOM:
1799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_STATE->AF_ZOOM_STATE event = 0x%x",
1800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_ZOOM_STATE;
1802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch AF_STATE Invalid Op! event = 0x%x",
1806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case ZOOM_STATE:
1815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
1820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->PREVIEW_STATE event = 0x%x",
1821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_PERFORM_AUTOFOCUS:
1826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->AF_ZOOM_STATE event = 0x%x",
1827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_ZOOM_STATE;
1829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
18313f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                case CAMERA_START_VIDEO:
18323f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->VIDEO_ZOOM_STATE event = 0x%x",
18333f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                                 operation);
18343f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    mNextState = VIDEO_ZOOM_STATE;
18353f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    break;
18363f7a29d44c52729f037056a634423fda6db834e3Tyler Luu
1837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch ZOOM_STATE Invalid Op! event = 0x%x",
1839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case VIDEO_STATE:
1848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_VIDEO:
1853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->PREVIEW_STATE event = 0x%x",
1854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
18583f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                case CAMERA_START_SMOOTH_ZOOM:
18593f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_ZOOM_STATE event = 0x%x",
18603f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                                 operation);
18613f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    mNextState = VIDEO_ZOOM_STATE;
18623f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    break;
18633f7a29d44c52729f037056a634423fda6db834e3Tyler Luu
1864ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
1865ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_LOADED_CAPTURE_STATE event = 0x%x",
1866ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1867ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_LOADED_CAPTURE_STATE;
1868ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1869ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1870ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1871ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_STATE event = 0x%x",
1872ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1873ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_STATE;
1874ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1875ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch VIDEO_STATE Invalid Op! event = 0x%x",
1878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1886ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu        case VIDEO_LOADED_CAPTURE_STATE:
1887ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1888ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            switch ( operation )
1889ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                {
1890ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1891ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_START_IMAGE_CAPTURE:
1892ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = 0x%x",
1893ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1894ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_CAPTURE_STATE;
1895ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1896ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1897ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                default:
1898ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = 0x%x",
1899ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1900ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    ret = INVALID_OPERATION;
1901ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1902ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1903ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                }
1904ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1905ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            break;
1906ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1907ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu        case VIDEO_CAPTURE_STATE:
1908ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1909ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            switch ( operation )
1910ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                {
1911ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_STOP_IMAGE_CAPTURE:
1912ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x",
1913ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1914ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_STATE;
1915ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1916ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1917ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                default:
1918ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = 0x%x",
1919ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1920ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    ret = INVALID_OPERATION;
1921ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1922ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1923ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                }
1924ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1925ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            break;
1926ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case AF_ZOOM_STATE:
1928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
1933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->AF_STATE event = 0x%x",
1934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_STATE;
1936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_CANCEL_AUTOFOCUS:
1939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->ZOOM_STATE event = 0x%x",
1940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = ZOOM_STATE;
1942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch AF_ZOOM_STATE Invalid Op! event = 0x%x",
1946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case VIDEO_ZOOM_STATE:
1955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
1960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->VIDEO_STATE event = 0x%x",
1961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = VIDEO_STATE;
1963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
19643f7a29d44c52729f037056a634423fda6db834e3Tyler Luu
19653f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                case CAMERA_STOP_VIDEO:
19663f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->ZOOM_STATE event = 0x%x",
19673f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                                 operation);
19683f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    mNextState = ZOOM_STATE;
19693f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    break;
1970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch VIDEO_ZOOM_STATE Invalid Op! event = 0x%x",
1973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case BRACKETING_ZOOM_STATE:
1982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
1987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch BRACKETING_ZOOM_STATE->BRACKETING_STATE event = 0x%x",
1988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = BRACKETING_STATE;
1990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch BRACKETING_ZOOM_STATE Invalid Op! event = 0x%x",
1994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
2003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEA("Invalid Adapter state!");
2004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = INVALID_OPERATION;
2005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//State transition finished successfully.
2013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Commit the state and unlock the adapter state.
2014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::commitState()
2015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mAdapterState = mNextState;
2021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mLock.unlock();
2023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::rollbackState()
2030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mNextState = mAdapterState;
2036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mLock.unlock();
2038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// getNextState() and getState()
2045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// publicly exposed functions to retrieve the adapter states
2046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// please notice that these functions are locked
2047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCameraAdapter::AdapterState BaseCameraAdapter::getState()
2048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mLock);
2054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return mAdapterState;
2058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCameraAdapter::AdapterState BaseCameraAdapter::getNextState()
2061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mLock);
2067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return mNextState;
2071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// getNextState() and getState()
2074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// internal protected functions to retrieve the adapter states
2075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// please notice that these functions are NOT locked to help
2076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// internal functions query state in the middle of state
2077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// transition
2078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getState(AdapterState &state)
2079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    state = mAdapterState;
2085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getNextState(AdapterState &state)
2092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    state = mNextState;
2098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::onOrientationEvent(uint32_t orientation, uint32_t tilt)
2105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//-----------------------------------------------------------------------------
2110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
2114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------------------Camera Adapter Class ENDS here-----------------------------*/
2116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2117