From 88c8d2ab4d97fe48ed25c3adff105f2cef5a2d36 Mon Sep 17 00:00:00 2001 From: Zhao Liang Date: Fri, 23 Aug 2013 14:21:16 +0800 Subject: Support Sync mode video encoding in omx BZ: 131021 Use one new ext parameter to control sync mode, this mode is used for timelapse recording Signed-off-by: Zhao Liang Change-Id: I099d62d02bdf28598893d7167486b4d5f1623120 Reviewed-on: http://android.intel.com:8080/127318 Reviewed-by: Zhao, Leo Reviewed-by: Yuan, Shengquan Reviewed-by: Shi, PingX Tested-by: Shi, PingX Reviewed-by: cactus Tested-by: cactus --- videocodec/OMXVideoEncoderAVC.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'videocodec/OMXVideoEncoderAVC.cpp') diff --git a/videocodec/OMXVideoEncoderAVC.cpp b/videocodec/OMXVideoEncoderAVC.cpp index ddc94ad..b22fe94 100755 --- a/videocodec/OMXVideoEncoderAVC.cpp +++ b/videocodec/OMXVideoEncoderAVC.cpp @@ -487,9 +487,10 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessDataRetrieve( ports[INPORT_INDEX]->ReturnAllRetainedBuffers(); //return last all retained frames if (outBuf.flag & ENCODE_BUFFERFLAG_ENDOFSTREAM) retains[INPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN; + else if (mSyncEncoding) + retains[INPORT_INDEX] = BUFFER_RETAIN_NOT_RETAIN; else retains[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE; //retain current frame - mFrameOutputCount ++; } } else //not complete output all encoded data, push again to continue output @@ -591,7 +592,8 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessorProcess( eInfo.EncodeComplete = true; mFrameEncodedCount ++; - if (mFrameEncodedCount == 2) {//not getoutput for second encode frame to keep in async mode + + if (mSyncEncoding == OMX_FALSE && mFrameEncodedCount == 2) {//not getoutput for second encode frame to keep in async mode eInfo.DataRetrieved = true; ports[INPORT_INDEX]->ReturnAllRetainedBuffers(); retains[INPORT_INDEX] = BUFFER_RETAIN_ACCUMULATE; @@ -607,7 +609,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 (eInfo.EndOfEncode && eInfo.EncodeComplete && eInfo.DataRetrieved) { + if (mSyncEncoding == OMX_FALSE && eInfo.EndOfEncode && eInfo.EncodeComplete && eInfo.DataRetrieved) { eInfo.DataRetrieved = false; eInfo.EndOfEncode = false; retains[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN; -- cgit v1.2.3