亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? camera.c

?? 實現攝像頭驅動功能 能進行攝影 拍攝 拍照等功能
?? C
字號:
#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <sys/ioctl.h>#include <sys/mman.h>#include <stdlib.h>#include <linux/types.h>#include <linux/videodev.h>#include "jpeglib.h"#include <setjmp.h>#include "SDL.h"#include <string.h>#include <signal.h>#include <errno.h>#define USB_VIDEO "/dev/video0"SDL_Surface *screen,*img;int cam_fd;int width,height;const int bpp = 24;struct video_mmap cam_mm;struct video_capability cam_cap;struct video_picture cam_pic;struct video_mbuf cam_mbuf;struct video_window win;char *cam_data = NULL;int nframe;void errexit(char *msg){  fputs(msg,stderr);  exit(-1);}void e_sig(int signum){  printf("\nERROR:signal %d\n",signum);  exit(-1);}void setup_sighandler(){  signal(SIGTERM,&e_sig);  signal(SIGINT,&e_sig);  signal(SIGSEGV,&e_sig);  signal(SIGILL,&e_sig);  signal(SIGFPE,&e_sig);}void init_video(int w,int h,int bpp); /* bpp == bits per pixel, 暫時無效*/void init_screen(int w,int h,int bpp); /* like above*/void read_video(char *pixels);void show_img(char *pixels);void window_loop();void exchange_r_b( char * f,long size);void compress_to_jpeg_file( FILE *outfile, char * image_buffer,int w,int h, int quality);void save_snapshot();void free_dev(){  printf("free device\n");  close(cam_fd);}int main(int argc,char *argv[]){  int i;  width = 320;  height = 240;  printf("cc1\n");  atexit( &free_dev );  printf("cc2\n");  init_video(width,height,bpp);  init_screen(width,height,bpp);  setup_sighandler();    window_loop();  getchar();  munmap(cam_data,cam_mbuf.size);  exit(0);}void config_vid_pic(){  int ret;  if (ioctl(cam_fd, VIDIOCGPICT, &cam_pic) < 0) {    errexit("ERROR:VIDIOCGPICT\n");  }    cam_pic.palette = VIDEO_PALETTE_RGB24;    cam_pic.brightness  = 44464;    cam_pic.hue = 36000;    cam_pic.colour = 0;    cam_pic.contrast = 43312;    cam_pic.whiteness = 13312;    cam_pic.depth = 24;    ret = ioctl( cam_fd, VIDIOCSPICT,&cam_pic );          if( ret<0 ) {      close(cam_fd);      errexit("ERROR: VIDIOCSPICT,Can't set video_picture format\n");    }  }void init_video(int w,int h,int bpp) {  int ret;  printf("open the video\n");  cam_fd = open( USB_VIDEO, O_RDWR );  if( cam_fd<0 )    errexit("Can't open video device\n");	  ret = ioctl( cam_fd,VIDIOCGCAP,&cam_cap );         if( ret<0 ) {    errexit("Can't get device information: VIDIOCGCAP\n");  }  printf("Device name:%s\nWidth:%d ~ %d\nHeight:%d ~ %d\n",cam_cap.name, cam_cap.maxwidth, cam_cap.minwidth, cam_cap.maxheight, cam_cap.minheight);  if( ioctl(cam_fd,VIDIOCGWIN,&win)<0 ) {    errexit("ERROR:VIDIOCGWIN\n");  }  win.x = 0;  win.y = 0;  win.width=width;  win.height=height;  if (ioctl(cam_fd, VIDIOCSWIN, &win) < 0) {    errexit("ERROR:VIDIOCSWIN\n");  }  config_vid_pic();      ret = ioctl(cam_fd,VIDIOCGMBUF,&cam_mbuf);  if( ret<0 ) {    errexit("ERROR:VIDIOCGMBUF,Can't get video_mbuf\n");  }  printf("Frames:%d\n",cam_mbuf.frames);  nframe = cam_mbuf.frames;  cam_data = (char*)mmap(0, cam_mbuf.size, PROT_READ|PROT_WRITE,MAP_SHARED,cam_fd,0);  if( cam_data == MAP_FAILED ) {    errexit("ERROR:mmap\n");  }  printf("Buffer size:%d\nOffset:%d\n",cam_mbuf.size,cam_mbuf.offsets[0]);}void init_screen(int w,int h,int bpp) // like above{	  if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) {    fprintf(stderr, "無法初始化SDL: %s\n", SDL_GetError());    exit(1);  }  img = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, bpp, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000);  screen = SDL_SetVideoMode(width, height, bpp, SDL_SWSURFACE);  if ( screen == NULL ) {    fprintf(stderr, "無法設置視頻模式:%s\n", SDL_GetError());    exit(1);  }  atexit(SDL_Quit);}void read_video(char *pixels){  int ret;  int frame=0;   cam_mm.height = height;  cam_mm.width = width;  cam_mm.frame = 0;  cam_mm.format=VIDEO_PALETTE_RGB24;    ret = ioctl(cam_fd,VIDIOCMCAPTURE,&cam_mm);  if( ret<0 ) {    errexit("ERROR: VIDIOCMCAPTURE\n");  }  ret = ioctl(cam_fd,VIDIOCSYNC,&frame);  if( ret<0 ) {    errexit("ERROR: VIDIOCSYNC\n");  }}void show_img(char *pixels){  int row_stride = width*3;  char *pbuf = (char*)img->pixels;  int row;  for(row=0; row<height; row++) {    memcpy(pbuf, pixels, row_stride);    pbuf += img->pitch;    pixels += row_stride;  }  SDL_BlitSurface(img, NULL, screen, NULL);  SDL_UpdateRect(screen,0,0,width,height);}void window_loop(){  SDL_Event event;  int keystat = 0;  Uint32 ticks = 0;  SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,1000);  while ( 1 ) {    SDL_PollEvent(&event);    switch (event.type) {    case SDL_QUIT:      exit(0);    case SDL_KEYDOWN:      if( event.key.keysym.sym == SDLK_F8 && keystat == 0 )	save_snapshot();      if( event.key.keysym.sym == SDLK_F9 && keystat == 0 )	config_vid_pic();      keystat = 1;      break;    case SDL_KEYUP:      keystat = 0;      break;    default:      break;    }    if( (SDL_GetTicks()-ticks)<100 )      continue;    read_video(NULL);    show_img( cam_data );    ticks = SDL_GetTicks();  }}void compress_to_jpeg_file( FILE *outfile, char * image_buffer,int w,int h, int quality){  struct jpeg_compress_struct cinfo;  struct jpeg_error_mgr jerr;  JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */  int row_stride;  /* physical row width in image buffer */  int image_width;  int image_height;  cinfo.err = jpeg_std_error(&jerr);  jpeg_create_compress(&cinfo);  jpeg_stdio_dest(&cinfo, outfile);  image_width = w;  image_height = h;  cinfo.image_width = image_width;  /* image width and height, in pixels */  cinfo.image_height = image_height;  cinfo.input_components = 3;  /* # of color components per pixel */  cinfo.in_color_space = JCS_RGB;  /* colorspace of input image */  jpeg_set_defaults(&cinfo);  jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */);  jpeg_start_compress(&cinfo, TRUE);  row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */  while (cinfo.next_scanline < cinfo.image_height) {    row_pointer[0] = (JSAMPROW)& image_buffer[cinfo.next_scanline * row_stride];    (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);  }  jpeg_finish_compress(&cinfo);  jpeg_destroy_compress(&cinfo);  }void exchange_r_b( char * f,long size){  char r,b;  long i;  for( i = 0; i < size ; i++)    {      r = *f;      b = *( f + 2);      *f = b;      *(f + 2) = r;      f = f +3;    }}void save_snapshot(){  char *basepath = "/mnt/usb";  char *basename = "/snapsot";  char *extname = ".jpg";  char filename[100];  int i = 0;  FILE *fo;  for(;;) {    sprintf(filename,"%s%s%d%s",basepath,basename,i,extname);    fo = fopen(filename,"rb");    if( fo==NULL )      break;    else      fclose(fo);    i += 1;  }  printf("snapshot:%s\n",filename);  fo = fopen(filename,"wb");  exchange_r_b( cam_data, width*height );  compress_to_jpeg_file( fo, cam_data, width, height, 90 );  fclose(fo);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51午夜精品国产| 国产成人午夜电影网| 欧美综合久久久| 亚洲综合在线电影| 欧美精品一卡两卡| 久久精品免费看| 久久久久国产成人精品亚洲午夜 | 日韩精品一区二区三区在线 | 青青草成人在线观看| 日韩女优制服丝袜电影| 国产呦萝稀缺另类资源| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产一区中文字幕| 国产综合久久久久久久久久久久| 午夜av一区二区| 欧美日韩免费在线视频| 日本伊人色综合网| 欧美激情一二三区| 欧美无砖专区一中文字| 日本欧美在线观看| 欧美激情一二三区| 欧美三级电影网| 国产福利一区二区三区在线视频| 亚洲欧美日韩综合aⅴ视频| 91精品国产综合久久精品性色| 精品亚洲成a人在线观看| 中文字幕中文字幕在线一区| 在线成人av网站| 不卡的av在线播放| 免费观看一级特黄欧美大片| 中文欧美字幕免费| 3d成人动漫网站| av电影在线观看一区| 三级成人在线视频| 日韩一区在线播放| 精品日本一线二线三线不卡| 国产中文字幕精品| 99视频一区二区| 日韩午夜av电影| 蜜臀av亚洲一区中文字幕| 久久综合色综合88| 7777精品伊人久久久大香线蕉超级流畅 | 精品美女一区二区| av激情综合网| 国内精品免费**视频| 一区二区三区在线观看视频| 精品福利一二区| 欧美日韩大陆一区二区| 91玉足脚交白嫩脚丫在线播放| 久久99精品久久久久久动态图 | 国产精品区一区二区三| 在线看国产日韩| 成人在线综合网| 久久成人综合网| 日本强好片久久久久久aaa| 一区二区三区精密机械公司| 日本一区二区三区四区| 欧美成人福利视频| 欧美精品aⅴ在线视频| 一本一道综合狠狠老| 国产不卡视频在线播放| 国产一区二区看久久| 免费观看久久久4p| 视频一区二区三区在线| 亚洲一级二级在线| 亚洲综合色在线| 一区二区三区成人| 一区二区三区 在线观看视频| 亚洲素人一区二区| 亚洲欧洲国产日本综合| 中文字幕av在线一区二区三区| 久久众筹精品私拍模特| 欧美三级视频在线播放| 亚洲色图一区二区| 中文字幕视频一区| 国产午夜亚洲精品理论片色戒 | 欧美性做爰猛烈叫床潮| 91日韩一区二区三区| 成人av在线电影| www.激情成人| 91蝌蚪porny九色| 91免费版在线| 91成人在线精品| 欧美视频日韩视频| 欧美精品成人一区二区三区四区| 91精品欧美久久久久久动漫| 欧美日韩国产首页在线观看| 欧美日韩一区成人| 日韩午夜在线观看视频| ww久久中文字幕| 国产精品三级在线观看| 亚洲色欲色欲www在线观看| 一区二区三区在线免费观看| 午夜av一区二区| 国产综合久久久久久鬼色| 国产成a人亚洲精| 久久久久成人黄色影片| av不卡免费在线观看| 91论坛在线播放| 欧美日韩免费电影| 日韩精品一区二区三区在线| 国产日韩欧美a| 亚洲黄色免费电影| 蜜臂av日日欢夜夜爽一区| 国产成人在线电影| 色综合 综合色| 日韩精品一区二区三区视频| 国产欧美va欧美不卡在线| 一个色在线综合| 久久国产尿小便嘘嘘尿| 91在线视频免费91| 欧美一区二区女人| 国产视频一区在线观看| 一区二区久久久久久| 精品中文字幕一区二区| 97久久精品人人爽人人爽蜜臀| 欧美日韩国产区一| 国产精品污网站| 日韩av二区在线播放| 成人黄色电影在线| 欧美一级高清片| 中文字幕中文字幕一区| 亚洲精品成人天堂一二三| 精品在线观看免费| 在线视频综合导航| 国产午夜亚洲精品不卡| 日韩av一区二| 91久久免费观看| 久久久99免费| 日本成人在线网站| 91麻豆swag| 欧美国产一区在线| 免费精品视频最新在线| 欧美亚洲综合久久| 国产欧美一区在线| 精品一区二区久久| 欧美另类videos死尸| 中文字幕一区在线观看| 国产一区二区三区香蕉| 欧美二区三区的天堂| 亚洲欧美综合色| 国产最新精品精品你懂的| 91精品国产色综合久久久蜜香臀| 亚洲人成在线观看一区二区| 国产精品一级黄| 日韩一区二区免费在线电影| 亚洲一区二三区| 日本精品免费观看高清观看| 中文字幕av一区二区三区| 黄页网站大全一区二区| 日韩限制级电影在线观看| 日韩精品久久理论片| 欧美性色欧美a在线播放| 中文字幕日韩精品一区| 国产美女精品人人做人人爽| 日韩午夜三级在线| 久久精品国产亚洲a| 91精品国产综合久久久蜜臀图片 | 亚洲欧美二区三区| jlzzjlzz国产精品久久| 欧美国产日韩一二三区| 国产精品1区2区| 国产婷婷色一区二区三区在线| 韩国中文字幕2020精品| 亚洲精品一区二区三区精华液| 日韩av电影免费观看高清完整版在线观看| 欧洲一区在线观看| 亚洲中国最大av网站| 欧美日韩亚洲综合一区二区三区| 亚洲电影你懂得| 欧美日本韩国一区| 日本成人超碰在线观看| 欧美一级片免费看| 麻豆国产欧美日韩综合精品二区| 欧美二区乱c少妇| 久久99久久精品| 国产亚洲欧美色| 99久久99久久综合| 一区二区三区影院| 91豆麻精品91久久久久久| 天天影视涩香欲综合网| 日韩一级成人av| 国产精品99久久久久久久vr| 国产日韩欧美麻豆| 成人网在线免费视频| 亚洲理论在线观看| 欧美日韩一区高清| 奇米一区二区三区| 久久久精品2019中文字幕之3| 成人综合在线网站| 亚洲一区二区三区不卡国产欧美| 亚洲美女电影在线| 亚洲自拍另类综合| 97se亚洲国产综合在线| 久久影院电视剧免费观看| 久久只精品国产| 欧美电影影音先锋| 国产中文字幕一区| 中文字幕一区二区三区蜜月 | 精品国产乱码久久久久久浪潮|