diff options
| author | Shuo Liu <shuo.liu@intel.com> | 2011-11-25 05:30:12 +0800 |
|---|---|---|
| committer | Patrick Tjin <pattjin@google.com> | 2014-07-21 22:02:45 -0700 |
| commit | 2bfa6ad0118934357b8eb42c85c5b8d075e0bf23 (patch) | |
| tree | 73e484c98a2548fa78703938afd732c656fd0330 | |
| parent | 3e9f7696ef75665a44a3f9542e10f7a6be4de464 (diff) | |
| download | android_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.cpp | 5 | ||||
| -rw-r--r-- | videocodec/OMXVideoEncoderBase.cpp | 29 | ||||
| -rw-r--r-- | videocodec/OMXVideoEncoderBase.h | 3 |
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_ */ |
