• 大小: 15KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: mini2440  LCD  显示  

资源简介

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

评论

共有 条评论