diff options
| author | Milen Mitkov <mmitkov@mm-sol.com> | 2011-11-02 17:29:42 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2011-11-02 17:29:42 +0000 |
| commit | cd06844153a66b17f5c51682b1819bce87f28793 (patch) | |
| tree | 347c70e9482502dce6a035718510a28116fc1747 | |
| parent | f859b3579ed30ffaa9ab5e8c4646ab085b9cd764 (diff) | |
| parent | 9b4a3604f53dbd3f41ee380fa1a041834490b688 (diff) | |
| download | hardware_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
| -rwxr-xr-x | camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 57 | ||||
| -rw-r--r-- | camera/OMXCameraAdapter/OMXFD.cpp | 4 | ||||
| -rw-r--r-- | camera/inc/OMXCameraAdapter/OMXCameraAdapter.h | 2 |
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) |
