Definition at line 412 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(). 00413 { 00414 if (mKeyframes == 0) 00415 { 00416 ILOG_ERROR("DoWalkKeyframes: no keyframes loaded"); 00417 return; 00418 } 00419 if (startFile >= mVideoSet->NrFiles()) 00420 { 00421 ILOG_ERROR("DoWalkKeyframes: startFile out of range"); 00422 return; 00423 } 00424 if (numberFiles == -1) 00425 numberFiles = mVideoSet->NrFiles(); 00426 if (startFile + numberFiles >= mVideoSet->NrFiles()) 00427 numberFiles = mVideoSet->NrFiles() - startFile; 00428 00429 for (size_t l=0 ; l<mListeners.size() ; l++) 00430 { 00431 mListeners[l]->HandleNewWalk(mVideoSet); 00432 mListeners[l]->HandleNewWalk(mVideoSet, "Keyframes"); 00433 mListeners[l]->HandleNewWalk(mVideoSet, mKeyframes, mKeyframeMask); 00434 if (mSegmentation) 00435 mListeners[l]->HandleNewWalk(mVideoSet, mSegmentation); 00436 } 00437 ILOG_DEBUG("fileId range = " << startFile << " - " 00438 << startFile+numberFiles); 00439 for (int fileId=startFile ; fileId<startFile+numberFiles ; fileId++) 00440 { 00441 ILOG_DEBUG("fileId = " << fileId); 00442 ILOG_NDC_PUSH("video " << fileId); 00443 Stream::RgbDataSrc* src = 0; 00444 if (mConfig.keyframeSrc) 00445 src = new RgbDataSrcKeyframes(mVideoSet, mKeyframes, fileId); 00446 else if (!mConfig.virtualWalk) 00447 src = mVideoSet->GetVideo(fileId); 00448 for (size_t l=0 ; l<mListeners.size() ; l++) 00449 mListeners[l]->HandleNewFile(mVideoSet, fileId, src); 00450 int numberKeyframes = mConfig.numberKeyframes; 00451 int startK = mKeyframes->GetFirstKeyframeVideo(fileId); 00452 int numberK = mKeyframes->GetNrKeyframesVideo(fileId); 00453 int lastK = startK + numberK; 00454 ILOG_INFO("keyframes are " << startK << " - " << lastK << " (nr = " 00455 << numberK << ")"); 00456 if (mConfig.startKeyframe < numberK) 00457 startK += mConfig.startKeyframe; 00458 if (numberKeyframes == -1) 00459 numberKeyframes = numberK; 00460 //if (mConfig.startKeyframe + numberKeyframes <= numberK) 00461 // numberK = numberKeyframes; 00462 //for (int k=startK ; k<startK+numberK ; k++) 00463 bool done = false; 00464 int k = startK; 00465 ILOG_DEBUG("processing " << startK << " - " << lastK << " (max " 00466 << numberKeyframes << ")"); 00467 while (!done) 00468 { 00469 if ((!mKeyframeMask) || mKeyframeMask[k]) 00470 { 00471 ILOG_DEBUG("keyframe " << k); 00472 if (src) 00473 { 00474 ILOG_DEBUG("GotoFrame " << mKeyframes->GetFrameNr(k)); 00475 src->GotoFrame(mKeyframes->GetFrameNr(k)); 00476 ILOG_DEBUG("src at " << src->FrameNr()); 00477 } 00478 for (size_t l=0 ; l<mListeners.size() ; l++) 00479 mListeners[l]->HandleNewFrame(mVideoSet, fileId, src); 00480 if (--numberKeyframes <= 0) 00481 done = true; 00482 } 00483 if (++k >= lastK) 00484 done = true; 00485 } 00486 for (size_t l=0 ; l<mListeners.size() ; l++) 00487 mListeners[l]->HandleDoneFile(mVideoSet, fileId, src); 00488 if (src) 00489 delete src; 00490 ILOG_NDC_POP; 00491 } 00492 00493 for (size_t l=0 ; l<mListeners.size() ; l++) 00494 mListeners[l]->HandleDoneWalk(mVideoSet); 00495 }
Here is the call graph for this function:
|