資源簡介
友善tiny 4412上面打開USB攝像頭,并獲得數據??梢灾苯釉趖iny 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? 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? if?(buf.m.userptr?==?(unsigned?long)?buffers[i].start?&&?buf.length?==?buffers[i].length)
break;
assert?(i? 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
評論
共有 條評論