1 /*
2 * v4l-test: Test environment for Video For Linux Two API
3 *
4 * 22 Mar 2009 0.1 First release
5 *
6 * Written by M�rton N�meth <nm127@freemail.hu>
7 * Released under GPL
8 */
9
10 #include <sys/ioctl.h>
11 #include <errno.h>
12 #include <string.h>
13
14 #include <linux/videodev2.h>
15 #include <linux/errno.h>
16
17 #include <CUnit/CUnit.h>
18
19 #include "v4l2_test.h"
20 #include "dev_video.h"
21 #include "video_limits.h"
22
23 #include "test_VIDIOC_G_SLICED_VBI_CAP.h"
24
do_get_sliced_vbi_cap(enum v4l2_buf_type type)25 void do_get_sliced_vbi_cap(enum v4l2_buf_type type)
26 {
27 int ret_cap, errno_cap;
28 struct v4l2_sliced_vbi_cap sliced_vbi_cap;
29
30 memset(&sliced_vbi_cap, 0xff, sizeof(sliced_vbi_cap));
31 sliced_vbi_cap.type = type;
32 ret_cap =
33 ioctl(get_video_fd(), VIDIOC_G_SLICED_VBI_CAP, &sliced_vbi_cap);
34 errno_cap = errno;
35
36 dprintf
37 ("\tVIDIOC_G_SLICED_VBI_CAP: type=%i, ret_cap=%i, errno_cap=%i\n",
38 type, ret_cap, errno_cap);
39
40 if (ret_cap == 0) {
41 CU_ASSERT_EQUAL(ret_cap, 0);
42
43 } else {
44 CU_ASSERT_EQUAL(ret_cap, -1);
45 CU_ASSERT_EQUAL(errno_cap, EINVAL);
46 }
47
48 }
49
test_VIDIOC_G_SLICED_VBI_CAP()50 void test_VIDIOC_G_SLICED_VBI_CAP()
51 {
52 do_get_sliced_vbi_cap(V4L2_BUF_TYPE_SLICED_VBI_CAPTURE);
53 do_get_sliced_vbi_cap(V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
54 }
55
do_get_sliced_vbi_cap_invalid(enum v4l2_buf_type type)56 void do_get_sliced_vbi_cap_invalid(enum v4l2_buf_type type)
57 {
58 int ret_cap, errno_cap;
59 struct v4l2_sliced_vbi_cap sliced_vbi_cap;
60
61 memset(&sliced_vbi_cap, 0xff, sizeof(sliced_vbi_cap));
62 sliced_vbi_cap.type = type;
63 ret_cap =
64 ioctl(get_video_fd(), VIDIOC_G_SLICED_VBI_CAP, &sliced_vbi_cap);
65 errno_cap = errno;
66
67 dprintf
68 ("\tVIDIOC_G_SLICED_VBI_CAP: type=%i, ret_cap=%i, errno_cap=%i\n",
69 type, ret_cap, errno_cap);
70
71 CU_ASSERT_EQUAL(ret_cap, -1);
72 CU_ASSERT_EQUAL(errno_cap, EINVAL);
73 }
74
test_VIDIOC_G_SLICED_VBI_CAP_invalid()75 void test_VIDIOC_G_SLICED_VBI_CAP_invalid()
76 {
77 do_get_sliced_vbi_cap_invalid(0);
78 do_get_sliced_vbi_cap_invalid(V4L2_BUF_TYPE_VIDEO_CAPTURE);
79 do_get_sliced_vbi_cap_invalid(V4L2_BUF_TYPE_VIDEO_OUTPUT);
80 do_get_sliced_vbi_cap_invalid(V4L2_BUF_TYPE_VIDEO_OVERLAY);
81 do_get_sliced_vbi_cap_invalid(V4L2_BUF_TYPE_VBI_CAPTURE);
82 do_get_sliced_vbi_cap_invalid(V4L2_BUF_TYPE_VBI_OUTPUT);
83 do_get_sliced_vbi_cap_invalid(V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY);
84 do_get_sliced_vbi_cap_invalid(V4L2_BUF_TYPE_PRIVATE);
85 do_get_sliced_vbi_cap_invalid(S32_MAX);
86 do_get_sliced_vbi_cap_invalid(((__u32) S32_MAX) + 1);
87 do_get_sliced_vbi_cap_invalid(U32_MAX);
88 }
89
test_VIDIOC_G_SLICED_VBI_CAP_NULL()90 void test_VIDIOC_G_SLICED_VBI_CAP_NULL()
91 {
92 int ret_get, errno_get;
93 int ret_set_capture, errno_set_capture;
94 int ret_set_output, errno_set_output;
95 int ret_null, errno_null;
96 struct v4l2_sliced_vbi_cap sliced_vbi_cap;
97
98 memset(&sliced_vbi_cap, 0, sizeof(sliced_vbi_cap));
99 sliced_vbi_cap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
100
101 ret_get =
102 ioctl(get_video_fd(), VIDIOC_G_SLICED_VBI_CAP, &sliced_vbi_cap);
103 errno_get = errno;
104
105 dprintf("\tVIDIOC_G_SLICED_VBI_CAP ret_get=%i, errno_get=%i\n", ret_get,
106 errno_get);
107
108 memset(&sliced_vbi_cap, 0, sizeof(sliced_vbi_cap));
109 sliced_vbi_cap.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
110
111 ret_set_capture =
112 ioctl(get_video_fd(), VIDIOC_G_SLICED_VBI_CAP, &sliced_vbi_cap);
113 errno_set_capture = errno;
114
115 dprintf
116 ("\tVIDIOC_G_SLICED_VBI_CAP ret_set_capture=%i, errno_set_capture=%i\n",
117 ret_set_capture, errno_set_capture);
118
119 memset(&sliced_vbi_cap, 0, sizeof(sliced_vbi_cap));
120 sliced_vbi_cap.type = V4L2_BUF_TYPE_SLICED_VBI_OUTPUT;
121
122 ret_set_output =
123 ioctl(get_video_fd(), VIDIOC_G_SLICED_VBI_CAP, &sliced_vbi_cap);
124 errno_set_output = errno;
125
126 dprintf
127 ("\tVIDIOC_G_SLICED_VBI_CAP ret_set_output=%i, errno_set_output=%i\n",
128 ret_set_output, errno_set_output);
129
130 ret_null = ioctl(get_video_fd(), VIDIOC_G_SLICED_VBI_CAP, NULL);
131 errno_null = errno;
132
133 dprintf("\tVIDIOC_G_SLICED_VBI_CAP ret_null=%i, errno_null=%i\n",
134 ret_null, errno_null);
135
136 if (ret_get == 0 || ret_set_capture == 0 || ret_set_output == 0) {
137 CU_ASSERT_EQUAL(ret_null, -1);
138 CU_ASSERT_EQUAL(errno_null, EFAULT);
139
140 } else {
141 CU_ASSERT_EQUAL(ret_get, -1);
142 CU_ASSERT_EQUAL(errno_get, EINVAL);
143 CU_ASSERT_EQUAL(ret_set_capture, -1);
144 CU_ASSERT_EQUAL(errno_set_capture, EINVAL);
145 CU_ASSERT_EQUAL(ret_set_capture, -1);
146 CU_ASSERT_EQUAL(errno_set_capture, EINVAL);
147 CU_ASSERT_EQUAL(ret_null, -1);
148 CU_ASSERT_EQUAL(errno_null, EINVAL);
149
150 }
151
152 }
153