資源簡介
通過v4l2接口,采集攝像頭數據(yuyv),并保存為24位bmp圖,再將此bmp顯示在lcd上(rgb32)

代碼片段和文件信息
/*
?*?v4l2.c
?*
?*??Created?on:?Aug?8?2011
?*??????Author:?gavin
?*/
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
//#include?
#include?
#include?“v4l2grab.h“
#include?“camera.h“
static?int?fd?=?-1;
struct?buffer?{
????void?*??????????????????start;
????size_t??????????????????length;
};
//static?io_method????????io??????????????=?IO_METHOD_MMAP;
struct?buffer?*?????????buffers?????????=?NULL;
static?unsigned?int?????n_buffers???????=?0;
//?global?settings
static?unsigned?int?width?=?800;
static?unsigned?int?height?=?480;
static?char*?deviceName?=?“/dev/video0“;
struct?fb_var_screeninfo?vinfo;
struct?fb_fix_screeninfo?finfo;
static?int?fb_bpp;
static?int?cam_fp?=?-1;
static?int?fb_fp?=?-1;
static?char?*fb_addr?=?NULL;
unsigned?char?frame_buffer[640*480*3];
int?fb_init(void)
{
????int?dev_fp?=?-1;
????int?fb_size;
//????struct?fb_var_screeninfo?vinfo;
????dev_fp?=?open(“/dev/fb0“?O_RDWR);
????if?(dev_fp?0)?{
????????perror(“/dev/fb0“);
????????return?-1;
????}
if(-1==xioctl(dev_fpFBIOGET_FSCREENINFO&finfo))
{
perror(“finfo“);
return?-1;
}
????if?(ioctl(dev_fp?FBIOGET_VSCREENINFO?&vinfo))?{
????????printf(“Error?reading?variable?information.\n“);
????????exit(1);
????}
????width=vinfo.xres;
????height=vinfo.yres;
????fb_bpp=vinfo.bits_per_pixel;
????if(fb_bpp==24)
????????fb_bpp=32;
???fb_size=width*height*fb_bpp/8;
????if?((fb_addr?=?mmap(0?fb_sizePROT_READ?|?PROT_WRITE?MAP_SHARED?dev_fp?0))?0)
????{
????????perror(“mmap()“);
????????return?-1;
????}
????printf(“%dx%d?bpp:%d?mmaped?0x%08x\n“widthheightfb_bppfb_addr);
????return?dev_fp;
}
void?deviceOpen(void)
{
????fd?=?open(deviceName?O_RDWR?/*?required?*/?|?O_NONBLOCK?0);
????//?check?if?opening?was?successfull
????if?(-1?==?fd)?{
????????fprintf(stderr?“Cannot?open?‘%s‘:?%d?%s\n“?deviceName?errno?strerror?(errno));
????????exit(EXIT_FAILURE);
????}
}
/**
??initialize?device
*/
int?deviceInit(void)
{
????struct?v4l2_capability?cap;
????struct?v4l2_cropcap?cropcap;
????struct?v4l2_crop?crop;
????struct?v4l2_format?fmt;
????unsigned?int?min;
????if?(-1?==?xioctl(fd?VIDIOC_QUERYCAP?&cap))?{
????????if?(EINVAL?==?errno)?{
????????????fprintf(stderr?“%s?is?no?V4L2?device\n“deviceName);
????????????exit(EXIT_FAILURE);
????????}?else?{
????????????errno_exit(“VIDIOC_QUERYCAP“);
????????}
????}
????if?(!(cap.capabilities?&?V4L2_CAP_VIDEO_CAPTURE))
????{
????????fprintf(stderr?“%s?is?no?video?capture?device\n“deviceName);
????????exit(EXIT_FAILURE);
????}
????struct?v4l2_input?input;
????input.index?=?0;
????if?(?ioctl(fd?VIDIOC_ENUMINPUT?&input)?!=?0)
????{
????????printf(“?set?input?error.\n“);
????????exit(0);
????}
????if?((i
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????753??2013-08-16?11:25??save\camera.h
?????文件????????783??2013-08-11?16:48??save\main.c
?????文件???????1981??2012-12-18?06:37??save\v4l2grab.h
?????文件??????16046??2013-08-16?15:50??save\camera.c
?????目錄??????????0??2013-08-19?16:17??save
-----------?---------??----------?-----??----
????????????????19563????????????????????5
- 上一篇:springboot開發的物業管理系統-畢業設計
- 下一篇:節日彩燈控制器
評論
共有 條評論