Loading media/libstagefright/codecs/mpeg2dec/SoftMPEG2.cpp +20 −5 Original line number Diff line number Diff line Loading @@ -245,6 +245,7 @@ status_t SoftMPEG2::setFlushMode() { return UNKNOWN_ERROR; } mWaitForI = true; mIsInFlush = true; return OK; } Loading @@ -257,6 +258,7 @@ status_t SoftMPEG2::initDecoder() { UWORD32 u4_share_disp_buf; mNumCores = GetCPUCoreCount(); mWaitForI = true; /* Initialize number of ref and reorder modes (for MPEG2) */ u4_num_reorder_frames = 16; Loading Loading @@ -448,6 +450,8 @@ status_t SoftMPEG2::reInitDecoder() { void SoftMPEG2::onReset() { SoftVideoDecoderOMXComponent::onReset(); mWaitForI = true; resetDecoder(); resetPlugin(); } Loading Loading @@ -710,11 +714,22 @@ void SoftMPEG2::onQueueFilled(OMX_U32 portIndex) { outHeader->nTimeStamp = mTimeStamps[timeStampIdx]; mTimeStampsValid[timeStampIdx] = false; /* mWaitForI waits for the first I picture. Once made FALSE, it has to remain false till explicitly set to TRUE. */ mWaitForI = mWaitForI && !(IV_I_FRAME == s_dec_op.e_pic_type); if (mWaitForI) { s_dec_op.u4_output_present = false; } else { ALOGV("Output timestamp: %lld, res: %ux%u", (long long)outHeader->nTimeStamp, mWidth, mHeight); DUMP_TO_FILE(mOutFile, outHeader->pBuffer, outHeader->nFilledLen); outInfo->mOwnedByUs = false; outQueue.erase(outQueue.begin()); outInfo = NULL; notifyFillBufferDone(outHeader); outHeader = NULL; } } else { /* If in flush mode and no output is returned by the codec, * then come out of flush mode */ Loading media/libstagefright/codecs/mpeg2dec/SoftMPEG2.h +1 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ private: // codec. So the codec is switching to decode the new resolution. bool mChangingResolution; bool mFlushNeeded; bool mWaitForI; status_t initDecoder(); status_t deInitDecoder(); Loading Loading
media/libstagefright/codecs/mpeg2dec/SoftMPEG2.cpp +20 −5 Original line number Diff line number Diff line Loading @@ -245,6 +245,7 @@ status_t SoftMPEG2::setFlushMode() { return UNKNOWN_ERROR; } mWaitForI = true; mIsInFlush = true; return OK; } Loading @@ -257,6 +258,7 @@ status_t SoftMPEG2::initDecoder() { UWORD32 u4_share_disp_buf; mNumCores = GetCPUCoreCount(); mWaitForI = true; /* Initialize number of ref and reorder modes (for MPEG2) */ u4_num_reorder_frames = 16; Loading Loading @@ -448,6 +450,8 @@ status_t SoftMPEG2::reInitDecoder() { void SoftMPEG2::onReset() { SoftVideoDecoderOMXComponent::onReset(); mWaitForI = true; resetDecoder(); resetPlugin(); } Loading Loading @@ -710,11 +714,22 @@ void SoftMPEG2::onQueueFilled(OMX_U32 portIndex) { outHeader->nTimeStamp = mTimeStamps[timeStampIdx]; mTimeStampsValid[timeStampIdx] = false; /* mWaitForI waits for the first I picture. Once made FALSE, it has to remain false till explicitly set to TRUE. */ mWaitForI = mWaitForI && !(IV_I_FRAME == s_dec_op.e_pic_type); if (mWaitForI) { s_dec_op.u4_output_present = false; } else { ALOGV("Output timestamp: %lld, res: %ux%u", (long long)outHeader->nTimeStamp, mWidth, mHeight); DUMP_TO_FILE(mOutFile, outHeader->pBuffer, outHeader->nFilledLen); outInfo->mOwnedByUs = false; outQueue.erase(outQueue.begin()); outInfo = NULL; notifyFillBufferDone(outHeader); outHeader = NULL; } } else { /* If in flush mode and no output is returned by the codec, * then come out of flush mode */ Loading
media/libstagefright/codecs/mpeg2dec/SoftMPEG2.h +1 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ private: // codec. So the codec is switching to decode the new resolution. bool mChangingResolution; bool mFlushNeeded; bool mWaitForI; status_t initDecoder(); status_t deInitDecoder(); Loading