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

void Impala::Core::VideoSet::Walker::DoWalkKeyframes ( int  startFile,
int  numberFiles 
) [inline]

Definition at line 479 of file Walker.h.

References Impala::Core::Stream::RgbDataSrc::FrameNr(), Impala::Core::Stream::RgbDataSrc::GotoFrame(), ILOG_DEBUG, ILOG_ERROR, ILOG_INFO, ILOG_NDC_POP, and ILOG_NDC_PUSH.

Referenced by Impala::Application::VidSet::mainVidSet().

00480     {
00481         if (mKeyframes == 0)
00482         {
00483             ILOG_ERROR("DoWalkKeyframes: no keyframes loaded");
00484             return;
00485         }
00486         if (startFile >= mVideoSet->NrFiles())
00487         {
00488             ILOG_ERROR("DoWalkKeyframes: startFile out of range");
00489             return;
00490         }
00491         if (numberFiles == -1)
00492             numberFiles = mVideoSet->NrFiles();
00493         if (startFile + numberFiles >= mVideoSet->NrFiles())
00494             numberFiles = mVideoSet->NrFiles() - startFile;
00495 
00496         for (size_t l=0 ; l<mListeners.size() ; l++)
00497         {
00498             mListeners[l]->HandleNewWalk(mVideoSet);
00499             mListeners[l]->HandleNewWalk(mVideoSet, "Keyframes");
00500             mListeners[l]->HandleNewWalk(mVideoSet, mKeyframes, mKeyframeMask);
00501             if (mSegmentation)
00502                 mListeners[l]->HandleNewWalk(mVideoSet, mSegmentation);
00503         }
00504         ILOG_DEBUG("fileId range = " << startFile << " - "
00505                    << startFile+numberFiles);
00506         for (int fileId=startFile ; fileId<startFile+numberFiles ; fileId++)
00507         {
00508             ILOG_DEBUG("fileId = " << fileId);
00509             ILOG_NDC_PUSH("video " << fileId);
00510             Stream::RgbDataSrc* src = 0;
00511             if (mConfig.keyframeSrc)
00512                 src = new RgbDataSrcKeyframes(mVideoSet, mKeyframes, fileId);
00513             else if (!mConfig.virtualWalk)
00514                 src = mVideoSet->GetVideo(fileId);
00515             for (size_t l=0 ; l<mListeners.size() ; l++)
00516                 mListeners[l]->HandleNewFile(mVideoSet, fileId, src);
00517             int numberKeyframes = mConfig.numberKeyframes;
00518             int startK = mKeyframes->GetFirstKeyframeVideo(fileId);
00519             int numberK = mKeyframes->GetNrKeyframesVideo(fileId);
00520             int lastK = startK + numberK;
00521             ILOG_INFO("keyframes are " << startK << " - " << lastK << " (nr = "
00522                       << numberK << ")");
00523             if (mConfig.startKeyframe < numberK)
00524                 startK += mConfig.startKeyframe;
00525             if (numberKeyframes == -1)
00526                 numberKeyframes = numberK;
00527             //if (mConfig.startKeyframe + numberKeyframes <= numberK)
00528             //    numberK = numberKeyframes;
00529             //for (int k=startK ; k<startK+numberK ; k++)
00530             bool done = false;
00531             int k = startK;
00532             ILOG_DEBUG("processing " << startK << " - " << lastK << " (max "
00533                       << numberKeyframes << ")");
00534             while (!done)
00535             {
00536                 if ((!mKeyframeMask) || mKeyframeMask[k])
00537                 {
00538                     ILOG_DEBUG("keyframe " << k);
00539                     if (src)
00540                     {
00541                         ILOG_DEBUG("GotoFrame " << mKeyframes->GetFrameNr(k));
00542                         src->GotoFrame(mKeyframes->GetFrameNr(k));
00543                         ILOG_DEBUG("src at " << src->FrameNr());
00544                     }
00545                     for (size_t l=0 ; l<mListeners.size() ; l++)
00546                         mListeners[l]->HandleNewFrame(mVideoSet, fileId, src);
00547                     if (--numberKeyframes <= 0)
00548                         done = true;
00549                 }
00550                 if (++k >= lastK)
00551                     done = true;
00552             }
00553             for (size_t l=0 ; l<mListeners.size() ; l++)
00554                 mListeners[l]->HandleDoneFile(mVideoSet, fileId, src);
00555             if (src)
00556                 delete src;
00557             ILOG_NDC_POP;
00558         }
00559 
00560         for (size_t l=0 ; l<mListeners.size() ; l++)
00561             mListeners[l]->HandleDoneWalk(mVideoSet);
00562     }

Here is the call graph for this function:


Generated on Fri Mar 19 11:33:42 2010 for ImpalaSrc by  doxygen 1.5.1