BaseCameraAdapter.cpp revision e46394481e771dbdc8683645c3740a3d262a3d0f
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
2238e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boatengvoid BaseCameraAdapter::addFramePointers(void *frameBuf, void *buf)
2248e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng{
2258e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  unsigned int *pBuf = (unsigned int *)buf;
2268e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  Mutex::Autolock lock(mSubscriberLock);
2278e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng
2288e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  if ((frameBuf != NULL) && ( pBuf != NULL) )
2298e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng    {
2308e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      CameraFrame *frame = new CameraFrame;
2318e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      frame->mBuffer = frameBuf;
2328e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      frame->mYuv[0] = pBuf[0];
2338e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      frame->mYuv[1] = pBuf[1];
2348e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      mFrameQueue.add(frameBuf, frame);
2358e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng
2368e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      CAMHAL_LOGVB("Adding Frame=0x%x Y=0x%x UV=0x%x", frame->mBuffer, frame->mYuv[0], frame->mYuv[1]);
2378e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng    }
2388e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng}
2398e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng
2408e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boatengvoid BaseCameraAdapter::removeFramePointers()
2418e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng{
2428e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  Mutex::Autolock lock(mSubscriberLock);
2438e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng
2448e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  int size = mFrameQueue.size();
2458e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  CAMHAL_LOGVB("Removing %d Frames = ", size);
2468e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  for (int i = 0; i < size; i++)
2478e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng    {
2488e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      CameraFrame *frame = (CameraFrame *)mFrameQueue.valueAt(i);
2498e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      CAMHAL_LOGVB("Free Frame=0x%x Y=0x%x UV=0x%x", frame->mBuffer, frame->mYuv[0], frame->mYuv[1]);
2508e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      delete frame;
2518e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng    }
2528e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng  mFrameQueue.clear();
2538e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng}
2548e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng
255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frameType)
256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t res = NO_ERROR;
258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    size_t subscriberCount = 0;
259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int refCount = -1;
260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mReturnFrameLock);
262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == frameBuf )
264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Invalid frameBuf");
266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return;
267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == res)
270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        refCount = getFrameRefCount(frameBuf,  frameType);
273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
274c493114006e0e136c8c88c2fc9865994054959bfSundar Raman        if(frameType == CameraFrame::PREVIEW_FRAME_SYNC)
275c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            {
276c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            mFramesWithDisplay--;
277c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            }
278c493114006e0e136c8c88c2fc9865994054959bfSundar Raman        else if(frameType == CameraFrame::VIDEO_FRAME_SYNC)
279c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            {
280c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            mFramesWithEncoder--;
281c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            }
282c493114006e0e136c8c88c2fc9865994054959bfSundar Raman
283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( 0 < refCount )
284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refCount--;
287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            setFrameRefCount(frameBuf, frameType, refCount);
288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
289c493114006e0e136c8c88c2fc9865994054959bfSundar Raman
2904f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu            if ( mRecording && (CameraFrame::VIDEO_FRAME_SYNC == frameType) ) {
291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                refCount += getFrameRefCount(frameBuf, CameraFrame::PREVIEW_FRAME_SYNC);
2924f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu            } else if ( mRecording && (CameraFrame::PREVIEW_FRAME_SYNC == frameType) ) {
2934f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu                refCount += getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
2944f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu            } else if ( mRecording && (CameraFrame::SNAPSHOT_FRAME == frameType) ) {
295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                refCount += getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
2964f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu            }
2974f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu
298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        else
301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
302e46394481e771dbdc8683645c3740a3d262a3d0fIliyan Malchev            CAMHAL_LOGDA("Frame returned when ref count is already zero!!");
303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            return;
304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
307c493114006e0e136c8c88c2fc9865994054959bfSundar Raman    CAMHAL_LOGVB("REFCOUNT 0x%x %d", frameBuf, refCount);
308c493114006e0e136c8c88c2fc9865994054959bfSundar Raman
309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == res )
310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        //check if someone is holding this buffer
312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        if ( 0 == refCount )
313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
314c493114006e0e136c8c88c2fc9865994054959bfSundar Raman#ifdef DEBUG_LOG
315c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            if(mBuffersWithDucati.indexOfKey((int)frameBuf)>=0)
316c493114006e0e136c8c88c2fc9865994054959bfSundar Raman                {
317c493114006e0e136c8c88c2fc9865994054959bfSundar Raman                LOGE("Buffer already with Ducati!! 0x%x", frameBuf);
318c493114006e0e136c8c88c2fc9865994054959bfSundar Raman                for(int i=0;i<mBuffersWithDucati.size();i++) LOGE("0x%x", mBuffersWithDucati.keyAt(i));
319c493114006e0e136c8c88c2fc9865994054959bfSundar Raman                }
320c493114006e0e136c8c88c2fc9865994054959bfSundar Raman            mBuffersWithDucati.add((int)frameBuf,1);
321c493114006e0e136c8c88c2fc9865994054959bfSundar Raman#endif
322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            res = fillThisBuffer(frameBuf, frameType);
323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, int value2, int value3)
329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    struct timeval *refTimestamp;
332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    BuffersDescriptor *desc = NULL;
333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraFrame *frame = NULL;
334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( operation ) {
338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW:
339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("Use buffers for preview");
340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                desc = ( BuffersDescriptor * ) value1;
341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL == desc )
343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEA("Invalid preview 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(mPreviewBufferLock);
356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mPreviewBuffers = (int *) desc->mBuffers;
357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mPreviewBuffersLength = desc->mLength;
358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mPreviewBuffersAvailable.clear();
359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewBuffersAvailable.add(mPreviewBuffers[i], 0);
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                        mPreviewBuffersAvailable.add(mPreviewBuffers[i], 1);
368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL != desc )
372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = useBuffers(CameraAdapter::CAMERA_PREVIEW,
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_PREVIEW_DATA:
392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDA("Use buffers for preview data");
393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    desc = ( BuffersDescriptor * ) value1;
394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( NULL == desc )
396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        CAMHAL_LOGEA("Invalid preview data 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(mPreviewDataBufferLock);
409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewDataBuffers = (int *) desc->mBuffers;
410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewDataBuffersLength = desc->mLength;
411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        mPreviewDataBuffersAvailable.clear();
412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            {
41488006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman                            mPreviewDataBuffersAvailable.add(mPreviewDataBuffers[i], 0);
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                            {
42088006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman                            mPreviewDataBuffersAvailable.add(mPreviewDataBuffers[i], 1);
421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                            }
422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    if ( NULL != desc )
425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        ret = useBuffers(CameraAdapter::CAMERA_MEASUREMENT,
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_USE_BUFFERS_IMAGE_CAPTURE:
445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("Use buffers for image capture");
446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                desc = ( BuffersDescriptor * ) value1;
447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL == desc )
449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEA("Invalid capture buffers!");
451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    return -EINVAL;
452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = setState(operation);
457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    Mutex::Autolock lock(mCaptureBufferLock);
462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mCaptureBuffers = (int *) desc->mBuffers;
463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mCaptureBuffersLength = desc->mLength;
464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mCaptureBuffersAvailable.clear();
465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
46788006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman                        mCaptureBuffersAvailable.add(mCaptureBuffers[i], 0);
468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    // initial ref count for undeqeueued buffers is 1 since buffer provider
470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    // is still holding on to it
471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ )
472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        {
47388006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman                        mCaptureBuffersAvailable.add(mCaptureBuffers[i], 1);
474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                        }
475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( NULL != desc )
478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = useBuffers(CameraAdapter::CAMERA_IMAGE_CAPTURE,
480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mBuffers,
481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mCount,
482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mLength,
483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                     desc->mMaxQueueable);
484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                if ( ret == NO_ERROR )
487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = commitState();
489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                else
491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    {
492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret |= rollbackState();
493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    }
494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                break;
496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_SMOOTH_ZOOM:
498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startSmoothZoom(value1);
508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_SMOOTH_ZOOM:
524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopSmoothZoom();
534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_PREVIEW:
550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                CAMHAL_LOGDA("Start Preview");
553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startPreview();
562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_PREVIEW:
578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Stop Preview");
581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopPreview();
590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_VIDEO:
606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Start video recording");
609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startVideoCapture();
618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_VIDEO:
634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGDA("Stop video recording");
637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopVideoCapture();
646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_PREVIEW_FLUSH_BUFFERS:
662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = flushBuffers();
672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_IMAGE_CAPTURE:
688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refTimestamp = ( struct timeval * ) value1;
693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( NULL != refTimestamp )
694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval ));
696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = takePicture();
708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_IMAGE_CAPTURE:
724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopImageCapture();
734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_START_BRACKET_CAPTURE:
750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refTimestamp = ( struct timeval * ) value2;
755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( NULL != refTimestamp )
756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval ));
758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = startBracketing(value1);
770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_STOP_BRACKET_CAPTURE:
786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = stopBracketing();
796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_PERFORM_AUTOFOCUS:
812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            refTimestamp = ( struct timeval * ) value1;
816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( NULL != refTimestamp )
817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                memcpy( &mStartFocus, refTimestamp, sizeof( struct timeval ));
819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = autoFocus();
831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_CANCEL_AUTOFOCUS:
845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = setState(operation);
849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = cancelAutoFocus();
854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if ( ret == NO_ERROR )
857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret = commitState();
859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            else
861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                ret |= rollbackState();
863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraAdapter::CAMERA_QUERY_RESOLUTION_PREVIEW:
868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = setState(operation);
872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 frame = ( CameraFrame * ) value1;
877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 if ( NULL != frame )
879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = getFrameSize(frame->mWidth, frame->mHeight);
881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 else
883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = -EINVAL;
885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = commitState();
891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             else
893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret |= rollbackState();
895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = setState(operation);
904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 frame = ( CameraFrame * ) value1;
909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 if ( NULL != frame )
911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = getPictureBufferSize(frame->mLength, value2);
913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 else
915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = -EINVAL;
917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = commitState();
923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             else
925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret |= rollbackState();
927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = setState(operation);
936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 frame = ( CameraFrame * ) value1;
941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 if ( NULL != frame )
943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = getFrameDataSize(frame->mLength, value2);
945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 else
947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     {
948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     ret = -EINVAL;
949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                     }
950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             if ( ret == NO_ERROR )
953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret = commitState();
955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             else
957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 {
958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 ret |= rollbackState();
959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                 }
960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_START_FD:
964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             ret = startFaceDetection();
966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev         case CameraAdapter::CAMERA_STOP_FD:
970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             ret = stopFaceDetection();
972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev             break;
974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
9757016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng         case CameraAdapter::CAMERA_SWITCH_TO_EXECUTING:
9767016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng           ret = switchToExecuting();
9777016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng           break;
9787016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng
979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEB("Command 0x%x unsupported!", operation);
981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    };
983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyFocusSubscribers(bool status)
989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent focusEvent;
992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mFocusSubscribers.size() == 0 ) {
997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("No Focus Subscribers!");
998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     //dump the AF latency
1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev     CameraHal::PPM("Focus finished in: ", &mStartFocus);
1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif
1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData = new CameraHalEvent::CameraHalEventData();
1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == focusEvent.mEventData.get() ) {
1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventType = CameraHalEvent::EVENT_FOCUS_LOCKED;
1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData->focusEvent.focusLocked = status;
1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData->focusEvent.focusError = !status;
1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mFocusSubscribers.size(); i++ )
1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        focusEvent.mCookie = (void *) mFocusSubscribers.keyAt(i);
1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = (event_callback) mFocusSubscribers.valueAt(i);
1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &focusEvent );
1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    focusEvent.mEventData.clear();
1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyShutterSubscribers()
1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent shutterEvent;
1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mShutterSubscribers.size() == 0 )
1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("No shutter Subscribers!");
1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventData = new CameraHalEvent::CameraHalEventData();
1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == shutterEvent.mEventData.get() ) {
1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventType = CameraHalEvent::EVENT_SHUTTER;
1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventData->shutterEvent.shutterClosed = true;
1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mShutterSubscribers.size() ; i++ ) {
1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        shutterEvent.mCookie = ( void * ) mShutterSubscribers.keyAt(i);
1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = ( event_callback ) mShutterSubscribers.valueAt(i);
1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Sending shutter callback");
1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &shutterEvent );
1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    shutterEvent.mEventData.clear();
1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyZoomSubscribers(int zoomIdx, bool targetReached)
1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent zoomEvent;
1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mZoomSubscribers.size() == 0 ) {
1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("No zoom Subscribers!");
1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData = new CameraHalEvent::CameraHalEventData();
1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == zoomEvent.mEventData.get() ) {
1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventType = CameraHalEvent::EVENT_ZOOM_INDEX_REACHED;
1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData->zoomEvent.currentZoomIndex = zoomIdx;
1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData->zoomEvent.targetZoomIndexReached = targetReached;
1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mZoomSubscribers.size(); i++ ) {
1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        zoomEvent.mCookie = (void *) mZoomSubscribers.keyAt(i);
1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = (event_callback) mZoomSubscribers.valueAt(i);
1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &zoomEvent );
1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    zoomEvent.mEventData.clear();
1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyFaceSubscribers(sp<CameraFDResult> &faces)
1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    event_callback eventCb;
1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    CameraHalEvent faceEvent;
1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mFaceSubscribers.size() == 0 ) {
1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGDA("No face detection subscribers!");
1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return NO_INIT;
1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventData = new CameraHalEvent::CameraHalEventData();
1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == faceEvent.mEventData.get() ) {
1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        return -ENOMEM;
1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventType = CameraHalEvent::EVENT_FACE;
1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventData->faceEvent = faces;
1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    for (unsigned int i = 0 ; i < mFaceSubscribers.size(); i++ ) {
1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        faceEvent.mCookie = (void *) mFaceSubscribers.keyAt(i);
1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb = (event_callback) mFaceSubscribers.valueAt(i);
1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        eventCb ( &faceEvent );
1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    }
1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    faceEvent.mEventData.clear();
1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame)
1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
11435e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    unsigned int mask;
1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NULL == frame )
1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        CAMHAL_LOGEA("Invalid CameraFrame");
11485e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        return -EINVAL;
1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
11515e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    for( mask = 1; mask < CameraFrame::ALL_FRAMES; mask <<= 1){
11525e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      if( mask & frame->mFrameMask ){
11535e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        switch( mask ){
1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
11555e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::IMAGE_FRAME:
11565e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
11585e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng            CameraHal::PPM("Shot to Jpeg: ", &mStartCapture);
11595e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng#endif
1160348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mImageSubscribers, CameraFrame::IMAGE_FRAME);
11615e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11625e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11635e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::RAW_FRAME:
11645e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1165348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mRawSubscribers, CameraFrame::RAW_FRAME);
11665e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11675e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11685e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::PREVIEW_FRAME_SYNC:
11695e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1170348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::PREVIEW_FRAME_SYNC);
11715e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11725e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11735e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::SNAPSHOT_FRAME:
11745e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1175348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::SNAPSHOT_FRAME);
11765e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11775e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11785e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::VIDEO_FRAME_SYNC:
11795e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1180348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mVideoSubscribers, CameraFrame::VIDEO_FRAME_SYNC);
11815e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11825e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11835e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        case CameraFrame::FRAME_DATA_SYNC:
11845e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          {
1185348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            ret = __sendFrameToSubscribers(frame, &mFrameDataSubscribers, CameraFrame::FRAME_DATA_SYNC);
11865e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          }
11875e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          break;
11885e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        default:
11895e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", mask);
11905e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
11915e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }//SWITCH
11925e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        frame->mFrameMask &= ~mask;
1193348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1194348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        if (ret != NO_ERROR) {
1195348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            goto EXIT;
1196348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
11975e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      }//IF
11985e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    }//FOR
1199348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1200348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu EXIT:
1201348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    return ret;
1202348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu}
1203348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1204348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luustatus_t BaseCameraAdapter::__sendFrameToSubscribers(CameraFrame* frame,
1205348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                                                     KeyedVector<int, frame_callback> *subscribers,
1206348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                                                     CameraFrame::FrameType frameType)
1207348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu{
1208348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    size_t refCount = 0;
1209348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    status_t ret = NO_ERROR;
1210348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    frame_callback callback = NULL;
1211348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1212348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    frame->mFrameType = frameType;
1213348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
12148a01f97380aad5b6a30a2d248aa07af4d92373d0Tyler Luu    if ( (frameType == CameraFrame::PREVIEW_FRAME_SYNC) ||
12158a01f97380aad5b6a30a2d248aa07af4d92373d0Tyler Luu         (frameType == CameraFrame::VIDEO_FRAME_SYNC) ||
12168a01f97380aad5b6a30a2d248aa07af4d92373d0Tyler Luu         (frameType == CameraFrame::SNAPSHOT_FRAME) ){
12178e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng        if (mFrameQueue.size() > 0){
12188e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng          CameraFrame *lframe = (CameraFrame *)mFrameQueue.valueFor(frame->mBuffer);
12198e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng          frame->mYuv[0] = lframe->mYuv[0];
12208e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng          frame->mYuv[1] = lframe->mYuv[1];
12218e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng        }
12228e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng        else{
1223e46394481e771dbdc8683645c3740a3d262a3d0fIliyan Malchev          CAMHAL_LOGDA("Empty Frame Queue");
12248e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng          return -EINVAL;
12258e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng        }
12268e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng      }
12278e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng
1228348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    if (NULL != subscribers) {
1229348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        refCount = getFrameRefCount(frame->mBuffer, frameType);
1230348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1231348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        if (refCount == 0) {
12327b4990d47f1765a2264cdf925730e486791c2d1cTyler Luu            CAMHAL_LOGDA("Invalid ref count of 0");
1233348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            return -EINVAL;
1234348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
1235348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1236348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        if (refCount > subscribers->size()) {
1237348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            CAMHAL_LOGEB("Invalid ref count for frame type: 0x%x", frameType);
1238348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            return -EINVAL;
1239348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
1240348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1241348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        CAMHAL_LOGVB("Type of Frame: 0x%x address: 0x%x refCount start %d",
1242348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                     frame->mFrameType,
1243348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                     ( uint32_t ) frame->mBuffer,
1244348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                     refCount);
1245348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1246348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        for ( unsigned int i = 0 ; i < refCount; i++ ) {
1247348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            frame->mCookie = ( void * ) subscribers->keyAt(i);
1248348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            callback = (frame_callback) subscribers->valueAt(i);
1249348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1250348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            if (!callback) {
1251348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                CAMHAL_LOGEB("callback not set for frame type: 0x%x", frameType);
1252348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu                return -EINVAL;
1253348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            }
1254348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
1255348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu            callback(frame);
1256348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        }
1257348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    } else {
12587b4990d47f1765a2264cdf925730e486791c2d1cTyler Luu        CAMHAL_LOGEA("Subscribers is null??");
1259348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu        return -EINVAL;
1260348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu    }
1261348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
12625e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    return ret;
12635e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng}
1264348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu
12655e02dd977e79ee977ee063496033bbc363a70780Akwasi Boatengint BaseCameraAdapter::setInitFrameRefCount(void* buf, unsigned int mask)
12665e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng{
12675e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  int ret = NO_ERROR;
12685e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  unsigned int lmask;
1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
12705e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  LOG_FUNCTION_NAME;
1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
12725e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  if (buf == NULL)
12735e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    {
12745e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      return -EINVAL;
12755e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    }
1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
12775e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  for( lmask = 1; lmask < CameraFrame::ALL_FRAMES; lmask <<= 1){
12785e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    if( lmask & mask ){
12795e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      switch( lmask ){
1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
12815e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::IMAGE_FRAME:
12825e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
1283524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman          setFrameRefCount(buf, CameraFrame::IMAGE_FRAME, (int) mImageSubscribers.size());
1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
12855e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12865e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::RAW_FRAME:
1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
12885e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::RAW_FRAME, mRawSubscribers.size());
1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
12905e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12915e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::PREVIEW_FRAME_SYNC:
1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
12935e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::PREVIEW_FRAME_SYNC, mFrameSubscribers.size());
1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
12955e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
12965e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::SNAPSHOT_FRAME:
12975e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
12985e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mFrameSubscribers.size());
12995e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }
13005e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
13015e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::VIDEO_FRAME_SYNC:
13025e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
13035e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf,CameraFrame::VIDEO_FRAME_SYNC, mVideoSubscribers.size());
13045e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }
13055e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
13065e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      case CameraFrame::FRAME_DATA_SYNC:
13075e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        {
13085e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng          setFrameRefCount(buf, CameraFrame::FRAME_DATA_SYNC, mFrameDataSubscribers.size());
13095e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        }
13105e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
13115e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      default:
13125e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", lmask);
13135e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng        break;
13145e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      }//SWITCH
13155e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng      mask &= ~lmask;
13165e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng    }//IF
13175e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  }//FOR
13185e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  LOG_FUNCTION_NAME_EXIT;
13195e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng  return ret;
1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint BaseCameraAdapter::getFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType)
1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    int res = -1;
1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( frameType )
1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::IMAGE_FRAME:
1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::RAW_FRAME:
1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mCaptureBufferLock);
1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mCaptureBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::PREVIEW_FRAME_SYNC:
1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::SNAPSHOT_FRAME:
1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewBufferLock);
1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mPreviewBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::FRAME_DATA_SYNC:
1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewDataBufferLock);
1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mPreviewDataBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::VIDEO_FRAME_SYNC:
1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mVideoBufferLock);
1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                res = mVideoBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return res;
1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::setFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType, int refCount)
1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( frameType )
1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::IMAGE_FRAME:
1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::RAW_FRAME:
1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mCaptureBufferLock);
1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mCaptureBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::PREVIEW_FRAME_SYNC:
1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::SNAPSHOT_FRAME:
1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewBufferLock);
1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mPreviewBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::FRAME_DATA_SYNC:
1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mPreviewDataBufferLock);
1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mPreviewDataBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CameraFrame::VIDEO_FRAME_SYNC:
1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                Mutex::Autolock lock(mVideoBufferLock);
1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                mVideoBuffersAvailable.replaceValueFor(  ( unsigned int ) frameBuf, refCount);
1396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
1399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        };
1401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startVideoCapture()
1407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mVideoBufferLock);
1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    //If the capture is already ongoing, return from here.
1415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( mRecording )
1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = NO_INIT;
1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        for ( unsigned int i = 0 ; i < mPreviewBuffersAvailable.size() ; i++ )
1425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            mVideoBuffersAvailable.add(mPreviewBuffersAvailable.keyAt(i), 0);
1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mRecording = true;
1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopVideoCapture()
1438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( !mRecording )
1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        ret = NO_INIT;
1446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    if ( NO_ERROR == ret )
1449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        for ( unsigned int i = 0 ; i < mVideoBuffersAvailable.size() ; i++ )
1451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            {
1452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            void *frameBuf = ( void * ) mVideoBuffersAvailable.keyAt(i);
1453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            if( getFrameRefCount(frameBuf,  CameraFrame::VIDEO_FRAME_SYNC) > 0)
1454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                returnFrame(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
1456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            }
1458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mVideoBuffersAvailable.clear();
1460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        mRecording = false;
1462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
1463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//-----------------Stub implementation of the interface ------------------------------
1470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::takePicture()
1472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopImageCapture()
1483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startBracketing(int range)
1494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopBracketing()
1505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::autoFocus()
1516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    notifyFocusSubscribers(false);
1522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::cancelAutoFocus()
1529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startSmoothZoom(int targetIdx)
1540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopSmoothZoom()
1551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startPreview()
1562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopPreview()
1573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable)
1584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType)
1595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getFrameSize(size_t &width, size_t &height)
1606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getFrameDataSize(size_t &dataFrameSize, size_t bufferCount)
1617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getPictureBufferSize(size_t &length, size_t bufferCount)
1628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startFaceDetection()
1639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopFaceDetection()
1650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
1656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
1658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
1659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
16607016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boatengstatus_t BaseCameraAdapter::switchToExecuting()
16617016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng{
16627016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng  status_t ret = NO_ERROR;
16637016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng  LOG_FUNCTION_NAME;
16647016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng  LOG_FUNCTION_NAME_EXIT;
16657016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng  return ret;
16667016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng}
16677016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng
1668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::setState(CameraCommands operation)
1669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
1670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
1671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
1673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mLock.lock();
1675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    switch ( mAdapterState )
1677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        {
1678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case INTIALIZED_STATE:
1680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_USE_BUFFERS_PREVIEW:
1685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->LOADED_PREVIEW_STATE event = 0x%x",
1686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = LOADED_PREVIEW_STATE;
1688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                //These events don't change the current state
1691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_RESOLUTION_PREVIEW:
1692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
1694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->INTIALIZED_STATE event = 0x%x",
1695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = INTIALIZED_STATE;
1697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch INTIALIZED_STATE Invalid Op! event = 0x%x",
1701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case LOADED_PREVIEW_STATE:
1710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_PREVIEW:
1715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->PREVIEW_STATE event = 0x%x",
1716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                //These events don't change the current state
1721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
1723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_USE_BUFFERS_PREVIEW_DATA:
1724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->LOADED_PREVIEW_STATE event = 0x%x",
1725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = LOADED_PREVIEW_STATE;
1727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW Invalid Op! event = 0x%x",
1731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case PREVIEW_STATE:
1740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_PREVIEW:
1745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->INTIALIZED_STATE event = 0x%x",
1746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = INTIALIZED_STATE;
1748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_PERFORM_AUTOFOCUS:
1751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->AF_STATE event = 0x%x",
1752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_STATE;
1754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_SMOOTH_ZOOM:
1757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->ZOOM_STATE event = 0x%x",
1758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = ZOOM_STATE;
1760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
1763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->LOADED_CAPTURE_STATE event = 0x%x",
1764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = LOADED_CAPTURE_STATE;
1766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_VIDEO:
1769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->VIDEO_STATE event = 0x%x",
1770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = VIDEO_STATE;
1772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
177485c859b69b3c003b8db810371e24fe41599fc7deSundar Raman                case CAMERA_CANCEL_AUTOFOCUS:
1775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
1777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch PREVIEW_ACTIVE->PREVIEW_ACTIVE event = 0x%x",
1778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch PREVIEW_ACTIVE Invalid Op! event = 0x%x",
1784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case LOADED_CAPTURE_STATE:
1793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_IMAGE_CAPTURE:
1798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = 0x%x",
1799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = CAPTURE_STATE;
1801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_BRACKET_CAPTURE:
1804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->BRACKETING_STATE event = 0x%x",
1805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = BRACKETING_STATE;
1807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = 0x%x",
1811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case CAPTURE_STATE:
1820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_IMAGE_CAPTURE:
182488006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman                case CAMERA_STOP_BRACKET_CAPTURE:
1825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x",
1826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = 0x%x",
1832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case BRACKETING_STATE:
1841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
184588006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman                case CAMERA_STOP_IMAGE_CAPTURE:
1846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_BRACKET_CAPTURE:
1847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->PREVIEW_STATE event = 0x%x",
1848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_IMAGE_CAPTURE:
1853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->CAPTURE_STATE event = 0x%x",
1854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = CAPTURE_STATE;
1856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch BRACKETING_STATE Invalid Op! event = 0x%x",
1860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case AF_STATE:
1869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_CANCEL_AUTOFOCUS:
1874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = 0x%x",
1875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_START_SMOOTH_ZOOM:
1880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_STATE->AF_ZOOM_STATE event = 0x%x",
1881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_ZOOM_STATE;
1883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch AF_STATE Invalid Op! event = 0x%x",
1887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case ZOOM_STATE:
1896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
19002010763a13490313d773d8bbabec46414649b3abSundar Raman                case CAMERA_CANCEL_AUTOFOCUS:
19012010763a13490313d773d8bbabec46414649b3abSundar Raman                    CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = 0x%x",
19022010763a13490313d773d8bbabec46414649b3abSundar Raman                                 operation);
19032010763a13490313d773d8bbabec46414649b3abSundar Raman                    mNextState = ZOOM_STATE;
19042010763a13490313d773d8bbabec46414649b3abSundar Raman                    break;
19052010763a13490313d773d8bbabec46414649b3abSundar Raman
1906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
1907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->PREVIEW_STATE event = 0x%x",
1908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_PERFORM_AUTOFOCUS:
1913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->AF_ZOOM_STATE event = 0x%x",
1914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_ZOOM_STATE;
1916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
19183f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                case CAMERA_START_VIDEO:
19193f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->VIDEO_ZOOM_STATE event = 0x%x",
19203f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                                 operation);
19213f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    mNextState = VIDEO_ZOOM_STATE;
19223f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    break;
19233f7a29d44c52729f037056a634423fda6db834e3Tyler Luu
1924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch ZOOM_STATE Invalid Op! event = 0x%x",
1926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case VIDEO_STATE:
1935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
1937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
1938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_VIDEO:
1940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->PREVIEW_STATE event = 0x%x",
1941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = PREVIEW_STATE;
1943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1945c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                case CAMERA_PERFORM_AUTOFOCUS:
1946c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_AF_STATE event = 0x%x",
1947c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                                 operation);
1948c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    mNextState = VIDEO_AF_STATE;
1949c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    break;
1950c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu
19513f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                case CAMERA_START_SMOOTH_ZOOM:
19523f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_ZOOM_STATE event = 0x%x",
19533f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                                 operation);
19543f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    mNextState = VIDEO_ZOOM_STATE;
19553f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    break;
19563f7a29d44c52729f037056a634423fda6db834e3Tyler Luu
1957ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
1958ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_LOADED_CAPTURE_STATE event = 0x%x",
1959ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1960ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_LOADED_CAPTURE_STATE;
1961ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1962ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1963ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
1964ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_STATE event = 0x%x",
1965ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
1966ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_STATE;
1967ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
1968ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
1969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
1970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch VIDEO_STATE Invalid Op! event = 0x%x",
1971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
1972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
1973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
1974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
1976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
1978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
1979c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu        case VIDEO_AF_STATE:
1980c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu
1981c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu            switch ( operation )
1982c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                {
1983c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu
1984c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                case CAMERA_CANCEL_AUTOFOCUS:
1985c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_AF_STATE->VIDEO_STATE event = 0x%x",
1986c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                                 operation);
1987c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    mNextState = VIDEO_STATE;
1988c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    break;
1989c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu
1990c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                default:
1991c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    CAMHAL_LOGEB("Adapter state switch VIDEO_AF_STATE Invalid Op! event = 0x%x",
1992c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                                 operation);
1993c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    ret = INVALID_OPERATION;
1994c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                    break;
1995c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu
1996c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu                }
1997c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu
1998c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu            break;
1999c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu
2000ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu        case VIDEO_LOADED_CAPTURE_STATE:
2001ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2002ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            switch ( operation )
2003ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                {
2004ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2005ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_START_IMAGE_CAPTURE:
2006ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = 0x%x",
2007ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
2008ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_CAPTURE_STATE;
2009ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
2010ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2011ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                default:
2012ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = 0x%x",
2013ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
2014ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    ret = INVALID_OPERATION;
2015ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
2016ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2017ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                }
2018ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2019ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            break;
2020ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2021ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu        case VIDEO_CAPTURE_STATE:
2022ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2023ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            switch ( operation )
2024ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                {
2025ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                case CAMERA_STOP_IMAGE_CAPTURE:
2026ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x",
2027ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
2028ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    mNextState = VIDEO_STATE;
2029ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
2030ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2031ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                default:
2032ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = 0x%x",
2033ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                                 operation);
2034ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    ret = INVALID_OPERATION;
2035ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                    break;
2036ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2037ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu                }
2038ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2039ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu            break;
2040ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu
2041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case AF_ZOOM_STATE:
2042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
2044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
2045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
2047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->AF_STATE event = 0x%x",
2048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
2049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = AF_STATE;
2050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_CANCEL_AUTOFOCUS:
2053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->ZOOM_STATE event = 0x%x",
2054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
2055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = ZOOM_STATE;
2056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
2059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch AF_ZOOM_STATE Invalid Op! event = 0x%x",
2060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
2061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
2062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case VIDEO_ZOOM_STATE:
2069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
2071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
2072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
2074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->VIDEO_STATE event = 0x%x",
2075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
2076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = VIDEO_STATE;
2077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
20783f7a29d44c52729f037056a634423fda6db834e3Tyler Luu
20793f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                case CAMERA_STOP_VIDEO:
20803f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->ZOOM_STATE event = 0x%x",
20813f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                                 operation);
20823f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    mNextState = ZOOM_STATE;
20833f7a29d44c52729f037056a634423fda6db834e3Tyler Luu                    break;
2084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
2086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch VIDEO_ZOOM_STATE Invalid Op! event = 0x%x",
2087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
2088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
2089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        case BRACKETING_ZOOM_STATE:
2096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            switch ( operation )
2098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                {
2099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                case CAMERA_STOP_SMOOTH_ZOOM:
2101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGDB("Adapter state switch BRACKETING_ZOOM_STATE->BRACKETING_STATE event = 0x%x",
2102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
2103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    mNextState = BRACKETING_STATE;
2104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                default:
2107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    CAMHAL_LOGEB("Adapter state switch BRACKETING_ZOOM_STATE Invalid Op! event = 0x%x",
2108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                                 operation);
2109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    ret = INVALID_OPERATION;
2110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                    break;
2111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev                }
2113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            break;
2115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        default:
2117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            CAMHAL_LOGEA("Invalid Adapter state!");
2118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev            ret = INVALID_OPERATION;
2119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev        }
2120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2126a58c483de2c8188e41fd9635042c31820d13b845Tyler Luustatus_t BaseCameraAdapter::rollbackToInitializedState()
2127a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu{
2128a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    status_t ret = NO_ERROR;
2129a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2130a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    LOG_FUNCTION_NAME;
2131a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2132a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    while ((getState() != INTIALIZED_STATE) && (ret == NO_ERROR)) {
2133a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        ret = rollbackToPreviousState();
2134a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    }
2135a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2136a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    LOG_FUNCTION_NAME_EXIT;
2137a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2138a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    return ret;
2139a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu}
2140a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2141a58c483de2c8188e41fd9635042c31820d13b845Tyler Luustatus_t BaseCameraAdapter::rollbackToPreviousState()
2142a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu{
2143a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    status_t ret = NO_ERROR;
2144a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2145a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    LOG_FUNCTION_NAME;
2146a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2147a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    CameraAdapter::AdapterState currentState = getState();
2148a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2149a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    switch (currentState) {
2150a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case INTIALIZED_STATE:
2151a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            return NO_ERROR;
2152a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2153a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case PREVIEW_STATE:
2154a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_PREVIEW);
2155a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2156a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2157a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case CAPTURE_STATE:
2158a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE);
2159a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2160a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2161a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case BRACKETING_STATE:
2162a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_BRACKET_CAPTURE);
2163a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2164a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2165a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case AF_STATE:
2166a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS);
2167a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2168a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2169a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case ZOOM_STATE:
2170a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
2171a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2172a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2173a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case VIDEO_STATE:
2174a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_VIDEO);
2175a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2176a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2177a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case VIDEO_AF_STATE:
2178a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS);
2179a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2180a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2181a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case VIDEO_CAPTURE_STATE:
2182a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE);
2183a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2184a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2185a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case AF_ZOOM_STATE:
2186a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
2187a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2188a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2189a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case VIDEO_ZOOM_STATE:
2190a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
2191a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2192a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2193a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        case BRACKETING_ZOOM_STATE:
2194a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
2195a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            break;
2196a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2197a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu        default:
2198a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            CAMHAL_LOGEA("Invalid Adapter state!");
2199a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu            ret = INVALID_OPERATION;
2200a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    }
2201a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2202a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    LOG_FUNCTION_NAME_EXIT;
2203a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2204a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu    return ret;
2205a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu}
2206a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu
2207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//State transition finished successfully.
2208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Commit the state and unlock the adapter state.
2209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::commitState()
2210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mAdapterState = mNextState;
2216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mLock.unlock();
2218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::rollbackState()
2225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mNextState = mAdapterState;
2231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    mLock.unlock();
2233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// getNextState() and getState()
2240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// publicly exposed functions to retrieve the adapter states
2241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// please notice that these functions are locked
2242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCameraAdapter::AdapterState BaseCameraAdapter::getState()
2243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mLock);
2249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return mAdapterState;
2253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCameraAdapter::AdapterState BaseCameraAdapter::getNextState()
2256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    Mutex::Autolock lock(mLock);
2262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return mNextState;
2266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// getNextState() and getState()
2269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// internal protected functions to retrieve the adapter states
2270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// please notice that these functions are NOT locked to help
2271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// internal functions query state in the middle of state
2272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// transition
2273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getState(AdapterState &state)
2274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    state = mAdapterState;
2280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getNextState(AdapterState &state)
2287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    status_t ret = NO_ERROR;
2289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    state = mNextState;
2293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    return ret;
2297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::onOrientationEvent(uint32_t orientation, uint32_t tilt)
2300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{
2301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME;
2302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev    LOG_FUNCTION_NAME_EXIT;
2303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}
2304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//-----------------------------------------------------------------------------
2305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev};
2309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------------------Camera Adapter Class ENDS here-----------------------------*/
2311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev
2312