资源简介
友善tiny 4412上面打开USB摄像头,并获得数据。可以直接在tiny 4412上面进行使用。
代码片段和文件信息
#include
#include
#include
#include
#include /* getopt_long() */
#include /* low-level i/o */
#include
#include
#include
#include
#include
#include
#include
#include
#include /* for videodev2.h */
#include
#define CLEAR(x) memset (&(x) 0 sizeof (x))
typedef enum {
IO_METHOD_READ
IO_METHOD_MMAP
IO_METHOD_USERPTR
} io_method;
struct buffer {
void * start;
size_t length;
};
static char * dev_name = NULL;
static io_method io = IO_METHOD_MMAP;
static int fd = -1;
struct buffer * buffers = NULL;
static unsigned int n_buffers = 0;
static int WIDTH = 320;
static int HEIGHT = 240;
static void errno_exit (const char * s)
{
fprintf (stderr “%s error %d %s\n“s errno strerror (errno));
exit (EXIT_FAILURE);
}
static int xioctl (int fdint requestvoid * arg)
{
int r;
do r = ioctl (fd request arg);
while (-1 == r && EINTR == errno);
return r;
}
static void process_image (const void * p)
{
fputc (‘-‘ stdout);
fflush (stdout);
}
static int read_frame (void)
{
struct v4l2_buffer buf;
unsigned int i;
switch (io) {
case IO_METHOD_READ:
if (-1 == read (fd buffers[0].start buffers[0].length)) {
switch (errno) {
case EAGAIN:
return 0;
case EIO:
/* Could ignore EIO see spec. */
/* fall through */
default:
errno_exit (“read“);
}
}
process_image (buffers[0].start);
break;
case IO_METHOD_MMAP:
CLEAR (buf);
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
if (-1 == xioctl (fd VIDIOC_DQBUF &buf)) {
switch (errno) {
case EAGAIN:
return 0;
case EIO:
/* Could ignore EIO see spec. */
/* fall through */
default:
errno_exit (“VIDIOC_DQBUF“);
}
}
assert (buf.index < n_buffers);
process_image (buffers[buf.index].start);
if (-1 == xioctl (fd VIDIOC_QBUF &buf))
errno_exit (“VIDIOC_QBUF“);
break;
case IO_METHOD_USERPTR:
CLEAR (buf);
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_USERPTR;
if (-1 == xioctl (fd VIDIOC_DQBUF &buf)) {
switch (errno) {
case EAGAIN:
return 0;
case EIO:
/* Could ignore EIO see spec. */
/* fall through */
default:
errno_exit (“VIDIOC_DQBUF“);
}
}
for (i = 0; i < n_buffers; ++i)
if (buf.m.userptr == (unsigned long) buffers[i].start && buf.length == buffers[i].length)
break;
assert (i < n_buffers);
process_image ((void *) buf.m.userptr);
if (-1 == xioctl (fd VIDIOC_QBUF &buf))
errno_exit (“VIDIOC_QBUF“);
break;
}
return 1;
}
static void mainloop (void)
{
unsigned int count;
count = 1000;
while (count-- > 0) {
for (;;) {
fd_set fds;
struct timeval tv;
int r;
FD_ZERO (&fds);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-01-03 11:39 my_v4l2\
文件 205 2014-01-03 11:38 my_v4l2\buildarm.sh
文件 203 2014-01-03 11:38 my_v4l2\buildhost.sh
文件 12261 2014-01-03 11:38 my_v4l2\camera.c
文件 114 2014-01-03 11:38 my_v4l2\main.cpp
文件 4775 2014-01-03 11:38 my_v4l2\main_form.cpp
文件 419 2014-01-03 11:38 my_v4l2\main_form.h
文件 691 2014-01-03 11:38 my_v4l2\main_form_ba
文件 218 2014-01-03 11:38 my_v4l2\myv4l2.desktop
文件 2061 2014-01-03 11:38 my_v4l2\myv4l2.png
文件 170 2014-01-03 11:38 my_v4l2\myv4l2.pro
文件 6345 2014-01-03 11:38 my_v4l2\v4l2.cpp
文件 846 2014-01-03 11:38 my_v4l2\v4l2.h
相关资源
- 基于V4L2的视频采集,能够采集YUVJPE
- Mini6410 Qt4和Qtopia编程开发指南
- 使用RTMPdump(libRTMP)直播来自v4l2的摄
- 第6章:Qtopia Core应用程序设计.ppt
- tiny4412上移植linux4.4支持设备树的最终
- qt5_V4L2_Camera 实现摄像头实时画面显示
- v4l2中文手册(规范)全五章(包含驱
- USB摄像头通过v4l2技术采集、储存视频
- V4L2采集YUYV数据x264编码成H264视频
- linux下关于Qt界面的摄像头v4l2操作源码
- tiny4412嵌入式系统搭建完整教程
- linux+QT下基于RTP协议的实时视频传输客
- v4l2采集+yuyv转yuv420p+h264编码+tcp传输
- 支持tiny4412-1506的uboot
- Tiny4412开发板所使用的linux3.5版本内核
- arm-none-linux-gnueabi-gcc-4.8.3
- uboot_tiny4412_0929.tar.gz
- TIny4412 uboot
- linux+qt+v4l2 摄像头视频捕捉--源代码
- Linux下使用Qt+V4L2测试UVC相机
- tiny4412 原理图
- 基于v4l2的qt视频实时显示
- v4l2 USB摄像头图像采集程序C
- linux下基于V4L2/Qt的usb摄像头采集显示
- tiny4412上实现QT控制LED
- 制作含qt的图形文件系统完整过程
- linux下dnw安装包适合tiny4412
- v4l2采集MJPG保存到本地
- arm板上实现usb摄像头采集及显示(q
- linux qt4.7 v4l2 YUV(YUYV) mmap 显示视频
评论
共有 条评论