From c5f4358c48d6e50b2affb3ad6c2c0f59546f5b04 Mon Sep 17 00:00:00 2001 From: Kyle Repinski Date: Wed, 7 Jan 2015 08:39:28 -0600 Subject: camera: Update camera HAL. OmapZoom p-jb-release branch with 'CameraHal: Camera Capabilities query update' reverted, as well as a bunch of stuff ifdef'd out. Needs a lot of work still. At this point it's a regression, but it has to be done. --- camera/BaseCameraAdapter.cpp | 934 ++++++++++++++++++++++++++++++------------- 1 file changed, 648 insertions(+), 286 deletions(-) (limited to 'camera/BaseCameraAdapter.cpp') diff --git a/camera/BaseCameraAdapter.cpp b/camera/BaseCameraAdapter.cpp index 458c79e..4e315b6 100644 --- a/camera/BaseCameraAdapter.cpp +++ b/camera/BaseCameraAdapter.cpp @@ -14,13 +14,50 @@ * limitations under the License. */ - - -#define LOG_TAG "CameraHAL" - #include "BaseCameraAdapter.h" -namespace android { +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-----------------------------*/ @@ -51,6 +88,8 @@ BaseCameraAdapter::BaseCameraAdapter() mAdapterState = INTIALIZED_STATE; + mSharedAllocator = NULL; + #if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS mStartFocus.tv_sec = 0; mStartFocus.tv_usec = 0; @@ -64,16 +103,18 @@ BaseCameraAdapter::~BaseCameraAdapter() { LOG_FUNCTION_NAME; - Mutex::Autolock lock(mSubscriberLock); + android::AutoMutex lock(mSubscriberLock); mFrameSubscribers.clear(); mImageSubscribers.clear(); mRawSubscribers.clear(); mVideoSubscribers.clear(); + mVideoInSubscribers.clear(); mFocusSubscribers.clear(); mShutterSubscribers.clear(); mZoomSubscribers.clear(); - mFaceSubscribers.clear(); + mSnapshotSubscribers.clear(); + mMetadataSubscribers.clear(); LOG_FUNCTION_NAME_EXIT; } @@ -130,40 +171,59 @@ status_t BaseCameraAdapter::setErrorHandler(ErrorNotifier *errorNotifier) void BaseCameraAdapter::enableMsgType(int32_t msgs, frame_callback callback, event_callback eventCb, void* cookie) { - Mutex::Autolock lock(mSubscriberLock); + android::AutoMutex lock(mSubscriberLock); LOG_FUNCTION_NAME; - if ( CameraFrame::PREVIEW_FRAME_SYNC == msgs ) - { - mFrameSubscribers.add((int) cookie, callback); - } - else if ( CameraFrame::FRAME_DATA_SYNC == msgs ) - { - mFrameDataSubscribers.add((int) cookie, callback); - } - else if ( CameraFrame::IMAGE_FRAME == msgs) - { - mImageSubscribers.add((int) cookie, callback); - } - else if ( CameraFrame::RAW_FRAME == msgs) - { - mRawSubscribers.add((int) cookie, callback); - } - else if ( CameraFrame::VIDEO_FRAME_SYNC == msgs) - { - mVideoSubscribers.add((int) cookie, callback); - } - else if ( CameraHalEvent::ALL_EVENTS == msgs) + 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 ) { - mFocusSubscribers.add((int) cookie, eventCb); - mShutterSubscribers.add((int) cookie, eventCb); - mZoomSubscribers.add((int) cookie, eventCb); - mFaceSubscribers.add((int) cookie, eventCb); + 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; + } } - else + + if ( eventMsg != 0) { - CAMHAL_LOGEA("Message type subscription no supported yet!"); + 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; @@ -171,59 +231,78 @@ void BaseCameraAdapter::enableMsgType(int32_t msgs, frame_callback callback, eve void BaseCameraAdapter::disableMsgType(int32_t msgs, void* cookie) { - Mutex::Autolock lock(mSubscriberLock); + android::AutoMutex lock(mSubscriberLock); LOG_FUNCTION_NAME; - if ( CameraFrame::PREVIEW_FRAME_SYNC == msgs ) - { - mFrameSubscribers.removeItem((int) cookie); - } - else if ( CameraFrame::FRAME_DATA_SYNC == msgs ) - { - mFrameDataSubscribers.removeItem((int) cookie); - } - else if ( CameraFrame::IMAGE_FRAME == msgs) - { - mImageSubscribers.removeItem((int) cookie); - } - else if ( CameraFrame::RAW_FRAME == msgs) - { - mRawSubscribers.removeItem((int) cookie); - } - else if ( CameraFrame::VIDEO_FRAME_SYNC == msgs) - { - mVideoSubscribers.removeItem((int) cookie); - } - else if ( CameraFrame::ALL_FRAMES == msgs ) - { - mFrameSubscribers.removeItem((int) cookie); - mFrameDataSubscribers.removeItem((int) cookie); - mImageSubscribers.removeItem((int) cookie); - mRawSubscribers.removeItem((int) cookie); - mVideoSubscribers.removeItem((int) cookie); - } - else if ( CameraHalEvent::ALL_EVENTS == msgs) + 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 ) { - //Subscribe only for focus - //TODO: Process case by case - mFocusSubscribers.removeItem((int) cookie); - mShutterSubscribers.removeItem((int) cookie); - mZoomSubscribers.removeItem((int) cookie); - mFaceSubscribers.removeItem((int) cookie); + 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; + } } - else + + if ( eventMsg != 0 ) { - CAMHAL_LOGEB("Message type 0x%x subscription no supported yet!", msgs); + 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(void *frameBuf, void *buf) +void BaseCameraAdapter::addFramePointers(CameraBuffer *frameBuf, void *buf) { unsigned int *pBuf = (unsigned int *)buf; - Mutex::Autolock lock(mSubscriberLock); + android::AutoMutex lock(mSubscriberLock); if ((frameBuf != NULL) && ( pBuf != NULL) ) { @@ -239,7 +318,7 @@ void BaseCameraAdapter::addFramePointers(void *frameBuf, void *buf) void BaseCameraAdapter::removeFramePointers() { - Mutex::Autolock lock(mSubscriberLock); + android::AutoMutex lock(mSubscriberLock); int size = mFrameQueue.size(); CAMHAL_LOGVB("Removing %d Frames = ", size); @@ -252,7 +331,7 @@ void BaseCameraAdapter::removeFramePointers() mFrameQueue.clear(); } -void BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frameType) +void BaseCameraAdapter::returnFrame(CameraBuffer * frameBuf, CameraFrame::FrameType frameType) { status_t res = NO_ERROR; size_t subscriberCount = 0; @@ -266,7 +345,7 @@ void BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frame if ( NO_ERROR == res) { - Mutex::Autolock lock(mReturnFrameLock); + android::AutoMutex lock(mReturnFrameLock); refCount = getFrameRefCount(frameBuf, frameType); @@ -310,13 +389,15 @@ void BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frame //check if someone is holding this buffer if ( 0 == refCount ) { -#ifdef DEBUG_LOG - if(mBuffersWithDucati.indexOfKey((int)frameBuf)>=0) +#ifdef CAMERAHAL_DEBUG + if((mBuffersWithDucati.indexOfKey((int)camera_buffer_get_omx_ptr(frameBuf)) >= 0) && + ((CameraFrame::PREVIEW_FRAME_SYNC == frameType) || + (CameraFrame::SNAPSHOT_FRAME == frameType))) { - ALOGE("Buffer already with Ducati!! 0x%x", frameBuf); - for(int i=0;imBuffers; + 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); + 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); + mPreviewBuffersAvailable.add(&mPreviewBuffers[i], 1); } } @@ -404,19 +485,19 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in if ( ret == NO_ERROR ) { - Mutex::Autolock lock(mPreviewDataBufferLock); - mPreviewDataBuffers = (int *) desc->mBuffers; + 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); + 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); + mPreviewDataBuffersAvailable.add(&mPreviewDataBuffers[i], 1); } } @@ -457,19 +538,19 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in if ( ret == NO_ERROR ) { - Mutex::Autolock lock(mCaptureBufferLock); - mCaptureBuffers = (int *) desc->mBuffers; + 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); + 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); + mCaptureBuffersAvailable.add(&mCaptureBuffers[i], 1); } } @@ -493,6 +574,48 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in 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: { @@ -657,32 +780,6 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in } - case CameraAdapter::CAMERA_PREVIEW_FLUSH_BUFFERS: - { - - if ( ret == NO_ERROR ) - { - ret = setState(operation); - } - - if ( ret == NO_ERROR ) - { - ret = flushBuffers(); - } - - if ( ret == NO_ERROR ) - { - ret = commitState(); - } - else - { - ret |= rollbackState(); - } - - break; - - } - case CameraAdapter::CAMERA_START_IMAGE_CAPTURE: { @@ -908,7 +1005,7 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in if ( NULL != frame ) { - ret = getPictureBufferSize(frame->mLength, value2); + ret = getPictureBufferSize(*frame, value2); } else { @@ -959,7 +1056,6 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in break; -#ifndef OMAP_TUNA case CameraAdapter::CAMERA_START_FD: ret = startFaceDetection(); @@ -971,11 +1067,69 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in 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_SWITCH_TO_EXECUTING: - ret = switchToExecuting(); - break; + case CameraAdapter::CAMERA_PREVIEW_INITIALIZATION: + ret = cameraPreviewInitialization(); + break; default: CAMHAL_LOGEB("Command 0x%x unsupported!", operation); @@ -1000,9 +1154,9 @@ status_t BaseCameraAdapter::notifyFocusSubscribers(CameraHalEvent::FocusStatus s } #if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS - if (status == CameraHalEvent::FOCUS_STATUS_PENDING) { + if (status == CameraHalEvent::FOCUS_STATUS_PENDING) { gettimeofday(&mStartFocus, NULL); - } else { + } else { //dump the AF latency CameraHal::PPM("Focus finished in: ", &mStartFocus); } @@ -1056,14 +1210,14 @@ status_t BaseCameraAdapter::notifyShutterSubscribers() shutterEvent.mCookie = ( void * ) mShutterSubscribers.keyAt(i); eventCb = ( event_callback ) mShutterSubscribers.valueAt(i); - CAMHAL_LOGDA("Sending shutter callback"); + CAMHAL_LOGD("Sending shutter callback"); eventCb ( &shutterEvent ); } shutterEvent.mEventData.clear(); - LOG_FUNCTION_NAME; + LOG_FUNCTION_NAME_EXIT; return ret; } @@ -1104,35 +1258,35 @@ status_t BaseCameraAdapter::notifyZoomSubscribers(int zoomIdx, bool targetReache return ret; } -status_t BaseCameraAdapter::notifyFaceSubscribers(sp &faces) +status_t BaseCameraAdapter::notifyMetadataSubscribers(android::sp &meta) { event_callback eventCb; - CameraHalEvent faceEvent; + CameraHalEvent metaEvent; status_t ret = NO_ERROR; LOG_FUNCTION_NAME; - if ( mFaceSubscribers.size() == 0 ) { - CAMHAL_LOGDA("No face detection subscribers!"); + if ( mMetadataSubscribers.size() == 0 ) { + CAMHAL_LOGDA("No preview metadata subscribers!"); return NO_INIT; } - faceEvent.mEventData = new CameraHalEvent::CameraHalEventData(); - if ( NULL == faceEvent.mEventData.get() ) { + metaEvent.mEventData = new CameraHalEvent::CameraHalEventData(); + if ( NULL == metaEvent.mEventData.get() ) { return -ENOMEM; } - faceEvent.mEventType = CameraHalEvent::EVENT_FACE; - faceEvent.mEventData->faceEvent = faces; + metaEvent.mEventType = CameraHalEvent::EVENT_METADATA; + metaEvent.mEventData->metadataEvent = meta; - for (unsigned int i = 0 ; i < mFaceSubscribers.size(); i++ ) { - faceEvent.mCookie = (void *) mFaceSubscribers.keyAt(i); - eventCb = (event_callback) mFaceSubscribers.valueAt(i); + for (unsigned int i = 0 ; i < mMetadataSubscribers.size(); i++ ) { + metaEvent.mCookie = (void *) mMetadataSubscribers.keyAt(i); + eventCb = (event_callback) mMetadataSubscribers.valueAt(i); - eventCb ( &faceEvent ); + eventCb ( &metaEvent ); } - faceEvent.mEventData.clear(); + metaEvent.mEventData.clear(); LOG_FUNCTION_NAME_EXIT; @@ -1174,7 +1328,7 @@ status_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame) break; case CameraFrame::SNAPSHOT_FRAME: { - ret = __sendFrameToSubscribers(frame, &mFrameSubscribers, CameraFrame::SNAPSHOT_FRAME); + ret = __sendFrameToSubscribers(frame, &mSnapshotSubscribers, CameraFrame::SNAPSHOT_FRAME); } break; case CameraFrame::VIDEO_FRAME_SYNC: @@ -1187,6 +1341,11 @@ status_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame) 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; @@ -1204,7 +1363,7 @@ status_t BaseCameraAdapter::sendFrameToSubscribers(CameraFrame *frame) } status_t BaseCameraAdapter::__sendFrameToSubscribers(CameraFrame* frame, - KeyedVector *subscribers, + android::KeyedVector *subscribers, CameraFrame::FrameType frameType) { size_t refCount = 0; @@ -1219,7 +1378,7 @@ status_t BaseCameraAdapter::__sendFrameToSubscribers(CameraFrame* frame, if (mFrameQueue.size() > 0){ CameraFrame *lframe = (CameraFrame *)mFrameQueue.valueFor(frame->mBuffer); frame->mYuv[0] = lframe->mYuv[0]; - frame->mYuv[1] = lframe->mYuv[1]; + frame->mYuv[1] = frame->mYuv[0] + (frame->mLength + frame->mOffset)*2/3; } else{ CAMHAL_LOGDA("Empty Frame Queue"); @@ -1264,7 +1423,7 @@ status_t BaseCameraAdapter::__sendFrameToSubscribers(CameraFrame* frame, return ret; } -int BaseCameraAdapter::setInitFrameRefCount(void* buf, unsigned int mask) +int BaseCameraAdapter::setInitFrameRefCount(CameraBuffer * buf, unsigned int mask) { int ret = NO_ERROR; unsigned int lmask; @@ -1297,7 +1456,7 @@ int BaseCameraAdapter::setInitFrameRefCount(void* buf, unsigned int mask) break; case CameraFrame::SNAPSHOT_FRAME: { - setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mFrameSubscribers.size()); + setFrameRefCount(buf, CameraFrame::SNAPSHOT_FRAME, mSnapshotSubscribers.size()); } break; case CameraFrame::VIDEO_FRAME_SYNC: @@ -1310,6 +1469,11 @@ int BaseCameraAdapter::setInitFrameRefCount(void* buf, unsigned int mask) 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; @@ -1321,7 +1485,7 @@ int BaseCameraAdapter::setInitFrameRefCount(void* buf, unsigned int mask) return ret; } -int BaseCameraAdapter::getFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType) +int BaseCameraAdapter::getFrameRefCount(CameraBuffer * frameBuf, CameraFrame::FrameType frameType) { int res = -1; @@ -1332,29 +1496,39 @@ int BaseCameraAdapter::getFrameRefCount(void* frameBuf, CameraFrame::FrameType f case CameraFrame::IMAGE_FRAME: case CameraFrame::RAW_FRAME: { - Mutex::Autolock lock(mCaptureBufferLock); - res = mCaptureBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); + android::AutoMutex lock(mCaptureBufferLock); + res = mCaptureBuffersAvailable.valueFor(frameBuf ); } break; - case CameraFrame::PREVIEW_FRAME_SYNC: case CameraFrame::SNAPSHOT_FRAME: { - Mutex::Autolock lock(mPreviewBufferLock); - res = mPreviewBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); + 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: { - Mutex::Autolock lock(mPreviewDataBufferLock); - res = mPreviewDataBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); + android::AutoMutex lock(mPreviewDataBufferLock); + res = mPreviewDataBuffersAvailable.valueFor(frameBuf ); } break; case CameraFrame::VIDEO_FRAME_SYNC: { - Mutex::Autolock lock(mVideoBufferLock); - res = mVideoBuffersAvailable.valueFor( ( unsigned int ) frameBuf ); + 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; }; @@ -1364,7 +1538,7 @@ int BaseCameraAdapter::getFrameRefCount(void* frameBuf, CameraFrame::FrameType f return res; } -void BaseCameraAdapter::setFrameRefCount(void* frameBuf, CameraFrame::FrameType frameType, int refCount) +void BaseCameraAdapter::setFrameRefCount(CameraBuffer * frameBuf, CameraFrame::FrameType frameType, int refCount) { LOG_FUNCTION_NAME; @@ -1374,29 +1548,39 @@ void BaseCameraAdapter::setFrameRefCount(void* frameBuf, CameraFrame::FrameType case CameraFrame::IMAGE_FRAME: case CameraFrame::RAW_FRAME: { - Mutex::Autolock lock(mCaptureBufferLock); - mCaptureBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); + android::AutoMutex lock(mCaptureBufferLock); + mCaptureBuffersAvailable.replaceValueFor(frameBuf, refCount); } break; - case CameraFrame::PREVIEW_FRAME_SYNC: case CameraFrame::SNAPSHOT_FRAME: { - Mutex::Autolock lock(mPreviewBufferLock); - mPreviewBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); + 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: { - Mutex::Autolock lock(mPreviewDataBufferLock); - mPreviewDataBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); + android::AutoMutex lock(mPreviewDataBufferLock); + mPreviewDataBuffersAvailable.replaceValueFor(frameBuf, refCount); } break; case CameraFrame::VIDEO_FRAME_SYNC: { - Mutex::Autolock lock(mVideoBufferLock); - mVideoBuffersAvailable.replaceValueFor( ( unsigned int ) frameBuf, refCount); + 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; }; @@ -1411,7 +1595,7 @@ status_t BaseCameraAdapter::startVideoCapture() LOG_FUNCTION_NAME; - Mutex::Autolock lock(mVideoBufferLock); + android::AutoMutex lock(mVideoBufferLock); //If the capture is already ongoing, return from here. if ( mRecording ) @@ -1423,8 +1607,6 @@ status_t BaseCameraAdapter::startVideoCapture() if ( NO_ERROR == ret ) { - mVideoBuffersAvailable.clear(); - for ( unsigned int i = 0 ; i < mPreviewBuffersAvailable.size() ; i++ ) { mVideoBuffersAvailable.add(mPreviewBuffersAvailable.keyAt(i), 0); @@ -1453,13 +1635,15 @@ status_t BaseCameraAdapter::stopVideoCapture() { for ( unsigned int i = 0 ; i < mVideoBuffersAvailable.size() ; i++ ) { - void *frameBuf = ( void * ) mVideoBuffersAvailable.keyAt(i); + CameraBuffer *frameBuf = mVideoBuffersAvailable.keyAt(i); if( getFrameRefCount(frameBuf, CameraFrame::VIDEO_FRAME_SYNC) > 0) { returnFrame(frameBuf, CameraFrame::VIDEO_FRAME_SYNC); } } + mVideoBuffersAvailable.clear(); + mRecording = false; } @@ -1582,7 +1766,7 @@ status_t BaseCameraAdapter::stopPreview() return ret; } -status_t BaseCameraAdapter::useBuffers(CameraMode mode, void* bufArr, int num, size_t length, unsigned int queueable) +status_t BaseCameraAdapter::useBuffers(CameraMode mode, CameraBuffer* bufArr, int num, size_t length, unsigned int queueable) { status_t ret = NO_ERROR; @@ -1593,7 +1777,7 @@ status_t BaseCameraAdapter::useBuffers(CameraMode mode, void* bufArr, int num, s return ret; } -status_t BaseCameraAdapter::fillThisBuffer(void* frameBuf, CameraFrame::FrameType frameType) +status_t BaseCameraAdapter::fillThisBuffer(CameraBuffer * frameBuf, CameraFrame::FrameType frameType) { status_t ret = NO_ERROR; @@ -1626,7 +1810,7 @@ status_t BaseCameraAdapter::getFrameDataSize(size_t &dataFrameSize, size_t buffe return ret; } -status_t BaseCameraAdapter::getPictureBufferSize(size_t &length, size_t bufferCount) +status_t BaseCameraAdapter::getPictureBufferSize(CameraFrame &frame, size_t bufferCount) { status_t ret = NO_ERROR; @@ -1667,12 +1851,44 @@ status_t BaseCameraAdapter::switchToExecuting() 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 ) @@ -1684,8 +1900,8 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_USE_BUFFERS_PREVIEW: - CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->LOADED_PREVIEW_STATE event = 0x%x", - operation); + CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->LOADED_PREVIEW_STATE event = %s", + printState); mNextState = LOADED_PREVIEW_STATE; break; @@ -1693,20 +1909,21 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) 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 = 0x%x", - operation); + CAMHAL_LOGDB("Adapter state switch INTIALIZED_STATE->INTIALIZED_STATE event = %s", + printState); mNextState = INTIALIZED_STATE; break; - - case CAMERA_CANCEL_AUTOFOCUS: 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch INTIALIZED_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1720,8 +1937,8 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_START_PREVIEW: - CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->PREVIEW_STATE event = 0x%x", - operation); + CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW_STATE->PREVIEW_STATE event = %s", + printState); mNextState = PREVIEW_STATE; break; @@ -1735,14 +1952,14 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGDB("Adapter state switch LOADED_PREVIEW Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1756,46 +1973,61 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_STOP_PREVIEW: - CAMHAL_LOGDB("Adapter state switch PREVIEW_STATE->INTIALIZED_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch PREVIEW_ACTIVE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1803,26 +2035,72 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1836,14 +2114,28 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_STOP_IMAGE_CAPTURE: case CAMERA_STOP_BRACKET_CAPTURE: - CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1858,20 +2150,20 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) case CAMERA_STOP_IMAGE_CAPTURE: case CAMERA_STOP_BRACKET_CAPTURE: - CAMHAL_LOGDB("Adapter state switch BRACKETING_STATE->PREVIEW_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch BRACKETING_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1885,26 +2177,20 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_CANCEL_AUTOFOCUS: - CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = 0x%x", - operation); + CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = %s", + printState); mNextState = PREVIEW_STATE; break; - case CAMERA_START_IMAGE_CAPTURE: - CAMHAL_LOGDB("Adapter state switch AF_STATE->CAPTURE_STATE event = 0x%x", - operation); - mNextState = CAPTURE_STATE; - break; - case CAMERA_START_SMOOTH_ZOOM: - CAMHAL_LOGDB("Adapter state switch AF_STATE->AF_ZOOM_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch AF_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1918,32 +2204,32 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_CANCEL_AUTOFOCUS: - CAMHAL_LOGDB("Adapter state switch AF_STATE->PREVIEW_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch ZOOM_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -1957,38 +2243,38 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_STOP_VIDEO: - CAMHAL_LOGDB("Adapter state switch VIDEO_STATE->PREVIEW_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch VIDEO_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -2002,14 +2288,14 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_CANCEL_AUTOFOCUS: - CAMHAL_LOGDB("Adapter state switch VIDEO_AF_STATE->VIDEO_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch VIDEO_AF_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -2023,14 +2309,14 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_START_IMAGE_CAPTURE: - CAMHAL_LOGDB("Adapter state switch LOADED_CAPTURE_STATE->CAPTURE_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch LOADED_CAPTURE_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -2043,14 +2329,14 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) switch ( operation ) { case CAMERA_STOP_IMAGE_CAPTURE: - CAMHAL_LOGDB("Adapter state switch CAPTURE_STATE->PREVIEW_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch CAPTURE_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -2064,20 +2350,20 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_STOP_SMOOTH_ZOOM: - CAMHAL_LOGDB("Adapter state switch AF_ZOOM_STATE->AF_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch AF_ZOOM_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -2091,20 +2377,20 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_STOP_SMOOTH_ZOOM: - CAMHAL_LOGDB("Adapter state switch VIDEO_ZOOM_STATE->VIDEO_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch VIDEO_ZOOM_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -2118,14 +2404,14 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) { case CAMERA_STOP_SMOOTH_ZOOM: - CAMHAL_LOGDB("Adapter state switch BRACKETING_ZOOM_STATE->BRACKETING_STATE event = 0x%x", - operation); + 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 = 0x%x", - operation); + CAMHAL_LOGEB("Adapter state switch BRACKETING_ZOOM_STATE Invalid Op! event = %s", + printState); ret = INVALID_OPERATION; break; @@ -2133,6 +2419,33 @@ status_t BaseCameraAdapter::setState(CameraCommands operation) 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; @@ -2175,6 +2488,9 @@ status_t BaseCameraAdapter::rollbackToPreviousState() break; case CAPTURE_STATE: +#ifdef OMAP_ENHANCEMENT_CPCAM + case REPROCESS_STATE: +#endif ret = sendCommand(CAMERA_STOP_IMAGE_CAPTURE); break; @@ -2265,7 +2581,7 @@ CameraAdapter::AdapterState BaseCameraAdapter::getState() LOG_FUNCTION_NAME; - Mutex::Autolock lock(mLock); + android::AutoMutex lock(mLock); LOG_FUNCTION_NAME_EXIT; @@ -2278,7 +2594,7 @@ CameraAdapter::AdapterState BaseCameraAdapter::getNextState() LOG_FUNCTION_NAME; - Mutex::Autolock lock(mLock); + android::AutoMutex lock(mLock); LOG_FUNCTION_NAME_EXIT; @@ -2321,11 +2637,57 @@ 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-----------------------------*/ -- cgit v1.1