• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * v4l-test: Test environment for Video For Linux Two API
3  *
4  * 16 Jun 2009  0.1  First release
5  *
6  * Written by M�rton N�meth <nm127@freemail.hu>
7  * Released under GPL
8  */
9 
10 #include <stdio.h>
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 #include <fcntl.h>
14 #include <unistd.h>
15 #include <sys/ioctl.h>
16 #include <errno.h>
17 #include <string.h>
18 
19 #include <linux/videodev2.h>
20 #include <linux/errno.h>
21 
22 #include <CUnit/CUnit.h>
23 
24 #include "v4l2_test.h"
25 #include "dev_video.h"
26 #include "video_limits.h"
27 #include "v4l2_validator.h"
28 #include "v4l2_foreach.h"
29 
30 #include "test_VIDIOC_JPEGCOMP.h"
31 
valid_jpeg_markers(__u32 jpeg_markers)32 static int valid_jpeg_markers(__u32 jpeg_markers)
33 {
34 	int valid = 0;
35 
36 	if ((jpeg_markers & ~(V4L2_JPEG_MARKER_DHT |
37 			      V4L2_JPEG_MARKER_DQT |
38 			      V4L2_JPEG_MARKER_DRI |
39 			      V4L2_JPEG_MARKER_COM | V4L2_JPEG_MARKER_APP))
40 	    == 0) {
41 		valid = 1;
42 	} else {
43 		valid = 0;
44 	}
45 	return valid;
46 }
47 
test_VIDIOC_G_JPEGCOMP()48 void test_VIDIOC_G_JPEGCOMP()
49 {
50 	struct v4l2_jpegcompression jpegcomp;
51 	int ret_get, errno_get;
52 
53 	memset(&jpegcomp, 0xff, sizeof(jpegcomp));
54 	ret_get = ioctl(get_video_fd(), VIDIOC_G_JPEGCOMP, &jpegcomp);
55 	errno_get = errno;
56 
57 	dprintf("\tVIDIOC_G_JPEGCOMP, ret_get=%i, errno_get=%i\n", ret_get,
58 		errno_get);
59 
60 	if (ret_get == 0) {
61 		CU_ASSERT_EQUAL(ret_get, 0);
62 
63 		//CU_ASSERT_EQUAL(jpegcomp.quality, ???);
64 		//CU_ASSERT_EQUAL(jpegcomp.APPn, ???);
65 		CU_ASSERT(0 <= jpegcomp.APP_len);
66 		CU_ASSERT(jpegcomp.APP_len <= (int)sizeof(jpegcomp.APP_data));
67 		//CU_ASSERT_EQUAL(jpegcomp.APP_data, ???);
68 		CU_ASSERT(0 <= jpegcomp.COM_len);
69 		CU_ASSERT(jpegcomp.COM_len <= (int)sizeof(jpegcomp.COM_data));
70 		//CU_ASSERT_EQUAL(jpegcomp.COM_data, ???);
71 		CU_ASSERT(valid_jpeg_markers(jpegcomp.jpeg_markers));
72 
73 		dprintf("\tjpegcomp = { .quality=%i, "
74 			".APPn=%i, "
75 			".APP_len=%i, "
76 			".APP_data=..., "
77 			".COM_len=%i, "
78 			".COM_data=..., "
79 			".jpeg_markers=0x%x ",
80 			jpegcomp.quality, jpegcomp.APPn, jpegcomp.APP_len,
81 			//jpegcomp.APP_data,
82 			jpegcomp.COM_len,
83 			//jpegcomp.COM_data,
84 			jpegcomp.jpeg_markers);
85 
86 	} else {
87 		CU_ASSERT_EQUAL(ret_get, -1);
88 		CU_ASSERT_EQUAL(errno_get, EINVAL);
89 	}
90 
91 }
92 
test_VIDIOC_G_JPEGCOMP_NULL()93 void test_VIDIOC_G_JPEGCOMP_NULL()
94 {
95 	struct v4l2_jpegcompression jpegcomp;
96 	int ret_get, errno_get;
97 	int ret_null, errno_null;
98 
99 	memset(&jpegcomp, 0, sizeof(jpegcomp));
100 	ret_get = ioctl(get_video_fd(), VIDIOC_G_JPEGCOMP, &jpegcomp);
101 	errno_get = errno;
102 
103 	dprintf("\tVIDIOC_G_JPEGCOMP, ret_get=%i, errno_get=%i\n", ret_get,
104 		errno_get);
105 
106 	ret_null = ioctl(get_video_fd(), VIDIOC_G_JPEGCOMP, NULL);
107 	errno_null = errno;
108 
109 	dprintf("\tVIDIOC_G_JPEGCOMP, ret_null=%i, errno_null=%i\n", ret_null,
110 		errno_null);
111 
112 	if (ret_get == 0) {
113 		CU_ASSERT_EQUAL(ret_get, 0);
114 		CU_ASSERT_EQUAL(ret_null, -1);
115 		CU_ASSERT_EQUAL(errno_null, EFAULT);
116 	} else {
117 		CU_ASSERT_EQUAL(ret_get, -1);
118 		CU_ASSERT_EQUAL(errno_get, EINVAL);
119 		CU_ASSERT_EQUAL(ret_null, -1);
120 		CU_ASSERT_EQUAL(errno_null, EINVAL);
121 	}
122 
123 }
124