资源简介
mini2440实现采集摄像头数据在开发板的LCD显示
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//摄像大小
#define IMAGE_WIDTH 320
#define IMAGE_HEIGHT 240
//#define IMAGE_WIDTH 160
//#define IMAGE_HEIGHT 120
//就只能这一两种分辨率,其它的都会发生段错误
//开始显示位置
#define WINDOW_X 0
#define WINDOW_Y 0
//时间调试开关
#define DEBUG_GTIME
//设备
#define USB_VIDEO “/dev/video0“
#define FB_DEVICE “/dev/fb0“
int cam_fd; //摄像头设备文件描述符
int fb0_fd; //显示设备文件描述符
unsigned short *fb0_buf; //显存地址
unsigned short *rgb_buffer; //RGB存放地址
int buf_count; //缓存数量也就是说在缓存队列里保持多少张照片
unsigned int screen_size; //屏幕大小
//记录Kernel分配Video Buffer地址及大小结构体
typedef struct
{
void *start;
int length;
}BUFTYPE;
BUFTYPE *user_buf;
/*
*************屏幕初始化函数**************************
*/
void fb_init(void)
{
struct fb_var_screeninfo fbvar;
unsigned int bpp;
unsigned int i=0;
//打开设备
fb0_fd = open(FB_DEVICE O_RDWR);
if ( fb0_fd < 0 ) {
fprintf(stderr“Can not open framebuffer device\n“);
exit(EXIT_FAILURE);
}
//获取屏幕信息
if ( ioctl(fb0_fd FBIOGET_VSCREENINFO &fbvar) < 0 ) {
fprintf(stderr“FBIOGET_VSCREENINFO to fail\n“);
close(fb0_fd);
exit(EXIT_FAILURE);
}
bpp = fbvar.bits_per_pixel; //色彩深度
screen_size = fbvar.xres * fbvar.yres * bpp / 8; //屏幕宽度*屏幕高度*色彩深度/8
printf(“bpp:%dfbvar.xres:%dfbvar.yres:%d\n“ bpp fbvar.xres fbvar.yres);
//显存映射
fb0_buf = mmap(0 screen_size PROT_READ | PROT_WRITE MAP_SHARED fb0_fd 0);
//申请RGB内存空间
rgb_buffer = (unsigned short*)calloc(screen_size (char)0xff); //(char)0xff 起到char类型的作用
if( rgb_buffer == NULL ) {
fprintf(stderr“Request the rgb_buf memory fail\n“);
close(fb0_fd);
exit(EXIT_FAILURE);
}
//清屏为蓝色
bpp = fbvar.xres * fbvar.yres;
while( i < bpp )
fb0_buf[i++] = 0x1f;
}
/*
*************lcd显示函数**************************
*/
void lcd_display()
{
unsigned int x=0y=0;
unsigned int i=0;
//unsigned int temp;
//temp = IMAGE_WIDTH * IMAGE_HEIGHT;
for (y=WINDOW_Y; y for (x=WINDOW_X; x fb0_buf[y*320+x] = rgb_buffer[i++];
}
}
//for (i=0; i //fb0_buf[i] = rgb_buffer[i];
}
/*
* yuv422 to rgb24 function
* YUV422 也称 YUYV格式,在内存中存储方式为 Y0 U0 Y1 V0
* 这四个字节代表两个像素:Y0 U0 VO 和 Y1 U0 V0
*
* R = Y + 1.4075*(V-128)
* G = Y - 0.3455*(U-128) - 0.7169*(V-128)
* B = Y +1.779 *(U-128)
* 快速算法
* U‘ = U -128
* V‘ = V - 128
* R = Y + V‘ + ((V‘*104) >> 8))
* G = Y - ((U‘*89) >> 8) - ((V‘ * 183) >> 8)
* B = Y + U‘ + ((U‘*199) >> 8)
* Made by zhenguoyao 2011.11.18 at UESTC chengdu
* This program can be used and distributed without restrictions.
*/
#define Y0 0
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- AsyncTask文件控制暂停和继续,在状态
- FPGA彩条显示
- uboot到linux logo显示不间断 补丁
- LCD显示温度+串口接收温度.rar
- 基于MFC扩展CListCtrl子项显示图片并叠
- 在大图中查找小图显示位置
- Img2Lcd(将图片转换为数组的工具)
- 直观端口查看器,详细显示可疑进程
- 基于c8051f020的AD转换程序及LCD显示程序
- PB做的托盘程序(最小化后在左下角显
- 实时显示钢筋标注面积V0.44
- [免费]msp430f149控制PS2键盘并用1602显示
- 武汉理工大学 单片机课程设计 16*16点
- arm触摸屏与LCD校准程序三点校准法
- 【单片机】51单片机数码管显示万年历
- 12864滚动显示汉字
- vhdl与lcd1602实现的多控制电子钟
- 25.数码管显示0-99
- 利用译码器74HC595的点阵显示程序和电
- STC12C5A60S2 CH4521 驱动数码管 显示
- pctolcd2002完美版460701
- ADC0809数字电压表 LCD1602显示 汇编程序
- 广东工业大学汇编实验二用表格形式
- 课程设计蔬菜大棚自动控制系统,包
- 带时间温度显示的室内灯光控制系统
- 图片存储到数据库保存二进制文件并
- 三维地形的仿真显示实现了对地图的
- 制作万年历 日期 农历 温度显示
- CH454键盘与数码管显示程序
评论
共有 条评论