示例#1
0
文件: zoom.c 项目: muzilike/roubosys
int main(int argc, char **argv)
{
	int ret;
	int i;	
	while(1){
	//-------------------------------------------	
	ret=video_fb_init_preview();
	switch (ret)//不同等级的清理------
	{
		case 1: 
			close(video_fd);
			printf("clean level 1.\n");
			break;
		case 2: for(i=0;i<3;i++)
			{
				if(-1==munmap(buffers[i].start,buffers[i].length))
					printf("munmap error:%d \n",i);
			}
			close(video_fd);
			printf("clean level 2.\n");
			break;
		case 3: fb_munmap(fbdev.fb_mem, fbdev.fb_size);	//释放framebuffer映射
			close(fb);                              //关闭Framebuffer设备
			for(i=0;i<3;i++)
			{
				if(-1==munmap(buffers[i].start,buffers[i].length))
					printf("munmap error:%d \n",i);
			}
			close(video_fd);		
			printf("clean level 3.\n");			
			break;
		default:printf("unkown return .\n");
			break;
	}
	exit(1);                                              //去除quit时进入死循环	
	}
	return 0;
}
示例#2
0
文件: display.c 项目: TangoZhu/libhal
/************ function implementation ********************/
int main(int argc, char *argv[])
{
    /*
     * declaration for jpeg decompression
     */
    struct jpeg_decompress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE           *infile;
    unsigned char  *buffer;
    /*
     * declaration for framebuffer device
     */
    int             fbdev;
    char           *fb_device;
    unsigned char  *fbmem;
    unsigned int    screensize;
    unsigned int    fb_width;
    unsigned int    fb_height;
    unsigned int    fb_depth;
    unsigned int    x;
    unsigned int    y;
    /*
     * check auguments
     */
    /*if (argc != 2) {
        usage("insuffient auguments");
        exit(-1);
    }*/
    /*
     * open framebuffer device
     */
    if((fb_device = getenv("FRAMEBUFFER")) == NULL)
    { 
        fb_device = FB_DEV; 
    }
        
    fbdev = fb_open(fb_device);
    /*
     * get status of framebuffer device
     */
    fb_stat(fbdev, &fb_width, &fb_height, &fb_depth);
    printf("%d ", fb_width);
    printf("%d ", fb_height);
    printf("%d\n", fb_depth);
    /*
     * map framebuffer device to shared memory
     */
    screensize = fb_width * fb_height * fb_depth / 8;
    fbmem = fb_mmap(fbdev, screensize);
    if(fbmem == 0)
    {
        printf("fb mmap error");
    }
    /*open input jpeg file   */
    char jpgname[32] = {0};
    int jpgcnt = 0;
   // SystemSetBlankInterVal(0);
    while(1)
    {
        //for(jpgcnt = 0; jpgcnt < 10; jpgcnt++)
        {
            /*
            * init jpeg decompress object error handler
            */
            sprintf(jpgname, "%s","./picture.jpg");
            //sprintf(jpgname, "/var/run/%d.jpg", jpgcnt);
            printf("begint to display %s\n", jpgname);
            cinfo.err = jpeg_std_error(&jerr);
            jpeg_create_decompress(&cinfo);
            if((infile = fopen(jpgname, "rb+")) == NULL)
            {
                fprintf(stderr, "open %s failed\n", "1.jpg");
                exit(-1);
            }
            /*
             * bind jpeg decompress object to infile
             */
            jpeg_stdio_src(&cinfo, infile);
            /*
             * read jpeg header
             */
            jpeg_read_header(&cinfo, TRUE);
            /*
             * decompress process.
             * note: after jpeg_start_decompress() is called
             * the dimension infomation will be known,
             * so allocate memory buffer for scanline immediately
             */
            jpeg_start_decompress(&cinfo);
            /*if ((cinfo.output_width > fb_width) ||
                (cinfo.output_height > fb_height)) {
                printf("too large JPEG file,cannot display\n");
                return (-1);
            }*/
            buffer = (unsigned char *) malloc(cinfo.output_width *
                                              cinfo.output_components);
            y = 0;
            while(cinfo.output_scanline < cinfo.output_height)
            {
                jpeg_read_scanlines(&cinfo, &buffer, 1);
                if(fb_depth == 16)
                {
                    unsigned short  color;
                    for(x = 0; x < cinfo.output_width; x++)
                    {
                        color = RGB888toRGB565(buffer[x * 3],
                                               buffer[x * 3 + 1]
                                               , buffer[x * 3 + 2]);
                        fb_pixel(fbmem, fb_width, fb_height, x, y, color);
                    }
                }
                else if(fb_depth == 24)
                {
                    memcpy((unsigned char *) fbmem + y * fb_width * 3,
                           buffer, cinfo.output_width * cinfo.output_components);
                }
                y++;                    // next scanline
            }
            /*
             * finish decompress, destroy decompress object
             */
            jpeg_finish_decompress(&cinfo);
            jpeg_destroy_decompress(&cinfo);
            /*
             * release memory buffer
             */
            free(buffer);
            /*
             * close jpeg inputing file
             */
            fclose(infile);
            usleep(400000);
        }
    }
    /*
     * unmap framebuffer's shared memory
     */
    fb_munmap(fbmem, screensize);
    /*
     * close framebuffer device
     */
    fb_close(fbdev);
    return (0);
}