v 4 l 2フレームバッファでカメラをプレビュー
アプリケーション層がv 4 l 2 apiを介して採取したカメラデータyuvをrgbに変換した後、フレームバッファに書き込みカメラをプレビューする目的で、プログラムが実行されたらttyの下に切り替わる.私のスクリーンはbgraフォーマットなので、この点に注意してください.スクリーンフォーマットによってr,g,bのオフセットが異なります(0 x 00<<24)|(R 0<<16)|(G 0<<8)|(B 0<<0);の順でOK
プレビュー効果:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/**
** v4l2 : gcc -std=c99 -o main main.c
**/
static int width;//
static int height;//
static __u32 *pfb;//
static int fb;
static struct fb_fix_screeninfo finfo;
static struct fb_var_screeninfo vinfo;
void fb_fillimg(const __u32* img);
void initFb()
{
int ret = -1;
//
fb = open("/dev/fb0", O_RDWR);
if (fb < 0) { perror("open fb0"); return; }
printf("open /dev/fb0 success
");
//
ret = ioctl(fb,FBIOGET_FSCREENINFO,&finfo);
//
ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo);
if (ret < 0) { perror("get var info"); return; }
width = vinfo.xres_virtual;
height = vinfo.yres_virtual;
printf("width=%d,height=%d
",width,height);
//
pfb = (__u32*)mmap(NULL, finfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0);
if (NULL == pfb) { perror("fb0 mmap"); return; }
}
void closeFb()
{
munmap(pfb,finfo.smem_len);
close(fb);
}
/**
** yuv422 bgra
**/
int max(int a,int b){ return a
プレビュー効果: