Attempt a jump to the specified frame using the specified index, and evaluate whether the jump was successfull (i.e. frame accurate). Definition at line 680 of file VideoAccessStrategy.h. References CurrentFrameMatchesFrame(), Impala::Core::Stream::Lavc::VideoAccessObject::CurrentFrameToRgb(), GetJumpFlags(), Impala::Core::Stream::Lavc::VideoIndex::GetSeekInfo(), ILOG_DEBUG, Impala::Core::Stream::Lavc::VideoIndex::IsSeekable(), Jump(), mVao, NextFrameMatchesFrame(), and NrOfFrames(). Referenced by IndexValidTraversingBackwards(), and IndexValidTraversingForwards(). 00681 { 00682 int seekableFrame = -1; 00683 UInt64 seekTarget = -1; 00684 videoIndex.GetSeekInfo(frameNr, &seekableFrame, &seekTarget); 00685 static const bool MUST_BE_KEY = true; 00686 const int flushMode = 2; // flush (if applies) after the jump 00687 Jump(seekTarget, GetJumpFlags(), MUST_BE_KEY, flushMode); 00688 mVao->CurrentFrameToRgb(); 00689 if (!CurrentFrameMatchesFrame(seekableFrame)) 00690 { 00691 ILOG_DEBUG("Index failed for (seekable) frame " << frameNr); 00692 return false; 00693 } 00694 ILOG_DEBUG("Jump validated for (seekable) frame " << frameNr); 00695 00696 // now read sequentially some frames and validate these as well 00697 bool includedOneSeekable = false; 00698 while (++frameNr < NrOfFrames()) 00699 { 00700 if (videoIndex.IsSeekable(frameNr)) 00701 if (includedOneSeekable) 00702 break; 00703 else 00704 includedOneSeekable = true; 00705 00706 if (!NextFrameMatchesFrame(frameNr, videoIndex)) 00707 return false; 00708 } 00709 00710 return true; 00711 }
Here is the call graph for this function:
|