• 大小: 12KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: 其他
  • 标签: tiny4412  qtopia  v4l2  

资源简介

友善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_base.ui
     文件         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

评论

共有 条评论