diff options
| -rw-r--r-- | videocodec/OMXVideoDecoderBase.cpp | 13 |
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)) { |
