Video standards
当然世界上现在有多个视频标准,如NTSC和PAL,他们又细分为好多种,那么我们的设备输入/输出究竟支持什么样的标准呢?我们的当前在使用的输入和输出正在使用的是哪个标准呢?我们怎么设置我们的某个输入输出使用的标准呢?这都是有方法的。
(1)查询,我们的输入支持什么标准,首先就得找到当前的这个输入的index,然后查出它的属性,在其属性里面可以得到该输入所支持的标准,
将它所支持的各个标准与所有的标准的信息进行比较,就可以获知所支持的各个标准的属性。一个输入所支持的标准应该是一个集合,而这个集合是用bit与的方
式使用一个64位数字表示的。因此我们所查到的是一个数字。
- Example 1-5. Information about the current video standard
- v4l2_std_id std_id;
- struct v4l2_standard standard;
- if (-1 == ioctl (fd, VIDIOC_G_STD, &std_id)) {
-
- perror ("VIDIOC_G_STD");
- exit (EXIT_FAILURE);
- }
- memset (&standard, 0, sizeof (standard));
- standard.index = 0;
- while (0 == ioctl (fd, VIDIOC_ENUMSTD, &standard)) {
- if (standard.id & std_id) {
- printf ("Current video standard: %s/n", standard.name);
- exit (EXIT_SUCCESS);
- }
- standard.index++;
- }
- if (errno == EINVAL || standard.index == 0) {
- perror ("VIDIOC_ENUMSTD");
- exit (EXIT_FAILURE);
- }
-
- Example 1-6. Listing the video standards supported by the current input
- struct v4l2_input input;
- struct v4l2_standard standard;
- memset (&input, 0, sizeof (input));
- if (-1 == ioctl (fd, VIDIOC_G_INPUT, &input.index)) {
- perror ("VIDIOC_G_INPUT");
- exit (EXIT_FAILURE);
- }
- if (-1 == ioctl (fd, VIDIOC_ENUMINPUT, &input)) {
- perror ("VIDIOC_ENUM_INPUT");
- exit (EXIT_FAILURE);
- }
- printf ("Current input %s supports:/n", input.name);
- memset (&standard, 0, sizeof (standard));
- standard.index = 0;
- while (0 == ioctl (fd, VIDIOC_ENUMSTD, &standard)) {
- if (standard.id & input.std)
- printf ("%s/n", standard.name);
- standard.index++;
- }
- if (errno != EINVAL || standard.index == 0) {
- perror ("VIDIOC_ENUMSTD");
- exit (EXIT_FAILURE);
- }
- Example 1-7. Selecting a new video standard
- struct v4l2_input input;
- v4l2_std_id std_id;
- memset (&input, 0, sizeof (input));
- if (-1 == ioctl (fd, VIDIOC_G_INPUT, &input.index)) {
- perror ("VIDIOC_G_INPUT");
- exit (EXIT_FAILURE);
- }
- if (-1 == ioctl (fd, VIDIOC_ENUMINPUT, &input)) {
- perror ("VIDIOC_ENUM_INPUT");
- exit (EXIT_FAILURE);
- }
- if (0 == (input.std & V4L2_STD_PAL_BG)) {
- fprintf (stderr, "Oops. B/G PAL is not supported./n");
- exit (EXIT_FAILURE);
- }
- std_id = V4L2_STD_PAL_BG;
- if (-1 == ioctl (fd, VIDIOC_S_STD, &std_id)) {
- perror ("VIDIOC_S_STD");
- exit (EXIT_FAILURE);