aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--videocodec/OMXVideoEncoderAVC.cpp6
-rw-r--r--videocodec/OMXVideoEncoderBase.cpp22
-rw-r--r--videocodec/OMXVideoEncoderBase.h3
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;