diff options
Diffstat (limited to 'camera/OMXCameraAdapter')
-rw-r--r-- | camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 5 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXCapture.cpp | 19 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXMetadata.cpp | 76 |
3 files changed, 88 insertions, 12 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index 5f08a27..fb4c5d7 100644 --- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp +++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp @@ -3327,6 +3327,8 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE goto EXIT; } + setMetaData(cameraFrame.mMetaData, platformPrivate); + CAMHAL_LOGDB("Captured Frames: %d", mCapturedFrames); mCapturedFrames--; @@ -3687,7 +3689,8 @@ status_t OMXCameraAdapter::setExtraData(bool enable, OMX_U32 nPortIndex, OMX_EXT return (ret | ErrorUtils::omxToAndroidError(eError)); } -OMX_OTHER_EXTRADATATYPE *OMXCameraAdapter::getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_U32 extraDataSize, OMX_EXTRADATATYPE type) { +OMX_OTHER_EXTRADATATYPE *OMXCameraAdapter::getExtradata(OMX_OTHER_EXTRADATATYPE *extraData, OMX_U32 extraDataSize, OMX_EXTRADATATYPE type) const +{ OMX_U32 remainingSize = extraDataSize; if ( NULL != extraData ) { diff --git a/camera/OMXCameraAdapter/OMXCapture.cpp b/camera/OMXCameraAdapter/OMXCapture.cpp index e5e5bf5..c4652ba 100644 --- a/camera/OMXCameraAdapter/OMXCapture.cpp +++ b/camera/OMXCameraAdapter/OMXCapture.cpp @@ -1106,14 +1106,12 @@ status_t OMXCameraAdapter::startImageCapture(bool bracketing) } } - // 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); - } - capData = &mCameraAdapterParameters.mCameraPortParams[mCameraAdapterParameters.mImagePortIndex]; + // Enable WB and vector shot extra data for metadata + ret = setExtraData(true, OMX_ALL, OMX_WhiteBalance); + ret = setExtraData(true, OMX_ALL, OMX_TI_VectShotInfo); + //OMX shutter callback events are only available in hq mode if ( (HIGH_QUALITY == mCapMode) || (HIGH_QUALITY_ZSL== mCapMode)) { if ( NO_ERROR == ret ) @@ -1245,6 +1243,7 @@ status_t OMXCameraAdapter::startImageCapture(bool bracketing) EXIT: CAMHAL_LOGEB("Exiting function %s because of ret %d eError=%x", __FUNCTION__, ret, eError); setExtraData(false, mCameraAdapterParameters.mPrevPortIndex, OMX_WhiteBalance); + setExtraData(false, mCameraAdapterParameters.mPrevPortIndex, OMX_TI_VectShotInfo); mWaitingForSnapshot = false; mCaptureSignalled = false; performCleanupAfterError(); @@ -1332,11 +1331,9 @@ status_t OMXCameraAdapter::stopImageCapture() } } - // 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); - } + // Disable WB and vector shot extra data for metadata + ret = setExtraData(false, OMX_ALL, OMX_WhiteBalance); + ret = setExtraData(false, OMX_ALL, OMX_TI_VectShotInfo); CAMHAL_LOGDB("Capture set - 0x%x", eError); diff --git a/camera/OMXCameraAdapter/OMXMetadata.cpp b/camera/OMXCameraAdapter/OMXMetadata.cpp new file mode 100644 index 0000000..921b188 --- /dev/null +++ b/camera/OMXCameraAdapter/OMXMetadata.cpp @@ -0,0 +1,76 @@ +/* + * 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 OMX3A.cpp +* +* This file contains functionality for handling 3A configurations. +* +*/ + +#undef LOG_TAG + +#define LOG_TAG "OMXMetaData" + +#include "OMXCameraAdapter.h" + +namespace android { + +status_t OMXCameraAdapter::setMetaData(CameraMetadata &meta_data, const OMX_TI_PLATFORMPRIVATE * plat_pvt) const +{ + status_t ret = NO_ERROR; + OMX_OTHER_EXTRADATATYPE *extraData; + + extraData = getExtradata((OMX_OTHER_EXTRADATATYPE*) plat_pvt->pMetaDataBuffer, + plat_pvt->nMetaDataSize, + (OMX_EXTRADATATYPE) OMX_WhiteBalance); + + if ( NULL != extraData ) { + OMX_TI_WHITEBALANCERESULTTYPE * WBdata; + WBdata = (OMX_TI_WHITEBALANCERESULTTYPE*) extraData->data; + + meta_data.set(CameraMetadata::KEY_AWB_TEMP, (int)WBdata->nColorTemperature); + meta_data.set4(CameraMetadata::KEY_AWB_GAINS, + (int)WBdata->nGainR, + (int)WBdata->nGainGR, + (int)WBdata->nGainGB, + (int)WBdata->nGainB); + meta_data.set4(CameraMetadata::KEY_AWB_OFFSETS, + (int)WBdata->nOffsetR, + (int)WBdata->nOffsetGR, + (int)WBdata->nOffsetGB, + (int)WBdata->nOffsetB); + } + + // TODO(XXX): temporarily getting exposure and gain data from vector shot extra data + // change to ancil or cpcam metadata once Ducati side is ready + extraData = getExtradata((OMX_OTHER_EXTRADATATYPE*) plat_pvt->pMetaDataBuffer, + plat_pvt->nMetaDataSize, + (OMX_EXTRADATATYPE) OMX_TI_VectShotInfo); + + if ( NULL != extraData ) { + OMX_TI_VECTSHOTINFOTYPE *shotInfo; + shotInfo = (OMX_TI_VECTSHOTINFOTYPE*) extraData->data; + + meta_data.set(CameraMetadata::KEY_ANALOG_GAIN, (int)shotInfo->nAGain); + meta_data.set(CameraMetadata::KEY_EXPOSURE_TIME, (int)shotInfo->nExpTime); + } + + return ret; +} + +}; + |