Linux下V4L2一个调试问题方法(拍照偏绿)

来源:互联网 发布:js 美化工具 编辑:程序博客网 时间:2024/05/17 06:02
 一、源码

1.test.c

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <fcntl.h>  
  2. #include <stdlib.h>  
  3. #include <sys/mman.h>  
  4. #include <errno.h>  
  5. #include <sys/types.h>   
  6. #include <sys/stat.h>  
  7. #include <linux/videodev2.h>  
  8. #include "test.h"  
  9.   
  10.   
  11. int fd = 0;  
  12.   
  13. int v4l2QueryControl(int control, struct v4l2_queryctrl *queryctrl)  
  14. {  
  15.     int err =0;  
  16.     queryctrl->id = control;  
  17.     if ((err= ioctl(fd, VIDIOC_QUERYCTRL, queryctrl)) < 0) {  
  18.     printf("ioctl querycontrol error %d,%d \n",errno,control);  
  19.     } else if (queryctrl->flags & V4L2_CTRL_FLAG_DISABLED) {  
  20.     printf("control %s disabled \n", (char *) queryctrl->name);  
  21.     } else if (queryctrl->flags & V4L2_CTRL_TYPE_BOOLEAN) {  
  22.     return 1;  
  23.     } else if (queryctrl->type & V4L2_CTRL_TYPE_INTEGER) {  
  24.     return 0;  
  25.     } else {  
  26.     printf("contol %s unsupported  \n", (char *) queryctrl->name);  
  27.     }  
  28.     return -1;  
  29. }  
  30.   
  31. int v4l2GetControl(int control)  
  32. {  
  33.     struct v4l2_queryctrl queryctrl;  
  34.     struct v4l2_control control_s;  
  35.     int err;  
  36.     if (v4l2QueryControl(control, &queryctrl) < 0)  
  37.     return -1;  
  38.     control_s.id = control;  
  39.     if ((err = ioctl(fd, VIDIOC_G_CTRL, &control_s)) < 0) {  
  40.     printf("ioctl get control error\n");  
  41.     return -1;  
  42.     }  
  43.     return control_s.value;  
  44. }  
  45.   
  46. int main(){  
  47.   //////  
  48.   int result = mkdir("./v4l2test/",S_IFDIR+S_ISGID+S_IRWXU+S_IRWXG+S_IRWXO);  
  49.   /////////////1280*720 mjpeg  
  50.   fd = open("/dev/video0",O_RDWR,0);  
  51.   printf("TK------->>>fd is %d\n",fd);  
  52.   //////  
  53.   struct v4l2_capability cap;  
  54.   ioctl(fd,VIDIOC_QUERYCAP,&cap);  
  55.   printf("TK---------->>>>>Driver Name:%s\nCard Name:%s\nBus info:%s\n",cap.driver,cap.card,cap.bus_info);  
  56.   //////  
  57.   struct v4l2_fmtdesc fmtdesc;  
  58.   fmtdesc.index = 0; fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  59.   while(ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc) != -1){  
  60.    printf("TK-------->>>>>fmtdesc.description is %s\n",fmtdesc.description);  
  61.    fmtdesc.index ++;  
  62.   }  
  63.   //////  
  64.   struct v4l2_format fmt;  
  65.   memset(&fmt,0,sizeof(fmt));  
  66.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  67.   fmt.fmt.pix.width = 1280;  
  68.   fmt.fmt.pix.height = 720;  
  69.   fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;  
  70.   fmt.fmt.pix.field       = V4L2_FIELD_NONE;//V4L2_FIELD_INTERLACED;  
  71.   fmt.fmt.pix.colorspace = 8;  
  72.   int fmtreslt = ioctl(fd,VIDIOC_S_FMT,&fmt);  
  73.   printf("TK--------_>>>>fmtreslt is %d\n",fmtreslt);  
  74.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  75.   ioctl(fd,VIDIOC_G_FMT,&fmt);  
  76.   printf("TK----------->>>>>fmt.fmt.width is %d\nfmt.fmt.pix.height is %d\nfmt.fmt.pix.colorspace is %d\n",fmt.fmt.pix.width,fmt.fmt.pix.height,fmt.fmt.pix.colorspace);  
  77.   ////////////////////////////////////////////////start  
  78.   struct v4l2_requestbuffers req;  
  79.   req.count = 4;  
  80.   req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  81.   req.memory = V4L2_MEMORY_MMAP;  
  82.   ioctl(fd,VIDIOC_REQBUFS,&req);  
  83.   struct buffer{  
  84.     void *start;  
  85.     unsigned int length;  
  86.   }*buffers;  
  87.   buffers = (struct buffer*)calloc (req.count, sizeof(*buffers));  
  88.   unsigned int n_buffers = 0;  
  89.   for(n_buffers = 0; n_buffers < req.count; ++n_buffers){  
  90.     struct v4l2_buffer buf;  
  91.     memset(&buf,0,sizeof(buf));  
  92.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  93.     buf.memory = V4L2_MEMORY_MMAP;  
  94.     buf.index = n_buffers;  
  95.     if(ioctl(fd,VIDIOC_QUERYBUF,&buf) == -1){  
  96.       printf("TK---------_>>>>>>error\n");  
  97.       close(fd);  
  98.       exit(-1);  
  99.     }  
  100.     buffers[n_buffers].length = buf.length;  
  101.     buffers[n_buffers].start = mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset);  
  102.     if(MAP_FAILED == buffers[n_buffers].start){  
  103.       printf("TK--------__>>>>>error 2\n");  
  104.       close(fd);  
  105.       exit(-1);  
  106.     }  
  107.   }  
  108.   ////  
  109.   unsigned int i;  
  110.   enum v4l2_buf_type type;  
  111.   for(i = 0; i < 4; i++){  
  112.     struct v4l2_buffer buf;  
  113.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  114.     buf.memory = V4L2_MEMORY_MMAP;  
  115.     buf.index = i;  
  116.     ioctl(fd,VIDIOC_QBUF,&buf);  
  117.   }  
  118.   type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  119.   ioctl(fd,VIDIOC_STREAMON,&type);  
  120.   ////  
  121.   unsigned int j;  
  122.   for(j = 0; j < 4; j++){  
  123.     struct v4l2_buffer buf;  
  124.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  125.     buf.memory = V4L2_MEMORY_MMAP;  
  126.     buf.index = 0;  
  127.     ioctl(fd,VIDIOC_DQBUF,&buf);  
  128.     char path[30];  
  129.     snprintf(path,sizeof(path),"./v4l2test/720pmjpeg%d",buf.index);  
  130.     int fdyuyv = open(path,O_WRONLY|O_CREAT,00700);  
  131.     printf("TK--------->>>>fdyuyv is %d\n",fdyuyv);  
  132.     int resultyuyv = write(fdyuyv,buffers[buf.index].start,1280*720*2);  
  133.     printf("TK--------->>>resultyuyv is %d\n",resultyuyv);   
  134.     close(fdyuyv);  
  135.   }  
  136.   ioctl(fd,VIDIOC_STREAMOFF,&type);  
  137.   for(i = 0; i < 4; i++)  
  138.     munmap(buffers[i].start,buffers[i].length);  
  139.   free(buffers);  
  140.   usleep(10000);  
  141.   close(fd);  
  142. ///////////////////////////////////////////////////////////////////////////end  
  143. //////1280*720 yuyv  
  144.   fd = open("/dev/video0",O_RDWR,0);  
  145.   printf("TK------------>>>start 2222222222222222\n");  
  146.   ioctl(fd, VIDIOC_QUERYCAP, &cap);  
  147.   memset(&fmt,0,sizeof(fmt));  
  148.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  149.   fmt.fmt.pix.width = 1280;  
  150.   fmt.fmt.pix.height = 720;  
  151.   fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;  
  152.   fmt.fmt.pix.field       = V4L2_FIELD_NONE;//V4L2_FIELD_INTERLACED;  
  153.   fmt.fmt.pix.colorspace = 8;  
  154.   fmtreslt = ioctl(fd,VIDIOC_S_FMT,&fmt);  
  155.   printf("TK--------_>>>>fmtreslt is %d\n",fmtreslt);  
  156.   fmtreslt = ioctl(fd,VIDIOC_TRY_FMT,&fmt);  
  157.   printf("TK--------_>>>>fmtreslt is %d\n",fmtreslt);  
  158.   
  159.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  160.   ioctl(fd,VIDIOC_G_FMT,&fmt);  
  161.   printf("TK----------->>>>>fmt.fmt.width is %d\nfmt.fmt.pix.height is %d\nfmt.fmt.pix.colorspace is %d\n",fmt.fmt.pix.width,fmt.fmt.pix.height,fmt.fmt.pix.colorspace);  
  162.   req.count = 4;  
  163.   req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  164.   req.memory = V4L2_MEMORY_MMAP;  
  165.   ioctl(fd,VIDIOC_REQBUFS,&req);  
  166.   
  167.   buffers = (struct buffer*)calloc (req.count, sizeof(*buffers));  
  168.   for(n_buffers = 0; n_buffers < req.count; ++n_buffers){  
  169.     struct v4l2_buffer buf;  
  170.     memset(&buf,0,sizeof(buf));  
  171.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  172.     buf.memory = V4L2_MEMORY_MMAP;  
  173.     buf.index = n_buffers;  
  174.     if(ioctl(fd,VIDIOC_QUERYBUF,&buf) == -1){  
  175.       printf("TK---------_>>>>>>error\n");  
  176.       close(fd);  
  177.       exit(-1);  
  178.     }  
  179.     buffers[n_buffers].length = buf.length;  
  180.     buffers[n_buffers].start = mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset);  
  181.     if(MAP_FAILED == buffers[n_buffers].start){  
  182.       printf("TK--------__>>>>>error 2\n");  
  183.       close(fd);  
  184.       exit(-1);  
  185.     }  
  186.   }  
  187.   
  188.   for(i = 0; i < 4; i++){  
  189.     struct v4l2_buffer buf;  
  190.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  191.     buf.memory = V4L2_MEMORY_MMAP;  
  192.     buf.index = i;  
  193.     ioctl(fd,VIDIOC_QBUF,&buf);  
  194.   }  
  195.   type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  196.   ioctl(fd,VIDIOC_STREAMON,&type);  
  197.   
  198.   for(j = 0; j < 4; j++){  
  199.     struct v4l2_buffer buf;  
  200.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  201.     buf.memory = V4L2_MEMORY_MMAP;  
  202.     buf.index = 0;  
  203.     ioctl(fd,VIDIOC_DQBUF,&buf);  
  204.     char path[30];  
  205.     snprintf(path,sizeof(path),"./v4l2test/720pyuyv%d",buf.index);  
  206.     int fdyuyv = open(path,O_WRONLY|O_CREAT,00700);  
  207.     printf("TK--------->>>>fdyuyv is %d\n",fdyuyv);  
  208.     printf("TK--------->>>>>buffers[buf.index].start is 0x%x\n",buffers[buf.index].start);  
  209.     int resultyuyv = write(fdyuyv,buffers[buf.index].start,1280*720*2);  
  210.     printf("TK--------->>>resultyuyv is %d\n",resultyuyv);  
  211.     close(fdyuyv);  
  212.   }  
  213.     printf("TK------->>>>v4l2GetControl(V4L2_CID_AUTO_FOCUS_STATUS) is %d\n",v4l2GetControl(V4L2_CID_AUTO_FOCUS_STATUS));  
  214.     printf("TK------->>>>v4l2GetControl(V4L2_CID_AUTO_WHITE_BALANCE) is %d\n",v4l2GetControl(V4L2_CID_AUTO_WHITE_BALANCE));  
  215.     printf("TK------->>>>v4l2GetControl(V4L2_CID_BACKLIGHT_COMPENSATION) is %d\n",v4l2GetControl(V4L2_CID_BACKLIGHT_COMPENSATION));  
  216.     printf("TK------->>>>v4l2GetControl(V4L2_CID_BRIGHTNESS) is %d\n",v4l2GetControl(V4L2_CID_BRIGHTNESS));  
  217.     printf("TK------->>>>v4l2GetControl(V4L2_CID_COLORFX) is %d\n",v4l2GetControl(V4L2_CID_COLORFX));  
  218.     printf("TK------->>>>v4l2GetControl(V4L2_CID_CONTRAST) is %d\n",v4l2GetControl(V4L2_CID_CONTRAST));  
  219.     printf("TK------->>>>v4l2GetControl(V4L2_CID_DO_WHITE_BALANCE) is %d\n",v4l2GetControl(V4L2_CID_DO_WHITE_BALANCE));  
  220.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE));  
  221.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE_ABSOLUTE) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE_ABSOLUTE));  
  222.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE_AUTO) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE_AUTO));  
  223.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE_AUTO_PRIORITY) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE_AUTO_PRIORITY));  
  224.     printf("TK------->>>>v4l2GetControl(V4L2_CID_FOCUS_ABSOLUTE) is %d\n",v4l2GetControl(V4L2_CID_FOCUS_ABSOLUTE));  
  225.     printf("TK------->>>>v4l2GetControl(V4L2_CID_FOCUS_AUTO) is %d\n",v4l2GetControl(V4L2_CID_FOCUS_AUTO));  
  226.     printf("TK------->>>>v4l2GetControl(V4L2_CID_HFLIP) is %d\n",v4l2GetControl(V4L2_CID_HFLIP));  
  227.     printf("TK------->>>>v4l2GetControl(V4L2_CID_POWER_LINE_FREQUENCY) is %d\n",v4l2GetControl(V4L2_CID_POWER_LINE_FREQUENCY));  
  228.     printf("TK------->>>>v4l2GetControl(V4L2_CID_SATURATION) is %d\n",v4l2GetControl(V4L2_CID_SATURATION));  
  229.     printf("TK------->>>>v4l2GetControl(V4L2_CID_SHARPNESS) is %d\n",v4l2GetControl(V4L2_CID_SHARPNESS));  
  230.     printf("TK------->>>>v4l2GetControl(V4L2_CID_WHITENESS) is %d\n",v4l2GetControl(V4L2_CID_WHITENESS));  
  231.     printf("TK------->>>>v4l2GetControl(V4L2_CID_ZOOM_ABSOLUTE) is %d\n",v4l2GetControl(V4L2_CID_ZOOM_ABSOLUTE));  
  232.   ioctl(fd,VIDIOC_STREAMOFF,&type);  
  233.   for(i = 0; i < 4; i++)  
  234.     munmap(buffers[i].start,buffers[i].length);  
  235.   free(buffers);  
  236.   usleep(10000);  
  237.   close(fd);  
  238.   /////////end  
  239. //////640*480 mjpeg  
  240.   fd = open("/dev/video0",O_RDWR,0);  
  241.   printf("TK------------>>>start 3333333333333\n");  
  242.   ioctl(fd, VIDIOC_QUERYCAP, &cap);  
  243.   memset(&fmt,0,sizeof(fmt));  
  244.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  245.   fmt.fmt.pix.width = 640;  
  246.   fmt.fmt.pix.height = 480;  
  247.   fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;  
  248.   fmt.fmt.pix.field       = V4L2_FIELD_NONE;//V4L2_FIELD_INTERLACED;  
  249.   fmt.fmt.pix.colorspace = 8;  
  250.   fmtreslt = ioctl(fd,VIDIOC_S_FMT,&fmt);  
  251.   printf("TK--------_>>>>fmtreslt is %d\n",fmtreslt);  
  252.   fmtreslt = ioctl(fd,VIDIOC_TRY_FMT,&fmt);  
  253.   printf("TK--------_>>>>fmtreslt is %d\n",fmtreslt);  
  254.   
  255.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  256.   ioctl(fd,VIDIOC_G_FMT,&fmt);  
  257.   printf("TK----------->>>>>fmt.fmt.width is %d\nfmt.fmt.pix.height is %d\nfmt.fmt.pix.colorspace is %d\n",fmt.fmt.pix.width,fmt.fmt.pix.height,fmt.fmt.pix.colorspace);  
  258.   req.count = 4;  
  259.   req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  260.   req.memory = V4L2_MEMORY_MMAP;  
  261.   ioctl(fd,VIDIOC_REQBUFS,&req);  
  262.   
  263.   buffers = (struct buffer*)calloc (req.count, sizeof(*buffers));  
  264.   for(n_buffers = 0; n_buffers < req.count; ++n_buffers){  
  265.     struct v4l2_buffer buf;  
  266.     memset(&buf,0,sizeof(buf));  
  267.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  268.     buf.memory = V4L2_MEMORY_MMAP;  
  269.     buf.index = n_buffers;  
  270.     if(ioctl(fd,VIDIOC_QUERYBUF,&buf) == -1){  
  271.       printf("TK---------_>>>>>>error\n");  
  272.       close(fd);  
  273.       exit(-1);  
  274.     }  
  275.     buffers[n_buffers].length = buf.length;  
  276.     buffers[n_buffers].start = mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset);  
  277.     if(MAP_FAILED == buffers[n_buffers].start){  
  278.       printf("TK--------__>>>>>error 2\n");  
  279.       close(fd);  
  280.       exit(-1);  
  281.     }  
  282.   }  
  283.   
  284.   for(i = 0; i < 4; i++){  
  285.     struct v4l2_buffer buf;  
  286.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  287.     buf.memory = V4L2_MEMORY_MMAP;  
  288.     buf.index = i;  
  289.     ioctl(fd,VIDIOC_QBUF,&buf);  
  290.   }  
  291.   type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  292.   ioctl(fd,VIDIOC_STREAMON,&type);  
  293.   
  294.   for(j = 0; j < 4; j++){  
  295.     struct v4l2_buffer buf;  
  296.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  297.     buf.memory = V4L2_MEMORY_MMAP;  
  298.     buf.index = 0;  
  299.     ioctl(fd,VIDIOC_DQBUF,&buf);  
  300.     char path[30];  
  301.     snprintf(path,sizeof(path),"./v4l2test/480pmjpeg%d",buf.index);  
  302.     int fdyuyv = open(path,O_WRONLY|O_CREAT,00700);  
  303.     printf("TK--------->>>>fdyuyv is %d\n",fdyuyv);  
  304.     printf("TK--------->>>>>buffers[buf.index].start is 0x%x\n",buffers[buf.index].start);  
  305.     int resultyuyv = write(fdyuyv,buffers[buf.index].start,640*480*2);  
  306.     printf("TK--------->>>resultyuyv is %d\n",resultyuyv);  
  307.     close(fdyuyv);  
  308.   }  
  309.   ioctl(fd,VIDIOC_STREAMOFF,&type);  
  310.   for(i = 0; i < 4; i++)  
  311.     munmap(buffers[i].start,buffers[i].length);  
  312.   free(buffers);  
  313.   usleep(10000);  
  314.   close(fd);  
  315. /////////end  
  316. //////640*480 yuyv  
  317.   fd = open("/dev/video0",O_RDWR,0);  
  318.   printf("TK------------>>>start 444444444444\n");  
  319.   ioctl(fd, VIDIOC_QUERYCAP, &cap);  
  320.   memset(&fmt,0,sizeof(fmt));  
  321.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  322.   fmt.fmt.pix.width = 640;  
  323.   fmt.fmt.pix.height = 480;  
  324.   fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;  
  325.   fmt.fmt.pix.field       = V4L2_FIELD_NONE;//V4L2_FIELD_INTERLACED;  
  326.   fmt.fmt.pix.colorspace = 8;  
  327.   fmtreslt = ioctl(fd,VIDIOC_S_FMT,&fmt);  
  328.   printf("TK--------_>>>>fmtreslt is %d\n",fmtreslt);  
  329.   fmtreslt = ioctl(fd,VIDIOC_TRY_FMT,&fmt);  
  330.   printf("TK--------_>>>>fmtreslt is %d\n",fmtreslt);  
  331.   
  332.   fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  333.   ioctl(fd,VIDIOC_G_FMT,&fmt);  
  334.   printf("TK----------->>>>>fmt.fmt.width is %d\nfmt.fmt.pix.height is %d\nfmt.fmt.pix.colorspace is %d\n",fmt.fmt.pix.width,fmt.fmt.pix.height,fmt.fmt.pix.colorspace);  
  335.   req.count = 4;  
  336.   req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  337.   req.memory = V4L2_MEMORY_MMAP;  
  338.   ioctl(fd,VIDIOC_REQBUFS,&req);  
  339.   
  340.   buffers = (struct buffer*)calloc (req.count, sizeof(*buffers));  
  341.   for(n_buffers = 0; n_buffers < req.count; ++n_buffers){  
  342.     struct v4l2_buffer buf;  
  343.     memset(&buf,0,sizeof(buf));  
  344.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  345.     buf.memory = V4L2_MEMORY_MMAP;  
  346.     buf.index = n_buffers;  
  347.     if(ioctl(fd,VIDIOC_QUERYBUF,&buf) == -1){  
  348.       printf("TK---------_>>>>>>error\n");  
  349.       close(fd);  
  350.       exit(-1);  
  351.     }  
  352.     buffers[n_buffers].length = buf.length;  
  353.     buffers[n_buffers].start = mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset);  
  354.     if(MAP_FAILED == buffers[n_buffers].start){  
  355.       printf("TK--------__>>>>>error 2\n");  
  356.       close(fd);  
  357.       exit(-1);  
  358.     }  
  359.   }  
  360.   
  361.   for(i = 0; i < 4; i++){  
  362.     struct v4l2_buffer buf;  
  363.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  364.     buf.memory = V4L2_MEMORY_MMAP;  
  365.     buf.index = i;  
  366.     ioctl(fd,VIDIOC_QBUF,&buf);  
  367.   }  
  368.   type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  369.   ioctl(fd,VIDIOC_STREAMON,&type);  
  370.   
  371.   for(j = 0; j < 4; j++){  
  372.     struct v4l2_buffer buf;  
  373.     buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
  374.     buf.memory = V4L2_MEMORY_MMAP;  
  375.     buf.index = 0;  
  376.     ioctl(fd,VIDIOC_DQBUF,&buf);  
  377.     char path[30];  
  378.     snprintf(path,sizeof(path),"./v4l2test/480pyuyv%d",buf.index);  
  379.     int fdyuyv = open(path,O_WRONLY|O_CREAT,00700);  
  380.     printf("TK--------->>>>fdyuyv is %d\n",fdyuyv);  
  381.     printf("TK--------->>>>>buffers[buf.index].start is 0x%x\n",buffers[buf.index].start);  
  382.     int resultyuyv = write(fdyuyv,buffers[buf.index].start,640*480*2);  
  383.     printf("TK--------->>>resultyuyv is %d\n",resultyuyv);  
  384.     close(fdyuyv);  
  385.   }  
  386.     printf("TK------->>>>v4l2GetControl(V4L2_CID_AUTO_FOCUS_STATUS) is %d\n",v4l2GetControl(V4L2_CID_AUTO_FOCUS_STATUS));  
  387.     printf("TK------->>>>v4l2GetControl(V4L2_CID_AUTO_WHITE_BALANCE) is %d\n",v4l2GetControl(V4L2_CID_AUTO_WHITE_BALANCE));  
  388.     printf("TK------->>>>v4l2GetControl(V4L2_CID_BACKLIGHT_COMPENSATION) is %d\n",v4l2GetControl(V4L2_CID_BACKLIGHT_COMPENSATION));  
  389.     printf("TK------->>>>v4l2GetControl(V4L2_CID_BRIGHTNESS) is %d\n",v4l2GetControl(V4L2_CID_BRIGHTNESS));  
  390.     printf("TK------->>>>v4l2GetControl(V4L2_CID_COLORFX) is %d\n",v4l2GetControl(V4L2_CID_COLORFX));  
  391.     printf("TK------->>>>v4l2GetControl(V4L2_CID_CONTRAST) is %d\n",v4l2GetControl(V4L2_CID_CONTRAST));  
  392.     printf("TK------->>>>v4l2GetControl(V4L2_CID_DO_WHITE_BALANCE) is %d\n",v4l2GetControl(V4L2_CID_DO_WHITE_BALANCE));  
  393.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE));  
  394.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE_ABSOLUTE) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE_ABSOLUTE));  
  395.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE_AUTO) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE_AUTO));  
  396.     printf("TK------->>>>v4l2GetControl(V4L2_CID_EXPOSURE_AUTO_PRIORITY) is %d\n",v4l2GetControl(V4L2_CID_EXPOSURE_AUTO_PRIORITY));  
  397.     printf("TK------->>>>v4l2GetControl(V4L2_CID_FOCUS_ABSOLUTE) is %d\n",v4l2GetControl(V4L2_CID_FOCUS_ABSOLUTE));  
  398.     printf("TK------->>>>v4l2GetControl(V4L2_CID_FOCUS_AUTO) is %d\n",v4l2GetControl(V4L2_CID_FOCUS_AUTO));  
  399.     printf("TK------->>>>v4l2GetControl(V4L2_CID_HFLIP) is %d\n",v4l2GetControl(V4L2_CID_HFLIP));  
  400.     printf("TK------->>>>v4l2GetControl(V4L2_CID_POWER_LINE_FREQUENCY) is %d\n",v4l2GetControl(V4L2_CID_POWER_LINE_FREQUENCY));  
  401.     printf("TK------->>>>v4l2GetControl(V4L2_CID_SATURATION) is %d\n",v4l2GetControl(V4L2_CID_SATURATION));  
  402.     printf("TK------->>>>v4l2GetControl(V4L2_CID_SHARPNESS) is %d\n",v4l2GetControl(V4L2_CID_SHARPNESS));  
  403.     printf("TK------->>>>v4l2GetControl(V4L2_CID_WHITENESS) is %d\n",v4l2GetControl(V4L2_CID_WHITENESS));  
  404.     printf("TK------->>>>v4l2GetControl(V4L2_CID_ZOOM_ABSOLUTE) is %d\n",v4l2GetControl(V4L2_CID_ZOOM_ABSOLUTE));  
  405.   ioctl(fd,VIDIOC_STREAMOFF,&type);  
  406.   for(i = 0; i < 4; i++)  
  407.     munmap(buffers[i].start,buffers[i].length);  
  408.   free(buffers);  
  409.   usleep(10000);  
  410.   close(fd);  
  411.   /////////end  
  412.   return 0;  
  413. }  
