aboutsummaryrefslogtreecommitdiffstats
path: root/videocodec/OMXVideoEncoderAVC.cpp
diff options
context:
space:
mode:
authorLiu Bolun <bolun.liu@intel.com>2013-12-02 11:11:04 +0800
committerPatrick Tjin <pattjin@google.com>2014-07-21 22:02:56 -0700
commitd7335ebe601f03f24d166e992b8c998e750908f6 (patch)
tree4537f269b7cd7319cf6c9584309c8c211adc836f /videocodec/OMXVideoEncoderAVC.cpp
parent34cc9692d2d8d0831527bed6465ec728751b9207 (diff)
downloadandroid_hardware_intel_common_omx-components-d7335ebe601f03f24d166e992b8c998e750908f6.tar.gz
android_hardware_intel_common_omx-components-d7335ebe601f03f24d166e992b8c998e750908f6.tar.bz2
android_hardware_intel_common_omx-components-d7335ebe601f03f24d166e992b8c998e750908f6.zip
Add some pathes to fix CTS failed issue.
BZ: 153777 Due to async encode mode, add new judgement for processing EOS flag to avoid CTS test fail. Change-Id: Id6b86ecbac6ad1cbafff9bb1ca20a05b05c31651 Signed-off-by: Liu Bolun <bolun.liu@intel.com>
Diffstat (limited to 'videocodec/OMXVideoEncoderAVC.cpp')
-rwxr-xr-xvideocodec/OMXVideoEncoderAVC.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/videocodec/OMXVideoEncoderAVC.cpp b/videocodec/OMXVideoEncoderAVC.cpp
index 5cf19e7..ad4c9b8 100755
--- a/videocodec/OMXVideoEncoderAVC.cpp
+++ b/videocodec/OMXVideoEncoderAVC.cpp
@@ -493,6 +493,11 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessDataRetrieve(
retains[INPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN;
else if (mSyncEncoding)
retains[INPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN;
+ else if ((buffers[INPORT_INDEX]->nFlags & OMX_BUFFERFLAG_EOS)&&(buffers[INPORT_INDEX]->nFilledLen == 0))
+ {
+ retains[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
+ pInfo->EndOfEncode = true;
+ }
else
retains[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE; //retain current frame
mFrameOutputCount ++;
@@ -556,6 +561,13 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessorProcess(
retains[INPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN;
return OMX_ErrorNone;
}
+ else if(inBuf.size == 0 && eInfo.EndOfEncode == true)
+ {
+ LOGE("The Input buf is just a empty EOS buffer, in Sync encode," "nothing to do, return with no error when EndofEncode is set\n");
+ retains[INPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN;
+ retains[OUTPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN;
+ return OMX_ErrorNone;
+ }
} else if(inBuf.size<=0 || inBuf.data == NULL) {
LOGE("The Input buf size is 0 or buf is NULL, return with error\n");
return OMX_ErrorBadParameter;
@@ -605,7 +617,7 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessorProcess(
/* Check EOE state, if yes, this is final encode frame, need to push this buffer again
to call getOutput again for final output
*/
- if (mSyncEncoding == OMX_FALSE && eInfo.EndOfEncode && eInfo.EncodeComplete && eInfo.DataRetrieved) {
+ if (mSyncEncoding == OMX_FALSE && eInfo.EndOfEncode && eInfo.EncodeComplete && eInfo.DataRetrieved && (buffers[INPORT_INDEX]->nFilledLen != 0)) {
eInfo.DataRetrieved = false;
eInfo.EndOfEncode = false;
retains[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;