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:
|