新闻中心

EEPW首页>嵌入式系统>设计应用> S3C2440通过v4l2采集在lcd上显示

S3C2440通过v4l2采集在lcd上显示

作者: 时间:2016-11-19 来源:网络 收藏
S3C2440通过v4l2采集lcd上显示
#include
        
         #include
         
          #include #include
          
           #include
           
            #include
            
             #include
             
              #include
              
               #include
               
                #include
                
                 #include
                 
                  //#include
                  
                   #include
                   
                    #include
                    
                     #include
                     
                      #include
                      
                       #define COLS 320#define ROWS 240#define V4L2_DEV_NODE "/dev/video13"#define FB_DEV_NODE "/dev/fb0"#define CLEAR(x) memset(&(x),0,sizeof(x))typedef struct v4l2_format V_FORMAT;typedef struct fb_var_screeninfo F_VINFO;struct fb_var_screeninfo fb_var;struct fb_fix_screeninfo fb_fix;char * fb_base_addr = NULL;static void show_rgb565_img(void *scr, __u16 *data_buf){ __u16 x, y;__u16 *fb_buf = (__u16 *)scr;fb_buf += (320);for (y = 0; y < ROWS; y++) {for (x = 0; x < COLS; x++) { fb_buf[x] = *data_buf++ ;}fb_buf += 320;}}int main(void){int v4l2_fd = -1;int fb_fd = -1;int n=0;__u8 *fb_buf;__u8 *buf;__u32 screensize;//unsigned int width = 0;//unsigned int height = 0;//unsigned int bpp = 0;V_FORMAT fmt;enum v4l2_buf_type type;type = V4L2_BUF_TYPE_VIDEO_CAPTURE;printf("Start Main n");printf("Before openning video n");v4l2_fd = open(V4L2_DEV_NODE, O_RDWR | O_NONBLOCK, 0);if (v4l2_fd < 0) {printf(" open video ERRn");return 0;}printf("Before openning FB n");fb_fd = open(FB_DEV_NODE, O_RDWR);if (fb_fd < 0) {printf("error open fb_fdn");exit(1);}/* Get fixed screen information */if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &fb_fix)) {printf("Error reading fb fixed information.n");exit(1);}/* Get variable screen information */if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &fb_var)) {printf("Error reading fb variable information.n");exit(1);}screensize = fb_var.xres * fb_var.yres * fb_var.bits_per_pixel / 8;//screensize = 480 * 272 * 16 / 8;fb_buf = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fb_fd, 0);if ((int)fb_buf == -1) {printf("Error: fai
                       ledto map framebuffer device to memory.n");close(fb_fd);return -1;}CLEAR (fmt);fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.width = 320;fmt.fmt.pix.height = 240;//fmt.fmt.pix.depth = 16;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB565;//printf("VIDIOC_S_FMT is %xn",VIDIOC_S_FMT);if ((ioctl(v4l2_fd, VIDIOC_S_FMT, &fmt)) < 0) {printf("Error: failed to set video format.n");return 0;}buf = malloc(320 * 240 * 3); //printf("VIDIOC_STREAMON is %xn",VIDIOC_STREAMON);if ((ioctl(v4l2_fd, VIDIOC_STREAMON, &type)) < 0) {printf("error ioctl streamonn");return 0;}printf("start to get pic %dn",(int)fmt.fmt.pix.sizeimage);while(1) {n=read(v4l2_fd, buf, 320*240*2);printf("display %dn",n);show_rgb565_img(fb_buf,buf);}}
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
        


关键词:S3C2440v4l2采集lc

评论


技术专区

关闭