summaryrefslogtreecommitdiffstats
path: root/camera/OMXCameraAdapter
diff options
context:
space:
mode:
Diffstat (limited to 'camera/OMXCameraAdapter')
-rw-r--r--camera/OMXCameraAdapter/OMXCameraAdapter.cpp5
-rw-r--r--camera/OMXCameraAdapter/OMXCapture.cpp19
-rw-r--r--camera/OMXCameraAdapter/OMXMetadata.cpp76
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;
+}
+
+};
+