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:
|