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

平面设计公司网站建设费用无锡企业网上迁移

平面设计公司网站建设费用,无锡企业网上迁移,wordpress 二级目录安装,论网站建设的重要性文章目录 1、前言2、环境介绍3、步骤4、应用程序编写5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 在查看摄像头类型时,大致可以分为两类:Video Capture 和 Video Capture Multiplanar。 本次应用程序主要针对类型为Video Capture的相机…

文章目录

  • 1、前言
  • 2、环境介绍
  • 3、步骤
  • 4、应用程序编写
  • 5、测试
    • 5.1、编译应用程序
    • 5.2、运行应用程序
  • 6、总结

1、前言

在查看摄像头类型时,大致可以分为两类:Video Capture 和 Video Capture Multiplanar。

本次应用程序主要针对类型为Video Capture的相机。

2、环境介绍

rk3566 + uvc摄像头

3、步骤

应用程序编写主要分为以下几个步骤:

1、打开设备节点。

2、查询设备能力。

3、枚举支持的视频格式。

4、设置格式。

5、请求buffer。

6、buffer入队列。

7、打开相机。

8、buffer出队列。

9、保存图片。

10、buffer重新入队列。

11、关闭相机。

4、应用程序编写

完整的应用程序如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <linux/types.h>          
#include <linux/videodev2.h>
#include <poll.h>
#include <sys/mman.h>
#include <jpeglib.h>
#include <linux/fb.h>#define FRAME_SIZE_X    640
#define FRAME_SIZE_Y    480int main(int argc, char **argv)
{int ret;int fd;struct v4l2_fmtdesc fmtdesc;struct v4l2_frmsizeenum fsenum;void *bufs[32];int fmt_index = 0;int frame_index = 0;int buf_cnt;int i;int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;struct pollfd fds[1];char filename[32];int file_cnt = 0;if (argc != 2){printf("Usage: %s </dev/videoX>\n", argv[0]);return -1;}if (argv[1] == NULL)goto _err;/* 1. open /dev/video* */fd = open(argv[1], O_RDWR);if (fd < 0){printf("can not open %s\n", argv[1]);goto _err;}/* 2. query capability */struct v4l2_capability cap;memset(&cap, 0, sizeof(struct v4l2_capability));if (0 == ioctl(fd, VIDIOC_QUERYCAP, &cap)){        if ((cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == 0) {fprintf(stderr, "Error opening device %s: video capture not supported.\n", argv[1]);goto _ioc_querycap_err;}if(!(cap.capabilities & V4L2_CAP_STREAMING)) {fprintf(stderr, "%s does not support streaming i/o\n", argv[1]);goto _ioc_querycap_err;}}else{printf("can not get capability\n");goto _ioc_querycap_err;}/* 3. enum formt */while (1){fmtdesc.index = fmt_index;  fmtdesc.type  = V4L2_BUF_TYPE_VIDEO_CAPTURE;  if (0 != ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc))break;frame_index = 0;printf("format %s,%d:\n", fmtdesc.description, fmtdesc.pixelformat);while (1){memset(&fsenum, 0, sizeof(struct v4l2_frmsizeenum));fsenum.pixel_format = fmtdesc.pixelformat;fsenum.index = frame_index;/* get framesize */if (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &fsenum) == 0){printf("\t%d: %d x %d\n", frame_index, fsenum.discrete.width, fsenum.discrete.height);}else{break;}frame_index++;}fmt_index++;}/* 4. set formt */struct v4l2_format fmt;memset(&fmt, 0, sizeof(struct v4l2_format));fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.width = FRAME_SIZE_X;fmt.fmt.pix.height = FRAME_SIZE_Y;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;fmt.fmt.pix.field = V4L2_FIELD_ANY;if (0 == ioctl(fd, VIDIOC_S_FMT, &fmt)){printf("the final frame-size has been set : %d x %d\n", fmt.fmt.pix.width, fmt.fmt.pix.height);}else{printf("can not set format\n");goto _ioc_sfmt_err;}/* 5. require buffer */struct v4l2_requestbuffers rb;memset(&rb, 0, sizeof(struct v4l2_requestbuffers));rb.count = 32;rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;rb.memory = V4L2_MEMORY_MMAP;if (0 == ioctl(fd, VIDIOC_REQBUFS, &rb)){buf_cnt = rb.count;for(i = 0; i < rb.count; i++) {struct v4l2_buffer buf;memset(&buf, 0, sizeof(struct v4l2_buffer));buf.index = i;buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;if (0 == ioctl(fd, VIDIOC_QUERYBUF, &buf)){/* mmap */bufs[i] = mmap(0, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset);if(bufs[i] == MAP_FAILED) {printf("Unable to map buffer");goto _err;}}else{printf("can not query buffer\n");goto _err;}            }}else{printf("can not request buffers\n");goto _ioc_reqbufs_err;}/* 6. queue buffer */for(i = 0; i < buf_cnt; ++i) {struct v4l2_buffer buf;memset(&buf, 0, sizeof(struct v4l2_buffer));buf.index = i;buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;if (0 != ioctl(fd, VIDIOC_QBUF, &buf)){perror("Unable to queue buffer");goto _ioc_qbuf_err;}}/* start camera */if (0 != ioctl(fd, VIDIOC_STREAMON, &type)){printf("Unable to start capture\n");goto _err;}printf("\nstart camera ...\n");while (1){/* poll */memset(fds, 0, sizeof(fds));fds[0].fd = fd;fds[0].events = POLLIN;if (1 == poll(fds, 1, -1)){/* dequeue buffer */struct v4l2_buffer buf;memset(&buf, 0, sizeof(struct v4l2_buffer));buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;if (0 != ioctl(fd, VIDIOC_DQBUF, &buf)){printf("Unable to dequeue buffer\n");goto _ioc_dqbuf_err;}/* save as .jpg */sprintf(filename, "video_raw_data_%04d.jpg", file_cnt++);int fd_file = open(filename, O_RDWR | O_CREAT, 0666);if (fd_file < 0){printf("can not create file : %s\n", filename);}printf("capture to %s\n", filename);write(fd_file, bufs[buf.index], buf.bytesused);close(fd_file);/* queue buffer */if (0 != ioctl(fd, VIDIOC_QBUF, &buf)){printf("Unable to queue buffer");goto _ioc_qbuf_err;}}}/* close camera */if (0 != ioctl(fd, VIDIOC_STREAMOFF, &type)){printf("Unable to stop capture\n");goto _ioc_streamoff_err;}close(fd);return 0;_ioc_qbuf_err:
_ioc_reqbufs_err:
_ioc_sfmt_err:
_ioc_querycap_err:
_ioc_streamoff_err:
_ioc_dqbuf_err:
_err:return -1;
}

