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

bool Impala::Core::Stream::Lavc::StrategyIgnoringNativeIndex::IsValidSeekTarget ( int  frameNr,
const UInt64 seekPos 
) const [inline, private]

Definition at line 386 of file StrategyIgnoringNativeIndex.h.

References Impala::Core::Stream::Lavc::VideoAccessStrategy::CurrentFrameMatchesFrame(), Impala::Core::Stream::Lavc::VideoAccessStrategy::CurrentFrameToRgb(), Impala::Core::Stream::Lavc::VideoAccessStrategy::DecodeNextValidFrame(), Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Get2(), Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Get3(), Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Get4(), ILOG_DEBUG, ILOG_ERROR, Impala::Core::Stream::Lavc::VideoAccessStrategy::Jump(), Impala::Core::Stream::Lavc::VideoAccessStrategy::mFrames, Impala::Core::Stream::Lavc::VideoAccessStrategy::mPackets, and Impala::Core::Table::Table::Size().

Referenced by FindSeekPosition().

00387     {
00388         PacketTrace trace(10);
00389         static const bool MUST_BE_KEY = true;
00390         if (!Jump(seekPos, AVSEEK_FLAG_BYTE, MUST_BE_KEY, 2, &trace))
00391             return false;
00392 
00393         CurrentFrameToRgb();
00394         if (!CurrentFrameMatchesFrame(frameNr, &trace))
00395             return false;
00396 
00397         UInt64 postReadPos = mPackets->Get4(mFrames->Get2(frameNr));
00398         UInt64 lastPostReadPosOfTrace = trace.Get3(trace.Size() - 1);
00399         if (lastPostReadPosOfTrace <= postReadPos)
00400             return true;
00401 
00402         for (int f = frameNr + 1; f < mFrames->Size(); f++)
00403         {
00404             if (!DecodeNextValidFrame(false, &trace))
00405             {
00406                 ILOG_ERROR("Unexpected: could not find/decode frame " << f);
00407                 return false;
00408             }
00409 
00410             CurrentFrameToRgb();
00411             if (!CurrentFrameMatchesFrame(f, &trace))
00412             {
00413                 ILOG_DEBUG(seekPos << " is not a valid seek target for " <<
00414                     "frame " << frameNr << ", following from a mismatch for " <<
00415                     "frame " << f);
00416                 return false;
00417             }
00418 
00419             postReadPos = mPackets->Get4(mFrames->Get2(f));
00420             lastPostReadPosOfTrace = trace.Get3(trace.Size() - 1);
00421             if (lastPostReadPosOfTrace <= postReadPos)
00422                 break;
00423         }
00424         return true;
00425     }

Here is the call graph for this function:


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