diff options
| -rw-r--r-- | videocodec/OMXVideoEncoderAVC.cpp | 6 | ||||
| -rw-r--r-- | videocodec/OMXVideoEncoderBase.cpp | 22 | ||||
| -rw-r--r-- | videocodec/OMXVideoEncoderBase.h | 3 |
3 files changed, 18 insertions, 13 deletions
diff --git a/videocodec/OMXVideoEncoderAVC.cpp b/videocodec/OMXVideoEncoderAVC.cpp index dddbb44..2981d1f 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)); @@ -166,7 +166,7 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessorProcess( goto out; } - if (mBsState != BS_STATE_INVALID) { + if (mBsState != BS_STATE_INVALID && mBsState != BS_STATE_FAILD) { LOGV(" Share buffer mode\n"); inBuf.size = mSharedBufArray[0].dataSize; inBuf.data = diff --git a/videocodec/OMXVideoEncoderBase.cpp b/videocodec/OMXVideoEncoderBase.cpp index ba6338e..a13cd58 100644 --- a/videocodec/OMXVideoEncoderBase.cpp +++ b/videocodec/OMXVideoEncoderBase.cpp @@ -278,6 +278,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::SetVideoEncoderParam() { if(mPFrames == 0) { mPFrames = mEncoderParams->frameRate.frameRateNum / 2; + mPFrames = (mPFrames < 15) ? 15 : mPFrames; // Limit intra frame period to ensure video quality for low bitrate application. } mEncoderParams->intraPeriod = mPFrames; mEncoderParams->rawFormat = RAW_FORMAT_NV12; @@ -359,6 +360,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::ProcessorInit(void) { if (mVideoEncoder->start() != ENCODE_SUCCESS) { LOGE("Start failed, ret = 0x%08x\n", ret); + StopBufferSharing(); return OMX_ErrorUndefined; } @@ -416,7 +418,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::AllocateSharedBuffers(int width, int height) CHECK_BS_STATE(); - if (mBsState == BS_STATE_INVALID) { + if (mBsState == BS_STATE_INVALID || mBsState == BS_STATE_FAILD) { LOGW("buffer sharing not enabled, do nothing"); return OMX_ErrorNone; } @@ -468,7 +470,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::AllocateSharedBuffers(int width, int height) OMX_ERRORTYPE OMXVideoEncoderBase::UploadSharedBuffers() { CHECK_BS_STATE(); - if (mBsState == BS_STATE_INVALID) { + if (mBsState == BS_STATE_INVALID || mBsState == BS_STATE_FAILD) { LOGW("buffer sharing not enabled, do nothing."); return OMX_ErrorNone; } @@ -488,7 +490,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::SetBSInfoToPort() { //caution: buffer-sharing info stored in INPORT (raw port) privateinfoparam.nPortIndex = INPORT_INDEX; - if (mBsState == BS_STATE_INVALID) { + if (mBsState == BS_STATE_INVALID || mBsState == BS_STATE_FAILD) { privateinfoparam.nCapacity = 0; privateinfoparam.nHolder = NULL; } else { @@ -503,7 +505,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::SetBSInfoToPort() { OMX_ERRORTYPE OMXVideoEncoderBase::TriggerBSMode() { CHECK_BS_STATE(); - if (mBsState == BS_STATE_INVALID) { + if (mBsState == BS_STATE_INVALID || mBsState == BS_STATE_FAILD) { LOGW("buffer sharing not enabled."); return OMX_ErrorNone; } @@ -551,8 +553,10 @@ OMX_ERRORTYPE OMXVideoEncoderBase::InitBSMode(void) { mBsInstance = BufferShareRegistry::getInstance(); ret = mBsInstance->encoderRequestToEnableSharingMode(); - CHECK_BS_STATUS ("encoderRequestToEnableSharingMode"); - + if (ret != BS_SUCCESS) { + mBsState = BS_STATE_FAILD; + return OMX_ErrorInsufficientResources; + } return OMX_ErrorNone; } @@ -561,7 +565,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::DeinitBSMode(void) { CHECK_BS_STATE(); - if (mBsState == BS_STATE_INVALID) { + if (mBsState == BS_STATE_INVALID || mBsState == BS_STATE_FAILD) { return OMX_ErrorNone; } @@ -571,7 +575,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::DeinitBSMode(void) { } ret = mBsInstance->encoderRequestToDisableSharingMode(); - CHECK_BS_STATUS ("encoderRequestToDisableSharingMode"); + CHECK_BS_STATUS("encoderRequestToDisableSharingMode"); mBsState = BS_STATE_INVALID; @@ -603,7 +607,7 @@ OMX_ERRORTYPE OMXVideoEncoderBase::StartBufferSharing(void) { OMX_ERRORTYPE OMXVideoEncoderBase::StopBufferSharing(void) { - if (mBsState == BS_STATE_INVALID) { + if (mBsState == BS_STATE_INVALID || mBsState == BS_STATE_FAILD) { return OMX_ErrorNone; } diff --git a/videocodec/OMXVideoEncoderBase.h b/videocodec/OMXVideoEncoderBase.h index f4c3b3a..2d658bf 100644 --- a/videocodec/OMXVideoEncoderBase.h +++ b/videocodec/OMXVideoEncoderBase.h @@ -99,7 +99,8 @@ protected: enum { BS_STATE_INVALID, BS_STATE_LOADED, - BS_STATE_EXECUTING + BS_STATE_EXECUTING, + BS_STATE_FAILD } mBsState; SharedBufferType *mSharedBufArray; |
