예제 #1
0
// GrabFrameCompleteProc (QuicktimeLiveImageStream)
ComponentResult QuicktimeLiveImageStream::grabFrameCompleteProc(SGChannel sgChan, short nBufferNum, Boolean *pbDone, long lRefCon)
{
   ComponentResult err = noErr;
  
   // call the default grab-complete function
   err = SGGrabFrameComplete(sgChan,      // channel reference
                             nBufferNum,  // buffer identifier, provided for you
                             pbDone);     // pointer to a boolean, has the frame been completely captured? provided for you
   
   static unsigned int fps_counter = 0;
   static osg::Timer_t start, finish;

   if (fps_counter == 0)
       start = osg::Timer::instance()->tick();
   // if the frame is done, make sure the Image is replaced
   if (*pbDone && (sgChan == m_gVideoChannel))
   {
        dirty();
        ++fps_counter;
        if (fps_counter == 100)
        {
            finish = osg::Timer::instance()->tick();
            double dur = osg::Timer::instance()->delta_s(start, finish);
            double fps = 100.0 / dur;
            OSG_NOTICE << "Executed 100 frames in " << dur << " seconds : ~" << fps << " fps" << std::endl;
            fps_counter = 0;
        }
   }
  
   return err;
}
static ComponentResult  frameIsGrabbedProc(SGChannel sgChan, short nBufferNum, Boolean *pbDone, long lRefCon){

 	ComponentResult err = SGGrabFrameComplete( sgChan, nBufferNum, pbDone );
	
	bool * havePixChanged = (bool *)lRefCon;
	*havePixChanged = true;

	return err;
}