Index: MovieTexture_FFMpeg.cpp =================================================================== --- MovieTexture_FFMpeg.cpp (revision 28313) +++ MovieTexture_FFMpeg.cpp (working copy) @@ -284,6 +284,8 @@ avcodec::AVPacket m_Packet; int m_iCurrentPacketOffset; + float m_fLastFrame; + /* 0 = no EOF * 1 = EOF from ReadPacket * 2 = EOF from ReadPacket and DecodePacket */ @@ -302,6 +304,8 @@ * they exist. */ m_bHadBframes = true; + m_fLastFrame = 0; + Init(); } @@ -334,6 +338,13 @@ /* Read until we get a frame, EOF or error. Return -1 on error, 0 on EOF, 1 if we have a frame. */ int MovieDecoder_FFMpeg::DecodeFrame( float fTargetTime ) { + //hack to filter out stuttering + if(fTargetTime<m_fLastFrame) { + fTargetTime=m_fLastFrame; + } else { + m_fLastFrame=fTargetTime; + } + while( 1 ) { int ret = DecodePacket( fTargetTime );
Index: MovieTexture_FFMpeg.cpp =================================================================== --- MovieTexture_FFMpeg.cpp (revision 28313) +++ MovieTexture_FFMpeg.cpp (working copy) @@ -284,6 +284,8 @@ avcodec::AVPacket m_Packet; int m_iCurrentPacketOffset; + float m_fLastFrame; + /* 0 = no EOF * 1 = EOF from ReadPacket * 2 = EOF from ReadPacket and DecodePacket */ @@ -302,6 +304,8 @@ * they exist. */ m_bHadBframes = true; + m_fLastFrame = 0; + Init(); } @@ -334,6 +338,13 @@ /* Read until we get a frame, EOF or error. Return -1 on error, 0 on EOF, 1 if we have a frame. */ int MovieDecoder_FFMpeg::DecodeFrame( float fTargetTime ) { + //hack to filter out stuttering + if(fTargetTime<m_fLastFrame) { + fTargetTime=m_fLastFrame; + } else { + m_fLastFrame=fTargetTime; + } + while( 1 ) { int ret = DecodePacket( fTargetTime );
|