17a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak/*
27a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak * v4l-test: Test environment for Video For Linux Two API
37a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak *
4c40b521b10941033d8b1c031bd02ab47240d5c93subrata_modak * 20 Apr 2009  0.9  Added string content validation
5c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak * 18 Apr 2009  0.8  More strict check for strings
6c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak * 13 Apr 2009  0.7  Also show type in debug output;
7c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak *                   Add some debug output
8c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak *  3 Apr 2009  0.6  Test case for NULL parameter reworked
9c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak * 28 Mar 2009  0.5  Clean up ret and errno variable names and dprintf() output
102578b06823e5669ed5d6a96c47e74563f577ed9fsubrata_modak * 18 Mar 2009  0.4  Duplicated test for V4L2_BUF_TYPE_VIDEO_CAPTURE removed
1110658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak *  1 Jan 2009  0.3  Test cases added for index=S32_MAX and S32_MAX+1;
1210658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak *                   Test functions renamed
137a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak * 22 Dec 2008  0.2  Test case with NULL parameter added
147a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak * 18 Dec 2008  0.1  First release
157a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak *
167a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak * Written by M�rton N�meth <nm127@freemail.hu>
177a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak * Released under GPL
187a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak */
197a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
207a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <stdio.h>
217a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <sys/types.h>
227a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <sys/stat.h>
237a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <fcntl.h>
247a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <unistd.h>
257a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <sys/ioctl.h>
267a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <errno.h>
277a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <string.h>
287a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
297a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <linux/videodev2.h>
307a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <linux/errno.h>
317a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
327a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <CUnit/CUnit.h>
337a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include <CUnit/Basic.h>
347a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
357a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include "v4l2_test.h"
367a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include "dev_video.h"
377a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include "video_limits.h"
38c40b521b10941033d8b1c031bd02ab47240d5c93subrata_modak#include "v4l2_validator.h"
397a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
407a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak#include "test_VIDIOC_ENUM_FMT.h"
417a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
42354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaostatic void do_enumerate_formats(enum v4l2_buf_type type)
43354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
44c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_enum, errno_enum;
457a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	struct v4l2_fmtdesc format;
467a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	struct v4l2_fmtdesc format2;
477a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	__u32 i;
487a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
497a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	i = 0;
507a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do {
517a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		memset(&format, 0xff, sizeof(format));
527a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		format.index = i;
537a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		format.type = type;
547a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
55c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
56c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		errno_enum = errno;
57c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
58354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		dprintf
59354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
60354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     __FILE__, __LINE__, i, type, ret_enum, errno_enum);
61c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		if (ret_enum == 0) {
62c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak			CU_ASSERT_EQUAL(ret_enum, 0);
637a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			CU_ASSERT_EQUAL(format.index, i);
647a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			//CU_ASSERT_EQUAL(format.type, ?);
657a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			//CU_ASSERT_EQUAL(format.flags, ?);
667a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
67354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT(0 < strlen((char *)format.description));
68354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT(valid_string
69354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  ((char *)format.description,
70354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				   sizeof(format.description)));
717a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
727a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			//CU_ASSERT_EQUAL(format.pixelformat, ?);
737a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			CU_ASSERT_EQUAL(format.reserved[0], 0);
747a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			CU_ASSERT_EQUAL(format.reserved[1], 0);
757a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			CU_ASSERT_EQUAL(format.reserved[2], 0);
767a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			CU_ASSERT_EQUAL(format.reserved[3], 0);
777a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
78c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			/* Check if the unused bytes of the description string is also filled
79c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			 * with zeros. Also check if there is any padding byte between
80c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			 * any two fields then this padding byte is also filled with zeros.
81c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			 */
82c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			memset(&format2, 0, sizeof(format2));
83c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			format2.index = format.index;
84c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			format2.type = format.type;
85c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			format2.flags = format.flags;
86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			strncpy((char *)format2.description,
87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				(char *)format.description,
88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				sizeof(format2.description));
89c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak			format2.pixelformat = format.pixelformat;
90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT_EQUAL(memcmp
91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					(&format, &format2, sizeof(format)), 0);
92354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			dprintf
94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    ("\tformat = {.index=%u, .type=0x%X, .flags=0x%X, "
95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     ".description=\"%s\", .pixelformat=0x%X, "
96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     ".reserved[]={ 0x%X, 0x%X, 0x%X, 0x%X } }\n",
97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     format.index, format.type, format.flags,
98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     format.description, format.pixelformat,
99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     format.reserved[0], format.reserved[1],
100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     format.reserved[2], format.reserved[3]
101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    );
1027a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
1037a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		} else {
104c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak			CU_ASSERT_EQUAL(ret_enum, -1);
105c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak			CU_ASSERT_EQUAL(errno_enum, EINVAL);
1067a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
1077a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			memset(&format2, 0xff, sizeof(format2));
1087a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			format2.index = i;
1097a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak			format2.type = type;
110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT_EQUAL(memcmp
111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					(&format, &format2, sizeof(format)), 0);
1127a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
1137a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		}
1147a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		i++;
115c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	} while (ret_enum == 0);
1167a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
1177a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak}
1187a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_ENUM_FMT()
120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
1217a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_CAPTURE);
1227a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_OUTPUT);
1237a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_OVERLAY);
1247a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_VBI_CAPTURE);
1257a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_VBI_OUTPUT);
1267a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_SLICED_VBI_CAPTURE);
1277a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
1287a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY);
1297a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	do_enumerate_formats(V4L2_BUF_TYPE_PRIVATE);
1307a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak}
1317a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_ENUM_FMT_S32_MAX()
133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
134c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_enum, errno_enum;
13510658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	struct v4l2_fmtdesc format;
13610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	struct v4l2_fmtdesc format2;
13710658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
13810658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* test invalid index */
13910658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	memset(&format, 0xff, sizeof(format));
140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	format.index = (__u32) S32_MAX;
14110658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
142c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
143c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_enum = errno;
14410658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, format.index, format.type, ret_enum,
148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_enum);
149c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
150c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(ret_enum, -1);
151c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(errno_enum, EINVAL);
15210658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
15310658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Check whether the original format struct is untouched */
15410658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	memset(&format2, 0xff, sizeof(format2));
155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	format2.index = (__u32) S32_MAX;
15610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
15710658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
15810658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak}
15910658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_ENUM_FMT_S32_MAX_1()
161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
162c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_enum, errno_enum;
16310658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	struct v4l2_fmtdesc format;
16410658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	struct v4l2_fmtdesc format2;
16510658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
16610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* test invalid index */
16710658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	memset(&format, 0xff, sizeof(format));
168354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	format.index = ((__u32) S32_MAX) + 1;
16910658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
170c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
171c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_enum = errno;
17210658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
173354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
174354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
175354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, format.index, format.type, ret_enum,
176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_enum);
177c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
178c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(ret_enum, -1);
179c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(errno_enum, EINVAL);
18010658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
18110658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Check whether the original format struct is untouched */
18210658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	memset(&format2, 0xff, sizeof(format2));
183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	format2.index = ((__u32) S32_MAX) + 1;
18410658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
18510658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
18610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak}
18710658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_ENUM_FMT_U32_MAX()
189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
190c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_enum, errno_enum;
1917a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	struct v4l2_fmtdesc format;
1927a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	struct v4l2_fmtdesc format2;
1937a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
1947a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	/* test invalid index */
1957a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format, 0xff, sizeof(format));
1967a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format.index = U32_MAX;
1977a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
198c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
199c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_enum = errno;
2007a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
201354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
202354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
203354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, format.index, format.type, ret_enum,
204354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_enum);
205c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
206c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(ret_enum, -1);
207c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(errno_enum, EINVAL);
2087a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
20910658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Check whether the original format struct is untouched */
2107a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format2, 0xff, sizeof(format2));
2117a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format2.index = U32_MAX;
2127a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
2137a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
2147a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak}
2157a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
216354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_ENUM_FMT_invalid_type()
217354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
218c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_enum, errno_enum;
2197a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	struct v4l2_fmtdesc format;
2207a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	struct v4l2_fmtdesc format2;
2217a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	int i;
2227a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
2232c28215423293e443469a07ae7011135d058b671Garrett Cooper	/* In this test case the .index is valid (0) and only the .type
22410658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	 * is invalid. The .type filed is an enum which is stored in an 'int'.
22510658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	 */
22610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
2277a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	/* test invalid .type=0 */
2287a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format, 0xff, sizeof(format));
2297a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format.index = 0;
2307a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format.type = 0;
231c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
232c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_enum = errno;
2337a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, format.index, format.type, ret_enum,
237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_enum);
238c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
239c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(ret_enum, -1);
240c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(errno_enum, EINVAL);
2417a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
24210658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Check whether the original format struct is untouched */
2437a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format2, 0xff, sizeof(format2));
2447a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format2.index = 0;
2457a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format2.type = 0;
2467a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
2477a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
24810658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* test invalid .type=SINT_MIN */
2497a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format, 0xff, sizeof(format));
2507a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format.index = 0;
25110658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format.type = SINT_MIN;
252c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
253c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_enum = errno;
2547a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
255354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
256354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
257354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, format.index, format.type, ret_enum,
258354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_enum);
259c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
260c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(ret_enum, -1);
261c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(errno_enum, EINVAL);
2627a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
26310658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Check whether the original format struct is untouched */
2647a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format2, 0xff, sizeof(format2));
2657a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format2.index = 0;
26610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format2.type = SINT_MIN;
2677a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
2687a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
2697a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	/* test invalid .type=-1 */
2707a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format, 0xff, sizeof(format));
2717a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format.index = 0;
2727a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format.type = -1;
273c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
274c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_enum = errno;
2757a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
276354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
277354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
278354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, format.index, format.type, ret_enum,
279354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_enum);
280c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
281c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(ret_enum, -1);
282c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(errno_enum, EINVAL);
2837a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
28410658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Check whether the original format struct is untouched */
2857a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	memset(&format2, 0xff, sizeof(format2));
2867a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format2.index = 0;
2877a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	format2.type = -1;
2887a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
2897a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
2907a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	/* test invalid .type= 8..0x7F */
291354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY + 1;
292354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     i < V4L2_BUF_TYPE_PRIVATE; i++) {
2937a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		memset(&format, 0xff, sizeof(format));
2947a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		format.index = 0;
2957a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		format.type = i;
296c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
297c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		errno_enum = errno;
2987a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
299354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		dprintf
300354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
301354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     __FILE__, __LINE__, format.index, format.type, ret_enum,
302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		     errno_enum);
303c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
304c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_enum, -1);
305c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_enum, EINVAL);
3067a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
30710658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak		/* Check whether the original format struct is untouched */
3087a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		memset(&format2, 0xff, sizeof(format2));
3097a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		format2.index = 0;
3107a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		format2.type = i;
3117a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak		CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
3127a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	}
3137a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
3147a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak	/* .type = 0x80..0x7FFF FFFF is the private range */
31510658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
31610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Assume that 0x7FFF FFFF is invalid in the private range.
31710658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	 * This might be a wrong assumption, but let's have a test case like
31810658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	 * this for now.
31910658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	 */
32010658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	memset(&format, 0xff, sizeof(format));
32110658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format.index = 0;
32210658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format.type = SINT_MAX;
323c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
324c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_enum = errno;
32510658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
326354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
327354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n",
328354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, format.index, format.type, ret_enum,
329354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_enum);
330c5d954a63f66d1ccf79ba9b92311fa7b57f0a895subrata_modak
331c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(ret_enum, -1);
332c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	CU_ASSERT_EQUAL(errno_enum, EINVAL);
33310658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak
33410658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	/* Check whether the original format struct is untouched */
33510658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	memset(&format2, 0xff, sizeof(format2));
33610658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format2.index = 0;
33710658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	format2.type = SINT_MAX;
33810658ed800fa92bbfba86ed05d29ff26cb106844subrata_modak	CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0);
3397a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak}
3407a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
341354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_ENUM_FMT_NULL()
342354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
343c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_capture, errno_capture;
344c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_output, errno_output;
345c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_video_overlay, errno_video_overlay;
346c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_vbi_capture, errno_vbi_capture;
347c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_vbi_output, errno_vbi_output;
348c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_sliced_vbi_capture, errno_sliced_vbi_capture;
349c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_sliced_vbi_output, errno_sliced_vbi_output;
350c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_video_output_overlay, errno_video_output_overlay;
351c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_private, errno_private;
352c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_null, errno_null;
353c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	struct v4l2_fmtdesc format;
354c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
355c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
356c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
357c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
358c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_capture = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
359c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_capture = errno;
360c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
361c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_ENUM_FMT, ret_capture=%i, errno_capture=%i\n",
362c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_capture, errno_capture);
363c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
364c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
365c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
366c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
367c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_output = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
368c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_output = errno;
369c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
370c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_ENUM_FMT, ret_output=%i, errno_output=%i\n",
371c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_output, errno_output);
372c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
373c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
374c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
375c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
376c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_video_overlay = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
377c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_video_overlay = errno;
378c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
379354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
380354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, ret_video_overlay=%i, errno_video_overlay=%i\n",
381354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_video_overlay, errno_video_overlay);
382c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
383c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
384c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
385c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_VBI_CAPTURE;
386c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_vbi_capture = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
387c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_vbi_capture = errno;
388c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
389354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
390354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, ret_vbi_capture=%i, errno_vbi_capture=%i\n",
391354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_vbi_capture, errno_vbi_capture);
3927a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
393c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
394c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
395c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_VBI_OUTPUT;
396c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_vbi_output = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
397c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_vbi_output = errno;
398c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
399354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
400354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, ret_vbi_output=%i, errno_vbi_output=%i\n",
401354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_vbi_output, errno_vbi_output);
402c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
403c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
404c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
405c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
406354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	ret_sliced_vbi_capture =
407354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
408c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_sliced_vbi_capture = errno;
409c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
410354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
411354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, ret_sliced_vbi_capture=%i, errno_sliced_vbi_capture=%i\n",
412354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_sliced_vbi_capture,
413354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_sliced_vbi_capture);
414c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
415c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
416c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
417c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_SLICED_VBI_OUTPUT;
418c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_sliced_vbi_output = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
419c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_sliced_vbi_output = errno;
420c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
421354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
422354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, ret_sliced_vbi_output=%i, errno_sliced_vbi_output=%i\n",
423354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_sliced_vbi_output,
424354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_sliced_vbi_output);
425c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
426c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
427c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
428c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY;
429354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	ret_video_output_overlay =
430354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
431c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_video_output_overlay = errno;
432c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
433354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
434354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_ENUM_FMT, ret_video_output_overlay=%i, errno_video_output_overlay=%i\n",
435354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_video_output_overlay,
436354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     errno_video_output_overlay);
437c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
438c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	memset(&format, 0xff, sizeof(format));
439c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.index = 0;
440c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	format.type = V4L2_BUF_TYPE_PRIVATE;
441c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_private = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format);
442c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_private = errno;
443c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
444c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_ENUM_FMT, ret_private=%i, errno_private=%i\n",
445c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_private, errno_private);
446c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
447c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_null = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, NULL);
448c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_null = errno;
449c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
450c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_ENUM_FMT, ret_null=%i, errno_null=%i\n",
451c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_null, errno_null);
452c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak
453c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	if (ret_capture == 0 || ret_output == 0 ||
454c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	    ret_video_overlay == 0 || ret_vbi_capture == 0 ||
455c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	    ret_vbi_output == 0 || ret_sliced_vbi_capture == 0 ||
456c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	    ret_sliced_vbi_output == 0 || ret_video_output_overlay == 0 ||
457c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	    ret_private == 0) {
458c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
459c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_null, EFAULT);
460c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	} else {
461c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_capture, -1);
462c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_null, EINVAL);
463c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_output, -1);
464c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_output, EINVAL);
465c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_video_overlay, -1);
466c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_video_overlay, EINVAL);
467c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_vbi_capture, -1);
468c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_vbi_capture, EINVAL);
469c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_vbi_output, -1);
470c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_vbi_output, EINVAL);
471c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_sliced_vbi_capture, -1);
472c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_sliced_vbi_capture, EINVAL);
473c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_sliced_vbi_output, -1);
474c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_sliced_vbi_output, EINVAL);
475c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_video_output_overlay, -1);
476c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_video_output_overlay, EINVAL);
477c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_private, -1);
478c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_private, EINVAL);
479c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
480c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_null, EINVAL);
481c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	}
4827a86bf3a7fbddf42ef6166f3bddd2278b1522b5asubrata_modak
483ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
484