5、测试

5.1、编译应用程序

如果你使用的buildroot系统,需要交叉编译。

这里测试所使用的板子跑的是ubuntu,执行如下命令直接编译:

sudo gcc -o uvc_to_jpg uvc_to_jpg.c 

5.2、运行应用程序

sudo ./uvc_to_jpg /dev/video10

查看某一张jpg图片:

6、总结

源码gitee仓库:

仓库主页:
https://gitee.com/cattle_l/v4l2_app.git
直接拉取:
git clone https://gitee.com/cattle_l/v4l2_app.git

文章转载自:

http://g1xufdOi.dtjwm.cn
http://rrku7PvL.dtjwm.cn
http://eMrwCLpA.dtjwm.cn
http://krexbt9Q.dtjwm.cn
http://6dE8xaog.dtjwm.cn
http://KwjRKnyv.dtjwm.cn
http://gYk6RHlJ.dtjwm.cn
http://1YEfeTJT.dtjwm.cn
http://0PTInyND.dtjwm.cn
http://syh2VNNN.dtjwm.cn
http://tJBf0jOD.dtjwm.cn
http://Trn6qWQn.dtjwm.cn
http://AZdr5eNJ.dtjwm.cn
http://0jopmdHX.dtjwm.cn
http://VbEpduxy.dtjwm.cn
http://6kf7kBRg.dtjwm.cn
http://7u8aEczF.dtjwm.cn
http://lkxFWjWT.dtjwm.cn
http://BoO57Wxe.dtjwm.cn
http://Y06bpXUX.dtjwm.cn
http://DLHdqw9P.dtjwm.cn
http://IC9GTVUn.dtjwm.cn
http://QoqnB6pm.dtjwm.cn
http://KQZCcCMr.dtjwm.cn
http://3Aqu518L.dtjwm.cn
http://2uIy0X1N.dtjwm.cn
http://gHcDrN1T.dtjwm.cn
http://2O6fjWqf.dtjwm.cn
http://AHFkghNo.dtjwm.cn
http://94oi30jK.dtjwm.cn
http://www.dtcms.com/wzjs/737926.html

相关文章:

  • pc端网站开发工具个人网站命名的要求
  • 旅游网站怎么建设爱站工具包的模块有哪些
  • 网站开发公司首页设计的素材网站有哪些
  • wordpress自动存图佛山网站的优化
  • 网站右下角图片广告代码页面设计理念
  • 站长工具查询视频网站开发与设计开题报告
  • 邮箱域名可以做网站吗婚纱网站建设规划书
  • 有什么网站是做名片印刷的wordpress 修改目录id
  • 手机网站被禁止访问怎么设置打开wordpress 微信商城
  • 温州网站建设的公司学网站开发好不好
  • 建设网站的原则商贸有限公司网站案例
  • 好发网站建设搜狐综合小时报2022113011
  • jsp网站开发大作业北京朝阳网站
  • html静态页面怎么放在网站上三网合一网站远吗
  • 网站建设运用软件天津公司网站建设费
  • 郑州市东区建设环保局官方网站网站模板怎么做的
  • 郑州网站定制外包seo网站推广佛山
  • 二手交易网站开发可参考文献网站建设页面设计图片
  • 怎样做自己的小程序wordpress 优化插件
  • 代码添加在网站的什么位置一键logo设计签名
  • 邮箱网站怎么做淘宝购物返利网站开发
  • 网络推广做哪个网站比较好seo外贸仿牌网站换域名
  • 做网站的背景怎么做湘潭网站建设多少钱
  • 中英文网站栏目修改绍兴专业网站建设
  • 公司做网站需要备案吗云虚拟主机wordpress
  • 如何给网站增加外链亚马逊热销产品类目
  • 青岛外贸网站建设哪家好学校网站建设的重要性
  • 中药材网站开发湖州做网站优化
  • 微信分享接口网站开发 php做网站关键字
  • 单页淘宝客网站2014年行吗lnmp下的wordpress