1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (C) Texas Instruments - http://www.ti.com/ 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License"); 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * you may not use this file except in compliance with the License. 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * You may obtain a copy of the License at 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * http://www.apache.org/licenses/LICENSE-2.0 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Unless required by applicable law or agreed to in writing, software 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS, 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * See the License for the specific language governing permissions and 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * limitations under the License. 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LOG_TAG "CameraHAL" 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "BaseCameraAdapter.h" 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevnamespace android { 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------------------Camera Adapter Class STARTS here-----------------------------*/ 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevBaseCameraAdapter::BaseCameraAdapter() 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mReleaseImageBuffersCallback = NULL; 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mEndImageCaptureCallback = NULL; 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mErrorNotifier = NULL; 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mEndCaptureData = NULL; 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mReleaseData = NULL; 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRecording = false; 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffers = NULL; 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBufferCount = 0; 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffersLength = 0; 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoBuffers = NULL; 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoBuffersCount = 0; 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoBuffersLength = 0; 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCaptureBuffers = NULL; 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCaptureBuffersCount = 0; 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCaptureBuffersLength = 0; 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewDataBuffers = NULL; 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewDataBuffersCount = 0; 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewDataBuffersLength = 0; 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mAdapterState = INTIALIZED_STATE; 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mStartFocus.tv_sec = 0; 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mStartFocus.tv_usec = 0; 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mStartCapture.tv_sec = 0; 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mStartCapture.tv_usec = 0; 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevBaseCameraAdapter::~BaseCameraAdapter() 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mSubscriberLock); 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameSubscribers.clear(); 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mImageSubscribers.clear(); 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRawSubscribers.clear(); 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoSubscribers.clear(); 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFocusSubscribers.clear(); 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mShutterSubscribers.clear(); 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mZoomSubscribers.clear(); 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFaceSubscribers.clear(); 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::registerImageReleaseCallback(release_image_buffers_callback callback, void *user_data) 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mReleaseImageBuffersCallback = callback; 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mReleaseData = user_data; 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::registerEndCaptureCallback(end_image_capture_callback callback, void *user_data) 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mEndImageCaptureCallback= callback; 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mEndCaptureData = user_data; 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::setErrorHandler(ErrorNotifier *errorNotifier) 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == errorNotifier ) 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Invalid Error Notifier reference"); 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mErrorNotifier = errorNotifier; 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::enableMsgType(int32_t msgs, frame_callback callback, event_callback eventCb, void* cookie) 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mSubscriberLock); 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( CameraFrame::PREVIEW_FRAME_SYNC == msgs ) 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameSubscribers.add((int) cookie, callback); 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::FRAME_DATA_SYNC == msgs ) 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameDataSubscribers.add((int) cookie, callback); 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::IMAGE_FRAME == msgs) 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mImageSubscribers.add((int) cookie, callback); 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::RAW_FRAME == msgs) 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRawSubscribers.add((int) cookie, callback); 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::VIDEO_FRAME_SYNC == msgs) 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoSubscribers.add((int) cookie, callback); 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraHalEvent::ALL_EVENTS == msgs) 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFocusSubscribers.add((int) cookie, eventCb); 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mShutterSubscribers.add((int) cookie, eventCb); 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mZoomSubscribers.add((int) cookie, eventCb); 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFaceSubscribers.add((int) cookie, eventCb); 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Message type subscription no supported yet!"); 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::disableMsgType(int32_t msgs, void* cookie) 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mSubscriberLock); 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( CameraFrame::PREVIEW_FRAME_SYNC == msgs ) 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameSubscribers.removeItem((int) cookie); 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::FRAME_DATA_SYNC == msgs ) 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameDataSubscribers.removeItem((int) cookie); 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::IMAGE_FRAME == msgs) 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mImageSubscribers.removeItem((int) cookie); 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::RAW_FRAME == msgs) 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRawSubscribers.removeItem((int) cookie); 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::VIDEO_FRAME_SYNC == msgs) 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoSubscribers.removeItem((int) cookie); 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraFrame::ALL_FRAMES == msgs ) 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameSubscribers.removeItem((int) cookie); 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFrameDataSubscribers.removeItem((int) cookie); 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mImageSubscribers.removeItem((int) cookie); 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRawSubscribers.removeItem((int) cookie); 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoSubscribers.removeItem((int) cookie); 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( CameraHalEvent::ALL_EVENTS == msgs) 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Subscribe only for focus 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //TODO: Process case by case 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFocusSubscribers.removeItem((int) cookie); 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mShutterSubscribers.removeItem((int) cookie); 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mZoomSubscribers.removeItem((int) cookie); 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mFaceSubscribers.removeItem((int) cookie); 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Message type 0x%x subscription no supported yet!", msgs); 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2238e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boatengvoid BaseCameraAdapter::addFramePointers(void *frameBuf, void *buf) 2248e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng{ 2258e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng unsigned int *pBuf = (unsigned int *)buf; 2268e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng Mutex::Autolock lock(mSubscriberLock); 2278e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng 2288e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng if ((frameBuf != NULL) && ( pBuf != NULL) ) 2298e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng { 2308e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng CameraFrame *frame = new CameraFrame; 2318e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng frame->mBuffer = frameBuf; 2328e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng frame->mYuv[0] = pBuf[0]; 2338e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng frame->mYuv[1] = pBuf[1]; 2348e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng mFrameQueue.add(frameBuf, frame); 2358e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng 2368e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng CAMHAL_LOGVB("Adding Frame=0x%x Y=0x%x UV=0x%x", frame->mBuffer, frame->mYuv[0], frame->mYuv[1]); 2378e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng } 2388e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng} 2398e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng 2408e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boatengvoid BaseCameraAdapter::removeFramePointers() 2418e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng{ 2428e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng Mutex::Autolock lock(mSubscriberLock); 2438e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng 2448e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng int size = mFrameQueue.size(); 2458e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng CAMHAL_LOGVB("Removing %d Frames = ", size); 2468e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng for (int i = 0; i < size; i++) 2478e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng { 2488e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng CameraFrame *frame = (CameraFrame *)mFrameQueue.valueAt(i); 2498e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng CAMHAL_LOGVB("Free Frame=0x%x Y=0x%x UV=0x%x", frame->mBuffer, frame->mYuv[0], frame->mYuv[1]); 2508e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng delete frame; 2518e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng } 2528e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng mFrameQueue.clear(); 2538e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng} 2548e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frameType) 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t res = NO_ERROR; 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t subscriberCount = 0; 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int refCount = -1; 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == frameBuf ) 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Invalid frameBuf"); 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return; 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == res) 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 269609bc02b21c725825bd469391e9ecd4e2d462fe1Tyler Luu Mutex::Autolock lock(mReturnFrameLock); 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev refCount = getFrameRefCount(frameBuf, frameType); 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 273c493114006e0e136c8c88c2fc9865994054959bfSundar Raman if(frameType == CameraFrame::PREVIEW_FRAME_SYNC) 274c493114006e0e136c8c88c2fc9865994054959bfSundar Raman { 275c493114006e0e136c8c88c2fc9865994054959bfSundar Raman mFramesWithDisplay--; 276c493114006e0e136c8c88c2fc9865994054959bfSundar Raman } 277c493114006e0e136c8c88c2fc9865994054959bfSundar Raman else if(frameType == CameraFrame::VIDEO_FRAME_SYNC) 278c493114006e0e136c8c88c2fc9865994054959bfSundar Raman { 279c493114006e0e136c8c88c2fc9865994054959bfSundar Raman mFramesWithEncoder--; 280c493114006e0e136c8c88c2fc9865994054959bfSundar Raman } 281c493114006e0e136c8c88c2fc9865994054959bfSundar Raman 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 < refCount ) 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev refCount--; 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev setFrameRefCount(frameBuf, frameType, refCount); 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 288c493114006e0e136c8c88c2fc9865994054959bfSundar Raman 2894f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu if ( mRecording && (CameraFrame::VIDEO_FRAME_SYNC == frameType) ) { 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev refCount += getFrameRefCount(frameBuf, CameraFrame::PREVIEW_FRAME_SYNC); 2914f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu } else if ( mRecording && (CameraFrame::PREVIEW_FRAME_SYNC == frameType) ) { 2924f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu refCount += getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC); 2934f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu } else if ( mRecording && (CameraFrame::SNAPSHOT_FRAME == frameType) ) { 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev refCount += getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC); 2954f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu } 2964f29332694e8222b3f1fae39d40edcdec1dec1bdTyler Luu 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 301e46394481e771dbdc8683645c3740a3d262a3d0fIliyan Malchev CAMHAL_LOGDA("Frame returned when ref count is already zero!!"); 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return; 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 306c493114006e0e136c8c88c2fc9865994054959bfSundar Raman CAMHAL_LOGVB("REFCOUNT 0x%x %d", frameBuf, refCount); 307c493114006e0e136c8c88c2fc9865994054959bfSundar Raman 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == res ) 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //check if someone is holding this buffer 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( 0 == refCount ) 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 313c493114006e0e136c8c88c2fc9865994054959bfSundar Raman#ifdef DEBUG_LOG 314c493114006e0e136c8c88c2fc9865994054959bfSundar Raman if(mBuffersWithDucati.indexOfKey((int)frameBuf)>=0) 315c493114006e0e136c8c88c2fc9865994054959bfSundar Raman { 31646de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block ALOGE("Buffer already with Ducati!! 0x%x", frameBuf); 31746de639b23db99d7b99ff1c676ac98b84b6336c6Steve Block for(int i=0;i<mBuffersWithDucati.size();i++) ALOGE("0x%x", mBuffersWithDucati.keyAt(i)); 318c493114006e0e136c8c88c2fc9865994054959bfSundar Raman } 319c493114006e0e136c8c88c2fc9865994054959bfSundar Raman mBuffersWithDucati.add((int)frameBuf,1); 320c493114006e0e136c8c88c2fc9865994054959bfSundar Raman#endif 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = fillThisBuffer(frameBuf, frameType); 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, int value2, int value3) 328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct timeval *refTimestamp; 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BuffersDescriptor *desc = NULL; 332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraFrame *frame = NULL; 333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) { 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW: 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Use buffers for preview"); 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc = ( BuffersDescriptor * ) value1; 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == desc ) 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Invalid preview buffers!"); 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -EINVAL; 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mPreviewBufferLock); 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffers = (int *) desc->mBuffers; 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffersLength = desc->mLength; 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffersAvailable.clear(); 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ ) 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffersAvailable.add(mPreviewBuffers[i], 0); 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // initial ref count for undeqeueued buffers is 1 since buffer provider 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // is still holding on to it 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ ) 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffersAvailable.add(mPreviewBuffers[i], 1); 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != desc ) 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = useBuffers(CameraAdapter::CAMERA_PREVIEW, 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mBuffers, 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mCount, 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mLength, 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mMaxQueueable); 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW_DATA: 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Use buffers for preview data"); 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc = ( BuffersDescriptor * ) value1; 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == desc ) 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Invalid preview data buffers!"); 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -EINVAL; 398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mPreviewDataBufferLock); 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewDataBuffers = (int *) desc->mBuffers; 409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewDataBuffersLength = desc->mLength; 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewDataBuffersAvailable.clear(); 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ ) 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 41388006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman mPreviewDataBuffersAvailable.add(mPreviewDataBuffers[i], 0); 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // initial ref count for undeqeueued buffers is 1 since buffer provider 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // is still holding on to it 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ ) 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 41988006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman mPreviewDataBuffersAvailable.add(mPreviewDataBuffers[i], 1); 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != desc ) 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = useBuffers(CameraAdapter::CAMERA_MEASUREMENT, 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mBuffers, 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mCount, 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mLength, 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mMaxQueueable); 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_USE_BUFFERS_IMAGE_CAPTURE: 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Use buffers for image capture"); 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc = ( BuffersDescriptor * ) value1; 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == desc ) 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Invalid capture buffers!"); 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -EINVAL; 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mCaptureBufferLock); 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCaptureBuffers = (int *) desc->mBuffers; 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCaptureBuffersLength = desc->mLength; 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCaptureBuffersAvailable.clear(); 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ ) 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 46688006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman mCaptureBuffersAvailable.add(mCaptureBuffers[i], 0); 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // initial ref count for undeqeueued buffers is 1 since buffer provider 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // is still holding on to it 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ ) 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 47288006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman mCaptureBuffersAvailable.add(mCaptureBuffers[i], 1); 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != desc ) 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = useBuffers(CameraAdapter::CAMERA_IMAGE_CAPTURE, 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mBuffers, 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mCount, 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mLength, 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev desc->mMaxQueueable); 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_START_SMOOTH_ZOOM: 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = startSmoothZoom(value1); 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_STOP_SMOOTH_ZOOM: 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = stopSmoothZoom(); 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_START_PREVIEW: 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Start Preview"); 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = startPreview(); 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_STOP_PREVIEW: 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Stop Preview"); 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = stopPreview(); 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_START_VIDEO: 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Start video recording"); 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = startVideoCapture(); 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_STOP_VIDEO: 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("Stop video recording"); 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = stopVideoCapture(); 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_PREVIEW_FLUSH_BUFFERS: 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = flushBuffers(); 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_START_IMAGE_CAPTURE: 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev refTimestamp = ( struct timeval * ) value1; 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != refTimestamp ) 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval )); 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = takePicture(); 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_STOP_IMAGE_CAPTURE: 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = stopImageCapture(); 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_START_BRACKET_CAPTURE: 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev refTimestamp = ( struct timeval * ) value2; 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != refTimestamp ) 755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval )); 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = startBracketing(value1); 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_STOP_BRACKET_CAPTURE: 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = stopBracketing(); 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_PERFORM_AUTOFOCUS: 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev refTimestamp = ( struct timeval * ) value1; 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != refTimestamp ) 816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev memcpy( &mStartFocus, refTimestamp, sizeof( struct timeval )); 818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = autoFocus(); 830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_CANCEL_AUTOFOCUS: 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = cancelAutoFocus(); 853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_QUERY_RESOLUTION_PREVIEW: 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frame = ( CameraFrame * ) value1; 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != frame ) 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = getFrameSize(frame->mWidth, frame->mHeight); 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE: 899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frame = ( CameraFrame * ) value1; 908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != frame ) 910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = getPictureBufferSize(frame->mLength, value2); 912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA: 931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = setState(operation); 935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev frame = ( CameraFrame * ) value1; 940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL != frame ) 942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = getFrameDataSize(frame->mLength, value2); 944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -EINVAL; 948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( ret == NO_ERROR ) 952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = commitState(); 954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret |= rollbackState(); 958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_START_FD: 963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = startFaceDetection(); 965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraAdapter::CAMERA_STOP_FD: 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = stopFaceDetection(); 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 9747016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng case CameraAdapter::CAMERA_SWITCH_TO_EXECUTING: 9757016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng ret = switchToExecuting(); 9767016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng break; 9777016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng 978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Command 0x%x unsupported!", operation); 980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 987057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luustatus_t BaseCameraAdapter::notifyFocusSubscribers(CameraHalEvent::FocusStatus status) 988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev event_callback eventCb; 990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent focusEvent; 991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFocusSubscribers.size() == 0 ) { 996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("No Focus Subscribers!"); 997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 1001057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu if (status == CameraHalEvent::FOCUS_STATUS_PENDING) { 1002057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu gettimeofday(&mStartFocus, NULL); 1003057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu } else { 1004057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu //dump the AF latency 1005057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu CameraHal::PPM("Focus finished in: ", &mStartFocus); 1006057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu } 1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focusEvent.mEventData = new CameraHalEvent::CameraHalEventData(); 1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == focusEvent.mEventData.get() ) { 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -ENOMEM; 1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focusEvent.mEventType = CameraHalEvent::EVENT_FOCUS_LOCKED; 1015057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu focusEvent.mEventData->focusEvent.focusStatus = status; 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (unsigned int i = 0 ; i < mFocusSubscribers.size(); i++ ) 1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focusEvent.mCookie = (void *) mFocusSubscribers.keyAt(i); 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb = (event_callback) mFocusSubscribers.valueAt(i); 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb ( &focusEvent ); 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev focusEvent.mEventData.clear(); 1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyShutterSubscribers() 1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent shutterEvent; 1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev event_callback eventCb; 1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mShutterSubscribers.size() == 0 ) 1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("No shutter Subscribers!"); 1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev shutterEvent.mEventData = new CameraHalEvent::CameraHalEventData(); 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == shutterEvent.mEventData.get() ) { 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -ENOMEM; 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev shutterEvent.mEventType = CameraHalEvent::EVENT_SHUTTER; 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev shutterEvent.mEventData->shutterEvent.shutterClosed = true; 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (unsigned int i = 0 ; i < mShutterSubscribers.size() ; i++ ) { 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev shutterEvent.mCookie = ( void * ) mShutterSubscribers.keyAt(i); 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb = ( event_callback ) mShutterSubscribers.valueAt(i); 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 105741a31123a0fc59b8112460285d3f1ba73c5537c0Emilian Peev CAMHAL_LOGDA("Sending shutter callback"); 1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb ( &shutterEvent ); 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev shutterEvent.mEventData.clear(); 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyZoomSubscribers(int zoomIdx, bool targetReached) 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev event_callback eventCb; 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent zoomEvent; 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mZoomSubscribers.size() == 0 ) { 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("No zoom Subscribers!"); 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomEvent.mEventData = new CameraHalEvent::CameraHalEventData(); 1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == zoomEvent.mEventData.get() ) { 1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -ENOMEM; 1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomEvent.mEventType = CameraHalEvent::EVENT_ZOOM_INDEX_REACHED; 1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomEvent.mEventData->zoomEvent.currentZoomIndex = zoomIdx; 1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomEvent.mEventData->zoomEvent.targetZoomIndexReached = targetReached; 1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (unsigned int i = 0 ; i < mZoomSubscribers.size(); i++ ) { 1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomEvent.mCookie = (void *) mZoomSubscribers.keyAt(i); 1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb = (event_callback) mZoomSubscribers.valueAt(i); 1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb ( &zoomEvent ); 1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev zoomEvent.mEventData.clear(); 1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::notifyFaceSubscribers(sp<CameraFDResult> &faces) 1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev event_callback eventCb; 1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CameraHalEvent faceEvent; 1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mFaceSubscribers.size() == 0 ) { 1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDA("No face detection subscribers!"); 1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return NO_INIT; 1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev faceEvent.mEventData = new CameraHalEvent::CameraHalEventData(); 1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == faceEvent.mEventData.get() ) { 1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return -ENOMEM; 1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev faceEvent.mEventType = CameraHalEvent::EVENT_FACE; 1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev faceEvent.mEventData->faceEvent = faces; 1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (unsigned int i = 0 ; i < mFaceSubscribers.size(); i++ ) { 1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev faceEvent.mCookie = (void *) mFaceSubscribers.keyAt(i); 1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb = (event_callback) mFaceSubscribers.valueAt(i); 1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eventCb ( &faceEvent ); 1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev faceEvent.mEventData.clear(); 1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame) 1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 11435e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng unsigned int mask; 1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NULL == frame ) 1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Invalid CameraFrame"); 11485e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng return -EINVAL; 1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 11515e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng for( mask = 1; mask < CameraFrame::ALL_FRAMES; mask <<= 1){ 11525e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng if( mask & frame->mFrameMask ){ 11535e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng switch( mask ){ 1154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 11555e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::IMAGE_FRAME: 11565e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS 11585e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng CameraHal::PPM("Shot to Jpeg: ", &mStartCapture); 11595e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng#endif 1160348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu ret = __sendFrameToSubscribers(frame, &mImageSubscribers, CameraFrame::IMAGE_FRAME); 11615e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 11625e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 11635e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::RAW_FRAME: 11645e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 1165348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu ret = __sendFrameToSubscribers(frame, &mRawSubscribers, CameraFrame::RAW_FRAME); 11665e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 11675e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 11685e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::PREVIEW_FRAME_SYNC: 11695e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 1170348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::PREVIEW_FRAME_SYNC); 11715e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 11725e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 11735e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::SNAPSHOT_FRAME: 11745e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 1175348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::SNAPSHOT_FRAME); 11765e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 11775e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 11785e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::VIDEO_FRAME_SYNC: 11795e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 1180348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu ret = __sendFrameToSubscribers(frame, &mVideoSubscribers, CameraFrame::VIDEO_FRAME_SYNC); 11815e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 11825e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 11835e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::FRAME_DATA_SYNC: 11845e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 1185348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu ret = __sendFrameToSubscribers(frame, &mFrameDataSubscribers, CameraFrame::FRAME_DATA_SYNC); 11865e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 11875e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 11885e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng default: 11895e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", mask); 11905e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 11915e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng }//SWITCH 11925e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng frame->mFrameMask &= ~mask; 1193348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1194348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu if (ret != NO_ERROR) { 1195348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu goto EXIT; 1196348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu } 11975e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng }//IF 11985e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng }//FOR 1199348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1200348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu EXIT: 1201348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu return ret; 1202348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu} 1203348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1204348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luustatus_t BaseCameraAdapter::__sendFrameToSubscribers(CameraFrame* frame, 1205348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu KeyedVector<int, frame_callback> *subscribers, 1206348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu CameraFrame::FrameType frameType) 1207348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu{ 1208348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu size_t refCount = 0; 1209348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu status_t ret = NO_ERROR; 1210348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu frame_callback callback = NULL; 1211348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1212348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu frame->mFrameType = frameType; 1213348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 12148a01f97380aad5b6a30a2d248aa07af4d92373d0Tyler Luu if ( (frameType == CameraFrame::PREVIEW_FRAME_SYNC) || 12158a01f97380aad5b6a30a2d248aa07af4d92373d0Tyler Luu (frameType == CameraFrame::VIDEO_FRAME_SYNC) || 12168a01f97380aad5b6a30a2d248aa07af4d92373d0Tyler Luu (frameType == CameraFrame::SNAPSHOT_FRAME) ){ 12178e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng if (mFrameQueue.size() > 0){ 12188e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng CameraFrame *lframe = (CameraFrame *)mFrameQueue.valueFor(frame->mBuffer); 12198e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng frame->mYuv[0] = lframe->mYuv[0]; 12208e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng frame->mYuv[1] = lframe->mYuv[1]; 12218e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng } 12228e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng else{ 1223e46394481e771dbdc8683645c3740a3d262a3d0fIliyan Malchev CAMHAL_LOGDA("Empty Frame Queue"); 12248e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng return -EINVAL; 12258e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng } 12268e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng } 12278e88af31129b8cc09675279ca2eac88256d8526bAkwasi Boateng 1228348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu if (NULL != subscribers) { 1229348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu refCount = getFrameRefCount(frame->mBuffer, frameType); 1230348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1231348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu if (refCount == 0) { 12327b4990d47f1765a2264cdf925730e486791c2d1cTyler Luu CAMHAL_LOGDA("Invalid ref count of 0"); 1233348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu return -EINVAL; 1234348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu } 1235348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1236348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu if (refCount > subscribers->size()) { 1237348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu CAMHAL_LOGEB("Invalid ref count for frame type: 0x%x", frameType); 1238348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu return -EINVAL; 1239348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu } 1240348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1241348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu CAMHAL_LOGVB("Type of Frame: 0x%x address: 0x%x refCount start %d", 1242348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu frame->mFrameType, 1243348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu ( uint32_t ) frame->mBuffer, 1244348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu refCount); 1245348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1246348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu for ( unsigned int i = 0 ; i < refCount; i++ ) { 1247348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu frame->mCookie = ( void * ) subscribers->keyAt(i); 1248348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu callback = (frame_callback) subscribers->valueAt(i); 1249348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1250348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu if (!callback) { 1251348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu CAMHAL_LOGEB("callback not set for frame type: 0x%x", frameType); 1252348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu return -EINVAL; 1253348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu } 1254348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 1255348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu callback(frame); 1256348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu } 1257348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu } else { 12587b4990d47f1765a2264cdf925730e486791c2d1cTyler Luu CAMHAL_LOGEA("Subscribers is null??"); 1259348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu return -EINVAL; 1260348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu } 1261348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 12625e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng return ret; 12635e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng} 1264348e4eaaf2f88810f2a3c55fd1b0df540a5104edTyler Luu 12655e02dd977e79ee977ee063496033bbc363a70780Akwasi Boatengint BaseCameraAdapter::setInitFrameRefCount(void* buf, unsigned int mask) 12665e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng{ 12675e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng int ret = NO_ERROR; 12685e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng unsigned int lmask; 1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 12705e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng LOG_FUNCTION_NAME; 1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 12725e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng if (buf == NULL) 12735e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 12745e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng return -EINVAL; 12755e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 12775e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng for( lmask = 1; lmask < CameraFrame::ALL_FRAMES; lmask <<= 1){ 12785e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng if( lmask & mask ){ 12795e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng switch( lmask ){ 1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 12815e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::IMAGE_FRAME: 12825e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 1283524cc0cda6ed8cb07e0469fc931657ac60335aa1Sundar Raman setFrameRefCount(buf, CameraFrame::IMAGE_FRAME, (int) mImageSubscribers.size()); 1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 12855e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 12865e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::RAW_FRAME: 1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 12885e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng setFrameRefCount(buf, CameraFrame::RAW_FRAME, mRawSubscribers.size()); 1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 12905e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 12915e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::PREVIEW_FRAME_SYNC: 1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 12935e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng setFrameRefCount(buf, CameraFrame::PREVIEW_FRAME_SYNC, mFrameSubscribers.size()); 1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 12955e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 12965e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::SNAPSHOT_FRAME: 12975e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 12985e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mFrameSubscribers.size()); 12995e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 13005e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 13015e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::VIDEO_FRAME_SYNC: 13025e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 13035e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng setFrameRefCount(buf,CameraFrame::VIDEO_FRAME_SYNC, mVideoSubscribers.size()); 13045e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 13055e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 13065e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng case CameraFrame::FRAME_DATA_SYNC: 13075e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng { 13085e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng setFrameRefCount(buf, CameraFrame::FRAME_DATA_SYNC, mFrameDataSubscribers.size()); 13095e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng } 13105e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 13115e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng default: 13125e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", lmask); 13135e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng break; 13145e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng }//SWITCH 13155e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng mask &= ~lmask; 13165e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng }//IF 13175e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng }//FOR 13185e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng LOG_FUNCTION_NAME_EXIT; 13195e02dd977e79ee977ee063496033bbc363a70780Akwasi Boateng return ret; 1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint BaseCameraAdapter::getFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType) 1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev int res = -1; 1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( frameType ) 1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::IMAGE_FRAME: 1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::RAW_FRAME: 1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mCaptureBufferLock); 1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = mCaptureBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); 1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::PREVIEW_FRAME_SYNC: 1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::SNAPSHOT_FRAME: 1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mPreviewBufferLock); 1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = mPreviewBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); 1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::FRAME_DATA_SYNC: 1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mPreviewDataBufferLock); 1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = mPreviewDataBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); 1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::VIDEO_FRAME_SYNC: 1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mVideoBufferLock); 1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev res = mVideoBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); 1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return res; 1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::setFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType, int refCount) 1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( frameType ) 1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::IMAGE_FRAME: 1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::RAW_FRAME: 1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mCaptureBufferLock); 1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mCaptureBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); 1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::PREVIEW_FRAME_SYNC: 1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::SNAPSHOT_FRAME: 1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mPreviewBufferLock); 1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); 1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::FRAME_DATA_SYNC: 1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mPreviewDataBufferLock); 1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mPreviewDataBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); 1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CameraFrame::VIDEO_FRAME_SYNC: 1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mVideoBufferLock); 1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); 1396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev }; 1401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startVideoCapture() 1407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mVideoBufferLock); 1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //If the capture is already ongoing, return from here. 1415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( mRecording ) 1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = NO_INIT; 1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1424b6a9d10508e321ebc53193a117bf6c65d98ae888Emilian Peev mVideoBuffersAvailable.clear(); 1425b6a9d10508e321ebc53193a117bf6c65d98ae888Emilian Peev 1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( unsigned int i = 0 ; i < mPreviewBuffersAvailable.size() ; i++ ) 1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mVideoBuffersAvailable.add(mPreviewBuffersAvailable.keyAt(i), 0); 1429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRecording = true; 1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopVideoCapture() 1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( !mRecording ) 1446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = NO_INIT; 1448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ( NO_ERROR == ret ) 1451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for ( unsigned int i = 0 ; i < mVideoBuffersAvailable.size() ; i++ ) 1453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev void *frameBuf = ( void * ) mVideoBuffersAvailable.keyAt(i); 1455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC) > 0) 1456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev returnFrame(frameBuf, CameraFrame::VIDEO_FRAME_SYNC); 1458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mRecording = false; 1462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//-----------------Stub implementation of the interface ------------------------------ 1470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::takePicture() 1472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopImageCapture() 1483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startBracketing(int range) 1494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopBracketing() 1505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::autoFocus() 1516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1521057f4fd59ec05ded909e9eb9a3363d9ea345b0caTyler Luu notifyFocusSubscribers(CameraHalEvent::FOCUS_STATUS_FAIL); 1522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::cancelAutoFocus() 1529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startSmoothZoom(int targetIdx) 1540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopSmoothZoom() 1551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startPreview() 1562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopPreview() 1573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable) 1584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType) 1595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getFrameSize(size_t &width, size_t &height) 1606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getFrameDataSize(size_t &dataFrameSize, size_t bufferCount) 1617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getPictureBufferSize(size_t &length, size_t bufferCount) 1628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::startFaceDetection() 1639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::stopFaceDetection() 1650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 1656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 1658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 16607016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boatengstatus_t BaseCameraAdapter::switchToExecuting() 16617016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng{ 16627016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng status_t ret = NO_ERROR; 16637016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng LOG_FUNCTION_NAME; 16647016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng LOG_FUNCTION_NAME_EXIT; 16657016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng return ret; 16667016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng} 16677016577b173fc73f5b43e76cbc122bb0a9346613Akwasi Boateng 1668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::setState(CameraCommands operation) 1669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 1671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 1673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mLock.lock(); 1675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( mAdapterState ) 1677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case INTIALIZED_STATE: 1680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_USE_BUFFERS_PREVIEW: 1685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->LOADED_PREVIEW_STATE event = 0x%x", 1686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = LOADED_PREVIEW_STATE; 1688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //These events don't change the current state 1691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_QUERY_RESOLUTION_PREVIEW: 1692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE: 1693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA: 1694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->INTIALIZED_STATE event = 0x%x", 1695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = INTIALIZED_STATE; 1697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 169941a31123a0fc59b8112460285d3f1ba73c5537c0Emilian Peev case CAMERA_CANCEL_AUTOFOCUS: 170041a31123a0fc59b8112460285d3f1ba73c5537c0Emilian Peev case CAMERA_STOP_BRACKET_CAPTURE: 170141a31123a0fc59b8112460285d3f1ba73c5537c0Emilian Peev case CAMERA_STOP_IMAGE_CAPTURE: 170241a31123a0fc59b8112460285d3f1ba73c5537c0Emilian Peev ret = INVALID_OPERATION; 170341a31123a0fc59b8112460285d3f1ba73c5537c0Emilian Peev break; 170441a31123a0fc59b8112460285d3f1ba73c5537c0Emilian Peev 1705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch INTIALIZED_STATE Invalid Op! event = 0x%x", 1707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case LOADED_PREVIEW_STATE: 1716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_START_PREVIEW: 1721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->PREVIEW_STATE event = 0x%x", 1722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = PREVIEW_STATE; 1724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1726fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9Tyler Luu case CAMERA_STOP_PREVIEW: 1727fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9Tyler Luu CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->INTIALIZED_STATE event = 0x%x", 1728fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9Tyler Luu operation); 1729fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9Tyler Luu mNextState = INTIALIZED_STATE; 1730fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9Tyler Luu break; 1731fe3dccf76b03fe7e226ecc7c128dbc9e53d835a9Tyler Luu 1732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //These events don't change the current state 1733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE: 1734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA: 1735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_USE_BUFFERS_PREVIEW_DATA: 1736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->LOADED_PREVIEW_STATE event = 0x%x", 1737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = LOADED_PREVIEW_STATE; 1739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW Invalid Op! event = 0x%x", 1743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case PREVIEW_STATE: 1752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_PREVIEW: 1757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->INTIALIZED_STATE event = 0x%x", 1758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = INTIALIZED_STATE; 1760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_PERFORM_AUTOFOCUS: 1763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->AF_STATE event = 0x%x", 1764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = AF_STATE; 1766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_START_SMOOTH_ZOOM: 1769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->ZOOM_STATE event = 0x%x", 1770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = ZOOM_STATE; 1772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_USE_BUFFERS_IMAGE_CAPTURE: 1775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->LOADED_CAPTURE_STATE event = 0x%x", 1776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = LOADED_CAPTURE_STATE; 1778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_START_VIDEO: 1781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->VIDEO_STATE event = 0x%x", 1782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = VIDEO_STATE; 1784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 178685c859b69b3c003b8db810371e24fe41599fc7deSundar Raman case CAMERA_CANCEL_AUTOFOCUS: 1787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE: 1788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_SMOOTH_ZOOM: 1789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch PREVIEW_ACTIVE->PREVIEW_ACTIVE event = 0x%x", 1790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = PREVIEW_STATE; 1792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch PREVIEW_ACTIVE Invalid Op! event = 0x%x", 1796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case LOADED_CAPTURE_STATE: 1805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_START_IMAGE_CAPTURE: 1810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = 0x%x", 1811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = CAPTURE_STATE; 1813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_START_BRACKET_CAPTURE: 1816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->BRACKETING_STATE event = 0x%x", 1817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = BRACKETING_STATE; 1819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = 0x%x", 1823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAPTURE_STATE: 1832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_IMAGE_CAPTURE: 183688006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman case CAMERA_STOP_BRACKET_CAPTURE: 1837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x", 1838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = PREVIEW_STATE; 1840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch CAPTURE_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_STATE: 1853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 185788006b1ebee79cb0f1a2c682258b313eb801049dSundar Raman case CAMERA_STOP_IMAGE_CAPTURE: 1858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_BRACKET_CAPTURE: 1859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->PREVIEW_STATE event = 0x%x", 1860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = PREVIEW_STATE; 1862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_START_IMAGE_CAPTURE: 1865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->CAPTURE_STATE event = 0x%x", 1866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = CAPTURE_STATE; 1868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch BRACKETING_STATE Invalid Op! event = 0x%x", 1872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case AF_STATE: 1881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_CANCEL_AUTOFOCUS: 1886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = 0x%x", 1887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = PREVIEW_STATE; 1889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 18912bfd180d5257d72f7c22c80741e6b03470f3aa60Alex Ray case CAMERA_START_IMAGE_CAPTURE: 18922bfd180d5257d72f7c22c80741e6b03470f3aa60Alex Ray CAMHAL_LOGDB("Adapter state switch AF_STATE->CAPTURE_STATE event = 0x%x", 18932bfd180d5257d72f7c22c80741e6b03470f3aa60Alex Ray operation); 18942bfd180d5257d72f7c22c80741e6b03470f3aa60Alex Ray mNextState = CAPTURE_STATE; 18952bfd180d5257d72f7c22c80741e6b03470f3aa60Alex Ray break; 18962bfd180d5257d72f7c22c80741e6b03470f3aa60Alex Ray 1897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_START_SMOOTH_ZOOM: 1898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch AF_STATE->AF_ZOOM_STATE event = 0x%x", 1899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = AF_ZOOM_STATE; 1901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch AF_STATE Invalid Op! event = 0x%x", 1905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case ZOOM_STATE: 1914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 19182010763a13490313d773d8bbabec46414649b3abSundar Raman case CAMERA_CANCEL_AUTOFOCUS: 19192010763a13490313d773d8bbabec46414649b3abSundar Raman CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = 0x%x", 19202010763a13490313d773d8bbabec46414649b3abSundar Raman operation); 19212010763a13490313d773d8bbabec46414649b3abSundar Raman mNextState = ZOOM_STATE; 19222010763a13490313d773d8bbabec46414649b3abSundar Raman break; 19232010763a13490313d773d8bbabec46414649b3abSundar Raman 1924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_SMOOTH_ZOOM: 1925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->PREVIEW_STATE event = 0x%x", 1926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = PREVIEW_STATE; 1928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_PERFORM_AUTOFOCUS: 1931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->AF_ZOOM_STATE event = 0x%x", 1932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = AF_ZOOM_STATE; 1934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 19363f7a29d44c52729f037056a634423fda6db834e3Tyler Luu case CAMERA_START_VIDEO: 19373f7a29d44c52729f037056a634423fda6db834e3Tyler Luu CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->VIDEO_ZOOM_STATE event = 0x%x", 19383f7a29d44c52729f037056a634423fda6db834e3Tyler Luu operation); 19393f7a29d44c52729f037056a634423fda6db834e3Tyler Luu mNextState = VIDEO_ZOOM_STATE; 19403f7a29d44c52729f037056a634423fda6db834e3Tyler Luu break; 19413f7a29d44c52729f037056a634423fda6db834e3Tyler Luu 1942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch ZOOM_STATE Invalid Op! event = 0x%x", 1944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case VIDEO_STATE: 1953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 1955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_VIDEO: 1958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->PREVIEW_STATE event = 0x%x", 1959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = PREVIEW_STATE; 1961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1963c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu case CAMERA_PERFORM_AUTOFOCUS: 1964c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_AF_STATE event = 0x%x", 1965c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu operation); 1966c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu mNextState = VIDEO_AF_STATE; 1967c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu break; 1968c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu 19693f7a29d44c52729f037056a634423fda6db834e3Tyler Luu case CAMERA_START_SMOOTH_ZOOM: 19703f7a29d44c52729f037056a634423fda6db834e3Tyler Luu CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_ZOOM_STATE event = 0x%x", 19713f7a29d44c52729f037056a634423fda6db834e3Tyler Luu operation); 19723f7a29d44c52729f037056a634423fda6db834e3Tyler Luu mNextState = VIDEO_ZOOM_STATE; 19733f7a29d44c52729f037056a634423fda6db834e3Tyler Luu break; 19743f7a29d44c52729f037056a634423fda6db834e3Tyler Luu 1975ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu case CAMERA_USE_BUFFERS_IMAGE_CAPTURE: 1976ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_LOADED_CAPTURE_STATE event = 0x%x", 1977ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu operation); 1978ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu mNextState = VIDEO_LOADED_CAPTURE_STATE; 1979ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 1980ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 1981ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE: 1982ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_STATE event = 0x%x", 1983ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu operation); 1984ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu mNextState = VIDEO_STATE; 1985ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 1986ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 1987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 1988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch VIDEO_STATE Invalid Op! event = 0x%x", 1989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 1990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 1991c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 1996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1997c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu case VIDEO_AF_STATE: 1998c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu 1999c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu switch ( operation ) 2000c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu { 2001c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu 2002c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu case CAMERA_CANCEL_AUTOFOCUS: 2003c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu CAMHAL_LOGDB("Adapter state switch VIDEO_AF_STATE->VIDEO_STATE event = 0x%x", 2004c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu operation); 2005c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu mNextState = VIDEO_STATE; 2006c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu break; 2007c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu 2008c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu default: 2009c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu CAMHAL_LOGEB("Adapter state switch VIDEO_AF_STATE Invalid Op! event = 0x%x", 2010c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu operation); 2011c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu ret = INVALID_OPERATION; 2012c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu break; 2013c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu 2014c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu } 2015c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu 2016c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu break; 2017c11c07d676f130e6e28ab1611f4862a01a160389Tyler Luu 2018ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu case VIDEO_LOADED_CAPTURE_STATE: 2019ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2020ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu switch ( operation ) 2021ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu { 2022ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2023ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu case CAMERA_START_IMAGE_CAPTURE: 2024ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = 0x%x", 2025ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu operation); 2026ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu mNextState = VIDEO_CAPTURE_STATE; 2027ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 2028ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2029ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu default: 2030ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = 0x%x", 2031ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu operation); 2032ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu ret = INVALID_OPERATION; 2033ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 2034ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2035ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu } 2036ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2037ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 2038ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2039ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu case VIDEO_CAPTURE_STATE: 2040ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2041ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu switch ( operation ) 2042ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu { 2043ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu case CAMERA_STOP_IMAGE_CAPTURE: 2044ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x", 2045ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu operation); 2046ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu mNextState = VIDEO_STATE; 2047ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 2048ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2049ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu default: 2050ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = 0x%x", 2051ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu operation); 2052ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu ret = INVALID_OPERATION; 2053ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 2054ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2055ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu } 2056ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2057ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu break; 2058ee6bb64f60c228d711dc1d6875d8f4b0ed88b6cfTyler Luu 2059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case AF_ZOOM_STATE: 2060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 2062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_SMOOTH_ZOOM: 2065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->AF_STATE event = 0x%x", 2066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 2067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = AF_STATE; 2068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_CANCEL_AUTOFOCUS: 2071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->ZOOM_STATE event = 0x%x", 2072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 2073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = ZOOM_STATE; 2074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 2077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch AF_ZOOM_STATE Invalid Op! event = 0x%x", 2078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 2079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 2080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case VIDEO_ZOOM_STATE: 2087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 2089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_SMOOTH_ZOOM: 2092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->VIDEO_STATE event = 0x%x", 2093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 2094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = VIDEO_STATE; 2095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 20963f7a29d44c52729f037056a634423fda6db834e3Tyler Luu 20973f7a29d44c52729f037056a634423fda6db834e3Tyler Luu case CAMERA_STOP_VIDEO: 20983f7a29d44c52729f037056a634423fda6db834e3Tyler Luu CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->ZOOM_STATE event = 0x%x", 20993f7a29d44c52729f037056a634423fda6db834e3Tyler Luu operation); 21003f7a29d44c52729f037056a634423fda6db834e3Tyler Luu mNextState = ZOOM_STATE; 21013f7a29d44c52729f037056a634423fda6db834e3Tyler Luu break; 2102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 2104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch VIDEO_ZOOM_STATE Invalid Op! event = 0x%x", 2105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 2106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 2107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case BRACKETING_ZOOM_STATE: 2114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch ( operation ) 2116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 2117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case CAMERA_STOP_SMOOTH_ZOOM: 2119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGDB("Adapter state switch BRACKETING_ZOOM_STATE->BRACKETING_STATE event = 0x%x", 2120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 2121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = BRACKETING_STATE; 2122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 2125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEB("Adapter state switch BRACKETING_ZOOM_STATE Invalid Op! event = 0x%x", 2126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev operation); 2127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 2128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 2133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 2135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev CAMHAL_LOGEA("Invalid Adapter state!"); 2136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = INVALID_OPERATION; 2137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 2138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 2142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2144a58c483de2c8188e41fd9635042c31820d13b845Tyler Luustatus_t BaseCameraAdapter::rollbackToInitializedState() 2145a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu{ 2146a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu status_t ret = NO_ERROR; 2147a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2148a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu LOG_FUNCTION_NAME; 2149a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2150a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu while ((getState() != INTIALIZED_STATE) && (ret == NO_ERROR)) { 2151a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = rollbackToPreviousState(); 2152a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu } 2153a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2154a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu LOG_FUNCTION_NAME_EXIT; 2155a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2156a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu return ret; 2157a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu} 2158a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2159a58c483de2c8188e41fd9635042c31820d13b845Tyler Luustatus_t BaseCameraAdapter::rollbackToPreviousState() 2160a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu{ 2161a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu status_t ret = NO_ERROR; 2162a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2163a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu LOG_FUNCTION_NAME; 2164a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2165a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu CameraAdapter::AdapterState currentState = getState(); 2166a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2167a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu switch (currentState) { 2168a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case INTIALIZED_STATE: 2169a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu return NO_ERROR; 2170a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2171a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case PREVIEW_STATE: 2172a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_PREVIEW); 2173a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2174a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2175a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case CAPTURE_STATE: 2176a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE); 2177a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2178a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2179a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case BRACKETING_STATE: 2180a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_BRACKET_CAPTURE); 2181a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2182a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2183a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case AF_STATE: 2184a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS); 2185a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2186a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2187a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case ZOOM_STATE: 2188a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM); 2189a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2190a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2191a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case VIDEO_STATE: 2192a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_VIDEO); 2193a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2194a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2195a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case VIDEO_AF_STATE: 2196a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS); 2197a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2198a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2199a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case VIDEO_CAPTURE_STATE: 2200a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE); 2201a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2202a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2203a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case AF_ZOOM_STATE: 2204a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM); 2205a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2206a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2207a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case VIDEO_ZOOM_STATE: 2208a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM); 2209a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2210a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2211a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu case BRACKETING_ZOOM_STATE: 2212a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM); 2213a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu break; 2214a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2215a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu default: 2216a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu CAMHAL_LOGEA("Invalid Adapter state!"); 2217a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu ret = INVALID_OPERATION; 2218a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu } 2219a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2220a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu LOG_FUNCTION_NAME_EXIT; 2221a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2222a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu return ret; 2223a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu} 2224a58c483de2c8188e41fd9635042c31820d13b845Tyler Luu 2225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//State transition finished successfully. 2226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Commit the state and unlock the adapter state. 2227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::commitState() 2228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 2229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 2230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 2232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mAdapterState = mNextState; 2234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mLock.unlock(); 2236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 2240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::rollbackState() 2243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 2244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 2245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 2247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mNextState = mAdapterState; 2249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mLock.unlock(); 2251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 2255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// getNextState() and getState() 2258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// publicly exposed functions to retrieve the adapter states 2259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// please notice that these functions are locked 2260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCameraAdapter::AdapterState BaseCameraAdapter::getState() 2261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 2262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 2263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 2265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mLock); 2267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return mAdapterState; 2271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevCameraAdapter::AdapterState BaseCameraAdapter::getNextState() 2274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 2275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 2276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 2278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Mutex::Autolock lock(mLock); 2280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return mNextState; 2284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// getNextState() and getState() 2287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// internal protected functions to retrieve the adapter states 2288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// please notice that these functions are NOT locked to help 2289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// internal functions query state in the middle of state 2290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev// transition 2291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getState(AdapterState &state) 2292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 2293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 2294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 2296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev state = mAdapterState; 2298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 2302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatus_t BaseCameraAdapter::getNextState(AdapterState &state) 2305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 2306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status_t ret = NO_ERROR; 2307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 2309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev state = mNextState; 2311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 2315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid BaseCameraAdapter::onOrientationEvent(uint32_t orientation, uint32_t tilt) 2318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 2319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME; 2320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOG_FUNCTION_NAME_EXIT; 2321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 2322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//----------------------------------------------------------------------------- 2323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev}; 2327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*--------------------Camera Adapter Class ENDS here-----------------------------*/ 2329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2330