// 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; }