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

void Impala::Core::Stream::Lavc::StrategyIgnoringNativeIndex::ProcessPacket ( int  packetNr,
int *  frameCount,
bool  validating 
) [inline, private]

Definition at line 258 of file StrategyIgnoringNativeIndex.h.

References Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Add(), Impala::Core::Stream::Lavc::VideoAccessObject::CurrentFilePosition(), Impala::Core::Stream::Lavc::VideoAccessObject::CurrentPacketFlags(), Impala::Core::Stream::Lavc::VideoAccessObject::CurrentPacketIsVideo(), Impala::Core::Stream::Lavc::VideoAccessObject::CurrentPacketSize(), Impala::Core::Stream::Lavc::VideoAccessObject::DecodeFrame(), Impala::Core::Stream::Lavc::VideoAccessObject::FrameIsKey(), Impala::Core::Stream::Lavc::VideoAccessObject::FrameType(), 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::mBadFrameCount, Impala::Core::Stream::Lavc::VideoAccessStrategy::mLeadingBadFrameCount, Impala::Core::Stream::Lavc::VideoAccessStrategy::mPackets, Impala::Core::Stream::Lavc::VideoAccessStrategy::mVao, and Impala::Core::Stream::Lavc::VideoAccessStrategy::ProcessFrame().

Referenced by ScanOnePacket().

00259     {
00260         const int size = mVao->CurrentPacketSize();
00261         const int flags = mVao->CurrentPacketFlags();
00262         const UInt64 posAfterRead = mVao->CurrentFilePosition();
00263 
00264         if (validating)
00265         {
00266             if (mPackets->Get2(packetNr) != size || 
00267                 mPackets->Get3(packetNr) != flags ||
00268                 mPackets->Get4(packetNr) != posAfterRead)
00269             {
00270                 ILOG_ERROR("Packet " << packetNr << " not reproducable");
00271                 return;
00272             }
00273         }
00274         else
00275             mPackets->Add(packetNr, size, flags, posAfterRead);
00276 
00277         if (mVao->CurrentPacketIsVideo()) 
00278         {
00279             int frameDecoded = 0;
00280             const int len = mVao->DecodeFrame(&frameDecoded);
00281 
00282             // libavcodec's packet flags usage is not clear,  
00283             // but this appeared to work out fine: 
00284             const bool ignorePacket = (frameDecoded <= 0) && (flags != 0);
00285 
00286             if (!ignorePacket)
00287             {
00288                 const bool frameValid = (len >= 0 && frameDecoded > 0);
00289                 bool frameIsKey = false;
00290                 if (frameValid)
00291                 {
00292                     frameIsKey = (mVao->FrameType() == 'I' && mVao->FrameIsKey());
00293                 }
00294                 else
00295                 {
00296                     ILOG_DEBUG("DecodeFrame() failed (" << frameDecoded << 
00297                         ") and returned: " << len );
00298                     mBadFrameCount++;
00299                     if (mBadFrameCount >= *frameCount)
00300                         mLeadingBadFrameCount++;
00301                 }
00302 
00303                 const int frameNr = (*frameCount)++;
00304                 ProcessFrame(frameValid, frameIsKey, frameNr, validating);
00305             }
00306         }
00307     }

Here is the call graph for this function:


Generated on Fri Mar 19 11:18:12 2010 for ImpalaSrc by  doxygen 1.5.1