#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <linux/videodev2.h>
#include "rgb133v4l2.h"
Functions | |
void | enumerate_menu (int fd, struct v4l2_queryctrl *pQueryctrl) |
int | main (int argc, char *argv[]) |
void enumerate_menu | ( | int | fd, | |
struct v4l2_queryctrl * | pQueryctrl | |||
) |
00017 { 00018 struct v4l2_querymenu querymenu; 00019 printf(" Menu items:\n"); 00020 memset(&querymenu, 0, sizeof(querymenu)); 00021 querymenu.id = pQueryctrl->id; 00022 for(querymenu.index = pQueryctrl->minimum; 00023 querymenu.index <= pQueryctrl->maximum; 00024 querymenu.index++) 00025 { 00026 if(ioctl(fd, VIDIOC_QUERYMENU, &querymenu) == 0) 00027 { 00028 printf(" %s\n", querymenu.name); 00029 } 00030 } 00031 }
int main | ( | int | argc, | |
char * | argv[] | |||
) |
00034 { 00035 int fd = 0; 00036 int i = 0; 00037 00038 char device_name[128]; 00039 00040 struct v4l2_queryctrl queryctrl; 00041 00042 memset(device_name, 0, 128); 00043 00044 sprintf(device_name, "/dev/video%d", i); 00045 while ((fd = open(device_name, O_RDWR)) != -1) 00046 { 00047 printf("\n\nDevice: %s\n", device_name); 00048 memset(&queryctrl, 0, sizeof(queryctrl)); 00049 00050 for(queryctrl.id = V4L2_CID_BASE; 00051 queryctrl.id < V4L2_CID_LASTP1; 00052 queryctrl.id++) 00053 { 00054 if(ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl) == 0) 00055 { 00056 if(queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) 00057 continue; 00058 00059 printf("Control: %s\n", queryctrl.name); 00060 00061 if(queryctrl.type == V4L2_CTRL_TYPE_MENU) 00062 enumerate_menu(fd, &queryctrl); 00063 } 00064 else 00065 { 00066 if(errno == EINVAL) 00067 continue; 00068 perror("VIDIOC_QUERYCTRL"); 00069 return -1; 00070 } 00071 } 00072 00073 for(queryctrl.id = V4L2_CID_PRIVATE_BASE;; 00074 queryctrl.id++) 00075 { 00076 if(ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl) == 0) 00077 { 00078 if(queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) 00079 continue; 00080 00081 printf("Control: %s\n", queryctrl.name); 00082 00083 if(queryctrl.type == V4L2_CTRL_TYPE_MENU) 00084 enumerate_menu(fd, &queryctrl); 00085 } 00086 else 00087 { 00088 if(errno == EINVAL) 00089 { 00090 break; 00091 } 00092 perror("VIDIOC_QUERYCTRL(PRIVATE)"); 00093 return -2; 00094 } 00095 } 00096 00097 close(fd); 00098 00099 i++; 00100 sprintf(device_name, "/dev/video%d", i); 00101 } 00102 return 0; 00103 }