2.test.h

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #define V4L2_CID_AUTO_FOCUS_STATUS              (V4L2_CID_CAMERA_CLASS_BASE+30)  
二、编译及测试

1.gcc test.c -o test

2../test

3.ll v4l2test/

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. drwxr-xr-x 2 root root    4096 2013-08-16 09:27 ./  
  2. drwxr-xr-x 3 root root    4096 2013-08-16 10:24 ../  
  3. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pmjpeg0*  
  4. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pmjpeg1*  
  5. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pmjpeg2*  
  6. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pmjpeg3*  
  7. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pyuyv0*  
  8. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pyuyv1*  
  9. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pyuyv2*  
  10. -rwxrwxrwx 1 root root  614400 2013-08-16 09:27 480pyuyv3*  
  11. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pmjpeg0*  
  12. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pmjpeg1*  
  13. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pmjpeg2*  
  14. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pmjpeg3*  
  15. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pyuyv0*  
  16. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pyuyv1*  
  17. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pyuyv2*  
  18. -rwxrwxrwx 1 root root 1843200 2013-08-16 09:27 720pyuyv3*  

三、极力推荐一款window下的图像查看工具YUVviewerPlus

  该工具可以将原始yuyv(如yuv422选择yuy2,需要后缀改为.yuv),rgb(rgb24选择gbmp24,需要后缀改为.bmp)等数据文件显示出来。

  另外说明:yuyv和jpeg数据大小为width*height*2;rgb为width*height*3;单位为Bytes。

  附免费下载地址:http://download.csdn.net/detail/tankai19880619/6617647

0 0
原创粉丝点击