资源简介
通过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开发的物业管理系统-毕业设计
- 下一篇:节日彩灯控制器
相关资源
- v4l2 QT MJPEG格式 视频采集+屏幕显示+图
- 尚硅谷周阳Linux视频附加韩顺平老师
- DELPHI写的JPG,BMP图片压缩程序源码
- 使用Linux的V4L2读取摄像头数据+Opencv图
- v4l2 qt实时显示摄像头数据未使用ope
- V4L2视频采集与h264编码
- bmp图片转16进制
- linux下v4l2实现图片采集
- vc 动态加载显示jpg、bmp图片
- 灰度256X256_BMP图片
- 读取bmp图片文件,并获取任意一点的
- 基于QT的V4L2摄像头视频采集并显示
- 嵌入式Linux视频教程完整视频
- opengl保存bmp图片函数
- tiny4412 + qtopia + v4l2 + usb camera
- 01 [基础] 鸟哥私房菜 - 经典Linux零基础
- 2018尚硅谷Linux视频
- Linux Media Subsystem Documentation
- 完美解决PB MakeQRBarcode 二维码BMP图片调
- lena的jpg和bmp图片(512×512)
- linux零基础到精通视频教程(全套10
- stm32_King_SD_Card(文件系统实现读取b
- 嵌入式Linux培训视频.rar
- 冒死上传公司车载设备源码 支持gp
- V4L2+FFMPEG+live555实现流媒体服务端
- 点阵数据转换为BMP图片
- LINUX下采集视频数据并编码为H264项目
- RGB数据生成BMP图片
- Linux 下V4l2摄像头采集图片,实现yuy
- vc实现bmp图片转化jpeg图片
评论
共有 条评论