aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--videocodec/OMXVideoDecoderBase.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/videocodec/OMXVideoDecoderBase.cpp b/videocodec/OMXVideoDecoderBase.cpp
index a99f87e..17b7a3c 100644
--- a/videocodec/OMXVideoDecoderBase.cpp
+++ b/videocodec/OMXVideoDecoderBase.cpp
@@ -318,11 +318,14 @@ OMX_ERRORTYPE OMXVideoDecoderBase::ProcessorProcess(
retains[OUTPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
return OMX_ErrorNone;
} else if (status == DECODE_MULTIPLE_FRAME){
- (*pBuffers[INPORT_INDEX])->nOffset += decodeBuffer.offSet;
- (*pBuffers[INPORT_INDEX])->nTimeStamp = decodeBuffer.nextTimeStamp;
- (*pBuffers[INPORT_INDEX])->nFilledLen -= decodeBuffer.offSet;
- retains[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
- LOGV("Find multiple frame in a buffer, next frame offset =%d, timestamp=%lld", (*pBuffers[INPORT_INDEX])->nOffset, (*pBuffers[INPORT_INDEX])->nTimeStamp);
+ if (decodeBuffer.ext != NULL && decodeBuffer.ext->extType == PACKED_FRAME_TYPE && decodeBuffer.ext->extData != NULL) {
+ PackedFrameData* nextFrame = (PackedFrameData*)decodeBuffer.ext->extData;
+ (*pBuffers[INPORT_INDEX])->nOffset += nextFrame->offSet;
+ (*pBuffers[INPORT_INDEX])->nTimeStamp = nextFrame->timestamp;
+ (*pBuffers[INPORT_INDEX])->nFilledLen -= nextFrame->offSet;
+ retains[INPORT_INDEX] = BUFFER_RETAIN_GETAGAIN;
+ LOGV("Find multiple frame in a buffer, next frame offset =%d, timestamp=%lld", (*pBuffers[INPORT_INDEX])->nOffset, (*pBuffers[INPORT_INDEX])->nTimeStamp);
+ }
}
else if (status != DECODE_SUCCESS && status != DECODE_FRAME_DROPPED) {
if (checkFatalDecoderError(status)) {