char* CCameraDS::QueryFrame()
{
long evCode, size = 0; #if CALLBACKMODE
static double lastSampleTime=0;
if( lastSampleTime == cbInfo.dblSampleTime)
return NULL;
if(cbInfo.lBufferSize == 0)
return NULL;
if ( m_nBufferSize != cbInfo.lBufferSize)
{
if (m_pFrame)
{
free(m_pFrame);
}
m_nBufferSize = cbInfo.lBufferSize;
m_pFrame = (char*)malloc(m_nBufferSize);//cvCreateImage(cvSize(m_nWidth, m_nHeight), IPL_DEPTH_8U, 3);
}
lastSampleTime = cbInfo.dblSampleTime;
m_pFrame2 = (char*)cbInfo.pBuffer;
#else
m_pMediaControl->Run();
m_pMediaEvent->WaitForCompletion(INFINITE, &evCode);
m_pSampleGrabber->GetCurrentBuffer(&size, NULL);
if(size == 0)
return NULL;
//if the buffer size changed
if (size != m_nBufferSize)
{
if (m_pFrame)
{
free(m_pFrame);
}
if (m_pFrame2)
{
free(m_pFrame2);
}
m_nBufferSize = size;
m_pFrame = (char*)malloc(m_nWidth*m_nHeight*3);//cvCreateImage(cvSize(m_nWidth, m_nHeight), IPL_DEPTH_8U, 3);
m_pFrame2 = (char*)malloc(m_nWidth*m_nHeight*3);
} m_pSampleGrabber->GetCurrentBuffer(&m_nBufferSize, (long*)m_pFrame2);
//cvFlip(m_pFrame);
#endif
for(int i=0;i<m_nHeight;i++)
memcpy(m_pFrame+m_nWidth*3*i,m_pFrame2+m_nWidth*3*(m_nHeight-1-i),m_nWidth*3); return m_pFrame;
}

1.缓冲区模式

#if !CALLBACKMODE
m_pSampleGrabber->SetBufferSamples(TRUE);
m_pSampleGrabber->SetOneShot(TRUE);
#endif

只能设置SetOneShot为TRUE, 因为使用SetPositions 函数始终返回 E_NOTIMPL:Method is not supported.如果为false,

WaitForCompletion(INFINITE, &evCode)函数会一直等待下去。

2.回调模式

回调模式每采到一直就会进入回调函数,可以在回调函数里面处理采到的数据。

#if CALLBACKMODE
m_pSampleGrabber->SetBufferSamples(FALSE);
m_pSampleGrabber->SetOneShot(FALSE);
// Set the callback, so we can grab the one sample
//
CB.Width = m_nWidth;
CB.Height = m_nHeight;
hr = m_pSampleGrabber->SetCallback( &CB, 1 );
m_pMediaControl->Run();
#endif

只用Run()一次即可。如果SetOneShot(TRUE)的话,也可以每请求一帧Run()一次,然后WaitForCompletion,再从回调函数的buffer中取出数据,这种其实和缓冲区模式一样,只不过缓冲区变成了在回调函数中。

如果摄像头采集帧率为30,SetOneShot(FALSE)回调模式,就一秒进去回调函数30次。而OneShot模式会取到重复的帧。

最新文章

  1. Java优先队列
  2. python遍历一个网段的ip地址
  3. android修改debug keystore文件使之和正式keystore sha1一致
  4. [Android] adb shell dumpsys的使用
  5. php中curl模拟浏览器来传输数据
  6. [数据库操作]Java中的JDBC的使用方法.
  7. paip.最好的脚本语言node js 环境搭建连接mysql
  8. CSS计数器的趣味时光
  9. Turtle Online:致力于打造超接地气的PC前端架构,组件+API,快速搭建前端开发
  10. python核心编程学习记录之Python对象
  11. WinEdit7 破解方法
  12. SmartQQ二维码登陆接口分析
  13. Scala很难!
  14. bash下几个替换运算符的区分
  15. 2.3 DHC REST
  16. 粒子滤波(PF:Particle Filter)
  17. 从css 3d说到空间坐标轴
  18. pycharm导入本地py文件时,模块下方出现红色波浪线时如何解决
  19. Jmeter+Ant+Jenkins搭建持续集成的接口测试(推荐 Mark)
  20. 【转】Java工程师成神之路

热门文章

  1. 浅谈CSS样式png、gif、jpg图片优化的方法
  2. 2016年10月17日 星期一 --出埃及记 Exodus 19:1
  3. Linux按照CPU、内存、磁盘IO、网络性能监测
  4. C#For循环
  5. Bson
  6. sencha touch建立新项目
  7. ALV详解:OO ALV
  8. STORM_0004_windows下zookeeper的伪集群的搭建
  9. js文件的装载和执行
  10. iBATIS sql(XML)中的大于、小于、like等符号写法