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