summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorMilen Mitkov <mmitkov@mm-sol.com>2011-11-02 17:29:42 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2011-11-02 17:29:42 +0000
commitcd06844153a66b17f5c51682b1819bce87f28793 (patch)
tree347c70e9482502dce6a035718510a28116fc1747 /camera
parentf859b3579ed30ffaa9ab5e8c4646ab085b9cd764 (diff)
parent9b4a3604f53dbd3f41ee380fa1a041834490b688 (diff)
downloadhardware_ti_omap4xxx-cd06844153a66b17f5c51682b1819bce87f28793.zip
hardware_ti_omap4xxx-cd06844153a66b17f5c51682b1819bce87f28793.tar.gz
hardware_ti_omap4xxx-cd06844153a66b17f5c51682b1819bce87f28793.tar.bz2
am 9b4a3604: am cf0a61f1: CameraHAL: Use Ancillary data to check for snapshot
* commit '9b4a3604f53dbd3f41ee380fa1a041834490b688': CameraHAL: Use Ancillary data to check for snapshot
Diffstat (limited to 'camera')
-rwxr-xr-xcamera/OMXCameraAdapter/OMXCameraAdapter.cpp57
-rw-r--r--camera/OMXCameraAdapter/OMXFD.cpp4
-rw-r--r--camera/inc/OMXCameraAdapter/OMXCameraAdapter.h2
3 files changed, 59 insertions, 4 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index 4495d50..976fe8f 100755
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -1757,6 +1757,7 @@ status_t OMXCameraAdapter::startPreview()
OMX_ERRORTYPE eError = OMX_ErrorNone;
OMXCameraPortParameters *mPreviewData = NULL;
OMXCameraPortParameters *measurementData = NULL;
+ OMX_CONFIG_EXTRADATATYPE extraDataControl;
LOG_FUNCTION_NAME;
@@ -1863,6 +1864,22 @@ status_t OMXCameraAdapter::startPreview()
}
+ // Enable Ancillary data. The nDCCStatus field is used to signify
+ // 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);
+ }
+
+
if ( mPending3Asettings )
apply3Asettings(mParameters3A);
@@ -2878,6 +2895,10 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
sp<CameraFDResult> fdResult = NULL;
unsigned int mask = 0xFFFF;
CameraFrame cameraFrame;
+ OMX_TI_PLATFORMPRIVATE *platformPrivate;
+ OMX_OTHER_EXTRADATATYPE *extraData;
+ OMX_TI_ANCILLARYDATATYPE *ancillaryData;
+ bool snapshotFrame = false;
res1 = res2 = NO_ERROR;
pPortParam = &(mCameraAdapterParameters.mCameraPortParams[pBuffHeader->nOutputPortIndex]);
@@ -2895,6 +2916,19 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
return OMX_ErrorNone;
}
+ if ( mWaitingForSnapshot )
+ {
+ platformPrivate = (OMX_TI_PLATFORMPRIVATE*) pBuffHeader->pPlatformPrivate;
+ extraData = getExtradata((OMX_OTHER_EXTRADATATYPE*) platformPrivate->pMetaDataBuffer,
+ (OMX_EXTRADATATYPE) OMX_AncillaryData);
+
+ if ( NULL != extraData )
+ {
+ ancillaryData = (OMX_TI_ANCILLARYDATATYPE*) extraData->data;
+ snapshotFrame = ancillaryData->nDCCStatus;
+ }
+ }
+
recalculateFPS();
{
@@ -2914,15 +2948,15 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
}
///Prepare the frames to be sent - initialize CameraFrame object and reference count
- if( mWaitingForSnapshot && (mCapturedFrames > 0) )
+ if( mWaitingForSnapshot && (mCapturedFrames > 0) && snapshotFrame )
{
typeOfFrame = CameraFrame::SNAPSHOT_FRAME;
mask = (unsigned int)CameraFrame::SNAPSHOT_FRAME;
}
else
{
- typeOfFrame = CameraFrame::PREVIEW_FRAME_SYNC;
- mask = (unsigned int)CameraFrame::PREVIEW_FRAME_SYNC;
+ typeOfFrame = CameraFrame::PREVIEW_FRAME_SYNC;
+ mask = (unsigned int)CameraFrame::PREVIEW_FRAME_SYNC;
}
if (mRecording)
@@ -3322,6 +3356,23 @@ bool OMXCameraAdapter::OMXCallbackHandler::Handler()
return false;
}
+OMX_OTHER_EXTRADATATYPE *OMXCameraAdapter::getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_EXTRADATATYPE type)
+{
+ if ( NULL != extraData )
+ {
+ while ( extraData->nDataSize != 0 )
+ {
+ if ( type == extraData->eType )
+ {
+ return extraData;
+ }
+ extraData = (OMX_OTHER_EXTRADATATYPE*) ((char*)extraData + extraData->nSize);
+ }
+ }
+ // Required extradata type wasn't found
+ return NULL;
+}
+
OMXCameraAdapter::OMXCameraAdapter(size_t sensor_index): mComponentState (OMX_StateLoaded)
{
LOG_FUNCTION_NAME;
diff --git a/camera/OMXCameraAdapter/OMXFD.cpp b/camera/OMXCameraAdapter/OMXFD.cpp
index 92b9af4..38c7a6e 100644
--- a/camera/OMXCameraAdapter/OMXFD.cpp
+++ b/camera/OMXCameraAdapter/OMXFD.cpp
@@ -262,7 +262,9 @@ status_t OMXCameraAdapter::detectFaces(OMX_BUFFERHEADERTYPE* pBuffHeader,
return -EINVAL;
}
- extraData = (OMX_OTHER_EXTRADATATYPE *) (platformPrivate->pMetaDataBuffer);
+ extraData = getExtradata((OMX_OTHER_EXTRADATATYPE *) (platformPrivate->pMetaDataBuffer),
+ (OMX_EXTRADATATYPE)OMX_FaceDetection);
+
if ( NULL != extraData ) {
CAMHAL_LOGVB("Size = %d, sizeof = %d, eType = 0x%x, nDataSize= %d, nPortIndex = 0x%x, nVersion = 0x%x",
extraData->nSize,
diff --git a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
index 2f17ba8..7358f22 100644
--- a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
+++ b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h
@@ -640,6 +640,8 @@ private:
status_t setAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE pACMode, OMX_S32 pManualConverence);
status_t getAutoConvergence(OMX_TI_AUTOCONVERGENCEMODETYPE *pACMode, OMX_S32 *pManualConverence);
+ OMX_OTHER_EXTRADATATYPE *getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_EXTRADATATYPE type);
+
class CommandHandler : public Thread {
public:
CommandHandler(OMXCameraAdapter* ca)