Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

virtual bool Impala::Core::Stream::RgbDataSrcLavc::ReadFrameData (  )  [inline, private, virtual]

Implements Impala::Core::Stream::RgbDataSrcInfo.

Definition at line 393 of file RgbDataSrcLavc.h.

References CheckMD5Hash(), Impala::Core::Stream::Lavc::VideoAccessStrategy::CurrentFrameToRgb(), Impala::Core::Stream::RgbDataSrcInfo::FrameValid(), Impala::Core::Stream::RgbDataSrcInfo::GetSeekableFrame(), ILOG_DEBUG, ILOG_ERROR, mBufferedFrameNr, Impala::Core::Stream::RgbDataSrc::mCurrentFrameNr, Impala::Core::Stream::RgbDataSrc::mFormatName, Impala::Core::Stream::RgbDataSrc::mIndexExists, mLastDecodedFrameNr, Impala::Core::Stream::RgbDataSrc::mTargetFrameNr, mVideoAccessor, ReadToTarget(), Reset(), and SeekFrame().

00394     {
00395         if (mTargetFrameNr == mCurrentFrameNr)
00396             return true;
00397 
00398         if (!FrameValid(mTargetFrameNr) || mTargetFrameNr == mBufferedFrameNr)
00399         {
00400             mCurrentFrameNr = mTargetFrameNr;
00401             return true;
00402         }
00403 
00404         if (mTargetFrameNr < mBufferedFrameNr)
00405             Reset();
00406 
00407         const bool videoSeekable = mIndexExists;
00408         if (videoSeekable)
00409         {
00410             int sFrameNr = GetSeekableFrame(mTargetFrameNr);
00411             // do not use seek just to get to the next frame
00412             if (mBufferedFrameNr < 0 || sFrameNr > mBufferedFrameNr + 1)
00413             //if (sFrameNr > mBufferedFrameNr + 1)
00414             {
00415                 ILOG_DEBUG("Targeting frame " << mTargetFrameNr << 
00416                     " by first seeking to frame " << sFrameNr);
00417                 if (!SeekFrame(sFrameNr))
00418                     return false;
00419                 mLastDecodedFrameNr = mBufferedFrameNr = mCurrentFrameNr = 
00420                     sFrameNr;
00421             }
00422         }
00423 
00424         const bool lastDecodedFrameValid = ReadToTarget();
00425         mCurrentFrameNr = mLastDecodedFrameNr;
00426         if (lastDecodedFrameValid)
00427         {
00428             int result = mVideoAccessor->CurrentFrameToRgb();
00429             mBufferedFrameNr = mCurrentFrameNr;
00430 
00431             if (mFormatName != "asf") // SK: dirty debug fix
00432                 if (!CheckMD5Hash(mBufferedFrameNr))
00433                 {
00434                     ILOG_ERROR("Frame hash failure going to frame " << 
00435                         mTargetFrameNr);
00436                     return false;
00437                 }
00438         }
00439 
00440         return true;
00441     }

Here is the call graph for this function:


Generated on Thu Jan 13 09:20:33 2011 for ImpalaSrc by  doxygen 1.5.1