资源简介
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
相关资源
- mini2440裸机实现简易u-boot代码.rar
- labview树形结构显示文件目录
- STM32 实现12864液晶屏显示汉字和图片且
- 用51单片机解析GPS数据并在12864液晶显
- 3DS文件导入OpenGL并动态显示源码
- RichEdit显示图片(gifbmpjpg等所有图片)
- 在ARM9和ARMLinux下利用QT编写的实时数据
- 12864液晶屏.zip
- QT text预加载方式显示大文件文本.zi
- STM32+SHT30(DS18B20)+0.96寸OLED(IIC)的
- verilog实现八位数码管显示
- 51单片机Protues仿真舵机,可以通过按
- Activiti6-流程跟踪监控图-节点-流程线
- LCD1206及汉字显示
- 采用线程方式拷贝文件夹Delphi使用自
- 基于cc2530的酒精串口显示系统
- 黑苹果GT240显示驱动
- Img2Lcd V4.0绿色版本,带注册码
- EDA实验 大屏幕(8乘8点阵)LED显示
- LCD12864串行显示DS18B20温度和超声波测
- 豆豆时钟1.0-点击exe文件显示当前时间
- 单片机C51-电子钟1 LCD1602显示 上电正常
- labview做的串口接收并波形显示,并存
- steelseries exact mouse 解决 mac 外接显示
- LCD液晶点阵显示中英文例程
- DHT11温湿度 1602显示 89C52单片机
- 51单片机ADC0832电压测量液晶1602显示的
- 网络爬虫,多功能,有界面显示,代
- 百度地图只显示指定的行政区域地图
- VC+halcon,显示图片,缩放拖动
评论
共有 条评论