From f2af5a2c607e71ff4cd39da28b077c0a68b206fe Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Tue, 24 May 2011 14:53:30 -0700 Subject: Make sure the software mpeg4 decoder supports multiple input frames per input buffer to enable faster throughput in ACodec. Change-Id: I6f6a1c70d9446f9d52c3df257b2d22358b0e71f4 --- .../codecs/m4v_h263/dec/SoftMPEG4.cpp | 27 +++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp') diff --git a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp index 13e1662..cffbfb5 100644 --- a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp +++ b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp @@ -360,10 +360,14 @@ void SoftMPEG4::onQueueFilled(OMX_U32 portIndex) { mFramesConfigured = true; } - uint32_t timestamp = 0xFFFFFFFF; + uint32_t useExtTimestamp = (inHeader->nOffset == 0); + + // decoder deals in ms, OMX in us. + uint32_t timestamp = + useExtTimestamp ? (inHeader->nTimeStamp + 500) / 1000 : 0xFFFFFFFF; + int32_t bufferSize = inHeader->nFilledLen; - uint32_t useExtTimestamp = 0; if (PVDecodeVideoFrame( mHandle, &bitstream, ×tamp, &bufferSize, &useExtTimestamp, @@ -379,13 +383,20 @@ void SoftMPEG4::onQueueFilled(OMX_U32 portIndex) { return; } - outHeader->nTimeStamp = inHeader->nTimeStamp; + // decoder deals in ms, OMX in us. + outHeader->nTimeStamp = timestamp * 1000; - inInfo->mOwnedByUs = false; - inQueue.erase(inQueue.begin()); - inInfo = NULL; - notifyEmptyBufferDone(inHeader); - inHeader = NULL; + CHECK_LE(bufferSize, inHeader->nFilledLen); + inHeader->nOffset += inHeader->nFilledLen - bufferSize; + inHeader->nFilledLen = bufferSize; + + if (inHeader->nFilledLen == 0) { + inInfo->mOwnedByUs = false; + inQueue.erase(inQueue.begin()); + inInfo = NULL; + notifyEmptyBufferDone(inHeader); + inHeader = NULL; + } ++mInputBufferCount; -- cgit v1.1