aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShuo Liu <shuo.liu@intel.com>2011-11-25 05:30:12 +0800
committerPatrick Tjin <pattjin@google.com>2014-07-21 22:02:45 -0700
commit2bfa6ad0118934357b8eb42c85c5b8d075e0bf23 (patch)
tree73e484c98a2548fa78703938afd732c656fd0330
parent3e9f7696ef75665a44a3f9542e10f7a6be4de464 (diff)
downloadandroid_hardware_intel_common_omx-components-2bfa6ad0118934357b8eb42c85c5b8d075e0bf23.tar.gz
android_hardware_intel_common_omx-components-2bfa6ad0118934357b8eb42c85c5b8d075e0bf23.tar.bz2
android_hardware_intel_common_omx-components-2bfa6ad0118934357b8eb42c85c5b8d075e0bf23.zip
CAMERA: modify hardware omx encoder to support avc capture
BZ: 15257 1. add setParameter() for storeMetaDataInBuffers 2. comment the prefixed length nalu format and restore the start code nalu format Change-Id: Ia3c239a7d1e8788e1acddd060245c37ee4040f7d Signed-off-by: Shuo Liu <shuo.liu@intel.com> Reviewed-on: http://android.intel.com:8080/25226 Reviewed-by: Seibel, Eric <eric.seibel@intel.com> Tested-by: Seibel, Eric <eric.seibel@intel.com> Reviewed-by: Gross, Mark <mark.gross@intel.com> Tested-by: Gross, Mark <mark.gross@intel.com> Reviewed-by: buildbot <buildbot@intel.com> Tested-by: buildbot <buildbot@intel.com>
-rw-r--r--videocodec/OMXVideoEncoderAVC.cpp5
-rw-r--r--videocodec/OMXVideoEncoderBase.cpp29
-rw-r--r--videocodec/OMXVideoEncoderBase.h3
3 files changed, 33 insertions, 4 deletions
diff --git a/videocodec/OMXVideoEncoderAVC.cpp b/videocodec/OMXVideoEncoderAVC.cpp
index 5f8db8e..dddbb44 100644
--- a/videocodec/OMXVideoEncoderAVC.cpp
+++ b/videocodec/OMXVideoEncoderAVC.cpp
@@ -51,8 +51,8 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::InitOutputPortFormatSpecific(OMX_PARAM_PORTDEF
SetTypeHeader(&mNalStreamFormat, sizeof(mNalStreamFormat));
mNalStreamFormat.nPortIndex = OUTPORT_INDEX;
// TODO: check if this is desired Nalu Format
- // mNalStreamFormat.eNaluFormat = OMX_NaluFormatStartCodesSeparateFirstHeader;
- mNalStreamFormat.eNaluFormat = OMX_NaluFormatLengthPrefixedSeparateFirstHeader;
+ mNalStreamFormat.eNaluFormat = OMX_NaluFormatStartCodesSeparateFirstHeader;
+ //mNalStreamFormat.eNaluFormat = OMX_NaluFormatLengthPrefixedSeparateFirstHeader;
// OMX_VIDEO_CONFIG_AVCINTRAPERIOD
memset(&mConfigAvcIntraPeriod, 0, sizeof(mConfigAvcIntraPeriod));
SetTypeHeader(&mConfigAvcIntraPeriod, sizeof(mConfigAvcIntraPeriod));
@@ -280,6 +280,7 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessorProcess(
outBuf.format = OUTPUT_CODEC_DATA;
ret = mVideoEncoder->getOutput(&outBuf);
CHECK_ENCODE_STATUS("getOutput");
+
// Return code could not be ENCODE_BUFFER_TOO_SMALL
// If we don't return error, we will have dead lock issue
if (ret == ENCODE_BUFFER_TOO_SMALL) {
diff --git a/videocodec/OMXVideoEncoderBase.cpp b/videocodec/OMXVideoEncoderBase.cpp
index b3234ac..ba6338e 100644
--- a/videocodec/OMXVideoEncoderBase.cpp
+++ b/videocodec/OMXVideoEncoderBase.cpp
@@ -29,7 +29,8 @@ OMXVideoEncoderBase::OMXVideoEncoderBase()
,mFrameOutputCount(0)
,mPFrames(0)
,mFrameRetrieved(OMX_TRUE)
- ,mFirstFrame(OMX_TRUE) {
+ ,mFirstFrame(OMX_TRUE)
+ ,mForceBufferSharing(OMX_FALSE) {
mEncoderParams = new VideoParamsCommon();
if (!mEncoderParams) LOGE("OMX_ErrorInsufficientResources");
@@ -626,6 +627,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::BuildHandlerList(void) {
AddHandler(OMX_IndexConfigVideoIntraVOPRefresh, GetConfigVideoIntraVOPRefresh, SetConfigVideoIntraVOPRefresh);
//AddHandler(OMX_IndexParamIntelAdaptiveSliceControl, GetParamIntelAdaptiveSliceControl, SetParamIntelAdaptiveSliceControl);
AddHandler(OMX_IndexParamVideoProfileLevelQuerySupported, GetParamVideoProfileLevelQuerySupported, SetParamVideoProfileLevelQuerySupported);
+ AddHandler((OMX_INDEXTYPE)OMX_IndexStoreMetaDataInBuffers, GetStoreMetaDataInBuffers, SetStoreMetaDataInBuffers);
return OMX_ErrorNone;
}
@@ -973,3 +975,28 @@ OMX_ERRORTYPE OMXVideoEncoderBase::SetParamVideoProfileLevelQuerySupported(OMX_P
return OMX_ErrorUnsupportedSetting;
}
+OMX_ERRORTYPE OMXVideoEncoderBase::GetStoreMetaDataInBuffers(OMX_PTR pStructure) {
+ OMX_ERRORTYPE ret;
+ StoreMetaDataInBuffersParams *p = (StoreMetaDataInBuffersParams *)pStructure;
+
+ CHECK_TYPE_HEADER(p);
+ CHECK_PORT_INDEX(p, INPORT_INDEX);
+
+ p->bStoreMetaData = mForceBufferSharing;
+
+ return OMX_ErrorNone;
+};
+
+OMX_ERRORTYPE OMXVideoEncoderBase::SetStoreMetaDataInBuffers(OMX_PTR pStructure) {
+ OMX_ERRORTYPE ret;
+ StoreMetaDataInBuffersParams *p = (StoreMetaDataInBuffersParams *)pStructure;
+
+ CHECK_TYPE_HEADER(p);
+ CHECK_PORT_INDEX(p, INPORT_INDEX);
+
+ LOGD("SetStoreMetaDataInBuffers (enabled = %x)", p->bStoreMetaData);
+ mForceBufferSharing = p->bStoreMetaData;
+
+ return OMX_ErrorNone;
+};
+
diff --git a/videocodec/OMXVideoEncoderBase.h b/videocodec/OMXVideoEncoderBase.h
index 705b339..f4c3b3a 100644
--- a/videocodec/OMXVideoEncoderBase.h
+++ b/videocodec/OMXVideoEncoderBase.h
@@ -65,6 +65,7 @@ protected:
DECLARE_HANDLER(OMXVideoEncoderBase, ConfigVideoIntraVOPRefresh);
DECLARE_HANDLER(OMXVideoEncoderBase, ParamIntelAdaptiveSliceControl);
DECLARE_HANDLER(OMXVideoEncoderBase, ParamVideoProfileLevelQuerySupported);
+ DECLARE_HANDLER(OMXVideoEncoderBase, StoreMetaDataInBuffers);
protected:
virtual OMX_ERRORTYPE InitBSMode(void);
@@ -102,6 +103,7 @@ protected:
} mBsState;
SharedBufferType *mSharedBufArray;
+ OMX_BOOL mForceBufferSharing;
private:
@@ -120,7 +122,6 @@ private:
sp<BufferShareRegistry> mBsInstance;
OMX_U32 mSharedBufCnt;
OMX_U32 mPFrames;
-
};
#endif /* OMX_VIDEO_ENCODER_BASE_H_ */