当前位置: 首页 > wzjs >正文

做网站用什么软件语言seo任务平台

做网站用什么软件语言,seo任务平台,做网站商城必须要买空间吗,创意设计app树莓派学习专题<11>:使用V4L2驱动获取摄像头数据--启动/停止数据流,数据捕获,缓存释放 1. 启动和停止数据流2. 捕获数据3. 释放缓存 1. 启动和停止数据流 使用命令 VIDIOC_STREAMON 启动摄像头数据流,使用…

树莓派学习专题<11>:使用V4L2驱动获取摄像头数据--启动/停止数据流,数据捕获,缓存释放

  • 1. 启动和停止数据流
  • 2. 捕获数据
  • 3. 释放缓存

1. 启动和停止数据流

使用命令 VIDIOC_STREAMON 启动摄像头数据流,使用命令 VIDIOC_STREAMOFF 停止摄像头数据流。
这两条命令的定义是:

#define VIDIOC_STREAMON		 _IOW('V', 18, int)
#define VIDIOC_STREAMOFF	 _IOW('V', 19, int)

这两条命令都需要一个 enum v4l2_buf_type 类型的参数作为入参数。参数内容固定填写 V4L2_BUF_TYPE_VIDEO_CAPTURE
代码如下:

/*******************************************************************************
- Function    : __StartStream
- Description : 本函数启动数据接收。
- Input       : VOID
- Output      : NULL
- Return      : VOID
- Others      :
*******************************************************************************/
void __StartStream(void)
{enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;if(-1 == ioctl(g_iFDVideo, VIDIOC_STREAMON, &type)){printf("Start stream failed.\n") ;exit(-1) ;}return ;
}/*******************************************************************************
- Function    : __StopStream
- Description : 本函数停止数据接收。
- Input       : VOID
- Output      : NULL
- Return      : VOID
- Others      :
*******************************************************************************/
void __StopStream(void)
{enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;if(-1 == ioctl(g_iFDVideo, VIDIOC_STREAMOFF, &type)){printf("Stop stream failed.\n") ;exit(-1) ;}return ;
}

2. 捕获数据

代码如下:

/*******************************************************************************
- Function    : __ReadFrame
- Description : 本函数读取摄像头数据并写入到文件。
- Input       : VOID
- Output      : NULL
- Return      : VOID
- Others      :
*******************************************************************************/
void __ReadFrame(void)
{struct v4l2_buffer stBuf;memset(&stBuf, 0, sizeof(stBuf)) ;stBuf.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;stBuf.memory = V4L2_MEMORY_MMAP;if(-1 == ioctl(g_iFDVideo, VIDIOC_DQBUF, &stBuf)){printf("De-queue buffer failed.\n") ;exit(-1) ;}#if 1 == WRITE_TO_FILEif(-1 == write(g_iFDStore, g_pstBufDesc[stBuf.index].pvBufPtr, stBuf.bytesused)){printf("Write camera data failed.\n") ;exit(-1) ;}
#endifif(-1 == ioctl(g_iFDVideo, VIDIOC_QBUF, &stBuf)){printf("Re-Queue buffer failed.\n") ;exit(-1) ;}return ;
}/*******************************************************************************
- Function    : __CaptureFrame
- Description : 本函数捕获帧数据。
- Input       : VOID
- Output      : NULL
- Return      : VOID
- Others      :
*******************************************************************************/
void __CaptureFrame(void)
{struct timeval stTimeVal ;fd_set         stFDRead ;int            iRetVal ;stTimeVal.tv_usec = 0 ;stTimeVal.tv_sec  = 2 ; FD_ZERO(&stFDRead) ;FD_SET(g_iFDVideo, &stFDRead) ;iRetVal = select(g_iFDVideo + 1, &stFDRead, NULL, NULL, &stTimeVal) ;if(-1 == iRetVal){perror("select") ;exit(-1) ;}else if(0 == iRetVal){printf("timeout.\n") ;exit(-1) ;}__ReadFrame() ;return ;
}

主函数中,首先调用函数 __StartStream 来启动摄像头输出数据的接收。而后调用函数 __CaptureFrame 来捕获一帧数据。使用 select函数监视摄像头文件描述符的读操作。一旦监视到,则调用 __ReadFrame 函数来获取数据。

对于V4L2驱动,使用 VIDIOC_DQBUF命令来从缓存队列中取出一块就绪的缓存。该命令的定义如下:

#define VIDIOC_DQBUF		_IOWR('V', 17, struct v4l2_buffer)

命令需要一个struct v4l2_buffer类型的参数。
结构体中,index 字段指示了当前是那一块缓冲。bytesused 字段指示了缓冲中有多少有效数据量。对于非编码格式,如YUV或RGB系列格式,应该是整个缓冲都用了。使用index字段可以索引到对应缓存块在用户空间中的地址,从而获取数据。
从队列中取出缓存块后,可对缓存块中数据进行处理,例如写入文件,或者编码等。操作完毕后,还需要将缓存块重新放入到队列中。该操作使用 VIDIOC_QBUF 命令执行。

#define VIDIOC_QBUF		_IOWR('V', 15, struct v4l2_buffer)

3. 释放缓存

在使用 VIDIOC_STREAMOFF 命令停止摄像头数据流后,退出程序之前,还需要释放缓存。

/*******************************************************************************
- Function    : __UnmapBuffer
- Description : 本函数撤除缓冲区映射。
- Input       : VOID
- Output      : NULL
- Return      : VOID
- Others      :
*******************************************************************************/
void __UnmapBuffer(void)
{int iLoop ;for(iLoop = 0 ; iLoop < 4 ; iLoop++) {munmap(g_pstBufDesc[iLoop].pvBufPtr, g_pstBufDesc[iLoop].szBufSize) ;}free(g_pstBufDesc) ;return ;
}

这里包括解除 mmap 映射关系,以及释放描述符。


http://www.dtcms.com/wzjs/55180.html

相关文章:

  • 上海网站制作是什么软件培训机构哪家好
  • 广州网站建设外包成都关键词优化平台
  • 怎么让织梦网站适合手机日本比分算1:1
  • 南沙网站建设价格引流推广平台软件
  • 美国一级a做爰片免费网站 视频教程广州最新疫情
  • 经营网站需要注意什么手机免费建站app
  • wordpress建站教程阿里云成都seo
  • 做网站seo优化的公司南昌seo优化
  • 怎么做企业网站优化需要多少钱成都网站seo技术
  • 新乡seo公司seo网络推广培训班
  • 阿里云服务器上如何做网站软文范例大全
  • 网站做短信接口具体方法重庆今天刚刚发生的重大新闻
  • 做网站推广的公司好做吗整站优化和单词
  • 建站网站免费国外广告联盟平台
  • 湖北省住房城乡建设厅网站查什么是网站
  • 免费b站软件下载数据分析软件哪个最好用
  • 母了猜猜看游戏做网站百度域名提交收录网址
  • 品牌网站建设平台百度广告搜索引擎
  • 宣传类的网站有哪些引流推广网站平台
  • 如何 网站收录seo免费入门教程
  • 昆明网站建设优化网站推广论坛
  • 做海报有什么参考的网站免费优化网站
  • 做网站需要那些东西关键词排名优化方法
  • 新疆建设兵团纪委监察部网站腾讯新闻发布平台
  • 手机建行网站中国四大软件外包公司
  • soho在哪里做网站刷百度关键词排名优化
  • 纯css做的响应式网站南京网站制作
  • 阿里妈妈网站建设不完整seo是指什么意思
  • wordpress zpseo如何优化网站推广
  • 聊城pc网站建设软件cnn头条新闻