summaryrefslogtreecommitdiff
path: root/camera
diff options
context:
space:
mode:
Diffstat (limited to 'camera')
-rw-r--r--camera/ANativeWindowDisplayAdapter.cpp24
-rw-r--r--camera/Android.mk6
-rw-r--r--camera/AppCallbackNotifier.cpp104
-rw-r--r--camera/BaseCameraAdapter.cpp38
-rw-r--r--camera/CameraHal.cpp295
-rw-r--r--camera/CameraHalCommon.cpp6
-rw-r--r--camera/CameraHalUtilClasses.cpp724
-rw-r--r--camera/CameraHal_Module.cpp62
-rw-r--r--camera/CameraProperties.cpp8
-rw-r--r--camera/Encoder_libjpeg.cpp9
-rw-r--r--camera/MemoryManager.cpp340
-rw-r--r--camera/NV12_resize.c28
-rw-r--r--camera/OMXCameraAdapter/OMX3A.cpp95
-rw-r--r--camera/OMXCameraAdapter/OMXAlgo.cpp4
-rwxr-xr-xcamera/OMXCameraAdapter/OMXCameraAdapter.cpp219
-rw-r--r--camera/OMXCameraAdapter/OMXCapture.cpp74
-rw-r--r--[-rwxr-xr-x]camera/OMXCameraAdapter/OMXExif.cpp130
-rw-r--r--camera/OMXCameraAdapter/OMXFD.cpp48
-rw-r--r--camera/OMXCameraAdapter/OMXFocus.cpp152
-rw-r--r--camera/V4LCameraAdapter/V4LCameraAdapter.cpp2
-rw-r--r--camera/inc/ANativeWindowDisplayAdapter.h377
-rw-r--r--camera/inc/BaseCameraAdapter.h2
-rw-r--r--camera/inc/CameraHal.h18
-rw-r--r--camera/inc/CameraProperties.h396
-rw-r--r--[-rwxr-xr-x]camera/inc/Encoder_libjpeg.h41
-rw-r--r--camera/inc/OMXCameraAdapter/OMXCameraAdapter.h18
-rw-r--r--camera/inc/TICameraParameters.h484
27 files changed, 2049 insertions, 1655 deletions
diff --git a/camera/ANativeWindowDisplayAdapter.cpp b/camera/ANativeWindowDisplayAdapter.cpp
index 3f13b521..e4a70ae5 100644
--- a/camera/ANativeWindowDisplayAdapter.cpp
+++ b/camera/ANativeWindowDisplayAdapter.cpp
@@ -177,8 +177,8 @@ ANativeWindowDisplayAdapter::ANativeWindowDisplayAdapter():mDisplayThread(NULL),
mFailedDQs = 0;
mPaused = false;
- mXOff = 0;
- mYOff = 0;
+ mXOff = -1;
+ mYOff = -1;
mFirstInit = false;
mFD = -1;
@@ -269,6 +269,10 @@ int ANativeWindowDisplayAdapter::setPreviewWindow(preview_stream_ops_t* window)
return BAD_VALUE;
}
+ if ( window == mANativeWindow ) {
+ return ALREADY_EXISTS;
+ }
+
///Destroy the existing window object, if it exists
destroy();
@@ -454,8 +458,8 @@ int ANativeWindowDisplayAdapter::disableDisplay(bool cancel_buffer)
mDisplayEnabled = false;
///Reset the offset values
- mXOff = 0;
- mYOff = 0;
+ mXOff = -1;
+ mYOff = -1;
///Reset the frame width and height values
mFrameWidth =0;
@@ -536,7 +540,7 @@ void* ANativeWindowDisplayAdapter::allocateBuffer(int width, int height, const c
// Set gralloc usage bits for window.
err = mANativeWindow->set_usage(mANativeWindow, CAMHAL_GRALLOC_USAGE);
if (err != 0) {
- LOGE("native_window_set_usage failed: %s (%d)", strerror(-err), -err);
+ ALOGE("native_window_set_usage failed: %s (%d)", strerror(-err), -err);
if ( ENODEV == err ) {
CAMHAL_LOGEA("Preview surface abandoned!");
@@ -550,7 +554,7 @@ void* ANativeWindowDisplayAdapter::allocateBuffer(int width, int height, const c
///Set the number of buffers needed for camera preview
err = mANativeWindow->set_buffer_count(mANativeWindow, numBufs);
if (err != 0) {
- LOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err), -err);
+ ALOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err), -err);
if ( ENODEV == err ) {
CAMHAL_LOGEA("Preview surface abandoned!");
@@ -571,7 +575,7 @@ void* ANativeWindowDisplayAdapter::allocateBuffer(int width, int height, const c
/*toOMXPixFormat(format)*/HAL_PIXEL_FORMAT_TI_NV12); // Gralloc only supports NV12 alloc!
if (err != 0) {
- LOGE("native_window_set_buffers_geometry failed: %s (%d)", strerror(-err), -err);
+ ALOGE("native_window_set_buffers_geometry failed: %s (%d)", strerror(-err), -err);
if ( ENODEV == err ) {
CAMHAL_LOGEA("Preview surface abandoned!");
@@ -826,7 +830,7 @@ status_t ANativeWindowDisplayAdapter::returnBuffersToWindow()
}
}
else
- LOGE("mANativeWindow is NULL");
+ ALOGE("mANativeWindow is NULL");
///Clear the frames with camera adapter map
mFramesWithCameraAdapterMap.clear();
@@ -1095,7 +1099,7 @@ status_t ANativeWindowDisplayAdapter::PostFrame(ANativeWindowDisplayAdapter::Dis
mapper.unlock((buffer_handle_t) mGrallocHandleMap[i]);
ret = mANativeWindow->enqueue_buffer(mANativeWindow, mBufferHandleMap[i]);
if (ret != 0) {
- LOGE("Surface::queueBuffer returned error %d", ret);
+ ALOGE("Surface::queueBuffer returned error %d", ret);
}
mFramesWithCameraAdapterMap.removeItem((int) dispFrame.mBuffer);
@@ -1137,7 +1141,7 @@ status_t ANativeWindowDisplayAdapter::PostFrame(ANativeWindowDisplayAdapter::Dis
// cancel buffer and dequeue another one
ret = mANativeWindow->cancel_buffer(mANativeWindow, mBufferHandleMap[i]);
if (ret != 0) {
- LOGE("Surface::queueBuffer returned error %d", ret);
+ ALOGE("Surface::queueBuffer returned error %d", ret);
}
mFramesWithCameraAdapterMap.removeItem((int) dispFrame.mBuffer);
diff --git a/camera/Android.mk b/camera/Android.mk
index a84d0f90..1d7e0486 100644
--- a/camera/Android.mk
+++ b/camera/Android.mk
@@ -59,13 +59,11 @@ LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/inc/OMXCameraAdapter \
$(LOCAL_PATH)/../libtiutils \
hardware/ti/omap4xxx/tiler \
- hardware/ti/omap4xxx/ion \
- frameworks/base/include/ui \
- frameworks/base/include/utils \
hardware/ti/omap4xxx/domx/omx_core/inc \
hardware/ti/omap4xxx/domx/mm_osal/inc \
frameworks/base/include/media/stagefright \
- frameworks/base/include/media/stagefright/openmax \
+ frameworks/native/include/media/hardware \
+ frameworks/native/include/media/openmax \
external/jpeg \
external/jhead
diff --git a/camera/AppCallbackNotifier.cpp b/camera/AppCallbackNotifier.cpp
index bfdd6718..aa411414 100644
--- a/camera/AppCallbackNotifier.cpp
+++ b/camera/AppCallbackNotifier.cpp
@@ -38,12 +38,24 @@ void AppCallbackNotifierEncoderCallback(void* main_jpeg,
CameraFrame::FrameType type,
void* cookie1,
void* cookie2,
- void* cookie3)
+ void* cookie3,
+ bool canceled)
{
- if (cookie1) {
+ if (cookie1 && !canceled) {
AppCallbackNotifier* cb = (AppCallbackNotifier*) cookie1;
cb->EncoderDoneCb(main_jpeg, thumb_jpeg, type, cookie2, cookie3);
}
+
+ if (main_jpeg) {
+ free(main_jpeg);
+ }
+
+ if (thumb_jpeg) {
+ if (((Encoder_libjpeg::params *) thumb_jpeg)->dst) {
+ free(((Encoder_libjpeg::params *) thumb_jpeg)->dst);
+ }
+ free(thumb_jpeg);
+ }
}
/*--------------------NotificationHandler Class STARTS here-----------------------------*/
@@ -129,30 +141,17 @@ void AppCallbackNotifier::EncoderDoneCb(void* main_jpeg, void* thumb_jpeg, Camer
exit:
- if (main_jpeg) {
- free(main_jpeg);
- }
-
- if (thumb_jpeg) {
- if (((Encoder_libjpeg::params *) thumb_jpeg)->dst) {
- free(((Encoder_libjpeg::params *) thumb_jpeg)->dst);
- }
- free(thumb_jpeg);
- }
-
- if (encoded_mem) {
- encoded_mem->release(encoded_mem);
- }
-
if (picture) {
picture->release(picture);
}
- if (cookie2) {
- delete (ExifElementsTable*) cookie2;
- }
-
if (mNotifierState == AppCallbackNotifier::NOTIFIER_STARTED) {
+ if (encoded_mem) {
+ encoded_mem->release(encoded_mem);
+ }
+ if (cookie2) {
+ delete (ExifElementsTable*) cookie2;
+ }
encoder = gEncoderQueue.valueFor(src);
if (encoder.get()) {
gEncoderQueue.removeItem(src);
@@ -285,7 +284,8 @@ bool AppCallbackNotifier::notificationThread()
CAMHAL_LOGDA("Notification Thread received message from Camera HAL");
shouldLive = processMessage();
if(!shouldLive) {
- CAMHAL_LOGDA("Notification Thread exiting.");
+ CAMHAL_LOGDA("Notification Thread exiting.");
+ return shouldLive;
}
}
@@ -311,8 +311,12 @@ void AppCallbackNotifier::notifyEvent()
TIUTILS::Message msg;
LOG_FUNCTION_NAME;
{
- Mutex::Autolock lock(mLock);
- mEventQ.get(&msg);
+ Mutex::Autolock lock(mLock);
+ if(!mEventQ.isEmpty()) {
+ mEventQ.get(&msg);
+ } else {
+ return;
+ }
}
bool ret = true;
CameraHalEvent *evt = NULL;
@@ -353,23 +357,36 @@ void AppCallbackNotifier::notifyEvent()
case CameraHalEvent::EVENT_FOCUS_LOCKED:
case CameraHalEvent::EVENT_FOCUS_ERROR:
-
focusEvtData = &evt->mEventData->focusEvent;
- if ( ( focusEvtData->focusLocked ) &&
- ( NULL != mCameraHal ) &&
- ( NULL != mNotifyCb ) &&
- ( mCameraHal->msgTypeEnabled(CAMERA_MSG_FOCUS) ) )
+ if ( ( focusEvtData->focusStatus == CameraHalEvent::FOCUS_STATUS_SUCCESS ) &&
+ ( NULL != mCameraHal ) &&
+ ( NULL != mNotifyCb ) &&
+ ( mCameraHal->msgTypeEnabled(CAMERA_MSG_FOCUS) ) )
{
- mNotifyCb(CAMERA_MSG_FOCUS, true, 0, mCallbackCookie);
mCameraHal->disableMsgType(CAMERA_MSG_FOCUS);
+ mNotifyCb(CAMERA_MSG_FOCUS, true, 0, mCallbackCookie);
}
- else if ( focusEvtData->focusError &&
- ( NULL != mCameraHal ) &&
- ( NULL != mNotifyCb ) &&
- ( mCameraHal->msgTypeEnabled(CAMERA_MSG_FOCUS) ) )
+ else if ( ( focusEvtData->focusStatus == CameraHalEvent::FOCUS_STATUS_FAIL ) &&
+ ( NULL != mCameraHal ) &&
+ ( NULL != mNotifyCb ) &&
+ ( mCameraHal->msgTypeEnabled(CAMERA_MSG_FOCUS) ) )
{
- mNotifyCb(CAMERA_MSG_FOCUS, false, 0, mCallbackCookie);
mCameraHal->disableMsgType(CAMERA_MSG_FOCUS);
+ mNotifyCb(CAMERA_MSG_FOCUS, false, 0, mCallbackCookie);
+ }
+ else if ( ( focusEvtData->focusStatus == CameraHalEvent::FOCUS_STATUS_PENDING ) &&
+ ( NULL != mCameraHal ) &&
+ ( NULL != mNotifyCb ) &&
+ ( mCameraHal->msgTypeEnabled(CAMERA_MSG_FOCUS_MOVE) ) )
+ {
+ mNotifyCb(CAMERA_MSG_FOCUS_MOVE, true, 0, mCallbackCookie);
+ }
+ else if ( ( focusEvtData->focusStatus == CameraHalEvent::FOCUS_STATUS_DONE ) &&
+ ( NULL != mCameraHal ) &&
+ ( NULL != mNotifyCb ) &&
+ ( mCameraHal->msgTypeEnabled(CAMERA_MSG_FOCUS_MOVE) ) )
+ {
+ mNotifyCb(CAMERA_MSG_FOCUS_MOVE, false, 0, mCallbackCookie);
}
break;
@@ -1206,7 +1223,7 @@ bool AppCallbackNotifier::processMessage()
{
case NotificationThread::NOTIFIER_EXIT:
{
- CAMHAL_LOGI("Received NOTIFIER_EXIT command from Camera HAL");
+ CAMHAL_LOGDA("Received NOTIFIER_EXIT command from Camera HAL");
mNotifierState = AppCallbackNotifier::NOTIFIER_EXITED;
ret = false;
break;
@@ -1664,7 +1681,7 @@ status_t AppCallbackNotifier::enableMsgType(int32_t msgType)
status_t AppCallbackNotifier::disableMsgType(int32_t msgType)
{
- if(!mCameraHal->msgTypeEnabled(CAMERA_MSG_PREVIEW_FRAME | CAMERA_MSG_POSTVIEW_FRAME)) {
+ if( msgType & (CAMERA_MSG_PREVIEW_FRAME | CAMERA_MSG_POSTVIEW_FRAME) ) {
mFrameProvider->disableFrameNotification(CameraFrame::PREVIEW_FRAME_SYNC);
}
@@ -1732,9 +1749,20 @@ status_t AppCallbackNotifier::stop()
while(!gEncoderQueue.isEmpty()) {
sp<Encoder_libjpeg> encoder = gEncoderQueue.valueAt(0);
+ camera_memory_t* encoded_mem = NULL;
+ ExifElementsTable* exif = NULL;
+
if(encoder.get()) {
encoder->cancel();
- encoder->join();
+
+ encoder->getCookies(NULL, (void**) &encoded_mem, (void**) &exif);
+ if (encoded_mem) {
+ encoded_mem->release(encoded_mem);
+ }
+ if (exif) {
+ delete exif;
+ }
+
encoder.clear();
}
gEncoderQueue.removeItemsAt(0);
diff --git a/camera/BaseCameraAdapter.cpp b/camera/BaseCameraAdapter.cpp
index 882e4df3..bb7a5b82 100644
--- a/camera/BaseCameraAdapter.cpp
+++ b/camera/BaseCameraAdapter.cpp
@@ -258,8 +258,6 @@ void BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frame
size_t subscriberCount = 0;
int refCount = -1;
- Mutex::Autolock lock(mReturnFrameLock);
-
if ( NULL == frameBuf )
{
CAMHAL_LOGEA("Invalid frameBuf");
@@ -268,6 +266,7 @@ void BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frame
if ( NO_ERROR == res)
{
+ Mutex::Autolock lock(mReturnFrameLock);
refCount = getFrameRefCount(frameBuf, frameType);
@@ -314,8 +313,8 @@ void BaseCameraAdapter::returnFrame(void* frameBuf, CameraFrame::FrameType frame
#ifdef DEBUG_LOG
if(mBuffersWithDucati.indexOfKey((int)frameBuf)>=0)
{
- LOGE("Buffer already with Ducati!! 0x%x", frameBuf);
- for(int i=0;i<mBuffersWithDucati.size();i++) LOGE("0x%x", mBuffersWithDucati.keyAt(i));
+ ALOGE("Buffer already with Ducati!! 0x%x", frameBuf);
+ for(int i=0;i<mBuffersWithDucati.size();i++) ALOGE("0x%x", mBuffersWithDucati.keyAt(i));
}
mBuffersWithDucati.add((int)frameBuf,1);
#endif
@@ -985,7 +984,7 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in
return ret;
}
-status_t BaseCameraAdapter::notifyFocusSubscribers(bool status)
+status_t BaseCameraAdapter::notifyFocusSubscribers(CameraHalEvent::FocusStatus status)
{
event_callback eventCb;
CameraHalEvent focusEvent;
@@ -999,10 +998,12 @@ status_t BaseCameraAdapter::notifyFocusSubscribers(bool status)
}
#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
-
- //dump the AF latency
- CameraHal::PPM("Focus finished in: ", &mStartFocus);
-
+ 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();
@@ -1011,8 +1012,7 @@ status_t BaseCameraAdapter::notifyFocusSubscribers(bool status)
}
focusEvent.mEventType = CameraHalEvent::EVENT_FOCUS_LOCKED;
- focusEvent.mEventData->focusEvent.focusLocked = status;
- focusEvent.mEventData->focusEvent.focusError = !status;
+ focusEvent.mEventData->focusEvent.focusStatus = status;
for (unsigned int i = 0 ; i < mFocusSubscribers.size(); i++ )
{
@@ -1054,7 +1054,7 @@ status_t BaseCameraAdapter::notifyShutterSubscribers()
shutterEvent.mCookie = ( void * ) mShutterSubscribers.keyAt(i);
eventCb = ( event_callback ) mShutterSubscribers.valueAt(i);
- CAMHAL_LOGEA("Sending shutter callback");
+ CAMHAL_LOGDA("Sending shutter callback");
eventCb ( &shutterEvent );
}
@@ -1518,7 +1518,7 @@ status_t BaseCameraAdapter::autoFocus()
LOG_FUNCTION_NAME;
- notifyFocusSubscribers(false);
+ notifyFocusSubscribers(CameraHalEvent::FOCUS_STATUS_FAIL);
LOG_FUNCTION_NAME_EXIT;
@@ -1696,6 +1696,12 @@ status_t BaseCameraAdapter::setState(CameraCommands operation)
mNextState = INTIALIZED_STATE;
break;
+ case CAMERA_CANCEL_AUTOFOCUS:
+ case CAMERA_STOP_BRACKET_CAPTURE:
+ case CAMERA_STOP_IMAGE_CAPTURE:
+ ret = INVALID_OPERATION;
+ break;
+
default:
CAMHAL_LOGEB("Adapter state switch INTIALIZED_STATE Invalid Op! event = 0x%x",
operation);
@@ -1717,6 +1723,12 @@ status_t BaseCameraAdapter::setState(CameraCommands operation)
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:
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp
index c7ba87fe..db734437 100644
--- a/camera/CameraHal.cpp
+++ b/camera/CameraHal.cpp
@@ -131,9 +131,7 @@ void CameraHal::enableMsgType(int32_t msgType)
// ignoring enable focus message from camera service
// we will enable internally in autoFocus call
- if (msgType & CAMERA_MSG_FOCUS) {
- msgType &= ~CAMERA_MSG_FOCUS;
- }
+ msgType &= ~(CAMERA_MSG_FOCUS | CAMERA_MSG_FOCUS_MOVE);
{
Mutex::Autolock lock(mLock);
@@ -249,19 +247,14 @@ int CameraHal::setParameters(const CameraParameters& params)
int w_orig, h_orig;
int framerate,minframerate;
int maxFPS, minFPS;
- int error;
- int base;
const char *valstr = NULL;
- const char *prevFormat;
- char *af_coord;
- TIUTILS::Message msg;
+ int varint = 0;
status_t ret = NO_ERROR;
+ CameraParameters oldParams = mParameters;
// Needed for KEY_RECORDING_HINT
bool restartPreviewRequired = false;
bool updateRequired = false;
- CameraParameters oldParams(mParameters.flatten());
bool videoMode = false;
- char range[MAX_PROP_VALUE_LENGTH];
{
Mutex::Autolock lock(mLock);
@@ -277,17 +270,19 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.setPreviewFormat(valstr);
} else {
CAMHAL_LOGEB("Invalid preview format.Supported: %s", mCameraProperties->get(CameraProperties::SUPPORTED_PREVIEW_FORMATS));
- return -EINVAL;
+ return BAD_VALUE;
}
}
- if ((valstr = params.get(TICameraParameters::KEY_VNF)) != NULL) {
- if ( (params.getInt(TICameraParameters::KEY_VNF)==0) || (params.getInt(TICameraParameters::KEY_VNF)==1) ) {
- CAMHAL_LOGDB("VNF set %s", params.get(TICameraParameters::KEY_VNF));
- mParameters.set(TICameraParameters::KEY_VNF, valstr);
+ varint = params.getInt(TICameraParameters::KEY_VNF);
+ valstr = params.get(TICameraParameters::KEY_VNF);
+ if ( valstr != NULL ) {
+ if ( ( varint == 0 ) || ( varint == 1 ) ) {
+ CAMHAL_LOGDB("VNF set %s", valstr);
+ mParameters.set(TICameraParameters::KEY_VNF, varint);
} else {
CAMHAL_LOGEB("ERROR: Invalid VNF: %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
@@ -296,35 +291,37 @@ int CameraHal::setParameters(const CameraParameters& params)
// vstab then return an error
if (strcmp(mCameraProperties->get(CameraProperties::VSTAB_SUPPORTED),
CameraParameters::TRUE) == 0) {
- CAMHAL_LOGDB("VSTAB %s",
- params.get(CameraParameters::KEY_VIDEO_STABILIZATION));
- mParameters.set(CameraParameters::KEY_VIDEO_STABILIZATION,
- params.get(CameraParameters::KEY_VIDEO_STABILIZATION));
+ CAMHAL_LOGDB("VSTAB %s",valstr);
+ mParameters.set(CameraParameters::KEY_VIDEO_STABILIZATION, valstr);
} else if (strcmp(valstr, CameraParameters::TRUE) == 0) {
CAMHAL_LOGEB("ERROR: Invalid VSTAB: %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
} else {
mParameters.set(CameraParameters::KEY_VIDEO_STABILIZATION,
CameraParameters::FALSE);
}
}
+
+
if( (valstr = params.get(TICameraParameters::KEY_CAP_MODE)) != NULL)
{
- CAMHAL_LOGDB("Capture mode set %s", params.get(TICameraParameters::KEY_CAP_MODE));
+ CAMHAL_LOGDB("Capture mode set %s", valstr);
mParameters.set(TICameraParameters::KEY_CAP_MODE, valstr);
}
if ((valstr = params.get(TICameraParameters::KEY_IPP)) != NULL) {
if (isParameterValid(valstr,mCameraProperties->get(CameraProperties::SUPPORTED_IPP_MODES))) {
- CAMHAL_LOGDB("IPP mode set %s", params.get(TICameraParameters::KEY_IPP));
+ CAMHAL_LOGDB("IPP mode set %s", valstr);
mParameters.set(TICameraParameters::KEY_IPP, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid IPP mode: %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
+#ifdef OMAP_ENHANCEMENT
+
if((valstr = params.get(TICameraParameters::KEY_S3D2D_PREVIEW)) != NULL)
{
CAMHAL_LOGDB("Stereo 3D->2D Preview mode is %s", params.get(TICameraParameters::KEY_S3D2D_PREVIEW));
@@ -336,18 +333,21 @@ int CameraHal::setParameters(const CameraParameters& params)
CAMHAL_LOGDB("AutoConvergence mode is %s", params.get(TICameraParameters::KEY_AUTOCONVERGENCE));
mParameters.set(TICameraParameters::KEY_AUTOCONVERGENCE, valstr);
}
+#endif
}
params.getPreviewSize(&w, &h);
if (w == -1 && h == -1) {
CAMHAL_LOGEA("Unable to get preview size");
- return -EINVAL;
+ return BAD_VALUE;
}
int oldWidth, oldHeight;
mParameters.getPreviewSize(&oldWidth, &oldHeight);
+#ifdef OMAP_ENHANCEMENT
+
int orientation =0;
if((valstr = params.get(TICameraParameters::KEY_SENSOR_ORIENTATION)) != NULL)
{
@@ -361,7 +361,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if ( !isResolutionValid(h,w, mCameraProperties->get(CameraProperties::SUPPORTED_PREVIEW_SIZES)))
{
CAMHAL_LOGEB("Invalid preview resolution %d x %d", w, h);
- return -EINVAL;
+ return BAD_VALUE;
}
else
{
@@ -375,7 +375,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if ( !isResolutionValid(w, h, mCameraProperties->get(CameraProperties::SUPPORTED_PREVIEW_SIZES)))
{
CAMHAL_LOGEB("Invalid preview resolution %d x %d", w, h);
- return -EINVAL;
+ return BAD_VALUE;
}
else
{
@@ -383,12 +383,23 @@ int CameraHal::setParameters(const CameraParameters& params)
}
}
- if ( ( oldWidth != w ) || ( oldHeight != h ) )
- {
- restartPreviewRequired |= true;
- }
- CAMHAL_LOGDB("PreviewResolution by App %d x %d", w, h);
+#else
+
+ if ( !isResolutionValid(w, h, mCameraProperties->get(CameraProperties::SUPPORTED_PREVIEW_SIZES))) {
+ CAMHAL_LOGEB("Invalid preview resolution %d x %d", w, h);
+ return BAD_VALUE;
+ } else {
+ mParameters.setPreviewSize(w, h);
+ }
+
+#endif
+
+ if ( ( oldWidth != w ) || ( oldHeight != h ) ) {
+ restartPreviewRequired |= true;
+ }
+
+ CAMHAL_LOGDB("PreviewResolution by App %d x %d", w, h);
// Handle RECORDING_HINT to Set/Reset Video Mode Parameters
valstr = params.get(CameraParameters::KEY_RECORDING_HINT);
@@ -429,7 +440,7 @@ int CameraHal::setParameters(const CameraParameters& params)
else
{
CAMHAL_LOGEA("Invalid RECORDING_HINT");
- return -EINVAL;
+ return BAD_VALUE;
}
}
else
@@ -446,7 +457,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if ((valstr = params.get(CameraParameters::KEY_FOCUS_MODE)) != NULL) {
if (isParameterValid(valstr, mCameraProperties->get(CameraProperties::SUPPORTED_FOCUS_MODES))) {
- CAMHAL_LOGDB("Focus mode set %s", params.get(CameraParameters::KEY_FOCUS_MODE));
+ CAMHAL_LOGDB("Focus mode set %s", valstr);
// we need to take a decision on the capture mode based on whether CAF picture or
// video is chosen so the behavior of each is consistent to the application
@@ -459,40 +470,44 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(CameraParameters::KEY_FOCUS_MODE, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid FOCUS mode = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
///Below parameters can be changed when the preview is running
if ( (valstr = params.getPictureFormat()) != NULL ) {
- if (isParameterValid(params.getPictureFormat(),mCameraProperties->get(CameraProperties::SUPPORTED_PICTURE_FORMATS))) {
+ if (isParameterValid(valstr, mCameraProperties->get(CameraProperties::SUPPORTED_PICTURE_FORMATS))) {
mParameters.setPictureFormat(valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid picture format: %s",valstr);
- ret = -EINVAL;
- }
+ return BAD_VALUE;
}
+ }
params.getPictureSize(&w, &h);
if ( isResolutionValid(w, h, mCameraProperties->get(CameraProperties::SUPPORTED_PICTURE_SIZES))) {
mParameters.setPictureSize(w, h);
} else {
CAMHAL_LOGEB("ERROR: Invalid picture resolution %dx%d", w, h);
- ret = -EINVAL;
+ return BAD_VALUE;
}
CAMHAL_LOGDB("Picture Size by App %d x %d", w, h);
+#ifdef OMAP_ENHANCEMENT
+
if ((valstr = params.get(TICameraParameters::KEY_BURST)) != NULL) {
if (params.getInt(TICameraParameters::KEY_BURST) >=0) {
- CAMHAL_LOGDB("Burst set %s", params.get(TICameraParameters::KEY_BURST));
+ CAMHAL_LOGDB("Burst set %s", valstr);
mParameters.set(TICameraParameters::KEY_BURST, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Burst value: %s",valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
+#endif
+
framerate = params.getPreviewFrameRate();
valstr = params.get(CameraParameters::KEY_PREVIEW_FPS_RANGE);
CAMHAL_LOGDB("FRAMERATE %d", framerate);
@@ -510,7 +525,7 @@ int CameraHal::setParameters(const CameraParameters& params)
mCameraProperties->get(CameraProperties::SUPPORTED_PREVIEW_FRAME_RATES)))
{
CAMHAL_LOGEA("Invalid frame rate range or frame rate");
- return -EINVAL;
+ return BAD_VALUE;
}
// Variable framerate ranges have higher priority over
@@ -527,7 +542,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if ( ( 0 > minFPS ) || ( 0 > maxFPS ) )
{
CAMHAL_LOGEA("ERROR: FPS Range is negative!");
- return -EINVAL;
+ return BAD_VALUE;
}
framerate = maxFPS /CameraHal::VFR_SCALE;
@@ -570,13 +585,13 @@ int CameraHal::setParameters(const CameraParameters& params)
if ( ( 0 == minFPS ) || ( 0 == maxFPS ) )
{
CAMHAL_LOGEA("ERROR: FPS Range is invalid!");
- ret = -EINVAL;
+ return BAD_VALUE;
}
if ( maxFPS < minFPS )
{
CAMHAL_LOGEA("ERROR: Max FPS is smaller than Min FPS!");
- ret = -EINVAL;
+ return BAD_VALUE;
}
CAMHAL_LOGDB("SET FRAMERATE %d", framerate);
mParameters.setPreviewFrameRate(framerate);
@@ -598,6 +613,8 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(TICameraParameters::KEY_GLBCE, valstr);
}
+#ifdef OMAP_ENHANCEMENT
+
///Update the current parameter set
if( (valstr = params.get(TICameraParameters::KEY_AUTOCONVERGENCE)) != NULL)
{
@@ -617,27 +634,31 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(TICameraParameters::KEY_EXPOSURE_MODE, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Exposure = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
+#endif
+
if ((valstr = params.get(CameraParameters::KEY_WHITE_BALANCE)) != NULL) {
if ( isParameterValid(valstr, mCameraProperties->get(CameraProperties::SUPPORTED_WHITE_BALANCE))) {
CAMHAL_LOGDB("White balance set %s", valstr);
mParameters.set(CameraParameters::KEY_WHITE_BALANCE, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid white balance = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
+#ifdef OMAP_ENHANCEMENT
+
if ((valstr = params.get(TICameraParameters::KEY_CONTRAST)) != NULL) {
if (params.getInt(TICameraParameters::KEY_CONTRAST) >= 0 ) {
CAMHAL_LOGDB("Contrast set %s", valstr);
mParameters.set(TICameraParameters::KEY_CONTRAST, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Contrast = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
@@ -647,7 +668,7 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(TICameraParameters::KEY_SHARPNESS, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Sharpness = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
@@ -657,7 +678,7 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(TICameraParameters::KEY_SATURATION, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Saturation = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
@@ -667,36 +688,44 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(TICameraParameters::KEY_BRIGHTNESS, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Brightness = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
+#endif
+
if ((valstr = params.get(CameraParameters::KEY_ANTIBANDING)) != NULL) {
if (isParameterValid(valstr, mCameraProperties->get(CameraProperties::SUPPORTED_ANTIBANDING))) {
CAMHAL_LOGDB("Antibanding set %s", valstr);
mParameters.set(CameraParameters::KEY_ANTIBANDING, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Antibanding = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
+#ifdef OMAP_ENHANCEMENT
+
if ((valstr = params.get(TICameraParameters::KEY_ISO)) != NULL) {
if (isParameterValid(valstr, mCameraProperties->get(CameraProperties::SUPPORTED_ISO_VALUES))) {
CAMHAL_LOGDB("ISO set %s", valstr);
mParameters.set(TICameraParameters::KEY_ISO, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid ISO = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
+#endif
+
if( (valstr = params.get(CameraParameters::KEY_FOCUS_AREAS)) != NULL )
{
- CAMHAL_LOGI("Focus areas position set %s", params.get(CameraParameters::KEY_FOCUS_AREAS));
+ CAMHAL_LOGDB("Focus areas position set %s",valstr);
mParameters.set(CameraParameters::KEY_FOCUS_AREAS, valstr);
}
+#ifdef OMAP_ENHANCEMENT
+
if( (valstr = params.get(TICameraParameters::KEY_MEASUREMENT_ENABLE)) != NULL )
{
CAMHAL_LOGDB("Measurements set to %s", params.get(TICameraParameters::KEY_MEASUREMENT_ENABLE));
@@ -717,9 +746,11 @@ int CameraHal::setParameters(const CameraParameters& params)
}
+#endif
+
if( (valstr = params.get(CameraParameters::KEY_EXPOSURE_COMPENSATION)) != NULL)
{
- CAMHAL_LOGDB("Exposure compensation set %s", params.get(CameraParameters::KEY_EXPOSURE_COMPENSATION));
+ CAMHAL_LOGDB("Exposure compensation set %s", valstr);
mParameters.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, valstr);
}
@@ -732,7 +763,7 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(CameraParameters::KEY_SCENE_MODE, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Scene mode = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
@@ -742,7 +773,7 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(CameraParameters::KEY_FLASH_MODE, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Flash mode = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
@@ -752,48 +783,48 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(CameraParameters::KEY_EFFECT, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Effect = %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
- if(( (valstr = params.get(CameraParameters::KEY_ROTATION)) != NULL)
- && (params.getInt(CameraParameters::KEY_ROTATION) >=0))
+ varint = params.getInt(CameraParameters::KEY_ROTATION);
+ if( varint >=0 )
{
- CAMHAL_LOGDB("Rotation set %s", params.get(CameraParameters::KEY_ROTATION));
- mParameters.set(CameraParameters::KEY_ROTATION, valstr);
+ CAMHAL_LOGDB("Rotation set %d", varint);
+ mParameters.set(CameraParameters::KEY_ROTATION, varint);
}
- if(( (valstr = params.get(CameraParameters::KEY_JPEG_QUALITY)) != NULL)
- && (params.getInt(CameraParameters::KEY_JPEG_QUALITY) >=0))
+ varint = params.getInt(CameraParameters::KEY_JPEG_QUALITY);
+ if( varint >= 0 )
{
- CAMHAL_LOGDB("Jpeg quality set %s", params.get(CameraParameters::KEY_JPEG_QUALITY));
- mParameters.set(CameraParameters::KEY_JPEG_QUALITY, valstr);
+ CAMHAL_LOGDB("Jpeg quality set %d", varint);
+ mParameters.set(CameraParameters::KEY_JPEG_QUALITY, varint);
}
- if(( (valstr = params.get(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH)) != NULL)
- && (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH) >=0))
+ varint = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
+ if( varint >=0 )
{
- CAMHAL_LOGDB("Thumbnail width set %s", params.get(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH));
- mParameters.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, valstr);
+ CAMHAL_LOGDB("Thumbnail width set %d", varint);
+ mParameters.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, varint);
}
- if(( (valstr = params.get(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT)) != NULL)
- && (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT) >=0))
+ varint = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
+ if( varint >=0 )
{
- CAMHAL_LOGDB("Thumbnail width set %s", params.get(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT));
- mParameters.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, valstr);
+ CAMHAL_LOGDB("Thumbnail width set %d", varint);
+ mParameters.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, varint);
}
- if(( (valstr = params.get(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY)) != NULL )
- && (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY) >=0))
+ varint = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY);
+ if( varint >=0 )
{
- CAMHAL_LOGDB("Thumbnail quality set %s", params.get(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY));
- mParameters.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, valstr);
+ CAMHAL_LOGDB("Thumbnail quality set %d", varint);
+ mParameters.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, varint);
}
if( (valstr = params.get(CameraParameters::KEY_GPS_LATITUDE)) != NULL )
{
- CAMHAL_LOGDB("GPS latitude set %s", params.get(CameraParameters::KEY_GPS_LATITUDE));
+ CAMHAL_LOGDB("GPS latitude set %s", valstr);
mParameters.set(CameraParameters::KEY_GPS_LATITUDE, valstr);
}else{
mParameters.remove(CameraParameters::KEY_GPS_LATITUDE);
@@ -801,7 +832,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(CameraParameters::KEY_GPS_LONGITUDE)) != NULL )
{
- CAMHAL_LOGDB("GPS longitude set %s", params.get(CameraParameters::KEY_GPS_LONGITUDE));
+ CAMHAL_LOGDB("GPS longitude set %s", valstr);
mParameters.set(CameraParameters::KEY_GPS_LONGITUDE, valstr);
}else{
mParameters.remove(CameraParameters::KEY_GPS_LONGITUDE);
@@ -809,7 +840,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(CameraParameters::KEY_GPS_ALTITUDE)) != NULL )
{
- CAMHAL_LOGDB("GPS altitude set %s", params.get(CameraParameters::KEY_GPS_ALTITUDE));
+ CAMHAL_LOGDB("GPS altitude set %s", valstr);
mParameters.set(CameraParameters::KEY_GPS_ALTITUDE, valstr);
}else{
mParameters.remove(CameraParameters::KEY_GPS_ALTITUDE);
@@ -817,7 +848,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(CameraParameters::KEY_GPS_TIMESTAMP)) != NULL )
{
- CAMHAL_LOGDB("GPS timestamp set %s", params.get(CameraParameters::KEY_GPS_TIMESTAMP));
+ CAMHAL_LOGDB("GPS timestamp set %s", valstr);
mParameters.set(CameraParameters::KEY_GPS_TIMESTAMP, valstr);
}else{
mParameters.remove(CameraParameters::KEY_GPS_TIMESTAMP);
@@ -825,7 +856,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(TICameraParameters::KEY_GPS_DATESTAMP)) != NULL )
{
- CAMHAL_LOGDB("GPS datestamp set %s", params.get(TICameraParameters::KEY_GPS_DATESTAMP));
+ CAMHAL_LOGDB("GPS datestamp set %s", valstr);
mParameters.set(TICameraParameters::KEY_GPS_DATESTAMP, valstr);
}else{
mParameters.remove(TICameraParameters::KEY_GPS_DATESTAMP);
@@ -833,7 +864,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(CameraParameters::KEY_GPS_PROCESSING_METHOD)) != NULL )
{
- CAMHAL_LOGDB("GPS processing method set %s", params.get(CameraParameters::KEY_GPS_PROCESSING_METHOD));
+ CAMHAL_LOGDB("GPS processing method set %s", valstr);
mParameters.set(CameraParameters::KEY_GPS_PROCESSING_METHOD, valstr);
}else{
mParameters.remove(CameraParameters::KEY_GPS_PROCESSING_METHOD);
@@ -841,7 +872,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(TICameraParameters::KEY_GPS_MAPDATUM )) != NULL )
{
- CAMHAL_LOGDB("GPS MAPDATUM set %s", params.get(TICameraParameters::KEY_GPS_MAPDATUM));
+ CAMHAL_LOGDB("GPS MAPDATUM set %s", valstr);
mParameters.set(TICameraParameters::KEY_GPS_MAPDATUM, valstr);
}else{
mParameters.remove(TICameraParameters::KEY_GPS_MAPDATUM);
@@ -849,7 +880,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(TICameraParameters::KEY_GPS_VERSION)) != NULL )
{
- CAMHAL_LOGDB("GPS MAPDATUM set %s", params.get(TICameraParameters::KEY_GPS_VERSION));
+ CAMHAL_LOGDB("GPS MAPDATUM set %s", valstr);
mParameters.set(TICameraParameters::KEY_GPS_VERSION, valstr);
}else{
mParameters.remove(TICameraParameters::KEY_GPS_VERSION);
@@ -857,16 +888,18 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(TICameraParameters::KEY_EXIF_MODEL)) != NULL )
{
- CAMHAL_LOGDB("EXIF Model set %s", params.get(TICameraParameters::KEY_EXIF_MODEL));
+ CAMHAL_LOGDB("EXIF Model set %s", valstr);
mParameters.set(TICameraParameters::KEY_EXIF_MODEL, valstr);
}
if( (valstr = params.get(TICameraParameters::KEY_EXIF_MAKE)) != NULL )
{
- CAMHAL_LOGDB("EXIF Make set %s", params.get(TICameraParameters::KEY_EXIF_MAKE));
+ CAMHAL_LOGDB("EXIF Make set %s", valstr);
mParameters.set(TICameraParameters::KEY_EXIF_MAKE, valstr);
}
+#ifdef OMAP_ENHANCEMENT
+
if( (valstr = params.get(TICameraParameters::KEY_EXP_BRACKETING_RANGE)) != NULL )
{
CAMHAL_LOGDB("Exposure Bracketing set %s", params.get(TICameraParameters::KEY_EXP_BRACKETING_RANGE));
@@ -877,9 +910,12 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.remove(TICameraParameters::KEY_EXP_BRACKETING_RANGE);
}
- if ((valstr = params.get(CameraParameters::KEY_ZOOM)) != NULL ) {
- if ((params.getInt(CameraParameters::KEY_ZOOM) >= 0 ) &&
- (params.getInt(CameraParameters::KEY_ZOOM) <= mMaxZoomSupported )) {
+#endif
+
+ valstr = params.get(CameraParameters::KEY_ZOOM);
+ varint = params.getInt(CameraParameters::KEY_ZOOM);
+ if ( valstr != NULL ) {
+ if ( ( varint >= 0 ) && ( varint <= mMaxZoomSupported ) ) {
CAMHAL_LOGDB("Zoom set %s", valstr);
doesSetParameterNeedUpdate(valstr,
mParameters.get(CameraParameters::KEY_ZOOM),
@@ -887,13 +923,13 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(CameraParameters::KEY_ZOOM, valstr);
} else {
CAMHAL_LOGEB("ERROR: Invalid Zoom: %s", valstr);
- ret = -EINVAL;
+ return BAD_VALUE;
}
}
if( (valstr = params.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK)) != NULL )
{
- CAMHAL_LOGDB("Auto Exposure Lock set %s", params.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK));
+ CAMHAL_LOGDB("Auto Exposure Lock set %s", valstr);
doesSetParameterNeedUpdate(valstr,
mParameters.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK),
updateRequired);
@@ -902,7 +938,7 @@ int CameraHal::setParameters(const CameraParameters& params)
if( (valstr = params.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK)) != NULL )
{
- CAMHAL_LOGDB("Auto WhiteBalance Lock set %s", params.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK));
+ CAMHAL_LOGDB("Auto WhiteBalance Lock set %s", valstr);
doesSetParameterNeedUpdate(valstr,
mParameters.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK),
updateRequired);
@@ -910,20 +946,20 @@ int CameraHal::setParameters(const CameraParameters& params)
}
if( (valstr = params.get(CameraParameters::KEY_METERING_AREAS)) != NULL )
{
- CAMHAL_LOGI("Metering areas position set %s", params.get(CameraParameters::KEY_METERING_AREAS));
+ CAMHAL_LOGDB("Metering areas position set %s", valstr);
mParameters.set(CameraParameters::KEY_METERING_AREAS, valstr);
}
- CameraParameters adapterParams = mParameters;
-
// Only send parameters to adapter if preview is already
// enabled or doesSetParameterNeedUpdate says so. Initial setParameters to camera adapter,
// will be called in startPreview()
// TODO(XXX): Need to identify other parameters that need update from camera adapter
if ( (NULL != mCameraAdapter) && (mPreviewEnabled || updateRequired) ) {
- ret |= mCameraAdapter->setParameters(adapterParams);
+ ret |= mCameraAdapter->setParameters(mParameters);
}
+#ifdef OMAP_ENHANCEMENT
+
if( NULL != params.get(TICameraParameters::KEY_TEMP_BRACKETING_RANGE_POS) )
{
int posBracketRange = params.getInt(TICameraParameters::KEY_TEMP_BRACKETING_RANGE_POS);
@@ -1001,11 +1037,13 @@ int CameraHal::setParameters(const CameraParameters& params)
mParameters.set(TICameraParameters::KEY_SHUTTER_ENABLE, valstr);
}
+#endif
+
}
//On fail restore old parameters
if ( NO_ERROR != ret ) {
- mParameters.unflatten(oldParams.flatten());
+ mParameters = oldParams;
}
// Restart Preview if needed by KEY_RECODING_HINT only if preview is already running.
@@ -1431,7 +1469,7 @@ status_t CameraHal::startPreview()
///If we don't have the preview callback enabled and display adapter,
if(!mSetPreviewWindowCalled || (mDisplayAdapter.get() == NULL)){
- CAMHAL_LOGI("Preview not started. Preview in progress flag set");
+ CAMHAL_LOGDA("Preview not started. Preview in progress flag set");
mPreviewStartInProgress = true;
ret = mCameraAdapter->sendCommand(CameraAdapter::CAMERA_SWITCH_TO_EXECUTING);
if ( NO_ERROR != ret ){
@@ -1660,13 +1698,13 @@ status_t CameraHal::setPreviewWindow(struct preview_stream_ops *window)
if(mDisplayAdapter.get() != NULL)
{
///NULL window passed, destroy the display adapter if present
- CAMHAL_LOGI("NULL window passed, destroying display adapter");
+ CAMHAL_LOGDA("NULL window passed, destroying display adapter");
mDisplayAdapter.clear();
///@remarks If there was a window previously existing, we usually expect another valid window to be passed by the client
///@remarks so, we will wait until it passes a valid window to begin the preview again
mSetPreviewWindowCalled = false;
}
- CAMHAL_LOGI("NULL ANativeWindow passed to setPreviewWindow");
+ CAMHAL_LOGDA("NULL ANativeWindow passed to setPreviewWindow");
return NO_ERROR;
}else if(mDisplayAdapter.get() == NULL)
{
@@ -1713,12 +1751,15 @@ status_t CameraHal::setPreviewWindow(struct preview_stream_ops *window)
// Start the preview since the window is now available
ret = startPreview();
}
- }else
- {
- /* If mDisplayAdpater is already created. No need to do anything.
- * We get a surface handle directly now, so we can reconfigure surface
- * itself in DisplayAdapter if dimensions have changed
- */
+ } else {
+ // Update the display adapter with the new window that is passed from CameraService
+ ret = mDisplayAdapter->setPreviewWindow(window);
+ if ( (NO_ERROR == ret) && previewEnabled() ) {
+ restartPreview();
+ } else if (ret == ALREADY_EXISTS) {
+ // ALREADY_EXISTS should be treated as a noop in this case
+ ret = NO_ERROR;
+ }
}
LOG_FUNCTION_NAME_EXIT;
@@ -1900,6 +1941,7 @@ status_t CameraHal::startRecording( )
bool CameraHal::setVideoModeParameters(const CameraParameters& params)
{
const char *valstr = NULL;
+ const char *valstrRemote = NULL;
bool restartPreviewRequired = false;
status_t ret = NO_ERROR;
@@ -1918,19 +1960,19 @@ bool CameraHal::setVideoModeParameters(const CameraParameters& params)
// Check if CAPTURE_MODE is VIDEO_MODE, since VSTAB & VNF work only in VIDEO_MODE.
valstr = mParameters.get(TICameraParameters::KEY_CAP_MODE);
if (strcmp(valstr, (const char *) TICameraParameters::VIDEO_MODE) == 0) {
+ valstrRemote = params.get(CameraParameters::KEY_VIDEO_STABILIZATION);
// set VSTAB. restart is required if vstab value has changed
- if (params.get(CameraParameters::KEY_VIDEO_STABILIZATION) != NULL) {
+ if ( valstrRemote != NULL) {
// make sure we support vstab
if (strcmp(mCameraProperties->get(CameraProperties::VSTAB_SUPPORTED),
CameraParameters::TRUE) == 0) {
valstr = mParameters.get(CameraParameters::KEY_VIDEO_STABILIZATION);
// vstab value has changed
if ((valstr != NULL) &&
- strcmp(valstr, params.get(CameraParameters::KEY_VIDEO_STABILIZATION)) != 0) {
+ strcmp(valstr, valstrRemote) != 0) {
restartPreviewRequired = true;
}
- mParameters.set(CameraParameters::KEY_VIDEO_STABILIZATION,
- params.get(CameraParameters::KEY_VIDEO_STABILIZATION));
+ mParameters.set(CameraParameters::KEY_VIDEO_STABILIZATION, valstrRemote);
}
} else if (mParameters.get(CameraParameters::KEY_VIDEO_STABILIZATION)) {
// vstab was configured but now unset
@@ -1939,16 +1981,17 @@ bool CameraHal::setVideoModeParameters(const CameraParameters& params)
}
// Set VNF
- if (params.get(TICameraParameters::KEY_VNF) == NULL) {
+ valstrRemote = params.get(TICameraParameters::KEY_VNF);
+ if ( valstrRemote == NULL) {
CAMHAL_LOGDA("Enable VNF");
mParameters.set(TICameraParameters::KEY_VNF, "1");
restartPreviewRequired = true;
} else {
valstr = mParameters.get(TICameraParameters::KEY_VNF);
- if (valstr && strcmp(valstr, params.get(TICameraParameters::KEY_VNF)) != 0) {
+ if (valstr && strcmp(valstr, valstrRemote) != 0) {
restartPreviewRequired = true;
}
- mParameters.set(TICameraParameters::KEY_VNF, params.get(TICameraParameters::KEY_VNF));
+ mParameters.set(TICameraParameters::KEY_VNF, valstrRemote);
}
// For VSTAB alone for 1080p resolution, padded width goes > 2048, which cannot be rendered by GPU.
@@ -2675,15 +2718,35 @@ status_t CameraHal::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2)
if ( ( NO_ERROR == ret ) && ( NULL == mCameraAdapter ) )
{
CAMHAL_LOGEA("No CameraAdapter instance");
- ret = -EINVAL;
+ return -EINVAL;
}
+ ///////////////////////////////////////////////////////
+ // Following commands do NOT need preview to be started
+ ///////////////////////////////////////////////////////
+ switch(cmd) {
+ case CAMERA_CMD_ENABLE_FOCUS_MOVE_MSG:
+ bool enable = static_cast<bool>(arg1);
+ Mutex::Autolock lock(mLock);
+ if (enable) {
+ mMsgEnabled |= CAMERA_MSG_FOCUS_MOVE;
+ } else {
+ mMsgEnabled &= ~CAMERA_MSG_FOCUS_MOVE;
+ }
+ return NO_ERROR;
+ break;
+ }
+
if ( ( NO_ERROR == ret ) && ( !previewEnabled() ))
{
CAMHAL_LOGEA("Preview is not running");
ret = -EINVAL;
}
+ ///////////////////////////////////////////////////////
+ // Following commands NEED preview to be started
+ ///////////////////////////////////////////////////////
+
if ( NO_ERROR == ret )
{
switch(cmd)
diff --git a/camera/CameraHalCommon.cpp b/camera/CameraHalCommon.cpp
index 6d4ea2ce..7e81a091 100644
--- a/camera/CameraHalCommon.cpp
+++ b/camera/CameraHalCommon.cpp
@@ -46,7 +46,7 @@ void CameraHal::PPM(const char* str){
ppm.tv_sec = ppm.tv_sec * 1000000;
ppm.tv_sec = ppm.tv_sec + ppm.tv_usec - ppm_start.tv_usec;
- LOGD("PPM: %s :%ld.%ld ms", str, ( ppm.tv_sec /1000 ), ( ppm.tv_sec % 1000 ));
+ ALOGD("PPM: %s :%ld.%ld ms", str, ( ppm.tv_sec /1000 ), ( ppm.tv_sec % 1000 ));
}
#elif PPM_INSTRUMENTATION_ABS
@@ -76,7 +76,7 @@ void CameraHal::PPM(const char* str){
absolute *= 1000;
absolute += ppm.tv_usec /1000;
- LOGD("PPM: %s :%llu.%llu ms : %llu ms", str, ( elapsed /1000 ), ( elapsed % 1000 ), absolute);
+ ALOGD("PPM: %s :%llu.%llu ms : %llu ms", str, ( elapsed /1000 ), ( elapsed % 1000 ), absolute);
}
#endif
@@ -109,7 +109,7 @@ void CameraHal::PPM(const char* str, struct timeval* ppm_first, ...){
ppm.tv_sec = ppm.tv_sec * 1000000;
ppm.tv_sec = ppm.tv_sec + ppm.tv_usec - ppm_first->tv_usec;
- LOGD("PPM: %s :%ld.%ld ms : %llu ms", temp_str, ( ppm.tv_sec /1000 ), ( ppm.tv_sec % 1000 ), absolute);
+ ALOGD("PPM: %s :%ld.%ld ms : %llu ms", temp_str, ( ppm.tv_sec /1000 ), ( ppm.tv_sec % 1000 ), absolute);
va_end(args);
}
diff --git a/camera/CameraHalUtilClasses.cpp b/camera/CameraHalUtilClasses.cpp
index 3074bc4d..073c2b8c 100644
--- a/camera/CameraHalUtilClasses.cpp
+++ b/camera/CameraHalUtilClasses.cpp
@@ -1,362 +1,362 @@
-/*
- * 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.
- */
-
-/**
-* @file CameraHalUtilClasses.cpp
-*
-* This file maps the CameraHardwareInterface to the Camera interfaces on OMAP4 (mainly OMX).
-*
-*/
-
-#define LOG_TAG "CameraHAL"
-
-
-#include "CameraHal.h"
-
-namespace android {
-
-/*--------------------FrameProvider Class STARTS here-----------------------------*/
-
-int FrameProvider::enableFrameNotification(int32_t frameTypes)
-{
- LOG_FUNCTION_NAME;
- status_t ret = NO_ERROR;
-
- ///Enable the frame notification to CameraAdapter (which implements FrameNotifier interface)
- mFrameNotifier->enableMsgType(frameTypes<<MessageNotifier::FRAME_BIT_FIELD_POSITION
- , mFrameCallback
- , NULL
- , mCookie
- );
-
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-int FrameProvider::disableFrameNotification(int32_t frameTypes)
-{
- LOG_FUNCTION_NAME;
- status_t ret = NO_ERROR;
-
- mFrameNotifier->disableMsgType(frameTypes<<MessageNotifier::FRAME_BIT_FIELD_POSITION
- , mCookie
- );
-
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-int FrameProvider::returnFrame(void *frameBuf, CameraFrame::FrameType frameType)
-{
- status_t ret = NO_ERROR;
-
- mFrameNotifier->returnFrame(frameBuf, frameType);
-
- return ret;
-}
-
-void FrameProvider::addFramePointers(void *frameBuf, void *buf)
-{
- mFrameNotifier->addFramePointers(frameBuf, buf);
- return;
-}
-
-void FrameProvider::removeFramePointers()
-{
- mFrameNotifier->removeFramePointers();
- return;
-}
-
-/*--------------------FrameProvider Class ENDS here-----------------------------*/
-
-/*--------------------EventProvider Class STARTS here-----------------------------*/
-
-int EventProvider::enableEventNotification(int32_t frameTypes)
-{
- LOG_FUNCTION_NAME;
- status_t ret = NO_ERROR;
-
- ///Enable the frame notification to CameraAdapter (which implements FrameNotifier interface)
- mEventNotifier->enableMsgType(frameTypes<<MessageNotifier::EVENT_BIT_FIELD_POSITION
- , NULL
- , mEventCallback
- , mCookie
- );
-
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-int EventProvider::disableEventNotification(int32_t frameTypes)
-{
- LOG_FUNCTION_NAME;
- status_t ret = NO_ERROR;
-
- mEventNotifier->disableMsgType(frameTypes<<MessageNotifier::FRAME_BIT_FIELD_POSITION
- , mCookie
- );
-
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-/*--------------------EventProvider Class ENDS here-----------------------------*/
-
-/*--------------------CameraArea Class STARTS here-----------------------------*/
-
-status_t CameraArea::transfrom(size_t width,
- size_t height,
- size_t &top,
- size_t &left,
- size_t &areaWidth,
- size_t &areaHeight)
-{
- status_t ret = NO_ERROR;
- size_t hRange, vRange;
- double hScale, vScale;
-
- LOG_FUNCTION_NAME
-
- hRange = CameraArea::RIGHT - CameraArea::LEFT;
- vRange = CameraArea::BOTTOM - CameraArea::TOP;
- hScale = ( double ) width / ( double ) hRange;
- vScale = ( double ) height / ( double ) vRange;
-
- top = ( mTop + vRange / 2 ) * vScale;
- left = ( mLeft + hRange / 2 ) * hScale;
- areaHeight = ( mBottom + vRange / 2 ) * vScale;
- areaHeight -= top;
- areaWidth = ( mRight + hRange / 2) * hScale;
- areaWidth -= left;
-
- LOG_FUNCTION_NAME_EXIT
-
- return ret;
-}
-
-status_t CameraArea::checkArea(ssize_t top,
- ssize_t left,
- ssize_t bottom,
- ssize_t right,
- ssize_t weight)
-{
-
- //Handles the invalid regin corner case.
- if ( ( 0 == top ) && ( 0 == left ) && ( 0 == bottom ) && ( 0 == right ) && ( 0 == weight ) ) {
- return NO_ERROR;
- }
-
- if ( ( CameraArea::WEIGHT_MIN > weight ) || ( CameraArea::WEIGHT_MAX < weight ) ) {
- CAMHAL_LOGEB("Camera area weight is invalid %d", weight);
- return -EINVAL;
- }
-
- if ( ( CameraArea::TOP > top ) || ( CameraArea::BOTTOM < top ) ) {
- CAMHAL_LOGEB("Camera area top coordinate is invalid %d", top );
- return -EINVAL;
- }
-
- if ( ( CameraArea::TOP > bottom ) || ( CameraArea::BOTTOM < bottom ) ) {
- CAMHAL_LOGEB("Camera area bottom coordinate is invalid %d", bottom );
- return -EINVAL;
- }
-
- if ( ( CameraArea::LEFT > left ) || ( CameraArea::RIGHT < left ) ) {
- CAMHAL_LOGEB("Camera area left coordinate is invalid %d", left );
- return -EINVAL;
- }
-
- if ( ( CameraArea::LEFT > right ) || ( CameraArea::RIGHT < right ) ) {
- CAMHAL_LOGEB("Camera area right coordinate is invalid %d", right );
- return -EINVAL;
- }
-
- if ( left >= right ) {
- CAMHAL_LOGEA("Camera area left larger than right");
- return -EINVAL;
- }
-
- if ( top >= bottom ) {
- CAMHAL_LOGEA("Camera area top larger than bottom");
- return -EINVAL;
- }
-
- return NO_ERROR;
-}
-
-status_t CameraArea::parseAreas(const char *area,
- size_t areaLength,
- Vector< sp<CameraArea> > &areas)
-{
- status_t ret = NO_ERROR;
- char *ctx;
- char *pArea = NULL;
- char *pStart = NULL;
- char *pEnd = NULL;
- const char *startToken = "(";
- const char endToken = ')';
- const char sep = ',';
- ssize_t top, left, bottom, right, weight;
- char *tmpBuffer = NULL;
- sp<CameraArea> currentArea;
-
- LOG_FUNCTION_NAME
-
- if ( ( NULL == area ) ||
- ( 0 >= areaLength ) )
- {
- return -EINVAL;
- }
-
- tmpBuffer = ( char * ) malloc(areaLength);
- if ( NULL == tmpBuffer )
- {
- return -ENOMEM;
- }
-
- memcpy(tmpBuffer, area, areaLength);
-
- pArea = strtok_r(tmpBuffer, startToken, &ctx);
-
- do
- {
-
- pStart = pArea;
- if ( NULL == pStart )
- {
- CAMHAL_LOGEA("Parsing of the left area coordinate failed!");
- ret = -EINVAL;
- break;
- }
- else
- {
- left = static_cast<ssize_t>(strtol(pStart, &pEnd, 10));
- }
-
- if ( sep != *pEnd )
- {
- CAMHAL_LOGEA("Parsing of the top area coordinate failed!");
- ret = -EINVAL;
- break;
- }
- else
- {
- top = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
- }
-
- if ( sep != *pEnd )
- {
- CAMHAL_LOGEA("Parsing of the right area coordinate failed!");
- ret = -EINVAL;
- break;
- }
- else
- {
- right = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
- }
-
- if ( sep != *pEnd )
- {
- CAMHAL_LOGEA("Parsing of the bottom area coordinate failed!");
- ret = -EINVAL;
- break;
- }
- else
- {
- bottom = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
- }
-
- if ( sep != *pEnd )
- {
- CAMHAL_LOGEA("Parsing of the weight area coordinate failed!");
- ret = -EINVAL;
- break;
- }
- else
- {
- weight = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
- }
-
- if ( endToken != *pEnd )
- {
- CAMHAL_LOGEA("Malformed area!");
- ret = -EINVAL;
- break;
- }
-
- ret = checkArea(top, left, bottom, right, weight);
- if ( NO_ERROR != ret ) {
- break;
- }
-
- currentArea = new CameraArea(top, left, bottom, right, weight);
- CAMHAL_LOGDB("Area parsed [%dx%d, %dx%d] %d",
- ( int ) top,
- ( int ) left,
- ( int ) bottom,
- ( int ) right,
- ( int ) weight);
- if ( NULL != currentArea.get() )
- {
- areas.add(currentArea);
- }
- else
- {
- ret = -ENOMEM;
- break;
- }
-
- pArea = strtok_r(NULL, startToken, &ctx);
-
- }
- while ( NULL != pArea );
-
- if ( NULL != tmpBuffer )
- {
- free(tmpBuffer);
- }
-
- LOG_FUNCTION_NAME_EXIT
-
- return ret;
-}
-
-bool CameraArea::areAreasDifferent(Vector< sp<CameraArea> > &area1,
- Vector< sp<CameraArea> > &area2) {
- if (area1.size() != area2.size()) {
- return true;
- }
-
- // not going to care about sorting order for now
- for (int i = 0; i < area1.size(); i++) {
- if (!area1.itemAt(i)->compare(area2.itemAt(i))) {
- return true;
- }
- }
-
- return false;
-}
-
-bool CameraArea::compare(const sp<CameraArea> &area) {
- return ((mTop == area->mTop) && (mLeft == area->mLeft) &&
- (mBottom == area->mBottom) && (mRight == area->mRight) &&
- (mWeight == area->mWeight));
-}
-
-
-/*--------------------CameraArea Class ENDS here-----------------------------*/
-
-};
+/*
+ * 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.
+ */
+
+/**
+* @file CameraHalUtilClasses.cpp
+*
+* This file maps the CameraHardwareInterface to the Camera interfaces on OMAP4 (mainly OMX).
+*
+*/
+
+#define LOG_TAG "CameraHAL"
+
+
+#include "CameraHal.h"
+
+namespace android {
+
+/*--------------------FrameProvider Class STARTS here-----------------------------*/
+
+int FrameProvider::enableFrameNotification(int32_t frameTypes)
+{
+ LOG_FUNCTION_NAME;
+ status_t ret = NO_ERROR;
+
+ ///Enable the frame notification to CameraAdapter (which implements FrameNotifier interface)
+ mFrameNotifier->enableMsgType(frameTypes<<MessageNotifier::FRAME_BIT_FIELD_POSITION
+ , mFrameCallback
+ , NULL
+ , mCookie
+ );
+
+ LOG_FUNCTION_NAME_EXIT;
+ return ret;
+}
+
+int FrameProvider::disableFrameNotification(int32_t frameTypes)
+{
+ LOG_FUNCTION_NAME;
+ status_t ret = NO_ERROR;
+
+ mFrameNotifier->disableMsgType(frameTypes<<MessageNotifier::FRAME_BIT_FIELD_POSITION
+ , mCookie
+ );
+
+ LOG_FUNCTION_NAME_EXIT;
+ return ret;
+}
+
+int FrameProvider::returnFrame(void *frameBuf, CameraFrame::FrameType frameType)
+{
+ status_t ret = NO_ERROR;
+
+ mFrameNotifier->returnFrame(frameBuf, frameType);
+
+ return ret;
+}
+
+void FrameProvider::addFramePointers(void *frameBuf, void *buf)
+{
+ mFrameNotifier->addFramePointers(frameBuf, buf);
+ return;
+}
+
+void FrameProvider::removeFramePointers()
+{
+ mFrameNotifier->removeFramePointers();
+ return;
+}
+
+/*--------------------FrameProvider Class ENDS here-----------------------------*/
+
+/*--------------------EventProvider Class STARTS here-----------------------------*/
+
+int EventProvider::enableEventNotification(int32_t frameTypes)
+{
+ LOG_FUNCTION_NAME;
+ status_t ret = NO_ERROR;
+
+ ///Enable the frame notification to CameraAdapter (which implements FrameNotifier interface)
+ mEventNotifier->enableMsgType(frameTypes<<MessageNotifier::EVENT_BIT_FIELD_POSITION
+ , NULL
+ , mEventCallback
+ , mCookie
+ );
+
+ LOG_FUNCTION_NAME_EXIT;
+ return ret;
+}
+
+int EventProvider::disableEventNotification(int32_t frameTypes)
+{
+ LOG_FUNCTION_NAME;
+ status_t ret = NO_ERROR;
+
+ mEventNotifier->disableMsgType(frameTypes<<MessageNotifier::FRAME_BIT_FIELD_POSITION
+ , mCookie
+ );
+
+ LOG_FUNCTION_NAME_EXIT;
+ return ret;
+}
+
+/*--------------------EventProvider Class ENDS here-----------------------------*/
+
+/*--------------------CameraArea Class STARTS here-----------------------------*/
+
+status_t CameraArea::transfrom(size_t width,
+ size_t height,
+ size_t &top,
+ size_t &left,
+ size_t &areaWidth,
+ size_t &areaHeight)
+{
+ status_t ret = NO_ERROR;
+ size_t hRange, vRange;
+ double hScale, vScale;
+
+ LOG_FUNCTION_NAME
+
+ hRange = CameraArea::RIGHT - CameraArea::LEFT;
+ vRange = CameraArea::BOTTOM - CameraArea::TOP;
+ hScale = ( double ) width / ( double ) hRange;
+ vScale = ( double ) height / ( double ) vRange;
+
+ top = ( mTop + vRange / 2 ) * vScale;
+ left = ( mLeft + hRange / 2 ) * hScale;
+ areaHeight = ( mBottom + vRange / 2 ) * vScale;
+ areaHeight -= top;
+ areaWidth = ( mRight + hRange / 2) * hScale;
+ areaWidth -= left;
+
+ LOG_FUNCTION_NAME_EXIT
+
+ return ret;
+}
+
+status_t CameraArea::checkArea(ssize_t top,
+ ssize_t left,
+ ssize_t bottom,
+ ssize_t right,
+ ssize_t weight)
+{
+
+ //Handles the invalid regin corner case.
+ if ( ( 0 == top ) && ( 0 == left ) && ( 0 == bottom ) && ( 0 == right ) && ( 0 == weight ) ) {
+ return NO_ERROR;
+ }
+
+ if ( ( CameraArea::WEIGHT_MIN > weight ) || ( CameraArea::WEIGHT_MAX < weight ) ) {
+ CAMHAL_LOGEB("Camera area weight is invalid %d", weight);
+ return -EINVAL;
+ }
+
+ if ( ( CameraArea::TOP > top ) || ( CameraArea::BOTTOM < top ) ) {
+ CAMHAL_LOGEB("Camera area top coordinate is invalid %d", top );
+ return -EINVAL;
+ }
+
+ if ( ( CameraArea::TOP > bottom ) || ( CameraArea::BOTTOM < bottom ) ) {
+ CAMHAL_LOGEB("Camera area bottom coordinate is invalid %d", bottom );
+ return -EINVAL;
+ }
+
+ if ( ( CameraArea::LEFT > left ) || ( CameraArea::RIGHT < left ) ) {
+ CAMHAL_LOGEB("Camera area left coordinate is invalid %d", left );
+ return -EINVAL;
+ }
+
+ if ( ( CameraArea::LEFT > right ) || ( CameraArea::RIGHT < right ) ) {
+ CAMHAL_LOGEB("Camera area right coordinate is invalid %d", right );
+ return -EINVAL;
+ }
+
+ if ( left >= right ) {
+ CAMHAL_LOGEA("Camera area left larger than right");
+ return -EINVAL;
+ }
+
+ if ( top >= bottom ) {
+ CAMHAL_LOGEA("Camera area top larger than bottom");
+ return -EINVAL;
+ }
+
+ return NO_ERROR;
+}
+
+status_t CameraArea::parseAreas(const char *area,
+ size_t areaLength,
+ Vector< sp<CameraArea> > &areas)
+{
+ status_t ret = NO_ERROR;
+ char *ctx;
+ char *pArea = NULL;
+ char *pStart = NULL;
+ char *pEnd = NULL;
+ const char *startToken = "(";
+ const char endToken = ')';
+ const char sep = ',';
+ ssize_t top, left, bottom, right, weight;
+ char *tmpBuffer = NULL;
+ sp<CameraArea> currentArea;
+
+ LOG_FUNCTION_NAME
+
+ if ( ( NULL == area ) ||
+ ( 0 >= areaLength ) )
+ {
+ return -EINVAL;
+ }
+
+ tmpBuffer = ( char * ) malloc(areaLength);
+ if ( NULL == tmpBuffer )
+ {
+ return -ENOMEM;
+ }
+
+ memcpy(tmpBuffer, area, areaLength);
+
+ pArea = strtok_r(tmpBuffer, startToken, &ctx);
+
+ do
+ {
+
+ pStart = pArea;
+ if ( NULL == pStart )
+ {
+ CAMHAL_LOGEA("Parsing of the left area coordinate failed!");
+ ret = -EINVAL;
+ break;
+ }
+ else
+ {
+ left = static_cast<ssize_t>(strtol(pStart, &pEnd, 10));
+ }
+
+ if ( sep != *pEnd )
+ {
+ CAMHAL_LOGEA("Parsing of the top area coordinate failed!");
+ ret = -EINVAL;
+ break;
+ }
+ else
+ {
+ top = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
+ }
+
+ if ( sep != *pEnd )
+ {
+ CAMHAL_LOGEA("Parsing of the right area coordinate failed!");
+ ret = -EINVAL;
+ break;
+ }
+ else
+ {
+ right = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
+ }
+
+ if ( sep != *pEnd )
+ {
+ CAMHAL_LOGEA("Parsing of the bottom area coordinate failed!");
+ ret = -EINVAL;
+ break;
+ }
+ else
+ {
+ bottom = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
+ }
+
+ if ( sep != *pEnd )
+ {
+ CAMHAL_LOGEA("Parsing of the weight area coordinate failed!");
+ ret = -EINVAL;
+ break;
+ }
+ else
+ {
+ weight = static_cast<ssize_t>(strtol(pEnd+1, &pEnd, 10));
+ }
+
+ if ( endToken != *pEnd )
+ {
+ CAMHAL_LOGEA("Malformed area!");
+ ret = -EINVAL;
+ break;
+ }
+
+ ret = checkArea(top, left, bottom, right, weight);
+ if ( NO_ERROR != ret ) {
+ break;
+ }
+
+ currentArea = new CameraArea(top, left, bottom, right, weight);
+ CAMHAL_LOGDB("Area parsed [%dx%d, %dx%d] %d",
+ ( int ) top,
+ ( int ) left,
+ ( int ) bottom,
+ ( int ) right,
+ ( int ) weight);
+ if ( NULL != currentArea.get() )
+ {
+ areas.add(currentArea);
+ }
+ else
+ {
+ ret = -ENOMEM;
+ break;
+ }
+
+ pArea = strtok_r(NULL, startToken, &ctx);
+
+ }
+ while ( NULL != pArea );
+
+ if ( NULL != tmpBuffer )
+ {
+ free(tmpBuffer);
+ }
+
+ LOG_FUNCTION_NAME_EXIT
+
+ return ret;
+}
+
+bool CameraArea::areAreasDifferent(Vector< sp<CameraArea> > &area1,
+ Vector< sp<CameraArea> > &area2) {
+ if (area1.size() != area2.size()) {
+ return true;
+ }
+
+ // not going to care about sorting order for now
+ for (int i = 0; i < area1.size(); i++) {
+ if (!area1.itemAt(i)->compare(area2.itemAt(i))) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool CameraArea::compare(const sp<CameraArea> &area) {
+ return ((mTop == area->mTop) && (mLeft == area->mLeft) &&
+ (mBottom == area->mBottom) && (mRight == area->mRight) &&
+ (mWeight == area->mWeight));
+}
+
+
+/*--------------------CameraArea Class ENDS here-----------------------------*/
+
+};
diff --git a/camera/CameraHal_Module.cpp b/camera/CameraHal_Module.cpp
index 511cbc2d..cb4e8047 100644
--- a/camera/CameraHal_Module.cpp
+++ b/camera/CameraHal_Module.cpp
@@ -78,7 +78,7 @@ int camera_set_preview_window(struct camera_device * device,
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -99,7 +99,7 @@ void camera_set_callbacks(struct camera_device * device,
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -113,7 +113,7 @@ void camera_enable_msg_type(struct camera_device * device, int32_t msg_type)
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -127,7 +127,7 @@ void camera_disable_msg_type(struct camera_device * device, int32_t msg_type)
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -141,7 +141,7 @@ int camera_msg_type_enabled(struct camera_device * device, int32_t msg_type)
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return 0;
@@ -156,7 +156,7 @@ int camera_start_preview(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -172,7 +172,7 @@ void camera_stop_preview(struct camera_device * device)
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -187,7 +187,7 @@ int camera_preview_enabled(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -203,7 +203,7 @@ int camera_store_meta_data_in_buffers(struct camera_device * device, int enable)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -221,7 +221,7 @@ int camera_start_recording(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -236,7 +236,7 @@ void camera_stop_recording(struct camera_device * device)
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -251,7 +251,7 @@ int camera_recording_enabled(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -267,7 +267,7 @@ void camera_release_recording_frame(struct camera_device * device,
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -282,7 +282,7 @@ int camera_auto_focus(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -298,7 +298,7 @@ int camera_cancel_auto_focus(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -314,7 +314,7 @@ int camera_take_picture(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -330,7 +330,7 @@ int camera_cancel_picture(struct camera_device * device)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -346,7 +346,7 @@ int camera_set_parameters(struct camera_device * device, const char *params)
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -362,7 +362,7 @@ char* camera_get_parameters(struct camera_device * device)
char* param = NULL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return NULL;
@@ -378,7 +378,7 @@ static void camera_put_parameters(struct camera_device *device, char *parms)
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -394,7 +394,7 @@ int camera_send_command(struct camera_device * device,
int rv = -EINVAL;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return rv;
@@ -409,7 +409,7 @@ void camera_release(struct camera_device * device)
{
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
if(!device)
return;
@@ -440,7 +440,7 @@ int camera_device_close(hw_device_t* device)
int ret = 0;
ti_camera_device_t* ti_dev = NULL;
- LOGV("%s", __FUNCTION__);
+ ALOGV("%s", __FUNCTION__);
android::Mutex::Autolock lock(gCameraHalDeviceLock);
@@ -501,7 +501,7 @@ int camera_device_open(const hw_module_t* module, const char* name,
if(cameraid > num_cameras)
{
- LOGE("camera service provided cameraid out of bounds, "
+ ALOGE("camera service provided cameraid out of bounds, "
"cameraid = %d, num supported = %d",
cameraid, num_cameras);
rv = -EINVAL;
@@ -510,7 +510,7 @@ int camera_device_open(const hw_module_t* module, const char* name,
if(gCamerasOpen >= MAX_SIMUL_CAMERAS_SUPPORTED)
{
- LOGE("maximum number of cameras already open");
+ ALOGE("maximum number of cameras already open");
rv = -ENOMEM;
goto fail;
}
@@ -518,7 +518,7 @@ int camera_device_open(const hw_module_t* module, const char* name,
camera_device = (ti_camera_device_t*)malloc(sizeof(*camera_device));
if(!camera_device)
{
- LOGE("camera_device allocation fail");
+ ALOGE("camera_device allocation fail");
rv = -ENOMEM;
goto fail;
}
@@ -526,7 +526,7 @@ int camera_device_open(const hw_module_t* module, const char* name,
camera_ops = (camera_device_ops_t*)malloc(sizeof(*camera_ops));
if(!camera_ops)
{
- LOGE("camera_ops allocation fail");
+ ALOGE("camera_ops allocation fail");
rv = -ENOMEM;
goto fail;
}
@@ -572,7 +572,7 @@ int camera_device_open(const hw_module_t* module, const char* name,
if(gCameraProperties.getProperties(cameraid, &properties) < 0)
{
- LOGE("Couldn't get camera properties");
+ ALOGE("Couldn't get camera properties");
rv = -ENOMEM;
goto fail;
}
@@ -581,14 +581,14 @@ int camera_device_open(const hw_module_t* module, const char* name,
if(!camera)
{
- LOGE("Couldn't create instance of CameraHal class");
+ ALOGE("Couldn't create instance of CameraHal class");
rv = -ENOMEM;
goto fail;
}
if(properties && (camera->initialize(properties) != android::NO_ERROR))
{
- LOGE("Couldn't initialize camera instance");
+ ALOGE("Couldn't initialize camera instance");
rv = -ENODEV;
goto fail;
}
@@ -656,7 +656,7 @@ int camera_get_camera_info(int camera_id, struct camera_info *info)
//Get camera properties for camera index
if(gCameraProperties.getProperties(camera_id, &properties) < 0)
{
- LOGE("Couldn't get camera properties");
+ ALOGE("Couldn't get camera properties");
rv = -EINVAL;
goto end;
}
diff --git a/camera/CameraProperties.cpp b/camera/CameraProperties.cpp
index 0e83fc95..5d3ff209 100644
--- a/camera/CameraProperties.cpp
+++ b/camera/CameraProperties.cpp
@@ -100,13 +100,13 @@ status_t CameraProperties::loadProperties()
mCamerasSupported = CameraAdapter_Capabilities(mCameraProps, mCamerasSupported, MAX_CAMERAS_SUPPORTED);
if((int)mCamerasSupported < 0) {
- LOGE("error while getting capabilities");
+ ALOGE("error while getting capabilities");
ret = UNKNOWN_ERROR;
} else if (mCamerasSupported > MAX_CAMERAS_SUPPORTED) {
- LOGE("returned too many adapaters");
+ ALOGE("returned too many adapaters");
ret = UNKNOWN_ERROR;
} else {
- LOGE("num_cameras = %d", mCamerasSupported);
+ ALOGE("num_cameras = %d", mCamerasSupported);
for (unsigned int i = 0; i < mCamerasSupported; i++) {
mCameraProps[i].set(CAMERA_SENSOR_INDEX, i);
@@ -114,7 +114,7 @@ status_t CameraProperties::loadProperties()
}
}
- LOGV("mCamerasSupported = %d", mCamerasSupported);
+ ALOGV("mCamerasSupported = %d", mCamerasSupported);
LOG_FUNCTION_NAME_EXIT;
return ret;
}
diff --git a/camera/Encoder_libjpeg.cpp b/camera/Encoder_libjpeg.cpp
index 7a6054f4..d50b2ea4 100644
--- a/camera/Encoder_libjpeg.cpp
+++ b/camera/Encoder_libjpeg.cpp
@@ -44,6 +44,7 @@ extern "C" {
}
#define ARRAY_SIZE(array) (sizeof((array)) / sizeof((array)[0]))
+#define MIN(x,y) ((x < y) ? x : y)
namespace android {
struct string_pair {
@@ -266,7 +267,7 @@ void ExifElementsTable::insertExifToJpeg(unsigned char* jpeg, size_t jpeg_size)
ResetJpgfile();
if (ReadJpegSectionsFromBuffer(jpeg, jpeg_size, read_mode)) {
jpeg_opened = true;
- create_EXIF(table, exif_tag_count, gps_tag_count);
+ create_EXIF(table, exif_tag_count, gps_tag_count, has_datetime_tag);
}
}
@@ -305,7 +306,7 @@ ExifElementsTable::~ExifElementsTable() {
}
status_t ExifElementsTable::insertElement(const char* tag, const char* value) {
- int value_length = 0;
+ unsigned int value_length = 0;
status_t ret = NO_ERROR;
if (!value || !tag) {
@@ -331,6 +332,10 @@ status_t ExifElementsTable::insertElement(const char* tag, const char* value) {
table[position].GpsTag = FALSE;
table[position].Tag = TagNameToValue(tag);
exif_tag_count++;
+
+ if (strcmp(tag, TAG_DATETIME) == 0) {
+ has_datetime_tag = true;
+ }
}
table[position].DataLength = 0;
diff --git a/camera/MemoryManager.cpp b/camera/MemoryManager.cpp
index 55675d99..b1dbbcf0 100644
--- a/camera/MemoryManager.cpp
+++ b/camera/MemoryManager.cpp
@@ -1,167 +1,173 @@
-/*
- * 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.
- */
-
-
-
-#define LOG_TAG "CameraHAL"
-
-
-#include "CameraHal.h"
-#include "TICameraParameters.h"
-
-extern "C" {
-
-#include <ion.h>
-
-//#include <timm_osal_interfaces.h>
-//#include <timm_osal_trace.h>
-
-
-};
-
-namespace android {
-
-///@todo Move these constants to a common header file, preferably in tiler.h
-#define STRIDE_8BIT (4 * 1024)
-#define STRIDE_16BIT (4 * 1024)
-
-#define ALLOCATION_2D 2
-
-///Utility Macro Declarations
-
-/*--------------------MemoryManager Class STARTS here-----------------------------*/
-void* MemoryManager::allocateBuffer(int width, int height, const char* format, int &bytes, int numBufs)
-{
- LOG_FUNCTION_NAME;
-
- if(mIonFd == 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.
+ */
+
+
+
+#define LOG_TAG "CameraHAL"
+
+
+#include "CameraHal.h"
+#include "TICameraParameters.h"
+
+extern "C" {
+
+#include <ion/ion.h>
+
+//#include <timm_osal_interfaces.h>
+//#include <timm_osal_trace.h>
+
+
+};
+
+namespace android {
+
+///@todo Move these constants to a common header file, preferably in tiler.h
+#define STRIDE_8BIT (4 * 1024)
+#define STRIDE_16BIT (4 * 1024)
+
+#define ALLOCATION_2D 2
+
+///Utility Macro Declarations
+
+/*--------------------MemoryManager Class STARTS here-----------------------------*/
+void* MemoryManager::allocateBuffer(int width, int height, const char* format, int &bytes, int numBufs)
+{
+ LOG_FUNCTION_NAME;
+
+ if(mIonFd < 0)
{
mIonFd = ion_open();
- if(mIonFd == 0)
+ if(mIonFd < 0)
{
CAMHAL_LOGEA("ion_open failed!!!");
return NULL;
}
}
- ///We allocate numBufs+1 because the last entry will be marked NULL to indicate end of array, which is used when freeing
- ///the buffers
- const uint numArrayEntriesC = (uint)(numBufs+1);
-
- ///Allocate a buffer array
- uint32_t *bufsArr = new uint32_t [numArrayEntriesC];
- if(!bufsArr)
- {
- CAMHAL_LOGEB("Allocation failed when creating buffers array of %d uint32_t elements", numArrayEntriesC);
- LOG_FUNCTION_NAME_EXIT;
- return NULL;
- }
-
- ///Initialize the array with zeros - this will help us while freeing the array in case of error
- ///If a value of an array element is NULL, it means we didnt allocate it
- memset(bufsArr, 0, sizeof(*bufsArr) * numArrayEntriesC);
-
+ ///We allocate numBufs+1 because the last entry will be marked NULL to indicate end of array, which is used when freeing
+ ///the buffers
+ const uint numArrayEntriesC = (uint)(numBufs+1);
+
+ ///Allocate a buffer array
+ uint32_t *bufsArr = new uint32_t [numArrayEntriesC];
+ if(!bufsArr)
+ {
+ CAMHAL_LOGEB("Allocation failed when creating buffers array of %d uint32_t elements", numArrayEntriesC);
+ goto error;
+ }
+
+ ///Initialize the array with zeros - this will help us while freeing the array in case of error
+ ///If a value of an array element is NULL, it means we didnt allocate it
+ memset(bufsArr, 0, sizeof(*bufsArr) * numArrayEntriesC);
+
//2D Allocations are not supported currently
if(bytes != 0)
- {
+ {
struct ion_handle *handle;
int mmap_fd;
- ///1D buffers
- for (int i = 0; i < numBufs; i++)
- {
+ ///1D buffers
+ for (int i = 0; i < numBufs; i++)
+ {
int ret = ion_alloc(mIonFd, bytes, 0, 1 << ION_HEAP_TYPE_CARVEOUT, &handle);
if(ret < 0)
- {
+ {
CAMHAL_LOGEB("ion_alloc resulted in error %d", ret);
- goto error;
- }
+ goto error;
+ }
CAMHAL_LOGDB("Before mapping, handle = %x, nSize = %d", handle, bytes);
if ((ret = ion_map(mIonFd, handle, bytes, PROT_READ | PROT_WRITE, MAP_SHARED, 0,
(unsigned char**)&bufsArr[i], &mmap_fd)) < 0)
- {
+ {
CAMHAL_LOGEB("Userspace mapping of ION buffers returned error %d", ret);
ion_free(mIonFd, handle);
goto error;
- }
+ }
mIonHandleMap.add(bufsArr[i], (unsigned int)handle);
mIonFdMap.add(bufsArr[i], (unsigned int) mmap_fd);
mIonBufLength.add(bufsArr[i], (unsigned int) bytes);
- }
-
- }
+ }
+
+ }
else // If bytes is not zero, then it is a 2-D tiler buffer request
- {
- }
-
- LOG_FUNCTION_NAME_EXIT;
-
- return (void*)bufsArr;
-
+ {
+ }
+
+ LOG_FUNCTION_NAME_EXIT;
+
+ return (void*)bufsArr;
+
error:
- LOGE("Freeing buffers already allocated after error occurred");
- freeBuffer(bufsArr);
-
+ ALOGE("Freeing buffers already allocated after error occurred");
+ if(bufsArr)
+ freeBuffer(bufsArr);
+
if ( NULL != mErrorNotifier.get() )
{
mErrorNotifier->errorNotify(-ENOMEM);
}
-
+
+ if (mIonFd >= 0)
+ {
+ ion_close(mIonFd);
+ mIonFd = -1;
+ }
+
LOG_FUNCTION_NAME_EXIT;
return NULL;
-}
-
-//TODO: Get needed data to map tiler buffers
-//Return dummy data for now
-uint32_t * MemoryManager::getOffsets()
-{
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return NULL;
-}
-
-int MemoryManager::getFd()
-{
- LOG_FUNCTION_NAME;
-
- LOG_FUNCTION_NAME_EXIT;
-
- return -1;
-}
-
-int MemoryManager::freeBuffer(void* buf)
-{
- status_t ret = NO_ERROR;
- LOG_FUNCTION_NAME;
-
- uint32_t *bufEntry = (uint32_t*)buf;
-
- if(!bufEntry)
- {
- CAMHAL_LOGEA("NULL pointer passed to freebuffer");
- LOG_FUNCTION_NAME_EXIT;
- return BAD_VALUE;
- }
-
- while(*bufEntry)
- {
+}
+
+//TODO: Get needed data to map tiler buffers
+//Return dummy data for now
+uint32_t * MemoryManager::getOffsets()
+{
+ LOG_FUNCTION_NAME;
+
+ LOG_FUNCTION_NAME_EXIT;
+
+ return NULL;
+}
+
+int MemoryManager::getFd()
+{
+ LOG_FUNCTION_NAME;
+
+ LOG_FUNCTION_NAME_EXIT;
+
+ return -1;
+}
+
+int MemoryManager::freeBuffer(void* buf)
+{
+ status_t ret = NO_ERROR;
+ LOG_FUNCTION_NAME;
+
+ uint32_t *bufEntry = (uint32_t*)buf;
+
+ if(!bufEntry)
+ {
+ CAMHAL_LOGEA("NULL pointer passed to freebuffer");
+ LOG_FUNCTION_NAME_EXIT;
+ return BAD_VALUE;
+ }
+
+ while(*bufEntry)
+ {
unsigned int ptr = (unsigned int) *bufEntry++;
if(mIonBufLength.valueFor(ptr))
{
@@ -176,47 +182,47 @@ int MemoryManager::freeBuffer(void* buf)
{
CAMHAL_LOGEA("Not a valid Memory Manager buffer");
}
- }
-
- ///@todo Check if this way of deleting array is correct, else use malloc/free
- uint32_t * bufArr = (uint32_t*)buf;
- delete [] bufArr;
-
+ }
+
+ ///@todo Check if this way of deleting array is correct, else use malloc/free
+ uint32_t * bufArr = (uint32_t*)buf;
+ delete [] bufArr;
+
if(mIonBufLength.size() == 0)
{
- if(mIonFd)
+ if(mIonFd >= 0)
{
ion_close(mIonFd);
- mIonFd = 0;
+ mIonFd = -1;
}
}
- LOG_FUNCTION_NAME_EXIT;
- return ret;
-}
-
-status_t MemoryManager::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;
-}
-
-};
-
-
-/*--------------------MemoryManager Class ENDS here-----------------------------*/
+ LOG_FUNCTION_NAME_EXIT;
+ return ret;
+}
+
+status_t MemoryManager::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;
+}
+
+};
+
+
+/*--------------------MemoryManager Class ENDS here-----------------------------*/
diff --git a/camera/NV12_resize.c b/camera/NV12_resize.c
index 03c049e2..7f92fb23 100644
--- a/camera/NV12_resize.c
+++ b/camera/NV12_resize.c
@@ -31,7 +31,7 @@ VT_resizeFrame_Video_opt2_lp
mmUint16 dummy /* Transparent pixel value */
)
{
- LOGV("VT_resizeFrame_Video_opt2_lp+");
+ ALOGV("VT_resizeFrame_Video_opt2_lp+");
mmUint16 row,col;
mmUint32 resizeFactorX;
@@ -55,19 +55,19 @@ VT_resizeFrame_Video_opt2_lp
{
if(i_img_ptr->uHeight == o_img_ptr->uHeight)
{
- LOGV("************************f(i_img_ptr->uHeight == o_img_ptr->uHeight) are same *********************\n");
- LOGV("************************(i_img_ptr->width == %d" , i_img_ptr->uWidth );
- LOGV("************************(i_img_ptr->uHeight == %d" , i_img_ptr->uHeight );
- LOGV("************************(o_img_ptr->width == %d" ,o_img_ptr->uWidth );
- LOGV("************************(o_img_ptr->uHeight == %d" , o_img_ptr->uHeight );
+ ALOGV("************************f(i_img_ptr->uHeight == o_img_ptr->uHeight) are same *********************\n");
+ ALOGV("************************(i_img_ptr->width == %d" , i_img_ptr->uWidth );
+ ALOGV("************************(i_img_ptr->uHeight == %d" , i_img_ptr->uHeight );
+ ALOGV("************************(o_img_ptr->width == %d" ,o_img_ptr->uWidth );
+ ALOGV("************************(o_img_ptr->uHeight == %d" , o_img_ptr->uHeight );
}
}
if (!i_img_ptr || !i_img_ptr->imgPtr ||
!o_img_ptr || !o_img_ptr->imgPtr)
{
- LOGE("Image Point NULL");
- LOGV("VT_resizeFrame_Video_opt2_lp-");
+ ALOGE("Image Point NULL");
+ ALOGV("VT_resizeFrame_Video_opt2_lp-");
return FALSE;
}
@@ -95,8 +95,8 @@ VT_resizeFrame_Video_opt2_lp
/* make sure valid input size */
if (idx < 1 || idy < 1 || i_img_ptr->uStride < 1)
{
- LOGE("idx or idy less then 1 idx = %d idy = %d stride = %d", idx, idy, i_img_ptr->uStride);
- LOGV("VT_resizeFrame_Video_opt2_lp-");
+ ALOGE("idx or idy less then 1 idx = %d idy = %d stride = %d", idx, idy, i_img_ptr->uStride);
+ ALOGV("VT_resizeFrame_Video_opt2_lp-");
return FALSE;
}
@@ -297,11 +297,11 @@ VT_resizeFrame_Video_opt2_lp
}
else
{
- LOGE("eFormat not supported");
- LOGV("VT_resizeFrame_Video_opt2_lp-");
+ ALOGE("eFormat not supported");
+ ALOGV("VT_resizeFrame_Video_opt2_lp-");
return FALSE;
}
- LOGV("success");
- LOGV("VT_resizeFrame_Video_opt2_lp-");
+ ALOGV("success");
+ ALOGV("VT_resizeFrame_Video_opt2_lp-");
return TRUE;
}
diff --git a/camera/OMXCameraAdapter/OMX3A.cpp b/camera/OMXCameraAdapter/OMX3A.cpp
index ef02e499..4cb4607e 100644
--- a/camera/OMXCameraAdapter/OMX3A.cpp
+++ b/camera/OMXCameraAdapter/OMX3A.cpp
@@ -75,6 +75,7 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
status_t ret = NO_ERROR;
int mode = 0;
const char *str = NULL;
+ int varint = 0;
BaseCameraAdapter::AdapterState nextState;
BaseCameraAdapter::getNextState(nextState);
@@ -111,6 +112,8 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
CAMHAL_LOGVB("SceneMode %d", mParameters3A.SceneMode);
}
+#ifdef OMAP_ENHANCEMENT
+
str = params.get(TICameraParameters::KEY_EXPOSURE_MODE);
mode = getLUTvalue_HALtoOMX( str, ExpLUT);
if ( ( str != NULL ) && ( mParameters3A.Exposure != mode ))
@@ -123,6 +126,8 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
}
}
+#endif
+
str = params.get(CameraParameters::KEY_WHITE_BALANCE);
mode = getLUTvalue_HALtoOMX( str, WBalLUT);
if (mFirstTimeInit || ((str != NULL) && (mode != mParameters3A.WhiteBallance)))
@@ -135,54 +140,58 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
}
}
- if ( 0 <= params.getInt(TICameraParameters::KEY_CONTRAST) )
+#ifdef OMAP_ENHANCEMENT
+
+ varint = params.getInt(TICameraParameters::KEY_CONTRAST);
+ if ( 0 <= varint )
{
if ( mFirstTimeInit ||
- ( (mParameters3A.Contrast + CONTRAST_OFFSET) !=
- params.getInt(TICameraParameters::KEY_CONTRAST)) )
+ ( (mParameters3A.Contrast + CONTRAST_OFFSET) != varint ) )
{
- mParameters3A.Contrast = params.getInt(TICameraParameters::KEY_CONTRAST) - CONTRAST_OFFSET;
+ mParameters3A.Contrast = varint - CONTRAST_OFFSET;
CAMHAL_LOGDB("Contrast %d", mParameters3A.Contrast);
mPending3Asettings |= SetContrast;
}
}
- if ( 0 <= params.getInt(TICameraParameters::KEY_SHARPNESS) )
+ varint = params.getInt(TICameraParameters::KEY_SHARPNESS);
+ if ( 0 <= varint )
{
if ( mFirstTimeInit ||
- ((mParameters3A.Sharpness + SHARPNESS_OFFSET) !=
- params.getInt(TICameraParameters::KEY_SHARPNESS)))
+ ((mParameters3A.Sharpness + SHARPNESS_OFFSET) != varint ))
{
- mParameters3A.Sharpness = params.getInt(TICameraParameters::KEY_SHARPNESS) - SHARPNESS_OFFSET;
+ mParameters3A.Sharpness = varint - SHARPNESS_OFFSET;
CAMHAL_LOGDB("Sharpness %d", mParameters3A.Sharpness);
mPending3Asettings |= SetSharpness;
}
}
- if ( 0 <= params.getInt(TICameraParameters::KEY_SATURATION) )
+ varint = params.getInt(TICameraParameters::KEY_SATURATION);
+ if ( 0 <= varint )
{
if ( mFirstTimeInit ||
- ((mParameters3A.Saturation + SATURATION_OFFSET) !=
- params.getInt(TICameraParameters::KEY_SATURATION)) )
+ ((mParameters3A.Saturation + SATURATION_OFFSET) != varint ) )
{
- mParameters3A.Saturation = params.getInt(TICameraParameters::KEY_SATURATION) - SATURATION_OFFSET;
+ mParameters3A.Saturation = varint - SATURATION_OFFSET;
CAMHAL_LOGDB("Saturation %d", mParameters3A.Saturation);
mPending3Asettings |= SetSaturation;
}
}
- if ( 0 <= params.getInt(TICameraParameters::KEY_BRIGHTNESS) )
+ varint = params.getInt(TICameraParameters::KEY_BRIGHTNESS);
+ if ( 0 <= varint )
{
if ( mFirstTimeInit ||
- (( mParameters3A.Brightness !=
- ( unsigned int ) params.getInt(TICameraParameters::KEY_BRIGHTNESS))) )
+ (( mParameters3A.Brightness != varint )) )
{
- mParameters3A.Brightness = (unsigned)params.getInt(TICameraParameters::KEY_BRIGHTNESS);
+ mParameters3A.Brightness = (unsigned) varint;
CAMHAL_LOGDB("Brightness %d", mParameters3A.Brightness);
mPending3Asettings |= SetBrightness;
}
}
+#endif
+
str = params.get(CameraParameters::KEY_ANTIBANDING);
mode = getLUTvalue_HALtoOMX(str,FlickerLUT);
if ( mFirstTimeInit || ( ( str != NULL ) && ( mParameters3A.Flicker != mode ) ))
@@ -195,6 +204,8 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
}
}
+#ifdef OMAP_ENHANCEMENT
+
str = params.get(TICameraParameters::KEY_ISO);
mode = getLUTvalue_HALtoOMX(str, IsoLUT);
CAMHAL_LOGVB("ISO mode arrived in HAL : %s", str);
@@ -208,6 +219,8 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
}
}
+#endif
+
str = params.get(CameraParameters::KEY_FOCUS_MODE);
mode = getLUTvalue_HALtoOMX(str, FocusLUT);
if ( (mFirstTimeInit || ((str != NULL) && (mParameters3A.Focus != mode))))
@@ -225,15 +238,14 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
}
str = params.get(CameraParameters::KEY_EXPOSURE_COMPENSATION);
+ varint = params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION);
if ( mFirstTimeInit ||
(( str != NULL ) &&
- (mParameters3A.EVCompensation !=
- params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION))))
+ (mParameters3A.EVCompensation != varint )))
{
- CAMHAL_LOGDB("Setting EV Compensation to %d",
- params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION));
+ CAMHAL_LOGDB("Setting EV Compensation to %d", varint);
- mParameters3A.EVCompensation = params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION);
+ mParameters3A.EVCompensation = varint;
mPending3Asettings |= SetEVCompensation;
}
@@ -273,7 +285,7 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
OMX_BOOL lock = OMX_FALSE;
mUserSetExpLock = OMX_FALSE;
str = params.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK);
- if ( (strcmp(str, "true")) == 0)
+ if (str && ((strcmp(str, "true")) == 0))
{
CAMHAL_LOGVA("Locking Exposure");
lock = OMX_TRUE;
@@ -298,7 +310,7 @@ status_t OMXCameraAdapter::setParameters3A(const CameraParameters &params,
OMX_BOOL lock = OMX_FALSE;
mUserSetWbLock = OMX_FALSE;
str = params.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK);
- if ( (strcmp(str, "true")) == 0)
+ if (str && ((strcmp(str, "true")) == 0))
{
CAMHAL_LOGVA("Locking WhiteBalance");
lock = OMX_TRUE;
@@ -384,59 +396,26 @@ const char* OMXCameraAdapter::getLUTvalue_OMXtoHAL(int OMXValue, LUTtype LUT)
return NULL;
}
-status_t OMXCameraAdapter::apply3ADefaults(Gen3A_settings &Gen3A)
+status_t OMXCameraAdapter::init3AParams(Gen3A_settings &Gen3A)
{
- status_t ret = NO_ERROR;
-
LOG_FUNCTION_NAME;
Gen3A.Effect = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_EFFECT, EffLUT);
- ret |= setEffect(Gen3A);
-
Gen3A.FlashMode = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_FLASH_MODE, FlashLUT);
- ret |= setFlashMode(Gen3A);
-
Gen3A.SceneMode = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_SCENE_MODE, SceneLUT);
- ret |= setScene(Gen3A);
-
Gen3A.EVCompensation = atoi(OMXCameraAdapter::DEFAULT_EV_COMPENSATION);
- ret |= setEVCompensation(Gen3A);
-
Gen3A.Focus = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_FOCUS_MODE, FocusLUT);
- ret |= setFocusMode(Gen3A);
-
Gen3A.ISO = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_ISO_MODE, IsoLUT);
- ret |= setISO(Gen3A);
-
Gen3A.Flicker = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_ANTIBANDING, FlickerLUT);
- ret |= setFlicker(Gen3A);
-
Gen3A.Brightness = atoi(OMXCameraAdapter::DEFAULT_BRIGHTNESS);
- ret |= setBrightness(Gen3A);
-
Gen3A.Saturation = atoi(OMXCameraAdapter::DEFAULT_SATURATION) - SATURATION_OFFSET;
- ret |= setSaturation(Gen3A);
-
Gen3A.Sharpness = atoi(OMXCameraAdapter::DEFAULT_SHARPNESS) - SHARPNESS_OFFSET;
- ret |= setSharpness(Gen3A);
-
Gen3A.Contrast = atoi(OMXCameraAdapter::DEFAULT_CONTRAST) - CONTRAST_OFFSET;
- ret |= setContrast(Gen3A);
-
Gen3A.WhiteBallance = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_WB, WBalLUT);
- ret |= setWBMode(Gen3A);
-
Gen3A.Exposure = getLUTvalue_HALtoOMX(OMXCameraAdapter::DEFAULT_EXPOSURE_MODE, ExpLUT);
- ret |= setExposureMode(Gen3A);
-
Gen3A.ExposureLock = OMX_FALSE;
- ret |= setExposureLock(Gen3A);
-
Gen3A.FocusLock = OMX_FALSE;
- ret |= setFocusLock(Gen3A);
-
Gen3A.WhiteBalanceLock = OMX_FALSE;
- ret |= setWhiteBalanceLock(Gen3A);
LOG_FUNCTION_NAME_EXIT;
@@ -492,7 +471,7 @@ static bool isFlashDisabled() {
char value[PROPERTY_VALUE_MAX];
if (property_get("camera.flash_off", value, NULL) &&
(!strcasecmp(value, "true") || !strcasecmp(value, "1"))) {
- LOGW("flash is disabled for testing purpose");
+ ALOGW("flash is disabled for testing purpose");
return true;
}
diff --git a/camera/OMXCameraAdapter/OMXAlgo.cpp b/camera/OMXCameraAdapter/OMXAlgo.cpp
index 5924ddeb..ff68cc93 100644
--- a/camera/OMXCameraAdapter/OMXAlgo.cpp
+++ b/camera/OMXCameraAdapter/OMXAlgo.cpp
@@ -247,6 +247,8 @@ status_t OMXCameraAdapter::setParametersAlgo(const CameraParameters &params,
mOMXStateSwitch = true;
}
+#ifdef OMAP_ENHANCEMENT
+
//Set Auto Convergence Mode
valstr = params.get((const char *) TICameraParameters::KEY_AUTOCONVERGENCE);
if ( valstr != NULL )
@@ -277,6 +279,8 @@ status_t OMXCameraAdapter::setParametersAlgo(const CameraParameters &params,
CAMHAL_LOGVB("AutoConvergenceMode %s, value = %d", valstr, (int) manualconvergence);
}
+#endif
+
LOG_FUNCTION_NAME_EXIT;
return ret;
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index aa32ede0..a41327cb 100755
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -78,12 +78,6 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps)
return NO_INIT;
}
- if (mComponentState != OMX_StateLoaded && mComponentState != OMX_StateInvalid) {
- CAMHAL_LOGEB("Error mComponentState %d is invalid!", mComponentState);
- LOG_FUNCTION_NAME_EXIT;
- return NO_INIT;
- }
-
///Update the preview and image capture port indexes
mCameraAdapterParameters.mPrevPortIndex = OMX_CAMERA_PORT_VIDEO_OUT_PREVIEW;
// temp changed in order to build OMX_CAMERA_PORT_VIDEO_OUT_IMAGE;
@@ -94,9 +88,10 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps)
eError = OMX_Init();
if (eError != OMX_ErrorNone) {
- CAMHAL_LOGEB("Error OMX_Init -0x%x", eError);
- return eError;
+ CAMHAL_LOGEB("OMX_Init() failed, error: 0x%x", eError);
+ return ErrorUtils::omxToAndroidError(eError);
}
+ mOmxInitialized = true;
///Get the handle to the OMX Component
eError = OMXCameraAdapter::OMXCameraGetHandle(&mCameraAdapterParameters.mHandleComp, (OMX_PTR)this);
@@ -105,6 +100,8 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps)
}
GOTO_EXIT_IF((eError != OMX_ErrorNone), eError);
+ mComponentState = OMX_StateLoaded;
+
CAMHAL_LOGVB("OMX_GetHandle -0x%x sensor_index = %lu", eError, mSensorIndex);
eError = OMX_SendCommand(mCameraAdapterParameters.mHandleComp,
OMX_CommandPortDisable,
@@ -176,7 +173,6 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps)
mRecording = false;
mWaitingForSnapshot = false;
mSnapshotCount = 0;
- mComponentState = OMX_StateLoaded;
mCapMode = HIGH_QUALITY;
mIPP = IPP_NULL;
@@ -281,14 +277,15 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps)
mMeasurementEnabled = false;
mFaceDetectionRunning = false;
mFaceDetectionPaused = false;
+ mFDSwitchAlgoPriority = false;
memset(&mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mImagePortIndex], 0, sizeof(OMXCameraPortParameters));
memset(&mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex], 0, sizeof(OMXCameraPortParameters));
//Initialize 3A defaults
- ret = apply3ADefaults(mParameters3A);
+ ret = init3AParams(mParameters3A);
if ( NO_ERROR != ret ) {
- CAMHAL_LOGEA("Couldn't apply 3A defaults!");
+ CAMHAL_LOGEA("Couldn't init 3A params!");
goto EXIT;
}
@@ -541,6 +538,8 @@ status_t OMXCameraAdapter::setParameters(const CameraParameters &params)
mOMXStateSwitch = true;
}
+#ifdef OMAP_ENHANCEMENT
+
if ( (valstr = params.get(TICameraParameters::KEY_MEASUREMENT_ENABLE)) != NULL )
{
if (strcmp(valstr, (const char *) TICameraParameters::MEASUREMENT_ENABLE) == 0)
@@ -562,6 +561,8 @@ status_t OMXCameraAdapter::setParameters(const CameraParameters &params)
mMeasurementEnabled = false;
}
+#endif
+
ret |= setParametersCapture(params, state);
ret |= setParameters3A(params, state);
@@ -594,7 +595,7 @@ void saveFile(unsigned char *buff, int width, int height, int format) {
sprintf(fn, "/preview%03d.yuv", counter);
fd = open(fn, O_CREAT | O_WRONLY | O_SYNC | O_TRUNC, 0777);
if(fd < 0) {
- LOGE("Unable to open file %s: %s", fn, strerror(fd));
+ ALOGE("Unable to open file %s: %s", fn, strerror(fd));
return;
}
@@ -682,6 +683,8 @@ void OMXCameraAdapter::getParameters(CameraParameters& params)
mParameters.get(CameraParameters::KEY_FOCUS_DISTANCES));
}
+#ifdef OMAP_ENHANCEMENT
+
OMX_INIT_STRUCT_PTR (&exp, OMX_CONFIG_EXPOSUREVALUETYPE);
exp.nPortIndex = OMX_ALL;
@@ -697,6 +700,8 @@ void OMXCameraAdapter::getParameters(CameraParameters& params)
CAMHAL_LOGEB("OMX error 0x%x, while retrieving current ISO value", eError);
}
+#endif
+
{
Mutex::Autolock lock(mZoomLock);
//Immediate zoom should not be avaialable while smooth zoom is running
@@ -750,7 +755,6 @@ void OMXCameraAdapter::getParameters(CameraParameters& params)
params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, valstr);
}
-
LOG_FUNCTION_NAME_EXIT;
}
@@ -1743,6 +1747,8 @@ status_t OMXCameraAdapter::UseBuffersPreview(void* bufArr, int num)
///If there is any failure, we reach here.
///Here, we do any resource freeing and convert from OMX error code to Camera Hal error code
EXIT:
+ mStateSwitchLock.unlock();
+
CAMHAL_LOGEB("Exiting function %s because of ret %d eError=%x", __FUNCTION__, ret, eError);
performCleanupAfterError();
CAMHAL_LOGEB("Exiting function %s because of ret %d eError=%x", __FUNCTION__, ret, eError);
@@ -1758,15 +1764,14 @@ status_t OMXCameraAdapter::startPreview()
OMX_ERRORTYPE eError = OMX_ErrorNone;
OMXCameraPortParameters *mPreviewData = NULL;
OMXCameraPortParameters *measurementData = NULL;
- OMX_CONFIG_EXTRADATATYPE extraDataControl;
LOG_FUNCTION_NAME;
if( 0 != mStartPreviewSem.Count() )
{
CAMHAL_LOGEB("Error mStartPreviewSem semaphore count %d", mStartPreviewSem.Count());
- LOG_FUNCTION_NAME_EXIT;
- return NO_INIT;
+ ret = NO_INIT;
+ goto EXIT;
}
mPreviewData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mPrevPortIndex];
@@ -1870,15 +1875,7 @@ status_t OMXCameraAdapter::startPreview()
// whether the preview frame is a snapshot
if ( OMX_ErrorNone == eError)
{
- OMX_INIT_STRUCT_PTR (&extraDataControl, OMX_CONFIG_EXTRADATATYPE);
- extraDataControl.nPortIndex = OMX_ALL;
- extraDataControl.eExtraDataType = OMX_AncillaryData;
- extraDataControl.bEnable = OMX_TRUE;
-
- eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
- ( OMX_INDEXTYPE ) OMX_IndexConfigOtherExtraDataControl,
- &extraDataControl);
- GOTO_EXIT_IF((eError!=OMX_ErrorNone), eError);
+ ret = setExtraData(true, OMX_ALL, OMX_AncillaryData);
}
@@ -1935,6 +1932,14 @@ status_t OMXCameraAdapter::stopPreview()
mCaptureData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mImagePortIndex];
measurementData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mMeasurementPortIndex];
+ if (mAdapterState == LOADED_PREVIEW_STATE) {
+ // Something happened in CameraHal between UseBuffers and startPreview
+ // this means that state switch is still locked..so we need to unlock else
+ // deadlock will occur on the next start preview
+ mStateSwitchLock.unlock();
+ return NO_ERROR;
+ }
+
if ( mComponentState != OMX_StateExecuting )
{
CAMHAL_LOGEA("Calling StopPreview() when not in EXECUTING state");
@@ -2707,6 +2712,7 @@ OMX_ERRORTYPE OMXCameraAdapter::SignalEvent(OMX_IN OMX_HANDLETYPE hComponent,
{
Mutex::Autolock lock(mEventLock);
TIUTILS::Message *msg;
+ bool eventSignalled = false;
LOG_FUNCTION_NAME;
@@ -2730,6 +2736,7 @@ OMX_ERRORTYPE OMXCameraAdapter::SignalEvent(OMX_IN OMX_HANDLETYPE hComponent,
//Signal the semaphore provided
sem->Signal();
free(msg);
+ eventSignalled = true;
break;
}
}
@@ -2740,6 +2747,19 @@ OMX_ERRORTYPE OMXCameraAdapter::SignalEvent(OMX_IN OMX_HANDLETYPE hComponent,
CAMHAL_LOGDA("Event queue empty!!!");
}
+ // Special handling for any unregistered events
+ if (!eventSignalled) {
+ // Handling for focus callback
+ if ((nData2 == OMX_IndexConfigCommonFocusStatus) &&
+ (eEvent == (OMX_EVENTTYPE) OMX_EventIndexSettingChanged)) {
+ TIUTILS::Message msg;
+ msg.command = OMXCallbackHandler::CAMERA_FOCUS_STATUS;
+ msg.arg1 = NULL;
+ msg.arg2 = NULL;
+ mOMXCallbackHandler->put(&msg);
+ }
+ }
+
LOG_FUNCTION_NAME_EXIT;
return OMX_ErrorNone;
@@ -2867,7 +2887,7 @@ static void debugShowFPS()
mFps = ((mFrameCount - mLastFrameCount) * float(s2ns(1))) / diff;
mLastFpsTime = now;
mLastFrameCount = mFrameCount;
- LOGD("Camera %d Frames, %f FPS", mFrameCount, mFps);
+ ALOGD("Camera %d Frames, %f FPS", mFrameCount, mFps);
}
// XXX: mFPS has the value we want
}
@@ -2919,7 +2939,7 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
CameraFrame cameraFrame;
OMX_TI_PLATFORMPRIVATE *platformPrivate;
OMX_OTHER_EXTRADATATYPE *extraData;
- OMX_TI_ANCILLARYDATATYPE *ancillaryData;
+ OMX_TI_ANCILLARYDATATYPE *ancillaryData = NULL;
bool snapshotFrame = false;
res1 = res2 = NO_ERROR;
@@ -2952,7 +2972,6 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
}
recalculateFPS();
-
{
Mutex::Autolock lock(mFaceDetectionLock);
if ( mFaceDetectionRunning && !mFaceDetectionPaused ) {
@@ -2961,12 +2980,18 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
notifyFaceSubscribers(fdResult);
fdResult.clear();
}
- }
- }
+ if ( mFDSwitchAlgoPriority ) {
- if ( (nextState & CAPTURE_ACTIVE) )
- {
- mPending3Asettings |= SetFocus;
+ //Disable region priority and enable face priority for AF
+ setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false);
+ setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO , true);
+
+ //Disable Region priority and enable Face priority
+ setAlgoPriority(REGION_PRIORITY, EXPOSURE_ALGO, false);
+ setAlgoPriority(FACE_PRIORITY, EXPOSURE_ALGO, true);
+ mFDSwitchAlgoPriority = false;
+ }
+ }
}
///Prepare the frames to be sent - initialize CameraFrame object and reference count
@@ -2978,6 +3003,16 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
{
typeOfFrame = CameraFrame::SNAPSHOT_FRAME;
mask = (unsigned int)CameraFrame::SNAPSHOT_FRAME;
+
+ // video snapshot gets ancillary data and wb info from last snapshot frame
+ mCaptureAncillaryData = ancillaryData;
+ mWhiteBalanceData = NULL;
+ extraData = getExtradata((OMX_OTHER_EXTRADATATYPE*) platformPrivate->pMetaDataBuffer,
+ (OMX_EXTRADATATYPE) OMX_WhiteBalance);
+ if ( NULL != extraData )
+ {
+ mWhiteBalanceData = (OMX_TI_WHITEBALANCERESULTTYPE*) extraData->data;
+ }
}
else
{
@@ -2991,7 +3026,7 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
mFramesWithEncoder++;
}
- //LOGV("FBD pBuffer = 0x%x", pBuffHeader->pBuffer);
+ //ALOGV("FBD pBuffer = 0x%x", pBuffHeader->pBuffer);
if( mWaitingForSnapshot )
{
@@ -3012,8 +3047,8 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
#ifdef DEBUG_LOG
if(mBuffersWithDucati.indexOfKey((int)pBuffHeader->pBuffer)<0)
{
- LOGE("Buffer was never with Ducati!! 0x%x", pBuffHeader->pBuffer);
- for(int i=0;i<mBuffersWithDucati.size();i++) LOGE("0x%x", mBuffersWithDucati.keyAt(i));
+ ALOGE("Buffer was never with Ducati!! 0x%x", pBuffHeader->pBuffer);
+ for(int i=0;i<mBuffersWithDucati.size();i++) ALOGE("0x%x", mBuffersWithDucati.keyAt(i));
}
mBuffersWithDucati.removeItem((int)pBuffHeader->pBuffer);
#endif
@@ -3026,10 +3061,13 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
// On the fly update to 3A settings not working
// Do not update 3A here if we are in the middle of a capture
// or in the middle of transitioning to it
- if( mPending3Asettings && ((nextState & CAPTURE_ACTIVE) == 0))
+ if( mPending3Asettings &&
+ ( (nextState & CAPTURE_ACTIVE) == 0 ) &&
+ ( (state & CAPTURE_ACTIVE) == 0 ) )
{
apply3Asettings(mParameters3A);
}
+
}
else if( pBuffHeader->nOutputPortIndex == OMX_CAMERA_PORT_VIDEO_OUT_MEASUREMENT )
{
@@ -3064,7 +3102,7 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
// populate exif data and pass to subscribers via quirk
// subscriber is in charge of freeing exif data
ExifElementsTable* exif = new ExifElementsTable();
- setupEXIF_libjpeg(exif);
+ setupEXIF_libjpeg(exif, mCaptureAncillaryData, mWhiteBalanceData);
cameraFrame.mQuirks |= CameraFrame::HAS_EXIF_DATA;
cameraFrame.mCookie2 = (void*) exif;
}
@@ -3368,6 +3406,11 @@ bool OMXCameraAdapter::OMXCallbackHandler::Handler()
( OMX_BUFFERHEADERTYPE *) msg.arg2);
break;
}
+ case OMXCallbackHandler::CAMERA_FOCUS_STATUS:
+ {
+ mCameraAdapter->handleFocusCallback();
+ break;
+ }
case CommandHandler::COMMAND_EXIT:
{
CAMHAL_LOGDA("Exiting OMX callback handler");
@@ -3381,6 +3424,41 @@ bool OMXCameraAdapter::OMXCallbackHandler::Handler()
return false;
}
+status_t OMXCameraAdapter::setExtraData(bool enable, OMX_U32 nPortIndex, OMX_EXT_EXTRADATATYPE eType) {
+ status_t ret = NO_ERROR;
+ OMX_ERRORTYPE eError = OMX_ErrorNone;
+ OMX_CONFIG_EXTRADATATYPE extraDataControl;
+
+ LOG_FUNCTION_NAME;
+
+ if ( ( OMX_StateInvalid == mComponentState ) ||
+ ( NULL == mCameraAdapterParameters.mHandleComp ) ) {
+ CAMHAL_LOGEA("OMX component is in invalid state");
+ return -EINVAL;
+ }
+
+ OMX_INIT_STRUCT_PTR (&extraDataControl, OMX_CONFIG_EXTRADATATYPE);
+
+ extraDataControl.nPortIndex = nPortIndex;
+ extraDataControl.eExtraDataType = eType;
+ extraDataControl.eCameraView = OMX_2D;
+
+ if (enable) {
+ extraDataControl.bEnable = OMX_TRUE;
+ } else {
+ extraDataControl.bEnable = OMX_FALSE;
+ }
+
+ eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
+ (OMX_INDEXTYPE) OMX_IndexConfigOtherExtraDataControl,
+ &extraDataControl);
+
+ LOG_FUNCTION_NAME_EXIT;
+
+ return (ret | ErrorUtils::omxToAndroidError(eError));
+}
+
+
OMX_OTHER_EXTRADATATYPE *OMXCameraAdapter::getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_EXTRADATATYPE type)
{
if ( NULL != extraData )
@@ -3398,17 +3476,18 @@ OMX_OTHER_EXTRADATATYPE *OMXCameraAdapter::getExtradata(OMX_OTHER_EXTRADATATYPE
return NULL;
}
-OMXCameraAdapter::OMXCameraAdapter(size_t sensor_index): mComponentState (OMX_StateLoaded)
+OMXCameraAdapter::OMXCameraAdapter(size_t sensor_index)
{
LOG_FUNCTION_NAME;
+ mOmxInitialized = false;
+ mComponentState = OMX_StateInvalid;
mSensorIndex = sensor_index;
mPictureRotation = 0;
// Initial values
mTimeSourceDelta = 0;
onlyOnce = true;
- mDoAFSem.Create(0);
mInitSem.Create(0);
mFlushSem.Create(0);
mUsePreviewDataSem.Create(0);
@@ -3441,22 +3520,22 @@ OMXCameraAdapter::~OMXCameraAdapter()
Mutex::Autolock lock(gAdapterLock);
- //Return to OMX Loaded state
- switchToLoaded();
+ if ( mOmxInitialized ) {
+ // return to OMX Loaded state
+ switchToLoaded();
- ///De-init the OMX
- if( (mComponentState==OMX_StateLoaded) || (mComponentState==OMX_StateInvalid))
- {
- ///Free the handle for the Camera component
- if(mCameraAdapterParameters.mHandleComp)
- {
- OMX_FreeHandle(mCameraAdapterParameters.mHandleComp);
- mCameraAdapterParameters.mHandleComp = NULL;
+ // deinit the OMX
+ if ( mComponentState == OMX_StateLoaded || mComponentState == OMX_StateInvalid ) {
+ // free the handle for the Camera component
+ if ( mCameraAdapterParameters.mHandleComp ) {
+ OMX_FreeHandle(mCameraAdapterParameters.mHandleComp);
+ mCameraAdapterParameters.mHandleComp = NULL;
}
-
- OMX_Deinit();
}
+ OMX_Deinit();
+ mOmxInitialized = false;
+ }
//Remove any unhandled events
if ( !mEventSignalQ.isEmpty() )
@@ -3526,28 +3605,30 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraGetHandle(OMX_HANDLETYPE *handle, OMX_P
{
OMX_ERRORTYPE eError = OMX_ErrorUndefined;
- int retries = 5;
- while(eError!=OMX_ErrorNone && --retries>=0) {
+ for ( int i = 0; i < 5; ++i ) {
+ if ( i > 0 ) {
+ // sleep for 100 ms before next attempt
+ usleep(100000);
+ }
- // Setup key parameters to send to Ducati during init
- OMX_CALLBACKTYPE oCallbacks;
+ // setup key parameters to send to Ducati during init
+ OMX_CALLBACKTYPE oCallbacks;
- // Initialize the callback handles
- oCallbacks.EventHandler = android::OMXCameraAdapterEventHandler;
- oCallbacks.EmptyBufferDone = android::OMXCameraAdapterEmptyBufferDone;
- oCallbacks.FillBufferDone = android::OMXCameraAdapterFillBufferDone;
+ // initialize the callback handles
+ oCallbacks.EventHandler = android::OMXCameraAdapterEventHandler;
+ oCallbacks.EmptyBufferDone = android::OMXCameraAdapterEmptyBufferDone;
+ oCallbacks.FillBufferDone = android::OMXCameraAdapterFillBufferDone;
- // Get Handle
- eError = OMX_GetHandle(handle, (OMX_STRING)"OMX.TI.DUCATI1.VIDEO.CAMERA", pAppData, &oCallbacks);
- if (eError != OMX_ErrorNone) {
- CAMHAL_LOGEB("OMX_GetHandle -0x%x", eError);
- //Sleep for 100 mS
- usleep(100000);
- } else {
- break;
- }
+ // get handle
+ eError = OMX_GetHandle(handle, (OMX_STRING)"OMX.TI.DUCATI1.VIDEO.CAMERA", pAppData, &oCallbacks);
+ if ( eError == OMX_ErrorNone ) {
+ return OMX_ErrorNone;
+ }
+
+ CAMHAL_LOGEB("OMX_GetHandle() failed, error: 0x%x", eError);
}
+ *handle = 0;
return eError;
}
diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp
index 77fdb052..93a0dae5 100644
--- a/camera/OMXCameraAdapter/OMXCapture.cpp
+++ b/camera/OMXCameraAdapter/OMXCapture.cpp
@@ -40,6 +40,7 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
int w, h;
OMX_COLOR_FORMATTYPE pixFormat;
const char *valstr = NULL;
+ int varint = 0;
LOG_FUNCTION_NAME;
@@ -142,6 +143,8 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
cap->mColorFormat = pixFormat;
}
+#ifdef OMAP_ENHANCEMENT
+
str = params.get(TICameraParameters::KEY_EXP_BRACKETING_RANGE);
if ( NULL != str ) {
parseExpRange(str, mExposureBracketingValues, EXP_BRACKET_RANGE, mExposureBracketingValidEntries);
@@ -151,12 +154,15 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
mExposureBracketingValidEntries = 0;
}
- if ( params.getInt(CameraParameters::KEY_ROTATION) != -1 )
+#endif
+
+ varint = params.getInt(CameraParameters::KEY_ROTATION);
+ if ( varint != -1 )
{
- if (params.getInt(CameraParameters::KEY_ROTATION) != mPictureRotation) {
+ if ( ( unsigned int ) varint != mPictureRotation) {
mPendingCaptureSettings |= SetRotation;
}
- mPictureRotation = params.getInt(CameraParameters::KEY_ROTATION);
+ mPictureRotation = varint;
}
else
{
@@ -166,11 +172,14 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
CAMHAL_LOGVB("Picture Rotation set %d", mPictureRotation);
+#ifdef OMAP_ENHANCEMENT
+
// Read Sensor Orientation and set it based on perating mode
- if (( params.getInt(TICameraParameters::KEY_SENSOR_ORIENTATION) != -1 ) && (mCapMode == OMXCameraAdapter::VIDEO_MODE))
+ varint = params.getInt(TICameraParameters::KEY_SENSOR_ORIENTATION);
+ if (( varint != -1 ) && (mCapMode == OMXCameraAdapter::VIDEO_MODE))
{
- mSensorOrientation = params.getInt(TICameraParameters::KEY_SENSOR_ORIENTATION);
+ mSensorOrientation = varint;
if (mSensorOrientation == 270 ||mSensorOrientation==90)
{
CAMHAL_LOGEA(" Orientation is 270/90. So setting counter rotation to Ducati");
@@ -185,12 +194,13 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
CAMHAL_LOGVB("Sensor Orientation set : %d", mSensorOrientation);
- if ( params.getInt(TICameraParameters::KEY_BURST) >= 1 )
+ varint = params.getInt(TICameraParameters::KEY_BURST);
+ if ( varint >= 1 )
{
- if (params.getInt(TICameraParameters::KEY_BURST) != mBurstFrames) {
+ if (varint != mBurstFrames) {
mPendingCaptureSettings |= SetExpBracket;
}
- mBurstFrames = params.getInt(TICameraParameters::KEY_BURST);
+ mBurstFrames = varint;
}
else
{
@@ -200,13 +210,16 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
CAMHAL_LOGVB("Burst Frames set %d", mBurstFrames);
- if ( ( params.getInt(CameraParameters::KEY_JPEG_QUALITY) >= MIN_JPEG_QUALITY ) &&
- ( params.getInt(CameraParameters::KEY_JPEG_QUALITY) <= MAX_JPEG_QUALITY ) )
+#endif
+
+ varint = params.getInt(CameraParameters::KEY_JPEG_QUALITY);
+ if ( ( varint >= MIN_JPEG_QUALITY ) &&
+ ( varint <= MAX_JPEG_QUALITY ) )
{
- if (params.getInt(CameraParameters::KEY_JPEG_QUALITY) != mPictureQuality) {
+ if ( ( unsigned int ) varint != mPictureQuality) {
mPendingCaptureSettings |= SetQuality;
}
- mPictureQuality = params.getInt(CameraParameters::KEY_JPEG_QUALITY);
+ mPictureQuality = varint;
}
else
{
@@ -216,12 +229,13 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
CAMHAL_LOGVB("Picture Quality set %d", mPictureQuality);
- if ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH) >= 0 )
+ varint = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
+ if ( varint >= 0 )
{
- if (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH) != mThumbWidth) {
+ if ( ( unsigned int ) varint != mThumbWidth) {
mPendingCaptureSettings |= SetThumb;
}
- mThumbWidth = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
+ mThumbWidth = varint;
}
else
{
@@ -232,12 +246,13 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
CAMHAL_LOGVB("Picture Thumb width set %d", mThumbWidth);
- if ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT) >= 0 )
+ varint = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
+ if ( varint >= 0 )
{
- if (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT) != mThumbHeight) {
+ if ( ( unsigned int ) varint != mThumbHeight) {
mPendingCaptureSettings |= SetThumb;
}
- mThumbHeight = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
+ mThumbHeight = varint;
}
else
{
@@ -248,13 +263,14 @@ status_t OMXCameraAdapter::setParametersCapture(const CameraParameters &params,
CAMHAL_LOGVB("Picture Thumb height set %d", mThumbHeight);
- if ( ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY) >= MIN_JPEG_QUALITY ) &&
- ( params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY) <= MAX_JPEG_QUALITY ) )
+ varint = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY);
+ if ( ( varint >= MIN_JPEG_QUALITY ) &&
+ ( varint <= MAX_JPEG_QUALITY ) )
{
- if (params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY) != mThumbQuality) {
+ if ( ( unsigned int ) varint != mThumbQuality) {
mPendingCaptureSettings |= SetThumb;
}
- mThumbQuality = params.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY);
+ mThumbQuality = varint;
}
else
{
@@ -775,6 +791,12 @@ status_t OMXCameraAdapter::startImageCapture()
}
}
+ // need to enable wb data for video snapshot to fill in exif data
+ if ((ret == NO_ERROR) && (mCapMode == VIDEO_MODE)) {
+ // video snapshot uses wb data from snapshot frame
+ ret = setExtraData(true, mCameraAdapterParameters.mPrevPortIndex, OMX_WhiteBalance);
+ }
+
//OMX shutter callback events are only available in hq mode
if ( (HIGH_QUALITY == mCapMode) || (HIGH_QUALITY_ZSL== mCapMode))
{
@@ -866,6 +888,7 @@ status_t OMXCameraAdapter::startImageCapture()
EXIT:
CAMHAL_LOGEB("Exiting function %s because of ret %d eError=%x", __FUNCTION__, ret, eError);
+ setExtraData(false, mCameraAdapterParameters.mPrevPortIndex, OMX_WhiteBalance);
mWaitingForSnapshot = false;
mCaptureSignalled = false;
performCleanupAfterError();
@@ -945,6 +968,13 @@ status_t OMXCameraAdapter::stopImageCapture()
goto EXIT;
}
}
+
+ // had to enable wb data for video snapshot to fill in exif data
+ // now that we are done...disable
+ if ((ret == NO_ERROR) && (mCapMode == VIDEO_MODE)) {
+ ret = setExtraData(false, mCameraAdapterParameters.mPrevPortIndex, OMX_WhiteBalance);
+ }
+
CAMHAL_LOGDB("Capture set - 0x%x", eError);
mCaptureSignalled = true; //set this to true if we exited because of timeout
diff --git a/camera/OMXCameraAdapter/OMXExif.cpp b/camera/OMXCameraAdapter/OMXExif.cpp
index 4c5e5551..70fb3db7 100755..100644
--- a/camera/OMXCameraAdapter/OMXExif.cpp
+++ b/camera/OMXCameraAdapter/OMXExif.cpp
@@ -497,7 +497,9 @@ status_t OMXCameraAdapter::setupEXIF()
return ret;
}
-status_t OMXCameraAdapter::setupEXIF_libjpeg(ExifElementsTable* exifTable)
+status_t OMXCameraAdapter::setupEXIF_libjpeg(ExifElementsTable* exifTable,
+ OMX_TI_ANCILLARYDATATYPE* pAncillaryData,
+ OMX_TI_WHITEBALANCERESULTTYPE* pWhiteBalanceData)
{
status_t ret = NO_ERROR;
OMX_ERRORTYPE eError = OMX_ErrorNone;
@@ -544,7 +546,6 @@ status_t OMXCameraAdapter::setupEXIF_libjpeg(ExifElementsTable* exifTable)
pTime->tm_hour,
pTime->tm_min,
pTime->tm_sec );
-
ret = exifTable->insertElement(TAG_DATETIME, temp_value);
}
}
@@ -658,6 +659,129 @@ status_t OMXCameraAdapter::setupEXIF_libjpeg(ExifElementsTable* exifTable)
}
}
+ // fill in short and ushort tags
+ if (NO_ERROR == ret) {
+ char temp_value[2];
+ temp_value[1] = '\0';
+
+ // AWB
+ if (mParameters3A.WhiteBallance == OMX_WhiteBalControlAuto) {
+ temp_value[0] = '0';
+ } else {
+ temp_value[0] = '1';
+ }
+ exifTable->insertElement(TAG_WHITEBALANCE, temp_value);
+
+ // MeteringMode
+ // TODO(XXX): only supporting this metering mode at the moment, may change in future
+ temp_value[0] = '2';
+ exifTable->insertElement(TAG_METERING_MODE, temp_value);
+
+ // ExposureProgram
+ // TODO(XXX): only supporting this exposure program at the moment, may change in future
+ temp_value[0] = '3';
+ exifTable->insertElement(TAG_EXPOSURE_PROGRAM, temp_value);
+
+ // ColorSpace
+ temp_value[0] = '1';
+ exifTable->insertElement(TAG_COLOR_SPACE, temp_value);
+
+ temp_value[0] = '2';
+ exifTable->insertElement(TAG_SENSING_METHOD, temp_value);
+
+ temp_value[0] = '1';
+ exifTable->insertElement(TAG_CUSTOM_RENDERED, temp_value);
+ }
+
+ if (pAncillaryData && (NO_ERROR == ret)) {
+ unsigned int numerator = 0, denominator = 0;
+ char temp_value[256];
+ unsigned int temp_num = 0;
+
+ // DigitalZoomRatio
+ snprintf(temp_value,
+ sizeof(temp_value)/sizeof(char),
+ "%u/%u",
+ pAncillaryData->nDigitalZoomFactor, 1024);
+ exifTable->insertElement(TAG_DIGITALZOOMRATIO, temp_value);
+
+ // ExposureTime
+ snprintf(temp_value,
+ sizeof(temp_value)/sizeof(char),
+ "%u/%u",
+ pAncillaryData->nExposureTime, 1000000);
+ exifTable->insertElement(TAG_EXPOSURETIME, temp_value);
+
+ // ApertureValue and FNumber
+ snprintf(temp_value,
+ sizeof(temp_value)/sizeof(char),
+ "%u/%u",
+ pAncillaryData->nApertureValue, 100);
+ exifTable->insertElement(TAG_FNUMBER, temp_value);
+ exifTable->insertElement(TAG_APERTURE, temp_value);
+
+ // ISO
+ snprintf(temp_value,
+ sizeof(temp_value)/sizeof(char),
+ "%u,0,0",
+ pAncillaryData->nCurrentISO);
+ exifTable->insertElement(TAG_ISO_EQUIVALENT, temp_value);
+
+ // ShutterSpeed
+ snprintf(temp_value,
+ sizeof(temp_value)/sizeof(char),
+ "%f",
+ log(pAncillaryData->nExposureTime) / log(2));
+ ExifElementsTable::stringToRational(temp_value, &numerator, &denominator);
+ snprintf(temp_value, sizeof(temp_value)/sizeof(char), "%u/%u", numerator, denominator);
+ exifTable->insertElement(TAG_SHUTTERSPEED, temp_value);
+
+ // Flash
+ if (mParameters3A.FlashMode == OMX_IMAGE_FlashControlAuto) {
+ if(pAncillaryData->nFlashStatus) temp_num = 0x19; // Flash fired, auto mode
+ else temp_num = 0x18; // Flash did not fire, auto mode
+ } else if (mParameters3A.FlashMode == OMX_IMAGE_FlashControlOn) {
+ if(pAncillaryData->nFlashStatus) temp_num = 0x9; // Flash fired, compulsory flash mode
+ else temp_num = 0x10; // Flash did not fire, compulsory flash mode
+ } else if(pAncillaryData->nFlashStatus) {
+ temp_num = 0x1; // Flash fired
+ } else {
+ temp_num = 0x0; // Flash did not fire
+ }
+ snprintf(temp_value,
+ sizeof(temp_value)/sizeof(char),
+ "%u", temp_num);
+ exifTable->insertElement(TAG_FLASH, temp_value);
+
+ if (pWhiteBalanceData) {
+ unsigned int lightsource = 0;
+ unsigned int colourtemp = pWhiteBalanceData->nColorTemperature;
+ bool flash_fired = (temp_num & 0x1); // value from flash above
+
+ // stole this from framework/tools_library/src/tools_sys_exif_tags.c
+ if( colourtemp <= 3200 ) {
+ lightsource = 3; // Tungsten
+ } else if( colourtemp > 3200 && colourtemp <= 4800 ) {
+ lightsource = 2; // Fluorescent
+ } else if( colourtemp > 4800 && colourtemp <= 5500 ) {
+ lightsource = 1; // Daylight
+ } else if( colourtemp > 5500 && colourtemp <= 6500 ) {
+ lightsource = 9; // Fine weather
+ } else if( colourtemp > 6500 ) {
+ lightsource = 10; // Cloudy weather
+ }
+
+ if(flash_fired) {
+ lightsource = 4; // Flash
+ }
+
+ snprintf(temp_value,
+ sizeof(temp_value)/sizeof(char),
+ "%u", lightsource);
+ exifTable->insertElement(TAG_LIGHT_SOURCE, temp_value);
+ }
+ }
+
LOG_FUNCTION_NAME_EXIT;
return ret;
@@ -675,7 +799,7 @@ status_t OMXCameraAdapter::convertGPSCoord(double coord,
if ( coord == 0 ) {
- LOGE("Invalid GPS coordinate");
+ ALOGE("Invalid GPS coordinate");
return -EINVAL;
}
diff --git a/camera/OMXCameraAdapter/OMXFD.cpp b/camera/OMXCameraAdapter/OMXFD.cpp
index 38c7a6ec..26bbd876 100644
--- a/camera/OMXCameraAdapter/OMXFD.cpp
+++ b/camera/OMXCameraAdapter/OMXFD.cpp
@@ -62,16 +62,9 @@ status_t OMXCameraAdapter::startFaceDetection()
goto out;
}
- if ( mFaceDetectionRunning )
- {
- //Disable region priority and enable face priority for AF
- setAlgoPriority(REGION_PRIORITY, FOCUS_ALGO, false);
- setAlgoPriority(FACE_PRIORITY, FOCUS_ALGO , true);
-
- //Disable Region priority and enable Face priority
- setAlgoPriority(REGION_PRIORITY, EXPOSURE_ALGO, false);
- setAlgoPriority(FACE_PRIORITY, EXPOSURE_ALGO, true);
- }
+ if ( mFaceDetectionRunning ) {
+ mFDSwitchAlgoPriority = true;
+ }
// Note: White balance will not be face prioritized, since
// the algorithm needs full frame statistics, and not face
@@ -125,7 +118,6 @@ status_t OMXCameraAdapter::setFaceDetection(bool enable, OMX_U32 orientation)
{
status_t ret = NO_ERROR;
OMX_ERRORTYPE eError = OMX_ErrorNone;
- OMX_CONFIG_EXTRADATATYPE extraDataControl;
OMX_CONFIG_OBJDETECTIONTYPE objDetection;
LOG_FUNCTION_NAME;
@@ -170,27 +162,11 @@ status_t OMXCameraAdapter::setFaceDetection(bool enable, OMX_U32 orientation)
if ( NO_ERROR == ret )
{
- OMX_INIT_STRUCT_PTR (&extraDataControl, OMX_CONFIG_EXTRADATATYPE);
- extraDataControl.nPortIndex = mCameraAdapterParameters.mPrevPortIndex;
- extraDataControl.eExtraDataType = OMX_FaceDetection;
- extraDataControl.eCameraView = OMX_2D;
- if ( enable )
- {
- extraDataControl.bEnable = OMX_TRUE;
- }
- else
- {
- extraDataControl.bEnable = OMX_FALSE;
- }
+ ret = setExtraData(enable, mCameraAdapterParameters.mPrevPortIndex, OMX_FaceDetection);
- eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
- ( OMX_INDEXTYPE ) OMX_IndexConfigOtherExtraDataControl,
- &extraDataControl);
- if ( OMX_ErrorNone != eError )
+ if ( NO_ERROR != ret )
{
- CAMHAL_LOGEB("Error while configuring face detection extra data 0x%x",
- eError);
- ret = -1;
+ CAMHAL_LOGEA("Error while configuring face detection extra data");
}
else
{
@@ -245,19 +221,19 @@ status_t OMXCameraAdapter::detectFaces(OMX_BUFFERHEADERTYPE* pBuffHeader,
platformPrivate->pMetaDataBuffer,
platformPrivate->nMetaDataSize);
} else {
- CAMHAL_LOGEB("OMX_TI_PLATFORMPRIVATE size mismatch: expected = %d, received = %d",
+ CAMHAL_LOGDB("OMX_TI_PLATFORMPRIVATE size mismatch: expected = %d, received = %d",
( unsigned int ) sizeof(OMX_TI_PLATFORMPRIVATE),
( unsigned int ) platformPrivate->nSize);
- ret = -EINVAL;
+ return -EINVAL;
}
} else {
- CAMHAL_LOGEA("Invalid OMX_TI_PLATFORMPRIVATE");
+ CAMHAL_LOGDA("Invalid OMX_TI_PLATFORMPRIVATE");
return-EINVAL;
}
if ( 0 >= platformPrivate->nMetaDataSize ) {
- CAMHAL_LOGEB("OMX_TI_PLATFORMPRIVATE nMetaDataSize is size is %d",
+ CAMHAL_LOGDB("OMX_TI_PLATFORMPRIVATE nMetaDataSize is size is %d",
( unsigned int ) platformPrivate->nMetaDataSize);
return -EINVAL;
}
@@ -274,7 +250,7 @@ status_t OMXCameraAdapter::detectFaces(OMX_BUFFERHEADERTYPE* pBuffHeader,
extraData->nPortIndex,
extraData->nVersion);
} else {
- CAMHAL_LOGEA("Invalid OMX_OTHER_EXTRADATATYPE");
+ CAMHAL_LOGDA("Invalid OMX_OTHER_EXTRADATATYPE");
return -EINVAL;
}
@@ -289,7 +265,7 @@ status_t OMXCameraAdapter::detectFaces(OMX_BUFFERHEADERTYPE* pBuffHeader,
faceData->nPortIndex,
faceData->nVersion);
} else {
- CAMHAL_LOGEB("OMX_FACEDETECTIONTYPE size mismatch: expected = %d, received = %d",
+ CAMHAL_LOGDB("OMX_FACEDETECTIONTYPE size mismatch: expected = %d, received = %d",
( unsigned int ) sizeof(OMX_FACEDETECTIONTYPE),
( unsigned int ) faceData->nSize);
return -EINVAL;
diff --git a/camera/OMXCameraAdapter/OMXFocus.cpp b/camera/OMXCameraAdapter/OMXFocus.cpp
index d9d4df42..50e2c21e 100644
--- a/camera/OMXCameraAdapter/OMXFocus.cpp
+++ b/camera/OMXCameraAdapter/OMXFocus.cpp
@@ -84,7 +84,7 @@ status_t OMXCameraAdapter::doAutoFocus()
OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focusControl;
OMX_PARAM_FOCUSSTATUSTYPE focusStatus;
OMX_CONFIG_BOOLEANTYPE bOMX;
- int timeout = 0;
+ nsecs_t timeout = 0;
LOG_FUNCTION_NAME;
@@ -102,17 +102,14 @@ status_t OMXCameraAdapter::doAutoFocus()
return NO_ERROR;
}
- if ( 0 != mDoAFSem.Count() )
- {
- CAMHAL_LOGEB("Error mDoAFSem semaphore count %d", mDoAFSem.Count());
- return NO_INIT;
- }
if( ((AF_ACTIVE & getState()) != AF_ACTIVE) && ((AF_ACTIVE & getNextState()) != AF_ACTIVE) ) {
CAMHAL_LOGDA("Auto focus got canceled before doAutoFocus could be called");
return NO_ERROR;
}
+ OMX_INIT_STRUCT_PTR (&focusStatus, OMX_PARAM_FOCUSSTATUSTYPE);
+
// If the app calls autoFocus, the camera will stop sending face callbacks.
pauseFaceDetection(true);
@@ -141,8 +138,7 @@ status_t OMXCameraAdapter::doAutoFocus()
} else if ( mParameters3A.Focus == OMX_IMAGE_FocusControlAuto ) {
// In case we have CAF running we should first check the AF status.
// If it has managed to lock, then do as usual and return status
- // immediately. If lock is not available, then switch temporarily
- // to 'autolock' and do normal AF.
+ // immediately.
ret = checkFocus(&focusStatus);
if ( NO_ERROR != ret ) {
CAMHAL_LOGEB("Focus status check failed 0x%x!", ret);
@@ -165,12 +161,6 @@ status_t OMXCameraAdapter::doAutoFocus()
(OMX_INDEXTYPE)OMX_TI_IndexConfigAutofocusEnable,
&bOMX);
- ret = RegisterForEvent(mCameraAdapterParameters.mHandleComp,
- (OMX_EVENTTYPE) OMX_EventIndexSettingChanged,
- OMX_ALL,
- OMX_IndexConfigCommonFocusStatus,
- mDoAFSem);
-
// force AF, Ducati will take care of whether CAF
// or AF will be performed, depending on light conditions
if ( focusControl.eFocusControl == OMX_IMAGE_FocusControlAuto
@@ -194,31 +184,30 @@ status_t OMXCameraAdapter::doAutoFocus()
}
// configure focus timeout based on capture mode
- timeout = (mCapMode == VIDEO_MODE) ? AF_VIDEO_CALLBACK_TIMEOUT : AF_IMAGE_CALLBACK_TIMEOUT;
+ timeout = (mCapMode == VIDEO_MODE) ?
+ ( ( nsecs_t ) AF_VIDEO_CALLBACK_TIMEOUT * 1000 ) :
+ ( ( nsecs_t ) AF_IMAGE_CALLBACK_TIMEOUT * 1000 );
+
+ {
+ Mutex::Autolock lock(mDoAFMutex);
+ ret = mDoAFCond.waitRelative(mDoAFMutex, timeout);
+ }
- ret = mDoAFSem.WaitTimeout(timeout);
//If somethiing bad happened while we wait
if (mComponentState == OMX_StateInvalid) {
CAMHAL_LOGEA("Invalid State after Auto Focus Exitting!!!");
- return EINVAL;
+ return -EINVAL;
}
- if( ret != NO_ERROR) {
- //Disable auto focus callback from Ducati
- setFocusCallback(false);
+ if(ret != NO_ERROR) {
CAMHAL_LOGEA("Autofocus callback timeout expired");
- RemoveEvent(mCameraAdapterParameters.mHandleComp,
- (OMX_EVENTTYPE) OMX_EventIndexSettingChanged,
- OMX_ALL,
- OMX_IndexConfigCommonFocusStatus,
- NULL );
- returnFocusStatus(true);
+ ret = returnFocusStatus(true);
} else {
ret = returnFocusStatus(false);
}
} else { // Focus mode in continuous
if ( NO_ERROR == ret ) {
- ret = returnFocusStatus(false);
+ ret = returnFocusStatus(true);
mPending3Asettings |= SetFocus;
}
}
@@ -230,7 +219,6 @@ status_t OMXCameraAdapter::doAutoFocus()
status_t OMXCameraAdapter::stopAutoFocus()
{
- status_t ret = NO_ERROR;
OMX_ERRORTYPE eError = OMX_ErrorNone;
OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE focusControl;
@@ -254,24 +242,29 @@ status_t OMXCameraAdapter::stopAutoFocus()
return NO_ERROR;
}
- if ( NO_ERROR == ret )
+ OMX_INIT_STRUCT_PTR (&focusControl, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE);
+ focusControl.eFocusControl = OMX_IMAGE_FocusControlOff;
+
+ eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
+ OMX_IndexConfigFocusControl,
+ &focusControl);
+ if ( OMX_ErrorNone != eError )
{
- OMX_INIT_STRUCT_PTR (&focusControl, OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE);
- focusControl.eFocusControl = OMX_IMAGE_FocusControlOff;
+ CAMHAL_LOGEB("Error while stopping focus 0x%x", eError);
+ return ErrorUtils::omxToAndroidError(eError);
+ } else {
+ // This is a WA. Usually the OMX Camera component should
+ // generate AF status change OMX event fairly quickly
+ // ( after one preview frame ) and this notification should
+ // actually come from 'handleFocusCallback()'.
+ Mutex::Autolock lock(mDoAFMutex);
+ mDoAFCond.broadcast();
+ }
- eError = OMX_SetConfig(mCameraAdapterParameters.mHandleComp,
- OMX_IndexConfigFocusControl,
- &focusControl);
- if ( OMX_ErrorNone != eError )
- {
- CAMHAL_LOGEB("Error while stopping focus 0x%x", eError);
- return ErrorUtils::omxToAndroidError(eError);
- }
- }
LOG_FUNCTION_NAME_EXIT;
- return ret;
+ return NO_ERROR;
}
status_t OMXCameraAdapter::getFocusMode(OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE &focusMode)
@@ -319,19 +312,12 @@ status_t OMXCameraAdapter::cancelAutoFocus()
( focusMode.eFocusControl != ( OMX_IMAGE_FOCUSCONTROLTYPE )
OMX_IMAGE_FocusControlAutoInfinity ) ) {
stopAutoFocus();
- //Signal a dummy AF event so that in case the callback from ducati
- //does come then it doesnt crash after
- //exiting this function since eventSem will go out of scope.
- ret |= SignalEvent(mCameraAdapterParameters.mHandleComp,
- (OMX_EVENTTYPE) OMX_EventIndexSettingChanged,
- OMX_ALL,
- OMX_IndexConfigCommonFocusStatus,
- NULL );
} else if (focusMode.eFocusControl == OMX_IMAGE_FocusControlAuto) {
+ // This re-enabling of CAF doesn't seem to
+ // be needed any more.
// re-apply CAF after unlocking and canceling
- mPending3Asettings |= SetFocus;
+ // mPending3Asettings |= SetFocus;
}
-
// If the apps call #cancelAutoFocus()}, the face callbacks will also resume.
pauseFaceDetection(false);
@@ -401,7 +387,7 @@ status_t OMXCameraAdapter::returnFocusStatus(bool timeoutReached)
{
status_t ret = NO_ERROR;
OMX_PARAM_FOCUSSTATUSTYPE eFocusStatus;
- bool focusStatus = false;
+ CameraHalEvent::FocusStatus focusStatus = CameraHalEvent::FOCUS_STATUS_FAIL;
BaseCameraAdapter::AdapterState state, nextState;
BaseCameraAdapter::getState(state);
BaseCameraAdapter::getNextState(nextState);
@@ -436,7 +422,7 @@ status_t OMXCameraAdapter::returnFocusStatus(bool timeoutReached)
if ( timeoutReached )
{
- focusStatus = false;
+ focusStatus = CameraHalEvent::FOCUS_STATUS_FAIL;
}
else
{
@@ -444,15 +430,16 @@ status_t OMXCameraAdapter::returnFocusStatus(bool timeoutReached)
{
case OMX_FocusStatusReached:
{
- focusStatus = true;
+ focusStatus = CameraHalEvent::FOCUS_STATUS_SUCCESS;
break;
}
- case OMX_FocusStatusOff:
+ case OMX_FocusStatusOff: // AF got canceled
+ return NO_ERROR;
case OMX_FocusStatusUnableToReach:
case OMX_FocusStatusRequest:
default:
{
- focusStatus = false;
+ focusStatus = CameraHalEvent::FOCUS_STATUS_FAIL;
break;
}
}
@@ -462,9 +449,9 @@ status_t OMXCameraAdapter::returnFocusStatus(bool timeoutReached)
} else {
CAMHAL_LOGDA("Focus locked. Applied focus locks successfully");
}
-
stopAutoFocus();
}
+
//Query current focus distance after AF is complete
updateFocusDistances(mParameters);
}
@@ -520,7 +507,6 @@ status_t OMXCameraAdapter::checkFocus(OMX_PARAM_FOCUSSTATUSTYPE *eFocusStatus)
if ( NO_ERROR == ret )
{
OMX_INIT_STRUCT_PTR (eFocusStatus, OMX_PARAM_FOCUSSTATUSTYPE);
-
eError = OMX_GetConfig(mCameraAdapterParameters.mHandleComp,
OMX_IndexConfigCommonFocusStatus,
eFocusStatus);
@@ -800,4 +786,54 @@ status_t OMXCameraAdapter::setTouchFocus()
return ret;
}
+void OMXCameraAdapter::handleFocusCallback() {
+ OMX_PARAM_FOCUSSTATUSTYPE eFocusStatus;
+ CameraHalEvent::FocusStatus focusStatus = CameraHalEvent::FOCUS_STATUS_FAIL;
+ status_t ret = NO_ERROR;
+ BaseCameraAdapter::AdapterState nextState;
+ BaseCameraAdapter::getNextState(nextState);
+
+ OMX_INIT_STRUCT(eFocusStatus, OMX_PARAM_FOCUSSTATUSTYPE);
+
+ ret = checkFocus(&eFocusStatus);
+
+ if (NO_ERROR != ret) {
+ CAMHAL_LOGEA("Focus status check failed!");
+ // signal and unblock doAutoFocus
+ if (AF_ACTIVE & nextState) {
+ Mutex::Autolock lock(mDoAFMutex);
+ mDoAFCond.broadcast();
+ }
+ return;
+ }
+
+ if ( ( eFocusStatus.eFocusStatus != OMX_FocusStatusRequest ) &&
+ ( eFocusStatus.eFocusStatus != OMX_FocusStatusOff ) ) {
+ // signal doAutoFocus when a end of scan message comes
+ // ignore start of scan
+ Mutex::Autolock lock(mDoAFMutex);
+ mDoAFCond.broadcast();
+ }
+
+ if (mParameters3A.Focus != (OMX_IMAGE_FOCUSCONTROLTYPE) OMX_IMAGE_FocusControlAuto) {
+ CAMHAL_LOGDA("unregistered focus callback when not in CAF or doAutoFocus... not handling");
+ return;
+ }
+
+ // Handling for CAF Callbacks
+ switch (eFocusStatus.eFocusStatus) {
+ case OMX_FocusStatusRequest:
+ focusStatus = CameraHalEvent::FOCUS_STATUS_PENDING;
+ break;
+ case OMX_FocusStatusReached:
+ case OMX_FocusStatusOff:
+ case OMX_FocusStatusUnableToReach:
+ default:
+ focusStatus = CameraHalEvent::FOCUS_STATUS_DONE;
+ break;
+ }
+
+ notifyFocusSubscribers(focusStatus);
+}
+
};
diff --git a/camera/V4LCameraAdapter/V4LCameraAdapter.cpp b/camera/V4LCameraAdapter/V4LCameraAdapter.cpp
index 3fb33808..c365023d 100644
--- a/camera/V4LCameraAdapter/V4LCameraAdapter.cpp
+++ b/camera/V4LCameraAdapter/V4LCameraAdapter.cpp
@@ -438,7 +438,7 @@ static void debugShowFPS()
mFps = ((mFrameCount - mLastFrameCount) * float(s2ns(1))) / diff;
mLastFpsTime = now;
mLastFrameCount = mFrameCount;
- LOGD("Camera %d Frames, %f FPS", mFrameCount, mFps);
+ ALOGD("Camera %d Frames, %f FPS", mFrameCount, mFps);
}
// XXX: mFPS has the value we want
}
diff --git a/camera/inc/ANativeWindowDisplayAdapter.h b/camera/inc/ANativeWindowDisplayAdapter.h
index e4698d03..9cdf45a7 100644
--- a/camera/inc/ANativeWindowDisplayAdapter.h
+++ b/camera/inc/ANativeWindowDisplayAdapter.h
@@ -1,189 +1,188 @@
-/*
- * 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 "CameraHal.h"
-#include <ui/egl/android_natives.h>
-#include <ui/GraphicBufferMapper.h>
-#include <hal_public.h>
-
-//temporarily define format here
-#define HAL_PIXEL_FORMAT_TI_NV12 0x100
-
-namespace android {
-
-/**
- * Display handler class - This class basically handles the buffer posting to display
- */
-
-class ANativeWindowDisplayAdapter : public DisplayAdapter
-{
-public:
-
- typedef struct
- {
- void *mBuffer;
- void *mUser;
- int mOffset;
- int mWidth;
- int mHeight;
- int mWidthStride;
- int mHeightStride;
- int mLength;
- CameraFrame::FrameType mType;
- } DisplayFrame;
-
- enum DisplayStates
- {
- DISPLAY_INIT = 0,
- DISPLAY_STARTED,
- DISPLAY_STOPPED,
- DISPLAY_EXITED
- };
-
-public:
-
- ANativeWindowDisplayAdapter();
- virtual ~ANativeWindowDisplayAdapter();
-
- ///Initializes the display adapter creates any resources required
- virtual status_t initialize();
-
- virtual int setPreviewWindow(struct preview_stream_ops *window);
- virtual int setFrameProvider(FrameNotifier *frameProvider);
- virtual int setErrorHandler(ErrorNotifier *errorNotifier);
- virtual int enableDisplay(int width, int height, struct timeval *refTime = NULL, S3DParameters *s3dParams = NULL);
- virtual int disableDisplay(bool cancel_buffer = true);
- virtual status_t pauseDisplay(bool pause);
-
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
-
- //Used for shot to snapshot measurement
- virtual status_t setSnapshotTimeRef(struct timeval *refTime = NULL);
-
-#endif
-
- virtual int useBuffers(void* bufArr, int num);
- virtual bool supportsExternalBuffering();
-
- //Implementation of inherited interfaces
- virtual void* allocateBuffer(int width, int height, const char* format, int &bytes, int numBufs);
- virtual uint32_t * getOffsets() ;
- virtual int getFd() ;
- virtual int freeBuffer(void* buf);
-
- virtual int maxQueueableBuffers(unsigned int& queueable);
-
- ///Class specific functions
- static void frameCallbackRelay(CameraFrame* caFrame);
- void frameCallback(CameraFrame* caFrame);
-
- void displayThread();
-
- private:
- void destroy();
- bool processHalMsg();
- status_t PostFrame(ANativeWindowDisplayAdapter::DisplayFrame &dispFrame);
- bool handleFrameReturn();
- status_t returnBuffersToWindow();
-
-public:
-
- static const int DISPLAY_TIMEOUT;
- static const int FAILED_DQS_TO_SUSPEND;
-
- class DisplayThread : public Thread
- {
- ANativeWindowDisplayAdapter* mDisplayAdapter;
- TIUTILS::MessageQueue mDisplayThreadQ;
-
- public:
- DisplayThread(ANativeWindowDisplayAdapter* da)
- : Thread(false), mDisplayAdapter(da) { }
-
- ///Returns a reference to the display message Q for display adapter to post messages
- TIUTILS::MessageQueue& msgQ()
- {
- return mDisplayThreadQ;
- }
-
- virtual bool threadLoop()
- {
- mDisplayAdapter->displayThread();
- return false;
- }
-
- enum DisplayThreadCommands
- {
- DISPLAY_START,
- DISPLAY_STOP,
- DISPLAY_FRAME,
- DISPLAY_EXIT
- };
- };
-
- //friend declarations
-friend class DisplayThread;
-
-private:
- int postBuffer(void* displayBuf);
-
-private:
- bool mFirstInit;
- bool mSuspend;
- int mFailedDQs;
- bool mPaused; //Pause state
- preview_stream_ops_t* mANativeWindow;
- sp<DisplayThread> mDisplayThread;
- FrameProvider *mFrameProvider; ///Pointer to the frame provider interface
- TIUTILS::MessageQueue mDisplayQ;
- unsigned int mDisplayState;
- ///@todo Have a common class for these members
- mutable Mutex mLock;
- bool mDisplayEnabled;
- int mBufferCount;
- buffer_handle_t** mBufferHandleMap;
- IMG_native_handle_t** mGrallocHandleMap;
- uint32_t* mOffsetsMap;
- int mFD;
- KeyedVector<int, int> mFramesWithCameraAdapterMap;
- sp<ErrorNotifier> mErrorNotifier;
-
- uint32_t mFrameWidth;
- uint32_t mFrameHeight;
- uint32_t mPreviewWidth;
- uint32_t mPreviewHeight;
-
- uint32_t mXOff;
- uint32_t mYOff;
-
- const char *mPixelFormat;
-
-#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
- //Used for calculating standby to first shot
- struct timeval mStandbyToShot;
- bool mMeasureStandby;
- //Used for shot to snapshot/shot calculation
- struct timeval mStartCapture;
- bool mShotToShot;
-
-#endif
-
-};
-
-};
-
+/*
+ * 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 "CameraHal.h"
+#include <ui/GraphicBufferMapper.h>
+#include <hal_public.h>
+
+//temporarily define format here
+#define HAL_PIXEL_FORMAT_TI_NV12 0x100
+
+namespace android {
+
+/**
+ * Display handler class - This class basically handles the buffer posting to display
+ */
+
+class ANativeWindowDisplayAdapter : public DisplayAdapter
+{
+public:
+
+ typedef struct
+ {
+ void *mBuffer;
+ void *mUser;
+ int mOffset;
+ int mWidth;
+ int mHeight;
+ int mWidthStride;
+ int mHeightStride;
+ int mLength;
+ CameraFrame::FrameType mType;
+ } DisplayFrame;
+
+ enum DisplayStates
+ {
+ DISPLAY_INIT = 0,
+ DISPLAY_STARTED,
+ DISPLAY_STOPPED,
+ DISPLAY_EXITED
+ };
+
+public:
+
+ ANativeWindowDisplayAdapter();
+ virtual ~ANativeWindowDisplayAdapter();
+
+ ///Initializes the display adapter creates any resources required
+ virtual status_t initialize();
+
+ virtual int setPreviewWindow(struct preview_stream_ops *window);
+ virtual int setFrameProvider(FrameNotifier *frameProvider);
+ virtual int setErrorHandler(ErrorNotifier *errorNotifier);
+ virtual int enableDisplay(int width, int height, struct timeval *refTime = NULL, S3DParameters *s3dParams = NULL);
+ virtual int disableDisplay(bool cancel_buffer = true);
+ virtual status_t pauseDisplay(bool pause);
+
+#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
+
+ //Used for shot to snapshot measurement
+ virtual status_t setSnapshotTimeRef(struct timeval *refTime = NULL);
+
+#endif
+
+ virtual int useBuffers(void* bufArr, int num);
+ virtual bool supportsExternalBuffering();
+
+ //Implementation of inherited interfaces
+ virtual void* allocateBuffer(int width, int height, const char* format, int &bytes, int numBufs);
+ virtual uint32_t * getOffsets() ;
+ virtual int getFd() ;
+ virtual int freeBuffer(void* buf);
+
+ virtual int maxQueueableBuffers(unsigned int& queueable);
+
+ ///Class specific functions
+ static void frameCallbackRelay(CameraFrame* caFrame);
+ void frameCallback(CameraFrame* caFrame);
+
+ void displayThread();
+
+ private:
+ void destroy();
+ bool processHalMsg();
+ status_t PostFrame(ANativeWindowDisplayAdapter::DisplayFrame &dispFrame);
+ bool handleFrameReturn();
+ status_t returnBuffersToWindow();
+
+public:
+
+ static const int DISPLAY_TIMEOUT;
+ static const int FAILED_DQS_TO_SUSPEND;
+
+ class DisplayThread : public Thread
+ {
+ ANativeWindowDisplayAdapter* mDisplayAdapter;
+ TIUTILS::MessageQueue mDisplayThreadQ;
+
+ public:
+ DisplayThread(ANativeWindowDisplayAdapter* da)
+ : Thread(false), mDisplayAdapter(da) { }
+
+ ///Returns a reference to the display message Q for display adapter to post messages
+ TIUTILS::MessageQueue& msgQ()
+ {
+ return mDisplayThreadQ;
+ }
+
+ virtual bool threadLoop()
+ {
+ mDisplayAdapter->displayThread();
+ return false;
+ }
+
+ enum DisplayThreadCommands
+ {
+ DISPLAY_START,
+ DISPLAY_STOP,
+ DISPLAY_FRAME,
+ DISPLAY_EXIT
+ };
+ };
+
+ //friend declarations
+friend class DisplayThread;
+
+private:
+ int postBuffer(void* displayBuf);
+
+private:
+ bool mFirstInit;
+ bool mSuspend;
+ int mFailedDQs;
+ bool mPaused; //Pause state
+ preview_stream_ops_t* mANativeWindow;
+ sp<DisplayThread> mDisplayThread;
+ FrameProvider *mFrameProvider; ///Pointer to the frame provider interface
+ TIUTILS::MessageQueue mDisplayQ;
+ unsigned int mDisplayState;
+ ///@todo Have a common class for these members
+ mutable Mutex mLock;
+ bool mDisplayEnabled;
+ int mBufferCount;
+ buffer_handle_t** mBufferHandleMap;
+ IMG_native_handle_t** mGrallocHandleMap;
+ uint32_t* mOffsetsMap;
+ int mFD;
+ KeyedVector<int, int> mFramesWithCameraAdapterMap;
+ sp<ErrorNotifier> mErrorNotifier;
+
+ uint32_t mFrameWidth;
+ uint32_t mFrameHeight;
+ uint32_t mPreviewWidth;
+ uint32_t mPreviewHeight;
+
+ uint32_t mXOff;
+ uint32_t mYOff;
+
+ const char *mPixelFormat;
+
+#if PPM_INSTRUMENTATION || PPM_INSTRUMENTATION_ABS
+ //Used for calculating standby to first shot
+ struct timeval mStandbyToShot;
+ bool mMeasureStandby;
+ //Used for shot to snapshot/shot calculation
+ struct timeval mStartCapture;
+ bool mShotToShot;
+
+#endif
+
+};
+
+};
+
diff --git a/camera/inc/BaseCameraAdapter.h b/camera/inc/BaseCameraAdapter.h
index d7784913..bc38e00b 100644
--- a/camera/inc/BaseCameraAdapter.h
+++ b/camera/inc/BaseCameraAdapter.h
@@ -145,7 +145,7 @@ protected:
// ---------------------Interface ends-----------------------------------
- status_t notifyFocusSubscribers(bool status);
+ status_t notifyFocusSubscribers(CameraHalEvent::FocusStatus status);
status_t notifyShutterSubscribers();
status_t notifyZoomSubscribers(int zoomIdx, bool targetReached);
status_t notifyFaceSubscribers(sp<CameraFDResult> &faces);
diff --git a/camera/inc/CameraHal.h b/camera/inc/CameraHal.h
index e34f4dfd..8b8392a1 100644
--- a/camera/inc/CameraHal.h
+++ b/camera/inc/CameraHal.h
@@ -77,7 +77,7 @@
#define LOCK_BUFFER_TRIES 5
#define HAL_PIXEL_FORMAT_NV12 0x100
-#define CAMHAL_LOGI LOGI
+#define CAMHAL_LOGI ALOGI
//Uncomment to enable more verbose/debug logs
//#define DEBUG_LOG
@@ -90,8 +90,8 @@
#define CAMHAL_LOGVA(str)
#define CAMHAL_LOGVB(str, ...)
-#define CAMHAL_LOGEA LOGE
-#define CAMHAL_LOGEB LOGE
+#define CAMHAL_LOGEA ALOGE
+#define CAMHAL_LOGEB ALOGE
#undef LOG_FUNCTION_NAME
#undef LOG_FUNCTION_NAME_EXIT
@@ -331,6 +331,13 @@ public:
ALL_EVENTS = 0xFFFF ///Maximum of 16 event types supported
};
+ enum FocusStatus {
+ FOCUS_STATUS_SUCCESS = 0x1,
+ FOCUS_STATUS_FAIL = 0x2,
+ FOCUS_STATUS_PENDING = 0x4,
+ FOCUS_STATUS_DONE = 0x8,
+ };
+
///Class declarations
///@remarks Add a new class for a new event type added above
@@ -341,8 +348,7 @@ public:
///Focus event specific data
typedef struct FocusEventData_t {
- bool focusLocked;
- bool focusError;
+ FocusStatus focusStatus;
int currentFocusValue;
} FocusEventData;
@@ -678,7 +684,7 @@ private:
class MemoryManager : public BufferProvider, public virtual RefBase
{
public:
- MemoryManager():mIonFd(0){ }
+ MemoryManager():mIonFd(-1){ }
///Initializes the memory manager creates any resources required
status_t initialize() { return NO_ERROR; }
diff --git a/camera/inc/CameraProperties.h b/camera/inc/CameraProperties.h
index a220af72..6f058779 100644
--- a/camera/inc/CameraProperties.h
+++ b/camera/inc/CameraProperties.h
@@ -1,198 +1,198 @@
-/*
- * 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.
- */
-
-
-
-
-#ifndef CAMERA_PROPERTIES_H
-#define CAMERA_PROPERTIES_H
-
-#include <utils/KeyedVector.h>
-#include <utils/String8.h>
-#include <stdio.h>
-#include <dirent.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include "cutils/properties.h"
-
-namespace android {
-
-#define MAX_CAMERAS_SUPPORTED 2
-#define MAX_SIMUL_CAMERAS_SUPPORTED 1
-#define MAX_PROP_NAME_LENGTH 50
-#define MAX_PROP_VALUE_LENGTH 2048
-
-#define EXIF_MAKE_DEFAULT "default_make"
-#define EXIF_MODEL_DEFAULT "default_model"
-
-// Class that handles the Camera Properties
-class CameraProperties
-{
-public:
- static const char INVALID[];
- static const char CAMERA_NAME[];
- static const char CAMERA_SENSOR_INDEX[];
- static const char ORIENTATION_INDEX[];
- static const char FACING_INDEX[];
- static const char S3D_SUPPORTED[];
- static const char SUPPORTED_PREVIEW_SIZES[];
- static const char SUPPORTED_PREVIEW_FORMATS[];
- static const char SUPPORTED_PREVIEW_FRAME_RATES[];
- static const char SUPPORTED_PICTURE_SIZES[];
- static const char SUPPORTED_PICTURE_FORMATS[];
- static const char SUPPORTED_THUMBNAIL_SIZES[];
- static const char SUPPORTED_WHITE_BALANCE[];
- static const char SUPPORTED_EFFECTS[];
- static const char SUPPORTED_ANTIBANDING[];
- static const char SUPPORTED_EXPOSURE_MODES[];
- static const char SUPPORTED_EV_MIN[];
- static const char SUPPORTED_EV_MAX[];
- static const char SUPPORTED_EV_STEP[];
- static const char SUPPORTED_ISO_VALUES[];
- static const char SUPPORTED_SCENE_MODES[];
- static const char SUPPORTED_FLASH_MODES[];
- static const char SUPPORTED_FOCUS_MODES[];
- static const char REQUIRED_PREVIEW_BUFS[];
- static const char REQUIRED_IMAGE_BUFS[];
- static const char SUPPORTED_ZOOM_RATIOS[];
- static const char SUPPORTED_ZOOM_STAGES[];
- static const char SUPPORTED_IPP_MODES[];
- static const char SMOOTH_ZOOM_SUPPORTED[];
- static const char ZOOM_SUPPORTED[];
- static const char PREVIEW_SIZE[];
- static const char PREVIEW_FORMAT[];
- static const char PREVIEW_FRAME_RATE[];
- static const char ZOOM[];
- static const char PICTURE_SIZE[];
- static const char PICTURE_FORMAT[];
- static const char JPEG_THUMBNAIL_SIZE[];
- static const char WHITEBALANCE[];
- static const char EFFECT[];
- static const char ANTIBANDING[];
- static const char EXPOSURE_MODE[];
- static const char EV_COMPENSATION[];
- static const char ISO_MODE[];
- static const char FOCUS_MODE[];
- static const char SCENE_MODE[];
- static const char FLASH_MODE[];
- static const char JPEG_QUALITY[];
- static const char BRIGHTNESS[];
- static const char SATURATION[];
- static const char SHARPNESS[];
- static const char CONTRAST[];
- static const char IPP[];
- static const char GBCE[];
- static const char AUTOCONVERGENCE[];
- static const char AUTOCONVERGENCE_MODE[];
- static const char MANUALCONVERGENCE_VALUES[];
- static const char SENSOR_ORIENTATION[];
- static const char SENSOR_ORIENTATION_VALUES[];
- static const char REVISION[];
- static const char FOCAL_LENGTH[];
- static const char HOR_ANGLE[];
- static const char VER_ANGLE[];
- static const char EXIF_MAKE[];
- static const char EXIF_MODEL[];
- static const char JPEG_THUMBNAIL_QUALITY[];
- static const char MAX_FOCUS_AREAS[];
- static const char MAX_FD_HW_FACES[];
- static const char MAX_FD_SW_FACES[];
-
- static const char PARAMS_DELIMITER [];
-
- static const char S3D2D_PREVIEW[];
- static const char S3D2D_PREVIEW_MODES[];
- static const char VSTAB[];
- static const char VSTAB_SUPPORTED[];
- static const char FRAMERATE_RANGE[];
- static const char FRAMERATE_RANGE_IMAGE[];
- static const char FRAMERATE_RANGE_VIDEO[];
- static const char FRAMERATE_RANGE_SUPPORTED[];
-
- static const char DEFAULT_VALUE[];
-
- static const char AUTO_EXPOSURE_LOCK[];
- static const char AUTO_EXPOSURE_LOCK_SUPPORTED[];
- static const char AUTO_WHITEBALANCE_LOCK[];
- static const char AUTO_WHITEBALANCE_LOCK_SUPPORTED[];
- static const char MAX_NUM_METERING_AREAS[];
- static const char METERING_AREAS[];
- static const char MAX_NUM_FOCUS_AREAS[];
-
- static const char VIDEO_SNAPSHOT_SUPPORTED[];
-
- static const char VIDEO_SIZE[];
- static const char SUPPORTED_VIDEO_SIZES[];
- static const char PREFERRED_PREVIEW_SIZE_FOR_VIDEO[];
-
- CameraProperties();
- ~CameraProperties();
-
- // container class passed around for accessing properties
- class Properties
- {
- public:
- Properties()
- {
- mProperties = new DefaultKeyedVector<String8, String8>(String8(DEFAULT_VALUE));
- char property[PROPERTY_VALUE_MAX];
- property_get("ro.product.manufacturer", property, EXIF_MAKE_DEFAULT);
- property[0] = toupper(property[0]);
- set(EXIF_MAKE, property);
- property_get("ro.product.model", property, EXIF_MODEL_DEFAULT);
- property[0] = toupper(property[0]);
- set(EXIF_MODEL, property);
- }
- ~Properties()
- {
- delete mProperties;
- }
- ssize_t set(const char *prop, const char *value);
- ssize_t set(const char *prop, int value);
- const char* get(const char * prop);
- void dump();
-
- protected:
- const char* keyAt(unsigned int);
- const char* valueAt(unsigned int);
-
- private:
- DefaultKeyedVector<String8, String8>* mProperties;
-
- };
-
- ///Initializes the CameraProperties class
- status_t initialize();
- status_t loadProperties();
- int camerasSupported();
- int getProperties(int cameraIndex, Properties** properties);
-
-private:
-
- uint32_t mCamerasSupported;
- int mInitialized;
- mutable Mutex mLock;
-
- Properties mCameraProps[MAX_CAMERAS_SUPPORTED];
-
-};
-
-};
-
-#endif //CAMERA_PROPERTIES_H
-
+/*
+ * 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.
+ */
+
+
+
+
+#ifndef CAMERA_PROPERTIES_H
+#define CAMERA_PROPERTIES_H
+
+#include <utils/KeyedVector.h>
+#include <utils/String8.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include "cutils/properties.h"
+
+namespace android {
+
+#define MAX_CAMERAS_SUPPORTED 2
+#define MAX_SIMUL_CAMERAS_SUPPORTED 1
+#define MAX_PROP_NAME_LENGTH 50
+#define MAX_PROP_VALUE_LENGTH 2048
+
+#define EXIF_MAKE_DEFAULT "default_make"
+#define EXIF_MODEL_DEFAULT "default_model"
+
+// Class that handles the Camera Properties
+class CameraProperties
+{
+public:
+ static const char INVALID[];
+ static const char CAMERA_NAME[];
+ static const char CAMERA_SENSOR_INDEX[];
+ static const char ORIENTATION_INDEX[];
+ static const char FACING_INDEX[];
+ static const char S3D_SUPPORTED[];
+ static const char SUPPORTED_PREVIEW_SIZES[];
+ static const char SUPPORTED_PREVIEW_FORMATS[];
+ static const char SUPPORTED_PREVIEW_FRAME_RATES[];
+ static const char SUPPORTED_PICTURE_SIZES[];
+ static const char SUPPORTED_PICTURE_FORMATS[];
+ static const char SUPPORTED_THUMBNAIL_SIZES[];
+ static const char SUPPORTED_WHITE_BALANCE[];
+ static const char SUPPORTED_EFFECTS[];
+ static const char SUPPORTED_ANTIBANDING[];
+ static const char SUPPORTED_EXPOSURE_MODES[];
+ static const char SUPPORTED_EV_MIN[];
+ static const char SUPPORTED_EV_MAX[];
+ static const char SUPPORTED_EV_STEP[];
+ static const char SUPPORTED_ISO_VALUES[];
+ static const char SUPPORTED_SCENE_MODES[];
+ static const char SUPPORTED_FLASH_MODES[];
+ static const char SUPPORTED_FOCUS_MODES[];
+ static const char REQUIRED_PREVIEW_BUFS[];
+ static const char REQUIRED_IMAGE_BUFS[];
+ static const char SUPPORTED_ZOOM_RATIOS[];
+ static const char SUPPORTED_ZOOM_STAGES[];
+ static const char SUPPORTED_IPP_MODES[];
+ static const char SMOOTH_ZOOM_SUPPORTED[];
+ static const char ZOOM_SUPPORTED[];
+ static const char PREVIEW_SIZE[];
+ static const char PREVIEW_FORMAT[];
+ static const char PREVIEW_FRAME_RATE[];
+ static const char ZOOM[];
+ static const char PICTURE_SIZE[];
+ static const char PICTURE_FORMAT[];
+ static const char JPEG_THUMBNAIL_SIZE[];
+ static const char WHITEBALANCE[];
+ static const char EFFECT[];
+ static const char ANTIBANDING[];
+ static const char EXPOSURE_MODE[];
+ static const char EV_COMPENSATION[];
+ static const char ISO_MODE[];
+ static const char FOCUS_MODE[];
+ static const char SCENE_MODE[];
+ static const char FLASH_MODE[];
+ static const char JPEG_QUALITY[];
+ static const char BRIGHTNESS[];
+ static const char SATURATION[];
+ static const char SHARPNESS[];
+ static const char CONTRAST[];
+ static const char IPP[];
+ static const char GBCE[];
+ static const char AUTOCONVERGENCE[];
+ static const char AUTOCONVERGENCE_MODE[];
+ static const char MANUALCONVERGENCE_VALUES[];
+ static const char SENSOR_ORIENTATION[];
+ static const char SENSOR_ORIENTATION_VALUES[];
+ static const char REVISION[];
+ static const char FOCAL_LENGTH[];
+ static const char HOR_ANGLE[];
+ static const char VER_ANGLE[];
+ static const char EXIF_MAKE[];
+ static const char EXIF_MODEL[];
+ static const char JPEG_THUMBNAIL_QUALITY[];
+ static const char MAX_FOCUS_AREAS[];
+ static const char MAX_FD_HW_FACES[];
+ static const char MAX_FD_SW_FACES[];
+
+ static const char PARAMS_DELIMITER [];
+
+ static const char S3D2D_PREVIEW[];
+ static const char S3D2D_PREVIEW_MODES[];
+ static const char VSTAB[];
+ static const char VSTAB_SUPPORTED[];
+ static const char FRAMERATE_RANGE[];
+ static const char FRAMERATE_RANGE_IMAGE[];
+ static const char FRAMERATE_RANGE_VIDEO[];
+ static const char FRAMERATE_RANGE_SUPPORTED[];
+
+ static const char DEFAULT_VALUE[];
+
+ static const char AUTO_EXPOSURE_LOCK[];
+ static const char AUTO_EXPOSURE_LOCK_SUPPORTED[];
+ static const char AUTO_WHITEBALANCE_LOCK[];
+ static const char AUTO_WHITEBALANCE_LOCK_SUPPORTED[];
+ static const char MAX_NUM_METERING_AREAS[];
+ static const char METERING_AREAS[];
+ static const char MAX_NUM_FOCUS_AREAS[];
+
+ static const char VIDEO_SNAPSHOT_SUPPORTED[];
+
+ static const char VIDEO_SIZE[];
+ static const char SUPPORTED_VIDEO_SIZES[];
+ static const char PREFERRED_PREVIEW_SIZE_FOR_VIDEO[];
+
+ CameraProperties();
+ ~CameraProperties();
+
+ // container class passed around for accessing properties
+ class Properties
+ {
+ public:
+ Properties()
+ {
+ mProperties = new DefaultKeyedVector<String8, String8>(String8(DEFAULT_VALUE));
+ char property[PROPERTY_VALUE_MAX];
+ property_get("ro.product.manufacturer", property, EXIF_MAKE_DEFAULT);
+ property[0] = toupper(property[0]);
+ set(EXIF_MAKE, property);
+ property_get("ro.product.model", property, EXIF_MODEL_DEFAULT);
+ property[0] = toupper(property[0]);
+ set(EXIF_MODEL, property);
+ }
+ ~Properties()
+ {
+ delete mProperties;
+ }
+ ssize_t set(const char *prop, const char *value);
+ ssize_t set(const char *prop, int value);
+ const char* get(const char * prop);
+ void dump();
+
+ protected:
+ const char* keyAt(unsigned int);
+ const char* valueAt(unsigned int);
+
+ private:
+ DefaultKeyedVector<String8, String8>* mProperties;
+
+ };
+
+ ///Initializes the CameraProperties class
+ status_t initialize();
+ status_t loadProperties();
+ int camerasSupported();
+ int getProperties(int cameraIndex, Properties** properties);
+
+private:
+
+ uint32_t mCamerasSupported;
+ int mInitialized;
+ mutable Mutex mLock;
+
+ Properties mCameraProps[MAX_CAMERAS_SUPPORTED];
+
+};
+
+};
+
+#endif //CAMERA_PROPERTIES_H
+
diff --git a/camera/inc/Encoder_libjpeg.h b/camera/inc/Encoder_libjpeg.h
index fef873f2..727dd92f 100755..100644
--- a/camera/inc/Encoder_libjpeg.h
+++ b/camera/inc/Encoder_libjpeg.h
@@ -30,6 +30,9 @@
extern "C" {
#include "jhead.h"
}
+
+#define CANCEL_TIMEOUT 3000000 // 3 seconds
+
namespace android {
/**
* libjpeg encoder class - uses libjpeg to encode yuv
@@ -41,8 +44,10 @@ typedef void (*encoder_libjpeg_callback_t) (void* main_jpeg,
CameraFrame::FrameType type,
void* cookie1,
void* cookie2,
- void* cookie3);
+ void* cookie3,
+ bool canceled);
+// these have to match strings defined in external/jhead/exif.c
static const char TAG_MODEL[] = "Model";
static const char TAG_MAKE[] = "Make";
static const char TAG_FOCALLENGTH[] = "FocalLength";
@@ -61,12 +66,27 @@ static const char TAG_GPS_VERSION_ID[] = "GPSVersionID";
static const char TAG_GPS_TIMESTAMP[] = "GPSTimeStamp";
static const char TAG_GPS_DATESTAMP[] = "GPSDateStamp";
static const char TAG_ORIENTATION[] = "Orientation";
+static const char TAG_FLASH[] = "Flash";
+static const char TAG_DIGITALZOOMRATIO[] = "DigitalZoomRatio";
+static const char TAG_EXPOSURETIME[] = "ExposureTime";
+static const char TAG_APERTURE[] = "ApertureValue";
+static const char TAG_ISO_EQUIVALENT[] = "ISOSpeedRatings";
+static const char TAG_WHITEBALANCE[] = "WhiteBalance";
+static const char TAG_LIGHT_SOURCE[] = "LightSource";
+static const char TAG_METERING_MODE[] = "MeteringMode";
+static const char TAG_EXPOSURE_PROGRAM[] = "ExposureProgram";
+static const char TAG_COLOR_SPACE[] = "ColorSpace";
+static const char TAG_CPRS_BITS_PER_PIXEL[] = "CompressedBitsPerPixel";
+static const char TAG_FNUMBER[] = "FNumber";
+static const char TAG_SHUTTERSPEED[] = "ShutterSpeedValue";
+static const char TAG_SENSING_METHOD[] = "SensingMethod";
+static const char TAG_CUSTOM_RENDERED[] = "CustomRendered";
class ExifElementsTable {
public:
ExifElementsTable() :
gps_tag_count(0), exif_tag_count(0), position(0),
- jpeg_opened(false) { }
+ jpeg_opened(false), has_datetime_tag(false) { }
~ExifElementsTable();
status_t insertElement(const char* tag, const char* value);
@@ -82,6 +102,7 @@ class ExifElementsTable {
unsigned int exif_tag_count;
unsigned int position;
bool jpeg_opened;
+ bool has_datetime_tag;
};
class Encoder_libjpeg : public Thread {
@@ -115,6 +136,7 @@ class Encoder_libjpeg : public Thread {
mCancelEncoding(false), mCookie1(cookie1), mCookie2(cookie2), mCookie3(cookie3),
mType(type), mThumb(NULL) {
this->incStrong(this);
+ mCancelSem.Create(0);
}
~Encoder_libjpeg() {
@@ -133,6 +155,9 @@ class Encoder_libjpeg : public Thread {
// encode our main image
size = encode(mMainInput);
+ // signal cancel semaphore incase somebody is waiting
+ mCancelSem.Signal();
+
// check if it is main jpeg thread
if(mThumb.get()) {
// wait until tn jpeg thread exits.
@@ -142,7 +167,7 @@ class Encoder_libjpeg : public Thread {
}
if(mCb) {
- mCb(mMainInput, mThumbnailInput, mType, mCookie1, mCookie2, mCookie3);
+ mCb(mMainInput, mThumbnailInput, mType, mCookie1, mCookie2, mCookie3, mCancelEncoding);
}
// encoder thread runs, self-destructs, and then exits
@@ -151,10 +176,17 @@ class Encoder_libjpeg : public Thread {
}
void cancel() {
+ mCancelEncoding = true;
if (mThumb.get()) {
mThumb->cancel();
+ mCancelSem.WaitTimeout(CANCEL_TIMEOUT);
}
- mCancelEncoding = true;
+ }
+
+ void getCookies(void **cookie1, void **cookie2, void **cookie3) {
+ if (cookie1) *cookie1 = mCookie1;
+ if (cookie2) *cookie2 = mCookie2;
+ if (cookie3) *cookie3 = mCookie3;
}
private:
@@ -167,6 +199,7 @@ class Encoder_libjpeg : public Thread {
void* mCookie3;
CameraFrame::FrameType mType;
sp<Encoder_libjpeg> mThumb;
+ Semaphore mCancelSem;
size_t encode(params*);
};
diff --git a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
index 463032a2..0fdc7705 100644
--- a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
+++ b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
@@ -446,7 +446,8 @@ private:
BaseCameraAdapter::AdapterState state);
status_t convertGPSCoord(double coord, int &deg, int &min, int &sec, int &secDivisor);
status_t setupEXIF();
- status_t setupEXIF_libjpeg(ExifElementsTable*);
+ status_t setupEXIF_libjpeg(ExifElementsTable*, OMX_TI_ANCILLARYDATATYPE*,
+ OMX_TI_WHITEBALANCERESULTTYPE*);
//Focus functionality
status_t doAutoFocus();
@@ -454,6 +455,7 @@ private:
status_t checkFocus(OMX_PARAM_FOCUSSTATUSTYPE *eFocusStatus);
status_t returnFocusStatus(bool timeoutReached);
status_t getFocusMode(OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE &focusMode);
+ void handleFocusCallback();
//Focus distances
@@ -634,12 +636,13 @@ private:
status_t sendCallBacks(CameraFrame frame, OMX_IN OMX_BUFFERHEADERTYPE *pBuffHeader, unsigned int mask, OMXCameraPortParameters *port);
status_t apply3Asettings( Gen3A_settings& Gen3A );
- status_t apply3ADefaults(Gen3A_settings &Gen3A);
+ status_t init3AParams(Gen3A_settings &Gen3A);
// AutoConvergence
status_t setAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE pACMode, OMX_S32 pManualConverence);
status_t getAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE *pACMode, OMX_S32 *pManualConverence);
+ status_t setExtraData(bool enable, OMX_U32, OMX_EXT_EXTRADATATYPE);
OMX_OTHER_EXTRADATATYPE *getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_EXTRADATATYPE type);
class CommandHandler : public Thread {
@@ -668,7 +671,7 @@ private:
COMMAND_EXIT = -1,
CAMERA_START_IMAGE_CAPTURE = 0,
CAMERA_PERFORM_AUTOFOCUS = 1,
- CAMERA_SWITCH_TO_EXECUTING
+ CAMERA_SWITCH_TO_EXECUTING,
};
private:
@@ -706,6 +709,7 @@ public:
enum {
COMMAND_EXIT = -1,
CAMERA_FILL_BUFFER_DONE,
+ CAMERA_FOCUS_STATUS,
};
private:
@@ -817,6 +821,7 @@ private:
//Face detection status
bool mFaceDetectionRunning;
bool mFaceDetectionPaused;
+ bool mFDSwitchAlgoPriority;
camera_face_t faceDetectionLastOutput [MAX_NUM_FACES_SUPPORTED];
int faceDetectionNumFacesLastOutput;
@@ -873,6 +878,8 @@ private:
int mSnapshotCount;
bool mCaptureConfigured;
unsigned int mPendingCaptureSettings;
+ OMX_TI_ANCILLARYDATATYPE* mCaptureAncillaryData;
+ OMX_TI_WHITEBALANCERESULTTYPE* mWhiteBalanceData;
//Temporal bracketing management data
mutable Mutex mBracketingLock;
@@ -883,11 +890,11 @@ private:
int mBracketingRange;
CameraParameters mParameters;
+ bool mOmxInitialized;
OMXCameraAdapterComponentContext mCameraAdapterParameters;
bool mFirstTimeInit;
///Semaphores used internally
- Semaphore mDoAFSem;
Semaphore mInitSem;
Semaphore mFlushSem;
Semaphore mUsePreviewDataSem;
@@ -926,6 +933,9 @@ private:
Mutex mFrameCountMutex;
Condition mFirstFrameCondition;
+ Mutex mDoAFMutex;
+ Condition mDoAFCond;
+
size_t mSensorIndex;
CodingMode mCodingMode;
diff --git a/camera/inc/TICameraParameters.h b/camera/inc/TICameraParameters.h
index 633e5b65..4701caeb 100644
--- a/camera/inc/TICameraParameters.h
+++ b/camera/inc/TICameraParameters.h
@@ -1,242 +1,242 @@
-/*
- * 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.
- */
-
-
-
-
-#ifndef TI_CAMERA_PARAMETERS_H
-#define TI_CAMERA_PARAMETERS_H
-
-#include <utils/KeyedVector.h>
-#include <utils/String8.h>
-
-namespace android {
-
-///TI Specific Camera Parameters
-class TICameraParameters
-{
-public:
-
-// Supported Camera indexes
-// Example value: "0,1,2,3", where 0-primary, 1-secondary1, 2-secondary2, 3-sterocamera
-static const char KEY_SUPPORTED_CAMERAS[];
-// Select logical Camera index
-static const char KEY_CAMERA[];
-static const char KEY_CAMERA_NAME[];
-static const char KEY_S3D_SUPPORTED[];
-static const char KEY_BURST[];
-static const char KEY_CAP_MODE[];
-static const char KEY_VNF[];
-static const char KEY_SATURATION[];
-static const char KEY_BRIGHTNESS[];
-static const char KEY_EXPOSURE_MODE[];
-static const char KEY_SUPPORTED_EXPOSURE[];
-static const char KEY_CONTRAST[];
-static const char KEY_SHARPNESS[];
-static const char KEY_ISO[];
-static const char KEY_SUPPORTED_ISO_VALUES[];
-static const char KEY_SUPPORTED_IPP[];
-static const char KEY_IPP[];
-static const char KEY_MAN_EXPOSURE[];
-static const char KEY_METERING_MODE[];
-static const char KEY_PADDED_WIDTH[];
-static const char KEY_PADDED_HEIGHT[];
-static const char KEY_EXP_BRACKETING_RANGE[];
-static const char KEY_TEMP_BRACKETING[];
-static const char KEY_TEMP_BRACKETING_RANGE_POS[];
-static const char KEY_TEMP_BRACKETING_RANGE_NEG[];
-static const char KEY_SHUTTER_ENABLE[];
-static const char KEY_MEASUREMENT_ENABLE[];
-static const char KEY_INITIAL_VALUES[];
-static const char KEY_GBCE[];
-static const char KEY_GLBCE[];
-static const char KEY_MINFRAMERATE[];
-static const char KEY_MAXFRAMERATE[];
-
-// TI recording hint to notify camera adapters of possible recording
-static const char KEY_RECORDING_HINT[];
-static const char KEY_AUTO_FOCUS_LOCK[];
-static const char KEY_CURRENT_ISO[];
-
-static const char KEY_SENSOR_ORIENTATION[];
-static const char KEY_SENSOR_ORIENTATION_VALUES[];
-
-//TI extensions for zoom
-static const char ZOOM_SUPPORTED[];
-static const char ZOOM_UNSUPPORTED[];
-
-//TI extensions for camera capabilies
-static const char INITIAL_VALUES_TRUE[];
-static const char INITIAL_VALUES_FALSE[];
-
-//TI extensions for enabling/disabling measurements
-static const char MEASUREMENT_ENABLE[];
-static const char MEASUREMENT_DISABLE[];
-
-// TI extensions to add values for ManualConvergence and AutoConvergence mode
-static const char KEY_AUTOCONVERGENCE[];
-static const char KEY_AUTOCONVERGENCE_MODE[];
-static const char KEY_MANUALCONVERGENCE_VALUES[];
-
-//TI extensions for enabling/disabling GLBCE
-static const char GLBCE_ENABLE[];
-static const char GLBCE_DISABLE[];
-
-//TI extensions for enabling/disabling GBCE
-static const char GBCE_ENABLE[];
-static const char GBCE_DISABLE[];
-
-// TI extensions to add Min frame rate Values
-static const char VIDEO_MINFRAMERATE_5[];
-static const char VIDEO_MINFRAMERATE_10[];
-static const char VIDEO_MINFRAMERATE_15[];
-static const char VIDEO_MINFRAMERATE_20[];
-static const char VIDEO_MINFRAMERATE_24[];
-static const char VIDEO_MINFRAMERATE_25[];
-static const char VIDEO_MINFRAMERATE_30[];
-static const char VIDEO_MINFRAMERATE_33[];
-
-// TI extensions for Manual Gain and Manual Exposure
-static const char KEY_MANUAL_EXPOSURE_LEFT[];
-static const char KEY_MANUAL_EXPOSURE_RIGHT[];
-static const char KEY_MANUAL_EXPOSURE_MODES[];
-static const char KEY_MANUAL_GAIN_EV_RIGHT[];
-static const char KEY_MANUAL_GAIN_EV_LEFT[];
-static const char KEY_MANUAL_GAIN_ISO_RIGHT[];
-static const char KEY_MANUAL_GAIN_ISO_LEFT[];
-static const char KEY_MANUAL_GAIN_MODES[];
-
-//TI extensions for setting EXIF tags
-static const char KEY_EXIF_MODEL[];
-static const char KEY_EXIF_MAKE[];
-
-//TI extensions for additional GPS data
-static const char KEY_GPS_MAPDATUM[];
-static const char KEY_GPS_VERSION[];
-static const char KEY_GPS_DATESTAMP[];
-
-//TI extensions for enabling/disabling shutter sound
-static const char SHUTTER_ENABLE[];
-static const char SHUTTER_DISABLE[];
-
-//TI extensions for Temporal bracketing
-static const char BRACKET_ENABLE[];
-static const char BRACKET_DISABLE[];
-
-//TI extensions to Image post-processing
-static const char IPP_LDCNSF[];
-static const char IPP_LDC[];
-static const char IPP_NSF[];
-static const char IPP_NONE[];
-
-//TI extensions to camera mode
-static const char HIGH_PERFORMANCE_MODE[];
-static const char HIGH_QUALITY_MODE[];
-static const char HIGH_QUALITY_ZSL_MODE[];
-static const char VIDEO_MODE[];
-
-
-// TI extensions to standard android pixel formats
-static const char PIXEL_FORMAT_RAW[];
-static const char PIXEL_FORMAT_JPS[];
-static const char PIXEL_FORMAT_MPO[];
-static const char PIXEL_FORMAT_RAW_JPEG[];
-static const char PIXEL_FORMAT_RAW_MPO[];
-
-// TI extensions to standard android scene mode settings
-static const char SCENE_MODE_SPORT[];
-static const char SCENE_MODE_CLOSEUP[];
-static const char SCENE_MODE_AQUA[];
-static const char SCENE_MODE_SNOWBEACH[];
-static const char SCENE_MODE_MOOD[];
-static const char SCENE_MODE_NIGHT_INDOOR[];
-static const char SCENE_MODE_DOCUMENT[];
-static const char SCENE_MODE_BARCODE[];
-static const char SCENE_MODE_VIDEO_SUPER_NIGHT[];
-static const char SCENE_MODE_VIDEO_CINE[];
-static const char SCENE_MODE_VIDEO_OLD_FILM[];
-
-// TI extensions to standard android white balance settings.
-static const char WHITE_BALANCE_TUNGSTEN[];
-static const char WHITE_BALANCE_HORIZON[];
-static const char WHITE_BALANCE_SUNSET[];
-static const char WHITE_BALANCE_FACE[];
-
-// TI extensions to add exposure preset modes to android api
-static const char EXPOSURE_MODE_OFF[];
-static const char EXPOSURE_MODE_AUTO[];
-static const char EXPOSURE_MODE_NIGHT[];
-static const char EXPOSURE_MODE_BACKLIGHT[];
-static const char EXPOSURE_MODE_SPOTLIGHT[];
-static const char EXPOSURE_MODE_SPORTS[];
-static const char EXPOSURE_MODE_SNOW[];
-static const char EXPOSURE_MODE_BEACH[];
-static const char EXPOSURE_MODE_APERTURE[];
-static const char EXPOSURE_MODE_SMALL_APERTURE[];
-static const char EXPOSURE_MODE_FACE[];
-
-// TI extensions to standard android focus presets.
-static const char FOCUS_MODE_PORTRAIT[];
-static const char FOCUS_MODE_EXTENDED[];
-static const char FOCUS_MODE_FACE[];
-
-// TI extensions to add iso values
-static const char ISO_MODE_AUTO[];
-static const char ISO_MODE_100[];
-static const char ISO_MODE_200[];
-static const char ISO_MODE_400[];
-static const char ISO_MODE_800[];
-static const char ISO_MODE_1000[];
-static const char ISO_MODE_1200[];
-static const char ISO_MODE_1600[];
-
-// TI extensions to add values for effect settings.
-static const char EFFECT_NATURAL[];
-static const char EFFECT_VIVID[];
-static const char EFFECT_COLOR_SWAP[];
-static const char EFFECT_BLACKWHITE[];
-
-static const char KEY_S3D2D_PREVIEW[];
-static const char KEY_S3D2D_PREVIEW_MODE[];
-
-// TI extensions to add values for AutoConvergence settings.
-static const char AUTOCONVERGENCE_MODE_DISABLE[];
-static const char AUTOCONVERGENCE_MODE_FRAME[];
-static const char AUTOCONVERGENCE_MODE_CENTER[];
-static const char AUTOCONVERGENCE_MODE_FFT[];
-static const char AUTOCONVERGENCE_MODE_MANUAL[];
-
-
-//TI extensions for flash mode settings
-static const char FLASH_MODE_FILL_IN[];
-
-//TI extensions to add sensor orientation parameters
-static const char ORIENTATION_SENSOR_NONE[];
-static const char ORIENTATION_SENSOR_90[];
-static const char ORIENTATION_SENSOR_180[];
-static const char ORIENTATION_SENSOR_270[];
-
-
-//TI values for camera direction
-static const char FACING_FRONT[];
-static const char FACING_BACK[];
-
-};
-
-};
-
-#endif
-
+/*
+ * 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.
+ */
+
+
+
+
+#ifndef TI_CAMERA_PARAMETERS_H
+#define TI_CAMERA_PARAMETERS_H
+
+#include <utils/KeyedVector.h>
+#include <utils/String8.h>
+
+namespace android {
+
+///TI Specific Camera Parameters
+class TICameraParameters
+{
+public:
+
+// Supported Camera indexes
+// Example value: "0,1,2,3", where 0-primary, 1-secondary1, 2-secondary2, 3-sterocamera
+static const char KEY_SUPPORTED_CAMERAS[];
+// Select logical Camera index
+static const char KEY_CAMERA[];
+static const char KEY_CAMERA_NAME[];
+static const char KEY_S3D_SUPPORTED[];
+static const char KEY_BURST[];
+static const char KEY_CAP_MODE[];
+static const char KEY_VNF[];
+static const char KEY_SATURATION[];
+static const char KEY_BRIGHTNESS[];
+static const char KEY_EXPOSURE_MODE[];
+static const char KEY_SUPPORTED_EXPOSURE[];
+static const char KEY_CONTRAST[];
+static const char KEY_SHARPNESS[];
+static const char KEY_ISO[];
+static const char KEY_SUPPORTED_ISO_VALUES[];
+static const char KEY_SUPPORTED_IPP[];
+static const char KEY_IPP[];
+static const char KEY_MAN_EXPOSURE[];
+static const char KEY_METERING_MODE[];
+static const char KEY_PADDED_WIDTH[];
+static const char KEY_PADDED_HEIGHT[];
+static const char KEY_EXP_BRACKETING_RANGE[];
+static const char KEY_TEMP_BRACKETING[];
+static const char KEY_TEMP_BRACKETING_RANGE_POS[];
+static const char KEY_TEMP_BRACKETING_RANGE_NEG[];
+static const char KEY_SHUTTER_ENABLE[];
+static const char KEY_MEASUREMENT_ENABLE[];
+static const char KEY_INITIAL_VALUES[];
+static const char KEY_GBCE[];
+static const char KEY_GLBCE[];
+static const char KEY_MINFRAMERATE[];
+static const char KEY_MAXFRAMERATE[];
+
+// TI recording hint to notify camera adapters of possible recording
+static const char KEY_RECORDING_HINT[];
+static const char KEY_AUTO_FOCUS_LOCK[];
+static const char KEY_CURRENT_ISO[];
+
+static const char KEY_SENSOR_ORIENTATION[];
+static const char KEY_SENSOR_ORIENTATION_VALUES[];
+
+//TI extensions for zoom
+static const char ZOOM_SUPPORTED[];
+static const char ZOOM_UNSUPPORTED[];
+
+//TI extensions for camera capabilies
+static const char INITIAL_VALUES_TRUE[];
+static const char INITIAL_VALUES_FALSE[];
+
+//TI extensions for enabling/disabling measurements
+static const char MEASUREMENT_ENABLE[];
+static const char MEASUREMENT_DISABLE[];
+
+// TI extensions to add values for ManualConvergence and AutoConvergence mode
+static const char KEY_AUTOCONVERGENCE[];
+static const char KEY_AUTOCONVERGENCE_MODE[];
+static const char KEY_MANUALCONVERGENCE_VALUES[];
+
+//TI extensions for enabling/disabling GLBCE
+static const char GLBCE_ENABLE[];
+static const char GLBCE_DISABLE[];
+
+//TI extensions for enabling/disabling GBCE
+static const char GBCE_ENABLE[];
+static const char GBCE_DISABLE[];
+
+// TI extensions to add Min frame rate Values
+static const char VIDEO_MINFRAMERATE_5[];
+static const char VIDEO_MINFRAMERATE_10[];
+static const char VIDEO_MINFRAMERATE_15[];
+static const char VIDEO_MINFRAMERATE_20[];
+static const char VIDEO_MINFRAMERATE_24[];
+static const char VIDEO_MINFRAMERATE_25[];
+static const char VIDEO_MINFRAMERATE_30[];
+static const char VIDEO_MINFRAMERATE_33[];
+
+// TI extensions for Manual Gain and Manual Exposure
+static const char KEY_MANUAL_EXPOSURE_LEFT[];
+static const char KEY_MANUAL_EXPOSURE_RIGHT[];
+static const char KEY_MANUAL_EXPOSURE_MODES[];
+static const char KEY_MANUAL_GAIN_EV_RIGHT[];
+static const char KEY_MANUAL_GAIN_EV_LEFT[];
+static const char KEY_MANUAL_GAIN_ISO_RIGHT[];
+static const char KEY_MANUAL_GAIN_ISO_LEFT[];
+static const char KEY_MANUAL_GAIN_MODES[];
+
+//TI extensions for setting EXIF tags
+static const char KEY_EXIF_MODEL[];
+static const char KEY_EXIF_MAKE[];
+
+//TI extensions for additional GPS data
+static const char KEY_GPS_MAPDATUM[];
+static const char KEY_GPS_VERSION[];
+static const char KEY_GPS_DATESTAMP[];
+
+//TI extensions for enabling/disabling shutter sound
+static const char SHUTTER_ENABLE[];
+static const char SHUTTER_DISABLE[];
+
+//TI extensions for Temporal bracketing
+static const char BRACKET_ENABLE[];
+static const char BRACKET_DISABLE[];
+
+//TI extensions to Image post-processing
+static const char IPP_LDCNSF[];
+static const char IPP_LDC[];
+static const char IPP_NSF[];
+static const char IPP_NONE[];
+
+//TI extensions to camera mode
+static const char HIGH_PERFORMANCE_MODE[];
+static const char HIGH_QUALITY_MODE[];
+static const char HIGH_QUALITY_ZSL_MODE[];
+static const char VIDEO_MODE[];
+
+
+// TI extensions to standard android pixel formats
+static const char PIXEL_FORMAT_RAW[];
+static const char PIXEL_FORMAT_JPS[];
+static const char PIXEL_FORMAT_MPO[];
+static const char PIXEL_FORMAT_RAW_JPEG[];
+static const char PIXEL_FORMAT_RAW_MPO[];
+
+// TI extensions to standard android scene mode settings
+static const char SCENE_MODE_SPORT[];
+static const char SCENE_MODE_CLOSEUP[];
+static const char SCENE_MODE_AQUA[];
+static const char SCENE_MODE_SNOWBEACH[];
+static const char SCENE_MODE_MOOD[];
+static const char SCENE_MODE_NIGHT_INDOOR[];
+static const char SCENE_MODE_DOCUMENT[];
+static const char SCENE_MODE_BARCODE[];
+static const char SCENE_MODE_VIDEO_SUPER_NIGHT[];
+static const char SCENE_MODE_VIDEO_CINE[];
+static const char SCENE_MODE_VIDEO_OLD_FILM[];
+
+// TI extensions to standard android white balance settings.
+static const char WHITE_BALANCE_TUNGSTEN[];
+static const char WHITE_BALANCE_HORIZON[];
+static const char WHITE_BALANCE_SUNSET[];
+static const char WHITE_BALANCE_FACE[];
+
+// TI extensions to add exposure preset modes to android api
+static const char EXPOSURE_MODE_OFF[];
+static const char EXPOSURE_MODE_AUTO[];
+static const char EXPOSURE_MODE_NIGHT[];
+static const char EXPOSURE_MODE_BACKLIGHT[];
+static const char EXPOSURE_MODE_SPOTLIGHT[];
+static const char EXPOSURE_MODE_SPORTS[];
+static const char EXPOSURE_MODE_SNOW[];
+static const char EXPOSURE_MODE_BEACH[];
+static const char EXPOSURE_MODE_APERTURE[];
+static const char EXPOSURE_MODE_SMALL_APERTURE[];
+static const char EXPOSURE_MODE_FACE[];
+
+// TI extensions to standard android focus presets.
+static const char FOCUS_MODE_PORTRAIT[];
+static const char FOCUS_MODE_EXTENDED[];
+static const char FOCUS_MODE_FACE[];
+
+// TI extensions to add iso values
+static const char ISO_MODE_AUTO[];
+static const char ISO_MODE_100[];
+static const char ISO_MODE_200[];
+static const char ISO_MODE_400[];
+static const char ISO_MODE_800[];
+static const char ISO_MODE_1000[];
+static const char ISO_MODE_1200[];
+static const char ISO_MODE_1600[];
+
+// TI extensions to add values for effect settings.
+static const char EFFECT_NATURAL[];
+static const char EFFECT_VIVID[];
+static const char EFFECT_COLOR_SWAP[];
+static const char EFFECT_BLACKWHITE[];
+
+static const char KEY_S3D2D_PREVIEW[];
+static const char KEY_S3D2D_PREVIEW_MODE[];
+
+// TI extensions to add values for AutoConvergence settings.
+static const char AUTOCONVERGENCE_MODE_DISABLE[];
+static const char AUTOCONVERGENCE_MODE_FRAME[];
+static const char AUTOCONVERGENCE_MODE_CENTER[];
+static const char AUTOCONVERGENCE_MODE_FFT[];
+static const char AUTOCONVERGENCE_MODE_MANUAL[];
+
+
+//TI extensions for flash mode settings
+static const char FLASH_MODE_FILL_IN[];
+
+//TI extensions to add sensor orientation parameters
+static const char ORIENTATION_SENSOR_NONE[];
+static const char ORIENTATION_SENSOR_90[];
+static const char ORIENTATION_SENSOR_180[];
+static const char ORIENTATION_SENSOR_270[];
+
+
+//TI values for camera direction
+static const char FACING_FRONT[];
+static const char FACING_BACK[];
+
+};
+
+};
+
+#endif
+