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