1a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak/*
2a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak * v4l-test: Test environment for Video For Linux Two API
3a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak *
4c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak *  3 Apr 2009  0.4  Minor style cleanup
5d520c35549ea1fd185405302a6301bfbcf672249subrata_modak *  7 Mar 2009  0.3  Test cases added for VIDIOC_S_CROP
64edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak * 13 Feb 2009  0.2  Test cases added for VIDIOC_G_CROP
7a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak *  7 Feb 2009  0.1  First release
8a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak *
9a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak * Written by M�rton N�meth <nm127@freemail.hu>
10a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak * Released under GPL
11a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak */
12a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
13a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include <sys/ioctl.h>
14a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include <errno.h>
15a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include <string.h>
16a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
17a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include <linux/videodev2.h>
18a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include <linux/errno.h>
19a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
20a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include <CUnit/CUnit.h>
21a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
22a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include "v4l2_test.h"
23a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include "dev_video.h"
24a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include "video_limits.h"
25a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
26a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak#include "test_VIDIOC_CROP.h"
27a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
28354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid do_get_crop(enum v4l2_buf_type type)
29354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
30a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	int ret1, errno1;
31a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	struct v4l2_crop crop;
32a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
33a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	memset(&crop, 0xff, sizeof(crop));
344edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	crop.type = type;
35a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	ret1 = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop);
36a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	errno1 = errno;
37a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
384edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	dprintf("\tVIDIOC_G_CROP: type=%i, ret1=%i, errno1=%i\n",
394edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak		type, ret1, errno1);
40a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
41a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	if (ret1 == 0) {
42a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak		CU_ASSERT_EQUAL(ret1, 0);
43a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
44a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	} else {
45a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak		CU_ASSERT_EQUAL(ret1, -1);
46a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak		CU_ASSERT_EQUAL(errno1, EINVAL);
47a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	}
48a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
49a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak}
50a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
51354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_CROP()
52354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
534edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop(V4L2_BUF_TYPE_VIDEO_CAPTURE);
544edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop(V4L2_BUF_TYPE_VIDEO_OUTPUT);
554edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop(V4L2_BUF_TYPE_VIDEO_OVERLAY);
564edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak}
574edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
58354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid do_get_crop_invalid(enum v4l2_buf_type type)
59354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
604edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	int ret1, errno1;
614edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	struct v4l2_crop crop;
624edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
634edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	memset(&crop, 0xff, sizeof(crop));
644edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	crop.type = type;
654edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	ret1 = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop);
664edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	errno1 = errno;
674edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
684edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	dprintf("\tVIDIOC_G_CROP: type=%i, ret1=%i, errno1=%i\n",
694edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak		type, ret1, errno1);
704edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
714edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	CU_ASSERT_EQUAL(ret1, -1);
724edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	CU_ASSERT_EQUAL(errno1, EINVAL);
734edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak}
744edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
75354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_CROP_invalid()
76354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
774edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(0);
784edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(V4L2_BUF_TYPE_VBI_CAPTURE);
794edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(V4L2_BUF_TYPE_VBI_OUTPUT);
804edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(V4L2_BUF_TYPE_SLICED_VBI_CAPTURE);
814edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
824edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY);
834edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(V4L2_BUF_TYPE_PRIVATE);
844edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(S32_MAX);
85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	do_get_crop_invalid(((__u32) S32_MAX) + 1);
864edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	do_get_crop_invalid(U32_MAX);
874edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak}
884edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_G_CROP_NULL()
90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
91c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_get1, errno_get1;
92c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_get2, errno_get2;
93c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_get3, errno_get3;
94c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	int ret_null, errno_null;
95a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	struct v4l2_crop crop;
96a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
974edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	memset(&crop, 0, sizeof(crop));
984edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
994edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
100c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_get1 = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop);
101c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_get1 = errno;
102a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
103c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP ret_get1=%i, errno_get1=%i\n",
104c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_get1, errno_get1);
105a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
1064edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	memset(&crop, 0, sizeof(crop));
1074edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
1084edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
109c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_get2 = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop);
110c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_get2 = errno;
111a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
112c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP ret_get2=%i, errno_get2=%i\n",
113c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_get2, errno_get2);
114a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
1154edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	memset(&crop, 0, sizeof(crop));
1164edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak	crop.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
1174edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
118c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_get3 = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop);
119c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_get3 = errno;
1204edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
121c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP ret_get3=%i, errno_get3=%i\n",
122c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_get3, errno_get3);
1234edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
124c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	ret_null = ioctl(get_video_fd(), VIDIOC_G_CROP, NULL);
125c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	errno_null = errno;
1264edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
127c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP ret_null=%i, errno_null=%i\n",
128c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		__FILE__, __LINE__, ret_null, errno_null);
1294edf14a85b2796a144943d7bd54c4e2c44d1ab32subrata_modak
130c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak	if (ret_get1 == 0 || ret_get2 == 0 || ret_get3 == 0) {
131c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
132c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_null, EFAULT);
133a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
134a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	} else {
135c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_get1, -1);
136c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_get1, EINVAL);
137c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_get2, -1);
138c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_get2, EINVAL);
139c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_get3, -1);
140c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_get3, EINVAL);
141c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
142c6701fc589fbfd84c6219c5669f3b1a2716f50f3subrata_modak		CU_ASSERT_EQUAL(errno_null, EINVAL);
143a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
144a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak	}
145a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak
146a157bd2fcb85f064d776ec857b64f8e070b710a9subrata_modak}
147d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid do_set_crop(enum v4l2_buf_type type)
149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
150d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_orig, errno_orig;
151d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_set, errno_set;
152d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_new, errno_new;
153d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_cap, errno_cap;
154d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_crop crop_orig;
155d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_crop crop;
156d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_crop crop_new;
157d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_cropcap cropcap;
158d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	__s32 i;
159d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
160d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop_orig, 0, sizeof(crop_orig));
161d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop_orig.type = type;
162d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_orig = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_orig);
163d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_orig = errno;
164d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP, ret_orig=%i, errno_orig=%i, "
165d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop_orig = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
166d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
167d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_orig, errno_orig,
168d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_orig.type,
169d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_orig.c.left,
170354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop_orig.c.top, crop_orig.c.width, crop_orig.c.height);
171d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
172d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&cropcap, 0, sizeof(cropcap));
173d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	cropcap.type = type;
174d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_cap = ioctl(get_video_fd(), VIDIOC_CROPCAP, &cropcap);
175d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_cap = errno;
176d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
177354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
178354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_CROPCAP, ret_cap=%i, errno_cap=%i, cropcap = { .type = %i, "
179354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".bounds = { .left = %i, .top = %i, .width = %i, .height = %i }, "
180354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".defrect = { .left = %i, .top = %i, .width = %i, .height = %i }, "
181354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".pixelaspect = { .numerator = %u, .denominator = %u } " "}\n",
182354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_cap, errno_cap, cropcap.type,
183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.bounds.left, cropcap.bounds.top, cropcap.bounds.width,
184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.bounds.height, cropcap.defrect.left, cropcap.defrect.top,
185354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.defrect.width, cropcap.defrect.height,
186354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.pixelaspect.numerator, cropcap.pixelaspect.denominator);
187d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
188d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop, 0xff, sizeof(crop));
189d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.type = type;
190d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.c = cropcap.bounds;
191d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
192d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_set = errno;
193d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i, "
194d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
195d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
196d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set, errno_set,
197d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.type,
198354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.left, crop.c.top, crop.c.width, crop.c.height);
199d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
200d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop_new, 0, sizeof(crop_new));
201d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop_new.type = type;
202d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_new = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_new);
203d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_new = errno;
204d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP, ret_new=%i, errno_new=%i, "
205d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop_new = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
206d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
207d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_new, errno_new,
208d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.type,
209d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.c.left,
210354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop_new.c.top, crop_new.c.width, crop_new.c.height);
211d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
212d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	if (ret_cap == 0) {
213d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_cap, 0);
214d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, 0);
215d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_new, 0);
216d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
217d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		if (ret_cap == 0 && ret_new == 0) {
218d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
219354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |   left                                   x   */
220354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* ----+----+-------------------------------------->  */
221354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    :                                         */
222354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* top +    +------ cropcap.bounds -------+  ^        */
223354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    |                             |  |        */
224354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | +------- crop_new --------+ |  |        */
225354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | |                         | |  |        */
226354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | |                         | |  |        */
227354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | |                         | |  | height */
228354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | +-------------------------+ |  |        */
229354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    |                             |  |        */
230354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    |                             |  |        */
231354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    +-----------------------------+  v        */
232354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    :                             :           */
233354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    <---------- width ------------>           */
234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |                                              */
235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     v y                                            */
236d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
237d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT(cropcap.bounds.left <= crop_new.c.left);
238d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT(cropcap.bounds.top <= crop_new.c.top);
239d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
240354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT(crop_new.c.left + crop_new.c.width <=
241354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  cropcap.bounds.left + cropcap.bounds.width);
242354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT(crop_new.c.top + crop_new.c.height <=
243354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  cropcap.bounds.top + cropcap.bounds.height);
244d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		}
245d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
246d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	} else {
247d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_cap, -1);
248d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_cap, EINVAL);
249d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, -1);
250d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_set, EINVAL);
251d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_new, -1);
252d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_new, EINVAL);
253d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
254d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
255d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
256d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop, 0xff, sizeof(crop));
257d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.type = type;
258d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.c = cropcap.defrect;
259d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
260d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_set = errno;
261d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i, "
262d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
263d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
264d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set, errno_set,
265d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.type,
266354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.left, crop.c.top, crop.c.width, crop.c.height);
267d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
268d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop_new, 0, sizeof(crop_new));
269d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop_new.type = type;
270d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_new = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_new);
271d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_new = errno;
272d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP, ret_new=%i, errno_new=%i, "
273d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop_new = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
274d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
275d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_new, errno_new,
276d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.type,
277d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.c.left,
278354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop_new.c.top, crop_new.c.width, crop_new.c.height);
279d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
280d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	if (ret_cap == 0) {
281d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_cap, 0);
282d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, 0);
283d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_new, 0);
284d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
285d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		if (ret_cap == 0 && ret_new == 0) {
286d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
287354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |   left                                   x   */
288354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* ----+----+-------------------------------------->  */
289354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    :                                         */
290354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/* top +    +------ cropcap.defrect ------+  ^        */
291354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    |                             |  |        */
292354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | +------- crop_new --------+ |  |        */
293354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | |                         | |  |        */
294354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | |                         | |  |        */
295354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | |                         | |  | height */
296354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    | +-------------------------+ |  |        */
297354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    |                             |  |        */
298354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    |                             |  |        */
299354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    +-----------------------------+  v        */
300354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    :                             :           */
301354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |    <---------- width ------------>           */
302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     |                                              */
303354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*     v y                                            */
304d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
305d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT(cropcap.defrect.left <= crop_new.c.left);
306d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT(cropcap.defrect.top <= crop_new.c.top);
307d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
308354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT(crop_new.c.left + crop_new.c.width <=
309354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  cropcap.defrect.left + cropcap.defrect.width);
310354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			CU_ASSERT(crop_new.c.top + crop_new.c.height <=
311354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				  cropcap.defrect.top + cropcap.defrect.height);
312d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		}
313d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
314d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	} else {
315d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_cap, -1);
316d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_cap, EINVAL);
317d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, -1);
318d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_set, EINVAL);
319d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_new, -1);
320d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_new, EINVAL);
321d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
322d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
323d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
324d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |   left                                   x   */
325d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* ----+----+-------------------------------------->  */
326d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                                         */
327d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* top +    +-------- crop.c -------------+  ^        */
328d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :     |  |        */
329d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :     |  |        */
330d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :     |  |        */
331d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :<----|  |        */
332d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :     |  | height */
333d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :     |  |        */
334d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :     |  |        */
335d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                       :     |  |        */
336d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    +-----------------------------+  v        */
337d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                             :           */
338d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    <---------- width ------------>           */
339d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |                                              */
340d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     v y                                            */
341354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < cropcap.bounds.width; i++) {
342d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop, 0xff, sizeof(crop));
343d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.type = type;
344d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.left = cropcap.bounds.left;
345d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.top = cropcap.bounds.top;
346354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.width = cropcap.bounds.width - i;
347d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.height = cropcap.bounds.height;
348d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
349d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_set = errno;
350d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i, "
351d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
352d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
353d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_set, errno_set,
354d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop.type,
355354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop.c.left, crop.c.top, crop.c.width, crop.c.height);
356d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
357d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop_new, 0, sizeof(crop_new));
358d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.type = type;
359d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_new = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_new);
360d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_new = errno;
361d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_G_CROP, ret_new=%i, errno_new=%i, "
362d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop_new = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
363d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
364d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_new, errno_new,
365d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.type,
366d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.c.left,
367354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop_new.c.top, crop_new.c.width, crop_new.c.height);
368d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
369d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		if (ret_cap == 0) {
370d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, 0);
371d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, 0);
372d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, 0);
373d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
374d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			if (ret_cap == 0 && ret_new == 0) {
375d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
376354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.left <=
377354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.left);
378354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.top <=
379354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.top);
380354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
381354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.left + crop_new.c.width <=
382354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.left +
383354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.width);
384354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.top + crop_new.c.height <=
385354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.top +
386354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.height);
387d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			}
388d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
389d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		} else {
390d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, -1);
391d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_cap, EINVAL);
392d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, -1);
393d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_set, EINVAL);
394d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, -1);
395d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_new, EINVAL);
396d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		}
397d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
398d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
399d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |   left                                   x   */
400d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* ----+----+-------------------------------------->  */
401d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                                         */
402d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* top +    +---------- crop.c -----------+  ^        */
403d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  |        */
404d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  |        */
405d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  |        */
406d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  |        */
407d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |.............................|  | height */
408d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |             ^               |  |        */
409d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |             |               |  |        */
410d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |             |               |  |        */
411d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    +-----------------------------+  v        */
412d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                             :           */
413d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    <---------- width ------------>           */
414d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |                                              */
415d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     v y                                            */
416354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < cropcap.bounds.height; i++) {
417d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop, 0xff, sizeof(crop));
418d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.type = type;
419d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.left = cropcap.bounds.left;
420d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.top = cropcap.bounds.top;
421d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.width = cropcap.bounds.width;
422354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.height = cropcap.bounds.height - i;
423d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
424d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_set = errno;
425d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i, "
426d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
427d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
428d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_set, errno_set,
429d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop.type,
430354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop.c.left, crop.c.top, crop.c.width, crop.c.height);
431d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
432d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop_new, 0, sizeof(crop_new));
433d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.type = type;
434d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_new = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_new);
435d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_new = errno;
436d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_G_CROP, ret_new=%i, errno_new=%i, "
437d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop_new = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
438d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
439d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_new, errno_new,
440d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.type,
441d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.c.left,
442354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop_new.c.top, crop_new.c.width, crop_new.c.height);
443d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
444d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		if (ret_cap == 0) {
445d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, 0);
446d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, 0);
447d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, 0);
448d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
449d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			if (ret_cap == 0 && ret_new == 0) {
450d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
451354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.left <=
452354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.left);
453354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.top <=
454354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.top);
455354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
456354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.left + crop_new.c.width <=
457354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.left +
458354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.width);
459354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.top + crop_new.c.height <=
460354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.top +
461354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.height);
462d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			}
463d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
464d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		} else {
465d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, -1);
466d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_cap, EINVAL);
467d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, -1);
468d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_set, EINVAL);
469d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, -1);
470d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_new, EINVAL);
471d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		}
472d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
473d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
474d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |   left                                   x   */
475d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* ----+----+-------------------------------------->  */
476d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                                         */
477d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* top +    +---------- crop.c -----------+  ^        */
478d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |    :                        |  |        */
479d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |    :                        |  |        */
480d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |    :                        |  |        */
481d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |--->:                        |  |        */
482d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |    :                        |  | height */
483d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |    :                        |  |        */
484d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |    :                        |  |        */
485d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |    :                        |  |        */
486d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    +-----------------------------+  v        */
487d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                             :           */
488d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    <---------- width ------------>           */
489d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |                                              */
490d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     v y                                            */
491354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < cropcap.bounds.width; i++) {
492d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop, 0xff, sizeof(crop));
493d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.type = type;
494354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.left = cropcap.bounds.left + i;
495d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.top = cropcap.bounds.top;
496354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.width = cropcap.bounds.width - i;
497d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.height = cropcap.bounds.height;
498d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
499d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_set = errno;
500d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i, "
501d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
502d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
503d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_set, errno_set,
504d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop.type,
505354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop.c.left, crop.c.top, crop.c.width, crop.c.height);
506d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
507d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop_new, 0, sizeof(crop_new));
508d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.type = type;
509d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_new = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_new);
510d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_new = errno;
511d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_G_CROP, ret_new=%i, errno_new=%i, "
512d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop_new = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
513d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
514d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_new, errno_new,
515d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.type,
516d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.c.left,
517354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop_new.c.top, crop_new.c.width, crop_new.c.height);
518d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
519d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		if (ret_cap == 0) {
520d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, 0);
521d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, 0);
522d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, 0);
523d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
524d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			if (ret_cap == 0 && ret_new == 0) {
525d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
526354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.left <=
527354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.left);
528354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.top <=
529354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.top);
530354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
531354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.left + crop_new.c.width <=
532354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.left +
533354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.width);
534354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.top + crop_new.c.height <=
535354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.top +
536354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.height);
537d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			}
538d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
539d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		} else {
540d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, -1);
541d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_cap, EINVAL);
542d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, -1);
543d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_set, EINVAL);
544d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, -1);
545d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_new, EINVAL);
546d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		}
547d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
548d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
549d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |   left                                   x   */
550d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* ----+----+-------------------------------------->  */
551d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                                         */
552d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/* top +    +---------- crop.c -----------+  ^        */
553d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |         |                   |  |        */
554d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |         |                   |  |        */
555d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |         v                   |  |        */
556d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |.............................|  |        */
557d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  | height */
558d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  |        */
559d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  |        */
560d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    |                             |  |        */
561d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    +-----------------------------+  v        */
562d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    :                             :           */
563d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |    <---------- width ------------>           */
564d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     |                                              */
565d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	/*     v y                                            */
566354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < cropcap.bounds.height; i++) {
567d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop, 0xff, sizeof(crop));
568d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.type = type;
569d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.left = cropcap.bounds.left;
570354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.top = cropcap.bounds.top + i;
571d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.c.width = cropcap.bounds.width;
572354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.height = cropcap.bounds.height - i;
573d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
574d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_set = errno;
575d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i, "
576d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
577d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
578d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_set, errno_set,
579d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop.type,
580354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop.c.left, crop.c.top, crop.c.width, crop.c.height);
581d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
582d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		memset(&crop_new, 0, sizeof(crop_new));
583d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.type = type;
584d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_new = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_new);
585d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_new = errno;
586d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_G_CROP, ret_new=%i, errno_new=%i, "
587d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			"crop_new = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
588d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__,
589d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			ret_new, errno_new,
590d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.type,
591d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			crop_new.c.left,
592354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			crop_new.c.top, crop_new.c.width, crop_new.c.height);
593d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
594d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		if (ret_cap == 0) {
595d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, 0);
596d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, 0);
597d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, 0);
598d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
599d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			if (ret_cap == 0 && ret_new == 0) {
600d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
601354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.left <=
602354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.left);
603354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(cropcap.defrect.top <=
604354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  crop_new.c.top);
605354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
606354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.left + crop_new.c.width <=
607354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.left +
608354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.width);
609354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				CU_ASSERT(crop_new.c.top + crop_new.c.height <=
610354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.top +
611354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					  cropcap.defrect.height);
612d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			}
613d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
614d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		} else {
615d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_cap, -1);
616d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_cap, EINVAL);
617d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_set, -1);
618d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_set, EINVAL);
619d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(ret_new, -1);
620d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			CU_ASSERT_EQUAL(errno_new, EINVAL);
621d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		}
622d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
623d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
624d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	if (ret_orig == 0) {
625d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		/* it shall be possible to restore the original settings */
626d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop_orig);
627d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_set = errno;
628d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i\n",
629d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__, ret_set, errno_set);
630d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, 0);
631d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
632d520c35549ea1fd185405302a6301bfbcf672249subrata_modak}
633d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
634354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_S_CROP()
635354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
636d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
637d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop(V4L2_BUF_TYPE_VIDEO_CAPTURE);
638d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop(V4L2_BUF_TYPE_VIDEO_OUTPUT);
639d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop(V4L2_BUF_TYPE_VIDEO_OVERLAY);
640d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop(V4L2_BUF_TYPE_PRIVATE);
641d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
642d520c35549ea1fd185405302a6301bfbcf672249subrata_modak}
643d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
644354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid do_set_crop_invalid(enum v4l2_buf_type type)
645354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
646d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_set, errno_set;
647d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_new, errno_new;
648d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_cap, errno_cap;
649d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_crop crop;
650d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_crop crop_new;
651d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_cropcap cropcap;
652d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
653d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&cropcap, 0, sizeof(cropcap));
654d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	cropcap.type = type;
655d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_cap = ioctl(get_video_fd(), VIDIOC_CROPCAP, &cropcap);
656d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_cap = errno;
657d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
658354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
659354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_CROPCAP, ret_cap=%i, errno_cap=%i, cropcap = { .type = %i, "
660354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".bounds = { .left = %i, .top = %i, .width = %i, .height = %i }, "
661354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".defrect = { .left = %i, .top = %i, .width = %i, .height = %i }, "
662354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".pixelaspect = { .numerator = %u, .denominator = %u } " "}\n",
663354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_cap, errno_cap, cropcap.type,
664354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.bounds.left, cropcap.bounds.top, cropcap.bounds.width,
665354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.bounds.height, cropcap.defrect.left, cropcap.defrect.top,
666354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.defrect.width, cropcap.defrect.height,
667354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.pixelaspect.numerator, cropcap.pixelaspect.denominator);
668d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
669d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop, 0xff, sizeof(crop));
670d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.type = type;
671d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.c = cropcap.bounds;
672d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
673d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_set = errno;
674d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i, "
675d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
676d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
677d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set, errno_set,
678d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop.type,
679354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop.c.left, crop.c.top, crop.c.width, crop.c.height);
680d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
681d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop_new, 0, sizeof(crop_new));
682d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop_new.type = type;
683d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_new = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_new);
684d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_new = errno;
685d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP, ret_new=%i, errno_new=%i, "
686d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop_new = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
687d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
688d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_new, errno_new,
689d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.type,
690d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_new.c.left,
691354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop_new.c.top, crop_new.c.width, crop_new.c.height);
692d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
693d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	CU_ASSERT_EQUAL(ret_cap, -1);
694d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	CU_ASSERT_EQUAL(errno_cap, EINVAL);
695d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	CU_ASSERT_EQUAL(ret_set, -1);
696d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	CU_ASSERT_EQUAL(errno_set, EINVAL);
697d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	CU_ASSERT_EQUAL(ret_new, -1);
698d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	CU_ASSERT_EQUAL(errno_new, EINVAL);
699d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
700d520c35549ea1fd185405302a6301bfbcf672249subrata_modak}
701d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
702354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_S_CROP_invalid()
703354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
704d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(0);
705d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(V4L2_BUF_TYPE_VBI_CAPTURE);
706d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(V4L2_BUF_TYPE_VBI_OUTPUT);
707d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(V4L2_BUF_TYPE_SLICED_VBI_CAPTURE);
708d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
709d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY);
710d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(V4L2_BUF_TYPE_PRIVATE);
711d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(S32_MAX);
712354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	do_set_crop_invalid(((__u32) S32_MAX) + 1);
713d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_invalid(U32_MAX);
714d520c35549ea1fd185405302a6301bfbcf672249subrata_modak}
715d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
716354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid do_set_crop_null(enum v4l2_buf_type type)
717354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
718d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_orig, errno_orig;
719d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_set, errno_set;
720d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_cap, errno_cap;
721d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	int ret_null, errno_null;
722d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_crop crop;
723d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_crop crop_orig;
724d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	struct v4l2_cropcap cropcap;
725d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
726d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop_orig, 0, sizeof(crop_orig));
727d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop_orig.type = type;
728d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_orig = ioctl(get_video_fd(), VIDIOC_G_CROP, &crop_orig);
729d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_orig = errno;
730d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_G_CROP, ret_orig=%i, errno_orig=%i, "
731d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		"crop_orig = { .type=%i, .c={ .left=%i, .top=%i, .width=%i, .height=%i }}\n",
732d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__,
733d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_orig, errno_orig,
734d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_orig.type,
735d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		crop_orig.c.left,
736354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		crop_orig.c.top, crop_orig.c.width, crop_orig.c.height);
737d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
738d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&cropcap, 0, sizeof(cropcap));
739d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	cropcap.type = type;
740d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_cap = ioctl(get_video_fd(), VIDIOC_CROPCAP, &cropcap);
741d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_cap = errno;
742d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
743354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dprintf
744354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    ("\t%s:%u: VIDIOC_CROPCAP, ret_cap=%i, errno_cap=%i, cropcap = { .type = %i, "
745354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".bounds = { .left = %i, .top = %i, .width = %i, .height = %i }, "
746354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".defrect = { .left = %i, .top = %i, .width = %i, .height = %i }, "
747354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     ".pixelaspect = { .numerator = %u, .denominator = %u } " "}\n",
748354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     __FILE__, __LINE__, ret_cap, errno_cap, cropcap.type,
749354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.bounds.left, cropcap.bounds.top, cropcap.bounds.width,
750354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.bounds.height, cropcap.defrect.left, cropcap.defrect.top,
751354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.defrect.width, cropcap.defrect.height,
752354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	     cropcap.pixelaspect.numerator, cropcap.pixelaspect.denominator);
753d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
754d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	memset(&crop, 0, sizeof(crop));
755d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.type = type;
756d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	crop.c = cropcap.bounds;
757d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop);
758d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_set = errno;
759d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i\n",
760d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__, ret_set, errno_set);
761d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
762d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	ret_null = ioctl(get_video_fd(), VIDIOC_S_CROP, NULL);
763d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	errno_null = errno;
764d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	dprintf("\t%s:%u: VIDIOC_S_CROP, ret_null=%i, errno_null=%i\n",
765d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		__FILE__, __LINE__, ret_null, errno_null);
766d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
767d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	if (ret_set == 0) {
768d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, 0);
769d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
770d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_null, EFAULT);
771d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
772d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	} else {
773d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, -1);
774d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_set, EINVAL);
775d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_null, -1);
776d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(errno_null, EINVAL);
777d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
778d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
779d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
780d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	if (ret_orig == 0) {
781d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		/* it shall be possible to restore the original settings */
782d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		ret_set = ioctl(get_video_fd(), VIDIOC_S_CROP, &crop_orig);
783d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		errno_set = errno;
784d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		dprintf("\t%s:%u: VIDIOC_S_CROP, ret_set=%i, errno_set=%i\n",
785d520c35549ea1fd185405302a6301bfbcf672249subrata_modak			__FILE__, __LINE__, ret_set, errno_set);
786d520c35549ea1fd185405302a6301bfbcf672249subrata_modak		CU_ASSERT_EQUAL(ret_set, 0);
787d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	}
788d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
789d520c35549ea1fd185405302a6301bfbcf672249subrata_modak}
790d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
791354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid test_VIDIOC_S_CROP_NULL()
792354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
793d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
794d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_null(V4L2_BUF_TYPE_VIDEO_CAPTURE);
795d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_null(V4L2_BUF_TYPE_VIDEO_OUTPUT);
796d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_null(V4L2_BUF_TYPE_VIDEO_OVERLAY);
797d520c35549ea1fd185405302a6301bfbcf672249subrata_modak	do_set_crop_null(V4L2_BUF_TYPE_PRIVATE);
798d520c35549ea1fd185405302a6301bfbcf672249subrata_modak
799ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
800