summaryrefslogtreecommitdiffstats
path: root/camera/BaseCameraAdapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'camera/BaseCameraAdapter.cpp')
-rw-r--r--camera/BaseCameraAdapter.cpp2693
1 files changed, 0 insertions, 2693 deletions
diff --git a/camera/BaseCameraAdapter.cpp b/camera/BaseCameraAdapter.cpp
deleted file mode 100644
index b3a47d1..0000000
--- a/camera/BaseCameraAdapter.cpp
+++ /dev/null
@@ -1,2693 +0,0 @@
-/*
- * Copyright (C) Texas Instruments - http://www.ti.com/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "BaseCameraAdapter.h"
-
-const int EVENT_MASK = 0xffff;
-
-namespace Ti {
-namespace Camera {
-
-const LUT cameraCommandsUserToHAL[] = {
- { "CAMERA_START_PREVIEW", CameraAdapter::CAMERA_START_PREVIEW },
- { "CAMERA_STOP_PREVIEW", CameraAdapter::CAMERA_STOP_PREVIEW },
- { "CAMERA_START_VIDEO", CameraAdapter::CAMERA_START_VIDEO },
- { "CAMERA_STOP_VIDEO", CameraAdapter::CAMERA_STOP_VIDEO },
- { "CAMERA_START_IMAGE_CAPTURE", CameraAdapter::CAMERA_START_IMAGE_CAPTURE },
- { "CAMERA_STOP_IMAGE_CAPTURE", CameraAdapter::CAMERA_STOP_IMAGE_CAPTURE },
- { "CAMERA_PERFORM_AUTOFOCUS", CameraAdapter::CAMERA_PERFORM_AUTOFOCUS },
- { "CAMERA_CANCEL_AUTOFOCUS", CameraAdapter::CAMERA_CANCEL_AUTOFOCUS },
- { "CAMERA_PREVIEW_FLUSH_BUFFERS", CameraAdapter::CAMERA_PREVIEW_FLUSH_BUFFERS },
- { "CAMERA_START_SMOOTH_ZOOM", CameraAdapter::CAMERA_START_SMOOTH_ZOOM },
- { "CAMERA_STOP_SMOOTH_ZOOM", CameraAdapter::CAMERA_STOP_SMOOTH_ZOOM },
- { "CAMERA_USE_BUFFERS_PREVIEW", CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW },
- { "CAMERA_SET_TIMEOUT", CameraAdapter::CAMERA_SET_TIMEOUT },
- { "CAMERA_CANCEL_TIMEOUT", CameraAdapter::CAMERA_CANCEL_TIMEOUT },
- { "CAMERA_START_BRACKET_CAPTURE", CameraAdapter::CAMERA_START_BRACKET_CAPTURE },
- { "CAMERA_STOP_BRACKET_CAPTURE", CameraAdapter::CAMERA_STOP_BRACKET_CAPTURE },
- { "CAMERA_QUERY_RESOLUTION_PREVIEW", CameraAdapter::CAMERA_QUERY_RESOLUTION_PREVIEW },
- { "CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE", CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE },
- { "CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA", CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA },
- { "CAMERA_USE_BUFFERS_IMAGE_CAPTURE", CameraAdapter::CAMERA_USE_BUFFERS_IMAGE_CAPTURE },
- { "CAMERA_USE_BUFFERS_PREVIEW_DATA", CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW_DATA },
- { "CAMERA_TIMEOUT_EXPIRED", CameraAdapter::CAMERA_TIMEOUT_EXPIRED },
- { "CAMERA_START_FD", CameraAdapter::CAMERA_START_FD },
- { "CAMERA_STOP_FD", CameraAdapter::CAMERA_STOP_FD },
- { "CAMERA_SWITCH_TO_EXECUTING", CameraAdapter::CAMERA_SWITCH_TO_EXECUTING },
- { "CAMERA_USE_BUFFERS_VIDEO_CAPTURE", CameraAdapter::CAMERA_USE_BUFFERS_VIDEO_CAPTURE },
-#ifdef OMAP_ENHANCEMENT_CPCAM
- { "CAMERA_USE_BUFFERS_REPROCESS", CameraAdapter::CAMERA_USE_BUFFERS_REPROCESS },
- { "CAMERA_START_REPROCESS", CameraAdapter::CAMERA_START_REPROCESS },
-#endif
-};
-
-const LUTtypeHAL CamCommandsLUT = {
- sizeof(cameraCommandsUserToHAL)/sizeof(cameraCommandsUserToHAL[0]),
- cameraCommandsUserToHAL
-};
-
-/*--------------------Camera Adapter Class STARTS here-----------------------------*/
-
-BaseCameraAdapter::BaseCameraAdapter()
-{
- mReleaseImageBuffersCallback = NULL;
- mEndImageCaptureCallback = NULL;
- mErrorNotifier = NULL;
- mEndCaptureData = NULL;
- mReleaseData = NULL;
- mRecording = false;
-
- mPreviewBuffers = NULL;
- mPreviewBufferCount = 0;
- mPreviewBuffersLength = 0;
-
- mVideoBuffers = NULL;
- mVideoBuffersCount = 0;
- mVideoBuffersLength = 0;
-
- mCaptureBuffers = NULL;
- mCaptureBuffersCount = 0;
- mCaptureBuffersLength = 0;
-
- mPreviewDataBuffers = NULL;
- mPreviewDataBuffersCount = 0;
- mPreviewDataBuffersLength = 0;
-
- mAdapterState = INTIALIZED_STATE;
-
- mSharedAllocator = NULL;
-
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
- mStartFocus.tv_sec = 0;
- mStartFocus.tv_usec = 0;
- mStartCapture.tv_sec = 0;
- mStartCapture.tv_usec = 0;
-#endif
-
-}
-
-BaseCameraAdapter::~BaseCameraAdapter()
-{
- LOG_FUNCTION_NAME;
-
- android::AutoMutex lock(mSubscriberLock);
-
- mFrameSubscribers.clear();
- mImageSubscribers.clear();
- mRawSubscribers.clear();
- mVideoSubscribers.clear();
- mVideoInSubscribers.clear();
- mFocusSubscribers.clear();
- mShutterSubscribers.clear();
- mZoomSubscribers.clear();
- mSnapshotSubscribers.clear();
- mMetadataSubscribers.clear();
-
- LOG_FUNCTION_NAME_EXIT;
-}
-
-status_t BaseCameraAdapter::registerImageReleaseCallback(release_image_buffers_callback callback, void *user_data)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- mReleaseImageBuffersCallback = callback;
- mReleaseData = user_data;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::registerEndCaptureCallback(end_image_capture_callback callback, void *user_data)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- mEndImageCaptureCallback= callback;
- mEndCaptureData = user_data;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::setErrorHandler(ErrorNotifier *errorNotifier)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- if ( NULL == errorNotifier )
- {
- CAMHAL_LOGEA("Invalid Error Notifier reference");
- ret = -EINVAL;
- }
-
- if ( NO_ERROR == ret )
- {
- mErrorNotifier = errorNotifier;
- }
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-void BaseCameraAdapter::enableMsgType(int32_t msgs, frame_callback callback, event_callback eventCb, void* cookie)
-{
- android::AutoMutex lock(mSubscriberLock);
-
- LOG_FUNCTION_NAME;
-
- int32_t frameMsg = ((msgs >> MessageNotifier::FRAME_BIT_FIELD_POSITION) & EVENT_MASK);
- int32_t eventMsg = ((msgs >> MessageNotifier::EVENT_BIT_FIELD_POSITION) & EVENT_MASK);
-
- if ( frameMsg != 0 )
- {
- CAMHAL_LOGVB("Frame message type id=0x%x subscription request", frameMsg);
- switch ( frameMsg )
- {
- case CameraFrame::PREVIEW_FRAME_SYNC:
- mFrameSubscribers.add((int) cookie, callback);
- break;
- case CameraFrame::FRAME_DATA_SYNC:
- mFrameDataSubscribers.add((int) cookie, callback);
- break;
- case CameraFrame::SNAPSHOT_FRAME:
- mSnapshotSubscribers.add((int) cookie, callback);
- break;
- case CameraFrame::IMAGE_FRAME:
- mImageSubscribers.add((int) cookie, callback);
- break;
- case CameraFrame::RAW_FRAME:
- mRawSubscribers.add((int) cookie, callback);
- break;
- case CameraFrame::VIDEO_FRAME_SYNC:
- mVideoSubscribers.add((int) cookie, callback);
- break;
- case CameraFrame::REPROCESS_INPUT_FRAME:
- mVideoInSubscribers.add((int) cookie, callback);
- break;
- default:
- CAMHAL_LOGEA("Frame message type id=0x%x subscription no supported yet!", frameMsg);
- break;
- }
- }
-
- if ( eventMsg != 0)
- {
- CAMHAL_LOGVB("Event message type id=0x%x subscription request", eventMsg);
- if ( CameraHalEvent::ALL_EVENTS == eventMsg )
- {
- mFocusSubscribers.add((int) cookie, eventCb);
- mShutterSubscribers.add((int) cookie, eventCb);
- mZoomSubscribers.add((int) cookie, eventCb);
- mMetadataSubscribers.add((int) cookie, eventCb);
- }
- else
- {
- CAMHAL_LOGEA("Event message type id=0x%x subscription no supported yet!", eventMsg);
- }
- }
-
- LOG_FUNCTION_NAME_EXIT;
-}
-
-void BaseCameraAdapter::disableMsgType(int32_t msgs, void* cookie)
-{
- android::AutoMutex lock(mSubscriberLock);
-
- LOG_FUNCTION_NAME;
-
- int32_t frameMsg = ((msgs >> MessageNotifier::FRAME_BIT_FIELD_POSITION) & EVENT_MASK);
- int32_t eventMsg = ((msgs >> MessageNotifier::EVENT_BIT_FIELD_POSITION) & EVENT_MASK);
-
- if ( frameMsg != 0 )
- {
- CAMHAL_LOGVB("Frame message type id=0x%x remove subscription request", frameMsg);
- switch ( frameMsg )
- {
- case CameraFrame::PREVIEW_FRAME_SYNC:
- mFrameSubscribers.removeItem((int) cookie);
- break;
- case CameraFrame::FRAME_DATA_SYNC:
- mFrameDataSubscribers.removeItem((int) cookie);
- break;
- case CameraFrame::SNAPSHOT_FRAME:
- mSnapshotSubscribers.removeItem((int) cookie);
- break;
- case CameraFrame::IMAGE_FRAME:
- mImageSubscribers.removeItem((int) cookie);
- break;
- case CameraFrame::RAW_FRAME:
- mRawSubscribers.removeItem((int) cookie);
- break;
- case CameraFrame::VIDEO_FRAME_SYNC:
- mVideoSubscribers.removeItem((int) cookie);
- break;
- case CameraFrame::REPROCESS_INPUT_FRAME:
- mVideoInSubscribers.removeItem((int) cookie);
- break;
- case CameraFrame::ALL_FRAMES:
- mFrameSubscribers.removeItem((int) cookie);
- mFrameDataSubscribers.removeItem((int) cookie);
- mSnapshotSubscribers.removeItem((int) cookie);
- mImageSubscribers.removeItem((int) cookie);
- mRawSubscribers.removeItem((int) cookie);
- mVideoSubscribers.removeItem((int) cookie);
- mVideoInSubscribers.removeItem((int) cookie);
- break;
- default:
- CAMHAL_LOGEA("Frame message type id=0x%x subscription remove not supported yet!", frameMsg);
- break;
- }
- }
-
- if ( eventMsg != 0 )
- {
- CAMHAL_LOGVB("Event message type id=0x%x remove subscription request", eventMsg);
- if ( CameraHalEvent::ALL_EVENTS == eventMsg)
- {
- //TODO: Process case by case
- mFocusSubscribers.removeItem((int) cookie);
- mShutterSubscribers.removeItem((int) cookie);
- mZoomSubscribers.removeItem((int) cookie);
- mMetadataSubscribers.removeItem((int) cookie);
- }
- else
- {
- CAMHAL_LOGEA("Event message type id=0x%x subscription remove not supported yet!", eventMsg);
- }
- }
-
- LOG_FUNCTION_NAME_EXIT;
-}
-
-void BaseCameraAdapter::addFramePointers(CameraBuffer *frameBuf, void *buf)
-{
- unsigned int *pBuf = (unsigned int *)buf;
- android::AutoMutex lock(mSubscriberLock);
-
- if ((frameBuf != NULL) && ( pBuf != NULL) )
- {
- CameraFrame *frame = new CameraFrame;
- frame->mBuffer = frameBuf;
- frame->mYuv[0] = pBuf[0];
- frame->mYuv[1] = pBuf[1];
- mFrameQueue.add(frameBuf, frame);
-
- CAMHAL_LOGVB("Adding Frame=0x%x Y=0x%x UV=0x%x", frame->mBuffer, frame->mYuv[0], frame->mYuv[1]);
- }
-}
-
-void BaseCameraAdapter::removeFramePointers()
-{
- android::AutoMutex lock(mSubscriberLock);
-
- int size = mFrameQueue.size();
- CAMHAL_LOGVB("Removing %d Frames = ", size);
- for (int i = 0; i < size; i++)
- {
- CameraFrame *frame = (CameraFrame *)mFrameQueue.valueAt(i);
- CAMHAL_LOGVB("Free Frame=0x%x Y=0x%x UV=0x%x", frame->mBuffer, frame->mYuv[0], frame->mYuv[1]);
- delete frame;
- }
- mFrameQueue.clear();
-}
-
-void BaseCameraAdapter::returnFrame(CameraBuffer * frameBuf, CameraFrame::FrameType frameType)
-{
- status_t res = NO_ERROR;
- size_t subscriberCount = 0;
- int refCount = -1;
-
- if ( NULL == frameBuf )
- {
- CAMHAL_LOGEA("Invalid frameBuf");
- return;
- }
-
- if ( NO_ERROR == res)
- {
- android::AutoMutex lock(mReturnFrameLock);
-
- refCount = getFrameRefCount(frameBuf, frameType);
-
- if(frameType == CameraFrame::PREVIEW_FRAME_SYNC)
- {
- mFramesWithDisplay--;
- }
- else if(frameType == CameraFrame::VIDEO_FRAME_SYNC)
- {
- mFramesWithEncoder--;
- }
-
- if ( 0 < refCount )
- {
-
- refCount--;
- setFrameRefCount(frameBuf, frameType, refCount);
-
-
- if ( mRecording && (CameraFrame::VIDEO_FRAME_SYNC == frameType) ) {
- refCount += getFrameRefCount(frameBuf, CameraFrame::PREVIEW_FRAME_SYNC);
- } else if ( mRecording && (CameraFrame::PREVIEW_FRAME_SYNC == frameType) ) {
- refCount += getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
- } else if ( mRecording && (CameraFrame::SNAPSHOT_FRAME == frameType) ) {
- refCount += getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
- }
-
-
- }
- else
- {
- CAMHAL_LOGDA("Frame returned when ref count is already zero!!");
- return;
- }
- }
-
- CAMHAL_LOGSVB("REFCOUNT 0x%x %d", frameBuf, refCount);
-
- if ( NO_ERROR == res )
- {
- //check if someone is holding this buffer
- if ( 0 == refCount )
- {
-#ifdef CAMERAHAL_DEBUG
- if((mBuffersWithDucati.indexOfKey((int)camera_buffer_get_omx_ptr(frameBuf)) >= 0) &&
- ((CameraFrame::PREVIEW_FRAME_SYNC == frameType) ||
- (CameraFrame::SNAPSHOT_FRAME == frameType)))
- {
- CAMHAL_LOGE("Buffer already with Ducati!! 0x%x", frameBuf);
- for(unsigned int i=0;i<mBuffersWithDucati.size();i++) CAMHAL_LOGSV("0x%x", mBuffersWithDucati.keyAt(i));
- }
- mBuffersWithDucati.add((int)camera_buffer_get_omx_ptr(frameBuf),1);
-#endif
- res = fillThisBuffer(frameBuf, frameType);
- }
- }
-
-}
-
-status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, int value2, int value3, int value4) {
- status_t ret = NO_ERROR;
- struct timeval *refTimestamp;
- BuffersDescriptor *desc = NULL;
- CameraFrame *frame = NULL;
-
- LOG_FUNCTION_NAME;
-
- switch ( operation ) {
- case CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW:
- CAMHAL_LOGDA("Use buffers for preview");
- desc = ( BuffersDescriptor * ) value1;
-
- if ( NULL == desc )
- {
- CAMHAL_LOGEA("Invalid preview buffers!");
- return -EINVAL;
- }
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- android::AutoMutex lock(mPreviewBufferLock);
- mPreviewBuffers = desc->mBuffers;
- mPreviewBuffersLength = desc->mLength;
- mPreviewBuffersAvailable.clear();
- mSnapshotBuffersAvailable.clear();
- for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
- {
- mPreviewBuffersAvailable.add(&mPreviewBuffers[i], 0);
- }
- // initial ref count for undeqeueued buffers is 1 since buffer provider
- // is still holding on to it
- for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ )
- {
- mPreviewBuffersAvailable.add(&mPreviewBuffers[i], 1);
- }
- }
-
- if ( NULL != desc )
- {
- ret = useBuffers(CameraAdapter::CAMERA_PREVIEW,
- desc->mBuffers,
- desc->mCount,
- desc->mLength,
- desc->mMaxQueueable);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_USE_BUFFERS_PREVIEW_DATA:
- CAMHAL_LOGDA("Use buffers for preview data");
- desc = ( BuffersDescriptor * ) value1;
-
- if ( NULL == desc )
- {
- CAMHAL_LOGEA("Invalid preview data buffers!");
- return -EINVAL;
- }
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- android::AutoMutex lock(mPreviewDataBufferLock);
- mPreviewDataBuffers = desc->mBuffers;
- mPreviewDataBuffersLength = desc->mLength;
- mPreviewDataBuffersAvailable.clear();
- for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
- {
- mPreviewDataBuffersAvailable.add(&mPreviewDataBuffers[i], 0);
- }
- // initial ref count for undeqeueued buffers is 1 since buffer provider
- // is still holding on to it
- for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ )
- {
- mPreviewDataBuffersAvailable.add(&mPreviewDataBuffers[i], 1);
- }
- }
-
- if ( NULL != desc )
- {
- ret = useBuffers(CameraAdapter::CAMERA_MEASUREMENT,
- desc->mBuffers,
- desc->mCount,
- desc->mLength,
- desc->mMaxQueueable);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
- CAMHAL_LOGDA("Use buffers for image capture");
- desc = ( BuffersDescriptor * ) value1;
-
- if ( NULL == desc )
- {
- CAMHAL_LOGEA("Invalid capture buffers!");
- return -EINVAL;
- }
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- android::AutoMutex lock(mCaptureBufferLock);
- mCaptureBuffers = desc->mBuffers;
- mCaptureBuffersLength = desc->mLength;
- mCaptureBuffersAvailable.clear();
- for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ )
- {
- mCaptureBuffersAvailable.add(&mCaptureBuffers[i], 0);
- }
- // initial ref count for undeqeueued buffers is 1 since buffer provider
- // is still holding on to it
- for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ )
- {
- mCaptureBuffersAvailable.add(&mCaptureBuffers[i], 1);
- }
- }
-
- if ( NULL != desc )
- {
- ret = useBuffers(CameraAdapter::CAMERA_IMAGE_CAPTURE,
- desc->mBuffers,
- desc->mCount,
- desc->mLength,
- desc->mMaxQueueable);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
-#ifdef OMAP_ENHANCEMENT_CPCAM
- case CameraAdapter::CAMERA_USE_BUFFERS_REPROCESS:
- CAMHAL_LOGDA("Use buffers for reprocessing");
- desc = (BuffersDescriptor *) value1;
-
- if (NULL == desc) {
- CAMHAL_LOGEA("Invalid capture buffers!");
- return -EINVAL;
- }
-
- if (ret == NO_ERROR) {
- ret = setState(operation);
- }
-
- if (ret == NO_ERROR) {
- android::AutoMutex lock(mVideoInBufferLock);
- mVideoInBuffers = desc->mBuffers;
- mVideoInBuffersAvailable.clear();
- for (uint32_t i = 0 ; i < desc->mMaxQueueable ; i++) {
- mVideoInBuffersAvailable.add(&mVideoInBuffers[i], 0);
- }
- // initial ref count for undeqeueued buffers is 1 since buffer provider
- // is still holding on to it
- for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ ) {
- mVideoInBuffersAvailable.add(&mVideoInBuffers[i], 1);
- }
- ret = useBuffers(CameraAdapter::CAMERA_REPROCESS,
- desc->mBuffers,
- desc->mCount,
- desc->mLength,
- desc->mMaxQueueable);
- }
-
- if ( ret == NO_ERROR ) {
- ret = commitState();
- } else {
- ret |= rollbackState();
- }
-
- break;
-#endif
-
- case CameraAdapter::CAMERA_START_SMOOTH_ZOOM:
- {
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = startSmoothZoom(value1);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_STOP_SMOOTH_ZOOM:
- {
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = stopSmoothZoom();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_START_PREVIEW:
- {
-
- CAMHAL_LOGDA("Start Preview");
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = startPreview();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_STOP_PREVIEW:
- {
-
- CAMHAL_LOGDA("Stop Preview");
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = stopPreview();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_START_VIDEO:
- {
-
- CAMHAL_LOGDA("Start video recording");
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = startVideoCapture();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_STOP_VIDEO:
- {
-
- CAMHAL_LOGDA("Stop video recording");
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = stopVideoCapture();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_START_IMAGE_CAPTURE:
- {
-
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
-
- refTimestamp = ( struct timeval * ) value1;
- if ( NULL != refTimestamp )
- {
- memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval ));
- }
-
-#endif
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = takePicture();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_STOP_IMAGE_CAPTURE:
- {
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = stopImageCapture();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_START_BRACKET_CAPTURE:
- {
-
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
-
- refTimestamp = ( struct timeval * ) value2;
- if ( NULL != refTimestamp )
- {
- memcpy( &mStartCapture, refTimestamp, sizeof( struct timeval ));
- }
-
-#endif
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = startBracketing(value1);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_STOP_BRACKET_CAPTURE:
- {
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = stopBracketing();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- }
-
- case CameraAdapter::CAMERA_PERFORM_AUTOFOCUS:
-
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
-
- refTimestamp = ( struct timeval * ) value1;
- if ( NULL != refTimestamp )
- {
- memcpy( &mStartFocus, refTimestamp, sizeof( struct timeval ));
- }
-
-#endif
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = autoFocus();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_CANCEL_AUTOFOCUS:
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- ret = cancelAutoFocus();
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_QUERY_RESOLUTION_PREVIEW:
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- frame = ( CameraFrame * ) value1;
-
- if ( NULL != frame )
- {
- ret = getFrameSize(frame->mWidth, frame->mHeight);
- }
- else
- {
- ret = -EINVAL;
- }
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- frame = ( CameraFrame * ) value1;
-
- if ( NULL != frame )
- {
- ret = getPictureBufferSize(*frame, value2);
- }
- else
- {
- ret = -EINVAL;
- }
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
-
- if ( ret == NO_ERROR )
- {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR )
- {
- frame = ( CameraFrame * ) value1;
-
- if ( NULL != frame )
- {
- ret = getFrameDataSize(frame->mLength, value2);
- }
- else
- {
- ret = -EINVAL;
- }
- }
-
- if ( ret == NO_ERROR )
- {
- ret = commitState();
- }
- else
- {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_START_FD:
-
- ret = startFaceDetection();
-
- break;
-
- case CameraAdapter::CAMERA_STOP_FD:
-
- ret = stopFaceDetection();
-
- break;
-
- case CameraAdapter::CAMERA_USE_BUFFERS_VIDEO_CAPTURE:
-
- CAMHAL_LOGDA("Use buffers for video (RAW + JPEG) capture");
- desc = ( BuffersDescriptor * ) value1;
-
- if ( NULL == desc ) {
- CAMHAL_LOGEA("Invalid capture buffers!");
- return -EINVAL;
- }
-
- if ( ret == NO_ERROR ) {
- ret = setState(operation);
- }
-
- if ( ret == NO_ERROR ) {
- android::AutoMutex lock(mVideoBufferLock);
- mVideoBuffers = desc->mBuffers;
- mVideoBuffersLength = desc->mLength;
- mVideoBuffersAvailable.clear();
- for ( uint32_t i = 0 ; i < desc->mMaxQueueable ; i++ ) {
- mVideoBuffersAvailable.add(&mVideoBuffers[i], 1);
- }
- // initial ref count for undeqeueued buffers is 1 since buffer provider
- // is still holding on to it
- for ( uint32_t i = desc->mMaxQueueable ; i < desc->mCount ; i++ ) {
- mVideoBuffersAvailable.add(&mVideoBuffers[i], 1);
- }
- }
-
- if ( NULL != desc ) {
- ret = useBuffers(CameraAdapter::CAMERA_VIDEO,
- desc->mBuffers,
- desc->mCount,
- desc->mLength,
- desc->mMaxQueueable);
- }
-
- if ( ret == NO_ERROR ) {
- ret = commitState();
- } else {
- ret |= rollbackState();
- }
-
- break;
-
- case CameraAdapter::CAMERA_SWITCH_TO_EXECUTING:
- ret = switchToExecuting();
- break;
-
-#ifdef OMAP_ENHANCEMENT_VTC
- case CameraAdapter::CAMERA_SETUP_TUNNEL:
- ret = setupTunnel(value1, value2, value3, value4);
- break;
-
- case CameraAdapter::CAMERA_DESTROY_TUNNEL:
- ret = destroyTunnel();
- break;
-#endif
-
- case CameraAdapter::CAMERA_PREVIEW_INITIALIZATION:
- ret = cameraPreviewInitialization();
- break;
-
- default:
- CAMHAL_LOGEB("Command 0x%x unsupported!", operation);
- break;
- };
-
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-status_t BaseCameraAdapter::notifyFocusSubscribers(CameraHalEvent::FocusStatus status)
-{
- event_callback eventCb;
- CameraHalEvent focusEvent;
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- if ( mFocusSubscribers.size() == 0 ) {
- CAMHAL_LOGDA("No Focus Subscribers!");
- return NO_INIT;
- }
-
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
- if (status == CameraHalEvent::FOCUS_STATUS_PENDING) {
- gettimeofday(&mStartFocus, NULL);
- } else {
- //dump the AF latency
- CameraHal::PPM("Focus finished in: ", &mStartFocus);
- }
-#endif
-
- focusEvent.mEventData = new CameraHalEvent::CameraHalEventData();
- if ( NULL == focusEvent.mEventData.get() ) {
- return -ENOMEM;
- }
-
- focusEvent.mEventType = CameraHalEvent::EVENT_FOCUS_LOCKED;
- focusEvent.mEventData->focusEvent.focusStatus = status;
-
- for (unsigned int i = 0 ; i < mFocusSubscribers.size(); i++ )
- {
- focusEvent.mCookie = (void *) mFocusSubscribers.keyAt(i);
- eventCb = (event_callback) mFocusSubscribers.valueAt(i);
- eventCb ( &focusEvent );
- }
-
- focusEvent.mEventData.clear();
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::notifyShutterSubscribers()
-{
- CameraHalEvent shutterEvent;
- event_callback eventCb;
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- if ( mShutterSubscribers.size() == 0 )
- {
- CAMHAL_LOGEA("No shutter Subscribers!");
- return NO_INIT;
- }
-
- shutterEvent.mEventData = new CameraHalEvent::CameraHalEventData();
- if ( NULL == shutterEvent.mEventData.get() ) {
- return -ENOMEM;
- }
-
- shutterEvent.mEventType = CameraHalEvent::EVENT_SHUTTER;
- shutterEvent.mEventData->shutterEvent.shutterClosed = true;
-
- for (unsigned int i = 0 ; i < mShutterSubscribers.size() ; i++ ) {
- shutterEvent.mCookie = ( void * ) mShutterSubscribers.keyAt(i);
- eventCb = ( event_callback ) mShutterSubscribers.valueAt(i);
-
- CAMHAL_LOGD("Sending shutter callback");
-
- eventCb ( &shutterEvent );
- }
-
- shutterEvent.mEventData.clear();
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::notifyZoomSubscribers(int zoomIdx, bool targetReached)
-{
- event_callback eventCb;
- CameraHalEvent zoomEvent;
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- if ( mZoomSubscribers.size() == 0 ) {
- CAMHAL_LOGDA("No zoom Subscribers!");
- return NO_INIT;
- }
-
- zoomEvent.mEventData = new CameraHalEvent::CameraHalEventData();
- if ( NULL == zoomEvent.mEventData.get() ) {
- return -ENOMEM;
- }
-
- zoomEvent.mEventType = CameraHalEvent::EVENT_ZOOM_INDEX_REACHED;
- zoomEvent.mEventData->zoomEvent.currentZoomIndex = zoomIdx;
- zoomEvent.mEventData->zoomEvent.targetZoomIndexReached = targetReached;
-
- for (unsigned int i = 0 ; i < mZoomSubscribers.size(); i++ ) {
- zoomEvent.mCookie = (void *) mZoomSubscribers.keyAt(i);
- eventCb = (event_callback) mZoomSubscribers.valueAt(i);
-
- eventCb ( &zoomEvent );
- }
-
- zoomEvent.mEventData.clear();
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::notifyMetadataSubscribers(android::sp<CameraMetadataResult> &meta)
-{
- event_callback eventCb;
- CameraHalEvent metaEvent;
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- if ( mMetadataSubscribers.size() == 0 ) {
- CAMHAL_LOGDA("No preview metadata subscribers!");
- return NO_INIT;
- }
-
- metaEvent.mEventData = new CameraHalEvent::CameraHalEventData();
- if ( NULL == metaEvent.mEventData.get() ) {
- return -ENOMEM;
- }
-
- metaEvent.mEventType = CameraHalEvent::EVENT_METADATA;
- metaEvent.mEventData->metadataEvent = meta;
-
- for (unsigned int i = 0 ; i < mMetadataSubscribers.size(); i++ ) {
- metaEvent.mCookie = (void *) mMetadataSubscribers.keyAt(i);
- eventCb = (event_callback) mMetadataSubscribers.valueAt(i);
-
- eventCb ( &metaEvent );
- }
-
- metaEvent.mEventData.clear();
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame)
-{
- status_t ret = NO_ERROR;
- unsigned int mask;
-
- if ( NULL == frame )
- {
- CAMHAL_LOGEA("Invalid CameraFrame");
- return -EINVAL;
- }
-
- for( mask = 1; mask < CameraFrame::ALL_FRAMES; mask <<= 1){
- if( mask & frame->mFrameMask ){
- switch( mask ){
-
- case CameraFrame::IMAGE_FRAME:
- {
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
- CameraHal::PPM("Shot to Jpeg: ", &mStartCapture);
-#endif
- ret = __sendFrameToSubscribers(frame, &mImageSubscribers, CameraFrame::IMAGE_FRAME);
- }
- break;
- case CameraFrame::RAW_FRAME:
- {
- ret = __sendFrameToSubscribers(frame, &mRawSubscribers, CameraFrame::RAW_FRAME);
- }
- break;
- case CameraFrame::PREVIEW_FRAME_SYNC:
- {
- ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::PREVIEW_FRAME_SYNC);
- }
- break;
- case CameraFrame::SNAPSHOT_FRAME:
- {
- ret = __sendFrameToSubscribers(frame, &mSnapshotSubscribers, CameraFrame::SNAPSHOT_FRAME);
- }
- break;
- case CameraFrame::VIDEO_FRAME_SYNC:
- {
- ret = __sendFrameToSubscribers(frame, &mVideoSubscribers, CameraFrame::VIDEO_FRAME_SYNC);
- }
- break;
- case CameraFrame::FRAME_DATA_SYNC:
- {
- ret = __sendFrameToSubscribers(frame, &mFrameDataSubscribers, CameraFrame::FRAME_DATA_SYNC);
- }
- break;
- case CameraFrame::REPROCESS_INPUT_FRAME:
- {
- ret = __sendFrameToSubscribers(frame, &mVideoInSubscribers, CameraFrame::REPROCESS_INPUT_FRAME);
- }
- break;
- default:
- CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", mask);
- break;
- }//SWITCH
- frame->mFrameMask &= ~mask;
-
- if (ret != NO_ERROR) {
- goto EXIT;
- }
- }//IF
- }//FOR
-
- EXIT:
- return ret;
-}
-
-status_t BaseCameraAdapter::__sendFrameToSubscribers(CameraFrame* frame,
- android::KeyedVector<int, frame_callback> *subscribers,
- CameraFrame::FrameType frameType)
-{
- size_t refCount = 0;
- status_t ret = NO_ERROR;
- frame_callback callback = NULL;
-
- frame->mFrameType = frameType;
-
- if ( (frameType == CameraFrame::PREVIEW_FRAME_SYNC) ||
- (frameType == CameraFrame::VIDEO_FRAME_SYNC) ||
- (frameType == CameraFrame::SNAPSHOT_FRAME) ){
- if (mFrameQueue.size() > 0){
- CameraFrame *lframe = (CameraFrame *)mFrameQueue.valueFor(frame->mBuffer);
- frame->mYuv[0] = lframe->mYuv[0];
- frame->mYuv[1] = frame->mYuv[0] + (frame->mLength + frame->mOffset)*2/3;
- }
- else{
- CAMHAL_LOGDA("Empty Frame Queue");
- return -EINVAL;
- }
- }
-
- if (NULL != subscribers) {
- refCount = getFrameRefCount(frame->mBuffer, frameType);
-
- if (refCount == 0) {
- CAMHAL_LOGDA("Invalid ref count of 0");
- return -EINVAL;
- }
-
- if (refCount > subscribers->size()) {
- CAMHAL_LOGEB("Invalid ref count for frame type: 0x%x", frameType);
- return -EINVAL;
- }
-
- CAMHAL_LOGSVB("Type of Frame: 0x%x address: 0x%x refCount start %d",
- frame->mFrameType,
- ( uint32_t ) frame->mBuffer,
- refCount);
-
- for ( unsigned int i = 0 ; i < refCount; i++ ) {
- frame->mCookie = ( void * ) subscribers->keyAt(i);
- callback = (frame_callback) subscribers->valueAt(i);
-
- if (!callback) {
- CAMHAL_LOGEB("callback not set for frame type: 0x%x", frameType);
- return -EINVAL;
- }
-
- callback(frame);
- }
- } else {
- CAMHAL_LOGEA("Subscribers is null??");
- return -EINVAL;
- }
-
- return ret;
-}
-
-int BaseCameraAdapter::setInitFrameRefCount(CameraBuffer * buf, unsigned int mask)
-{
- int ret = NO_ERROR;
- unsigned int lmask;
-
- LOG_FUNCTION_NAME;
-
- if (buf == NULL)
- {
- return -EINVAL;
- }
-
- for( lmask = 1; lmask < CameraFrame::ALL_FRAMES; lmask <<= 1){
- if( lmask & mask ){
- switch( lmask ){
-
- case CameraFrame::IMAGE_FRAME:
- {
- setFrameRefCount(buf, CameraFrame::IMAGE_FRAME, (int) mImageSubscribers.size());
- }
- break;
- case CameraFrame::RAW_FRAME:
- {
- setFrameRefCount(buf, CameraFrame::RAW_FRAME, mRawSubscribers.size());
- }
- break;
- case CameraFrame::PREVIEW_FRAME_SYNC:
- {
- setFrameRefCount(buf, CameraFrame::PREVIEW_FRAME_SYNC, mFrameSubscribers.size());
- }
- break;
- case CameraFrame::SNAPSHOT_FRAME:
- {
- setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mSnapshotSubscribers.size());
- }
- break;
- case CameraFrame::VIDEO_FRAME_SYNC:
- {
- setFrameRefCount(buf,CameraFrame::VIDEO_FRAME_SYNC, mVideoSubscribers.size());
- }
- break;
- case CameraFrame::FRAME_DATA_SYNC:
- {
- setFrameRefCount(buf, CameraFrame::FRAME_DATA_SYNC, mFrameDataSubscribers.size());
- }
- break;
- case CameraFrame::REPROCESS_INPUT_FRAME:
- {
- setFrameRefCount(buf,CameraFrame::REPROCESS_INPUT_FRAME, mVideoInSubscribers.size());
- }
- break;
- default:
- CAMHAL_LOGEB("FRAMETYPE NOT SUPPORTED 0x%x", lmask);
- break;
- }//SWITCH
- mask &= ~lmask;
- }//IF
- }//FOR
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-int BaseCameraAdapter::getFrameRefCount(CameraBuffer * frameBuf, CameraFrame::FrameType frameType)
-{
- int res = -1;
-
- LOG_FUNCTION_NAME;
-
- switch ( frameType )
- {
- case CameraFrame::IMAGE_FRAME:
- case CameraFrame::RAW_FRAME:
- {
- android::AutoMutex lock(mCaptureBufferLock);
- res = mCaptureBuffersAvailable.valueFor(frameBuf );
- }
- break;
- case CameraFrame::SNAPSHOT_FRAME:
- {
- android::AutoMutex lock(mSnapshotBufferLock);
- res = mSnapshotBuffersAvailable.valueFor( ( unsigned int ) frameBuf );
- }
- break;
- case CameraFrame::PREVIEW_FRAME_SYNC:
- {
- android::AutoMutex lock(mPreviewBufferLock);
- res = mPreviewBuffersAvailable.valueFor(frameBuf );
- }
- break;
- case CameraFrame::FRAME_DATA_SYNC:
- {
- android::AutoMutex lock(mPreviewDataBufferLock);
- res = mPreviewDataBuffersAvailable.valueFor(frameBuf );
- }
- break;
- case CameraFrame::VIDEO_FRAME_SYNC:
- {
- android::AutoMutex lock(mVideoBufferLock);
- res = mVideoBuffersAvailable.valueFor(frameBuf );
- }
- break;
- case CameraFrame::REPROCESS_INPUT_FRAME: {
- android::AutoMutex lock(mVideoInBufferLock);
- res = mVideoInBuffersAvailable.valueFor(frameBuf );
- }
- break;
- default:
- break;
- };
-
- LOG_FUNCTION_NAME_EXIT;
-
- return res;
-}
-
-void BaseCameraAdapter::setFrameRefCount(CameraBuffer * frameBuf, CameraFrame::FrameType frameType, int refCount)
-{
-
- LOG_FUNCTION_NAME;
-
- switch ( frameType )
- {
- case CameraFrame::IMAGE_FRAME:
- case CameraFrame::RAW_FRAME:
- {
- android::AutoMutex lock(mCaptureBufferLock);
- mCaptureBuffersAvailable.replaceValueFor(frameBuf, refCount);
- }
- break;
- case CameraFrame::SNAPSHOT_FRAME:
- {
- android::AutoMutex lock(mSnapshotBufferLock);
- mSnapshotBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount);
- }
- break;
- case CameraFrame::PREVIEW_FRAME_SYNC:
- {
- android::AutoMutex lock(mPreviewBufferLock);
- mPreviewBuffersAvailable.replaceValueFor(frameBuf, refCount);
- }
- break;
- case CameraFrame::FRAME_DATA_SYNC:
- {
- android::AutoMutex lock(mPreviewDataBufferLock);
- mPreviewDataBuffersAvailable.replaceValueFor(frameBuf, refCount);
- }
- break;
- case CameraFrame::VIDEO_FRAME_SYNC:
- {
- android::AutoMutex lock(mVideoBufferLock);
- mVideoBuffersAvailable.replaceValueFor(frameBuf, refCount);
- }
- break;
- case CameraFrame::REPROCESS_INPUT_FRAME: {
- android::AutoMutex lock(mVideoInBufferLock);
- mVideoInBuffersAvailable.replaceValueFor(frameBuf, refCount);
- }
- break;
- default:
- break;
- };
-
- LOG_FUNCTION_NAME_EXIT;
-
-}
-
-status_t BaseCameraAdapter::startVideoCapture()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- android::AutoMutex lock(mVideoBufferLock);
-
- //If the capture is already ongoing, return from here.
- if ( mRecording )
- {
- ret = NO_INIT;
- }
-
-
- if ( NO_ERROR == ret )
- {
-
- for ( unsigned int i = 0 ; i < mPreviewBuffersAvailable.size() ; i++ )
- {
- mVideoBuffersAvailable.add(mPreviewBuffersAvailable.keyAt(i), 0);
- }
-
- mRecording = true;
- }
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::stopVideoCapture()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- if ( !mRecording )
- {
- ret = NO_INIT;
- }
-
- if ( NO_ERROR == ret )
- {
- for ( unsigned int i = 0 ; i < mVideoBuffersAvailable.size() ; i++ )
- {
- CameraBuffer *frameBuf = mVideoBuffersAvailable.keyAt(i);
- if( getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC) > 0)
- {
- returnFrame(frameBuf, CameraFrame::VIDEO_FRAME_SYNC);
- }
- }
-
- mVideoBuffersAvailable.clear();
-
- mRecording = false;
- }
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-//-----------------Stub implementation of the interface ------------------------------
-
-status_t BaseCameraAdapter::takePicture()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::stopImageCapture()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::startBracketing(int range)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::stopBracketing()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::autoFocus()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- notifyFocusSubscribers(CameraHalEvent::FOCUS_STATUS_FAIL);
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::cancelAutoFocus()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::startSmoothZoom(int targetIdx)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::stopSmoothZoom()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::startPreview()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::stopPreview()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::useBuffers(CameraMode mode, CameraBuffer* bufArr, int num, size_t length, unsigned int queueable)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::fillThisBuffer(CameraBuffer * frameBuf, CameraFrame::FrameType frameType)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::getFrameSize(size_t &width, size_t &height)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::getFrameDataSize(size_t &dataFrameSize, size_t bufferCount)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::getPictureBufferSize(CameraFrame &frame, size_t bufferCount)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::startFaceDetection()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::stopFaceDetection()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::switchToExecuting()
-{
- status_t ret = NO_ERROR;
- LOG_FUNCTION_NAME;
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-const char* BaseCameraAdapter::getLUTvalue_translateHAL(int Value, LUTtypeHAL LUT) {
- int LUTsize = LUT.size;
- for(int i = 0; i < LUTsize; i++)
- if( LUT.Table[i].halDefinition == Value )
- return LUT.Table[i].userDefinition;
-
- return NULL;
-}
-
-status_t BaseCameraAdapter::setupTunnel(uint32_t SliceHeight, uint32_t EncoderHandle, uint32_t width, uint32_t height) {
- status_t ret = NO_ERROR;
- LOG_FUNCTION_NAME;
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-status_t BaseCameraAdapter::destroyTunnel() {
- status_t ret = NO_ERROR;
- LOG_FUNCTION_NAME;
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-status_t BaseCameraAdapter::cameraPreviewInitialization() {
- status_t ret = NO_ERROR;
- LOG_FUNCTION_NAME;
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-status_t BaseCameraAdapter::setState(CameraCommands operation)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- const char *printState = getLUTvalue_translateHAL(operation, CamCommandsLUT);
-
- mLock.lock();
-
- switch ( mAdapterState )
- {
-
- case INTIALIZED_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_USE_BUFFERS_PREVIEW:
- CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->LOADED_PREVIEW_STATE event = %s",
- printState);
- mNextState = LOADED_PREVIEW_STATE;
- break;
-
- //These events don't change the current state
- case CAMERA_QUERY_RESOLUTION_PREVIEW:
- case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
- case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
- CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->INTIALIZED_STATE event = %s",
- printState);
- mNextState = INTIALIZED_STATE;
- break;
- case CAMERA_STOP_BRACKET_CAPTURE:
- case CAMERA_STOP_IMAGE_CAPTURE:
- ret = INVALID_OPERATION;
- break;
- case CAMERA_CANCEL_AUTOFOCUS:
- ret = INVALID_OPERATION;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch INTIALIZED_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case LOADED_PREVIEW_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_START_PREVIEW:
- CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
-
- case CAMERA_STOP_PREVIEW:
- CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->INTIALIZED_STATE event = 0x%x",
- operation);
- mNextState = INTIALIZED_STATE;
- break;
-
- //These events don't change the current state
- case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
- case CAMERA_QUERY_BUFFER_SIZE_PREVIEW_DATA:
- case CAMERA_USE_BUFFERS_PREVIEW_DATA:
- CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->LOADED_PREVIEW_STATE event = %s",
- printState);
- mNextState = LOADED_PREVIEW_STATE;
- break;
-
- default:
- CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case PREVIEW_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_STOP_PREVIEW:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->INTIALIZED_STATE event = %s",
- printState);
- mNextState = INTIALIZED_STATE;
- break;
-
- case CAMERA_PERFORM_AUTOFOCUS:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->AF_STATE event = %s",
- printState);
- mNextState = AF_STATE;
- break;
-
- case CAMERA_START_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->ZOOM_STATE event = %s",
- printState);
- mNextState = ZOOM_STATE;
- break;
-
- case CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->LOADED_CAPTURE_STATE event = %s",
- printState);
- mNextState = LOADED_CAPTURE_STATE;
- break;
-
-#ifdef OMAP_ENHANCEMENT_CPCAM
- case CAMERA_USE_BUFFERS_REPROCESS:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->LOADED_REPROCESS_STATE event = %s",
- printState);
- mNextState = LOADED_REPROCESS_STATE;
- break;
-#endif
-
- case CAMERA_START_VIDEO:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->VIDEO_STATE event = %s",
- printState);
- mNextState = VIDEO_STATE;
- break;
-
- case CAMERA_CANCEL_AUTOFOCUS:
- case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
- case CAMERA_STOP_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_ACTIVE->PREVIEW_ACTIVE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
-
- case CAMERA_STOP_IMAGE_CAPTURE:
- case CAMERA_STOP_BRACKET_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch PREVIEW_ACTIVE->PREVIEW_ACTIVE event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch PREVIEW_ACTIVE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
-#ifdef OMAP_ENHANCEMENT_CPCAM
- case LOADED_REPROCESS_STATE:
- switch (operation) {
- case CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch LOADED_REPROCESS_STATE->LOADED_REPROCESS_CAPTURE_STATE event = %s",
- printState);
- mNextState = LOADED_REPROCESS_CAPTURE_STATE;
- break;
- case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch LOADED_REPROCESS_STATE->LOADED_REPROCESS_STATE event = %s",
- printState);
- mNextState = LOADED_REPROCESS_STATE;
- break;
- default:
- CAMHAL_LOGEB("Adapter state switch LOADED_REPROCESS_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
- }
-
- break;
-
- case LOADED_REPROCESS_CAPTURE_STATE:
- switch (operation) {
- case CAMERA_START_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch LOADED_REPROCESS_CAPTURE_STATE->REPROCESS_STATE event = %s",
- printState);
- mNextState = REPROCESS_STATE;
- break;
- default:
- CAMHAL_LOGEB("Adapter state switch LOADED_REPROCESS_CAPTURE_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
- }
- break;
-#endif
-
- case LOADED_CAPTURE_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_START_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = %s",
- printState);
- mNextState = CAPTURE_STATE;
- break;
-
- case CAMERA_START_BRACKET_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->BRACKETING_STATE event = %s",
- printState);
- mNextState = BRACKETING_STATE;
- break;
-
- case CAMERA_USE_BUFFERS_VIDEO_CAPTURE:
- //Hadnle this state for raw capture path.
- //Just need to keep the same state.
- //The next CAMERA_START_IMAGE_CAPTURE command will assign the mNextState.
- CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->LOADED_CAPTURE_STATE event = %s",
- printState);
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case CAPTURE_STATE:
-
- switch ( operation )
- {
- case CAMERA_STOP_IMAGE_CAPTURE:
- case CAMERA_STOP_BRACKET_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
-
- case CAMERA_START_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->CAPTURE_STATE event = %s",
- printState);
- mNextState = CAPTURE_STATE;
- break;
-
-#ifdef OMAP_ENHANCEMENT_CPCAM
- case CAMERA_USE_BUFFERS_REPROCESS:
- CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->->LOADED_REPROCESS_STATE event = %s",
- printState);
- mNextState = LOADED_REPROCESS_STATE;
- break;
-#endif
-
- default:
- CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case BRACKETING_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_STOP_IMAGE_CAPTURE:
- case CAMERA_STOP_BRACKET_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
-
- case CAMERA_START_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->CAPTURE_STATE event = %s",
- printState);
- mNextState = CAPTURE_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch BRACKETING_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case AF_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_CANCEL_AUTOFOCUS:
- CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
-
- case CAMERA_START_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch AF_STATE->AF_ZOOM_STATE event = %s",
- printState);
- mNextState = AF_ZOOM_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch AF_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case ZOOM_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_CANCEL_AUTOFOCUS:
- CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = ZOOM_STATE;
- break;
-
- case CAMERA_STOP_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
-
- case CAMERA_PERFORM_AUTOFOCUS:
- CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->AF_ZOOM_STATE event = %s",
- printState);
- mNextState = AF_ZOOM_STATE;
- break;
-
- case CAMERA_START_VIDEO:
- CAMHAL_LOGDB("Adapter state switch ZOOM_STATE->VIDEO_ZOOM_STATE event = %s",
- printState);
- mNextState = VIDEO_ZOOM_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch ZOOM_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case VIDEO_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_STOP_VIDEO:
- CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
-
- case CAMERA_PERFORM_AUTOFOCUS:
- CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_AF_STATE event = %s",
- printState);
- mNextState = VIDEO_AF_STATE;
- break;
-
- case CAMERA_START_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_ZOOM_STATE event = %s",
- printState);
- mNextState = VIDEO_ZOOM_STATE;
- break;
-
- case CAMERA_USE_BUFFERS_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_LOADED_CAPTURE_STATE event = %s",
- printState);
- mNextState = VIDEO_LOADED_CAPTURE_STATE;
- break;
-
- case CAMERA_QUERY_BUFFER_SIZE_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->VIDEO_STATE event = %s",
- printState);
- mNextState = VIDEO_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch VIDEO_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case VIDEO_AF_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_CANCEL_AUTOFOCUS:
- CAMHAL_LOGDB("Adapter state switch VIDEO_AF_STATE->VIDEO_STATE event = %s",
- printState);
- mNextState = VIDEO_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch VIDEO_AF_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case VIDEO_LOADED_CAPTURE_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_START_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = %s",
- printState);
- mNextState = VIDEO_CAPTURE_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case VIDEO_CAPTURE_STATE:
-
- switch ( operation )
- {
- case CAMERA_STOP_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = VIDEO_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case AF_ZOOM_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_STOP_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->AF_STATE event = %s",
- printState);
- mNextState = AF_STATE;
- break;
-
- case CAMERA_CANCEL_AUTOFOCUS:
- CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->ZOOM_STATE event = %s",
- printState);
- mNextState = ZOOM_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch AF_ZOOM_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case VIDEO_ZOOM_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_STOP_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->VIDEO_STATE event = %s",
- printState);
- mNextState = VIDEO_STATE;
- break;
-
- case CAMERA_STOP_VIDEO:
- CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->ZOOM_STATE event = %s",
- printState);
- mNextState = ZOOM_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch VIDEO_ZOOM_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
- case BRACKETING_ZOOM_STATE:
-
- switch ( operation )
- {
-
- case CAMERA_STOP_SMOOTH_ZOOM:
- CAMHAL_LOGDB("Adapter state switch BRACKETING_ZOOM_STATE->BRACKETING_STATE event = %s",
- printState);
- mNextState = BRACKETING_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch BRACKETING_ZOOM_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-
-#ifdef OMAP_ENHANCEMENT_CPCAM
- case REPROCESS_STATE:
- switch (operation) {
- case CAMERA_STOP_IMAGE_CAPTURE:
- CAMHAL_LOGDB("Adapter state switch REPROCESS_STATE->PREVIEW_STATE event = %s",
- printState);
- mNextState = PREVIEW_STATE;
- break;
- case CAMERA_START_IMAGE_CAPTURE:
- case CAMERA_USE_BUFFERS_REPROCESS:
- CAMHAL_LOGDB("Adapter state switch REPROCESS_STATE->REPROCESS_STATE event = %s",
- printState);
- mNextState = REPROCESS_STATE;
- break;
-
- default:
- CAMHAL_LOGEB("Adapter state switch REPROCESS_STATE Invalid Op! event = %s",
- printState);
- ret = INVALID_OPERATION;
- break;
-
- }
-
- break;
-#endif
-
-
- default:
- CAMHAL_LOGEA("Invalid Adapter state!");
- ret = INVALID_OPERATION;
- }
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::rollbackToInitializedState()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- while ((getState() != INTIALIZED_STATE) && (ret == NO_ERROR)) {
- ret = rollbackToPreviousState();
- }
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::rollbackToPreviousState()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- CameraAdapter::AdapterState currentState = getState();
-
- switch (currentState) {
- case INTIALIZED_STATE:
- return NO_ERROR;
-
- case PREVIEW_STATE:
- ret = sendCommand(CAMERA_STOP_PREVIEW);
- break;
-
- case CAPTURE_STATE:
-#ifdef OMAP_ENHANCEMENT_CPCAM
- case REPROCESS_STATE:
-#endif
- ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE);
- break;
-
- case BRACKETING_STATE:
- ret = sendCommand(CAMERA_STOP_BRACKET_CAPTURE);
- break;
-
- case AF_STATE:
- ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS);
- break;
-
- case ZOOM_STATE:
- ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
- break;
-
- case VIDEO_STATE:
- ret = sendCommand(CAMERA_STOP_VIDEO);
- break;
-
- case VIDEO_AF_STATE:
- ret = sendCommand(CAMERA_CANCEL_AUTOFOCUS);
- break;
-
- case VIDEO_CAPTURE_STATE:
- ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE);
- break;
-
- case AF_ZOOM_STATE:
- ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
- break;
-
- case VIDEO_ZOOM_STATE:
- ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
- break;
-
- case BRACKETING_ZOOM_STATE:
- ret = sendCommand(CAMERA_STOP_SMOOTH_ZOOM);
- break;
-
- default:
- CAMHAL_LOGEA("Invalid Adapter state!");
- ret = INVALID_OPERATION;
- }
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-//State transition finished successfully.
-//Commit the state and unlock the adapter state.
-status_t BaseCameraAdapter::commitState()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- mAdapterState = mNextState;
-
- mLock.unlock();
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::rollbackState()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- mNextState = mAdapterState;
-
- mLock.unlock();
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-// getNextState() and getState()
-// publicly exposed functions to retrieve the adapter states
-// please notice that these functions are locked
-CameraAdapter::AdapterState BaseCameraAdapter::getState()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- android::AutoMutex lock(mLock);
-
- LOG_FUNCTION_NAME_EXIT;
-
- return mAdapterState;
-}
-
-CameraAdapter::AdapterState BaseCameraAdapter::getNextState()
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- android::AutoMutex lock(mLock);
-
- LOG_FUNCTION_NAME_EXIT;
-
- return mNextState;
-}
-
-// getNextState() and getState()
-// internal protected functions to retrieve the adapter states
-// please notice that these functions are NOT locked to help
-// internal functions query state in the middle of state
-// transition
-status_t BaseCameraAdapter::getState(AdapterState &state)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- state = mAdapterState;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-status_t BaseCameraAdapter::getNextState(AdapterState &state)
-{
- status_t ret = NO_ERROR;
-
- LOG_FUNCTION_NAME;
-
- state = mNextState;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return ret;
-}
-
-void BaseCameraAdapter::onOrientationEvent(uint32_t orientation, uint32_t tilt)
-{
- LOG_FUNCTION_NAME;
- LOG_FUNCTION_NAME_EXIT;
-}
-
-//-----------------------------------------------------------------------------
-
-extern "C" status_t OMXCameraAdapter_Capabilities(
- CameraProperties::Properties * const properties_array,
- const int starting_camera, const int max_camera, int & supportedCameras);
-extern "C" status_t V4LCameraAdapter_Capabilities(
- CameraProperties::Properties * const properties_array,
- const int starting_camera, const int max_camera, int & supportedCameras);
-
-extern "C" status_t CameraAdapter_Capabilities(
- CameraProperties::Properties * const properties_array,
- const int starting_camera, const int max_camera, int & supportedCameras)
-{
-
- status_t ret = NO_ERROR;
- status_t err = NO_ERROR;
- int num_cameras_supported = 0;
-
- LOG_FUNCTION_NAME;
-
- supportedCameras = 0;
-#ifdef OMX_CAMERA_ADAPTER
- //Query OMX cameras
- err = OMXCameraAdapter_Capabilities( properties_array, starting_camera,
- max_camera, supportedCameras);
- if(err != NO_ERROR) {
- CAMHAL_LOGEA("error while getting OMXCameraAdapter capabilities");
- ret = UNKNOWN_ERROR;
- }
-#endif
-#ifdef V4L_CAMERA_ADAPTER
- //Query V4L cameras
- err = V4LCameraAdapter_Capabilities( properties_array, (const int) supportedCameras,
- max_camera, num_cameras_supported);
- if(err != NO_ERROR) {
- CAMHAL_LOGEA("error while getting V4LCameraAdapter capabilities");
- ret = UNKNOWN_ERROR;
- }
-#endif
-
- supportedCameras += num_cameras_supported;
- CAMHAL_LOGEB("supportedCameras= %d\n", supportedCameras);
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace Camera
-} // namespace Ti
-
-/*--------------------Camera Adapter Class ENDS here-----------------------------*/
-