v 4 l 2フレームバッファでカメラをプレビュー

3124 ワード

アプリケーション層が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

プレビュー効果: