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