Update of /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv5393/ltp/testcases/kernel/device-drivers/v4l/user_space Modified Files: Makefile README test_VIDIOC_CROPCAP.c test_VIDIOC_ENUMAUDIO.c test_VIDIOC_ENUMAUDIO.h test_VIDIOC_ENUMINPUT.c test_VIDIOC_ENUMINPUT.h test_VIDIOC_ENUMSTD.c test_VIDIOC_ENUMSTD.h test_VIDIOC_ENUM_FMT.c test_VIDIOC_ENUM_FMT.h test_VIDIOC_QUERYCAP.c test_VIDIOC_STD.c v4l2_test.c v4l2_test.h video_limits.h Added Files: test_VIDIOC_ENUMAUDOUT.c test_VIDIOC_ENUMAUDOUT.h test_VIDIOC_ENUMOUTPUT.c test_VIDIOC_ENUMOUTPUT.h test_VIDIOC_LOG_STATUS.c test_VIDIOC_LOG_STATUS.h test_VIDIOC_QUERYCTRL.c test_VIDIOC_QUERYCTRL.h Log Message: Today I released version 0.3 of v4l-test, see http://v4l-test.sourceforge.net/ for details. I also updated the LTP tree, and I attached the two files in this email. The first file is a patch against ltp-full-20081231. The second file is a tar.gz which contains the binary image files which are part of the original V4L2 API specification, revision 0.24. Signed-Off-By: Németh Márton <nm...@fr...>. --- NEW FILE: test_VIDIOC_LOG_STATUS.c --- /* * v4l-test: Test environment for Video For Linux Two API * * 23 Dec 2008 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <errno.h> #include <string.h> #include <linux/videodev2.h> #include <linux/errno.h> #include <CUnit/CUnit.h> #include "v4l2_test.h" #include "dev_video.h" #include "video_limits.h" #include "test_VIDIOC_LOG_STATUS.h" void test_VIDIOC_LOG_STATUS() { int ret; ret = ioctl(get_video_fd(), VIDIOC_LOG_STATUS); dprintf("ret=%i, errno=%i\n", ret, errno); /* this is an optional ioctl, so two possible return values */ /* are possible */ if (ret == 0) { CU_ASSERT_EQUAL(ret, 0); /* TODO: check if something is shown in dmesg */ } else { CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); } } Index: Makefile =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/Makefile,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Makefile 30 Dec 2008 07:32:53 -0000 1.1 --- Makefile 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,8 ---- # v4l-test: Test environment for Video For Linux Two API # + # 1 Jan 2009 0.4 test_VIDIOC_ENUMOUTPUT.c added, + # test_VIDIOC_QUERYCTRL.c added + # 23 Dec 2008 0.3 test_VIDIOC_LOG_STATUS.c added # 22 Dec 2008 0.2 test_VIDIOC_QUERYCAP.c added # 18 Dec 2008 0.1 First release *************** *** 13,31 **** LDFLAGS = -lcunit ! all: ! gcc $(CFLAGS) $(LDFLAGS) \ ! dev_video.c \ ! test_VIDIOC_QUERYCAP.c \ ! test_VIDIOC_CROPCAP.c \ ! test_VIDIOC_STD.c \ ! test_VIDIOC_INPUT.c \ ! test_invalid_ioctl.c \ ! test_VIDIOC_ENUM_FMT.c \ ! test_VIDIOC_ENUMINPUT.c \ ! test_VIDIOC_ENUMSTD.c \ ! test_VIDIOC_ENUMAUDIO.c \ ! v4l2_test.c \ ! -o v4l-test clean: rm -f v4l-test --- 16,41 ---- LDFLAGS = -lcunit ! # TODO: handle dependencies ! ! OBJS = dev_video.o \ ! test_VIDIOC_QUERYCAP.o \ ! test_VIDIOC_ENUMAUDIO.o \ ! test_VIDIOC_ENUMAUDOUT.o \ ! test_VIDIOC_ENUM_FMT.o \ ! test_VIDIOC_ENUMINPUT.o \ ! test_VIDIOC_ENUMOUTPUT.o \ ! test_VIDIOC_ENUMSTD.o \ ! test_VIDIOC_LOG_STATUS.o \ ! test_VIDIOC_CROPCAP.o \ ! test_VIDIOC_QUERYCTRL.o \ ! test_VIDIOC_STD.o \ ! test_VIDIOC_INPUT.o \ ! test_invalid_ioctl.o \ ! v4l2_test.o ! ! all: $(OBJS) ! $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -o v4l-test clean: + rm -f $(OBJS) rm -f v4l-test --- NEW FILE: test_VIDIOC_LOG_STATUS.h --- /* * v4l-test: Test environment for Video For Linux Two API * * 23 Dec 2008 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL */ void test_VIDIOC_LOG_STATUS(void); Index: test_VIDIOC_ENUMSTD.h =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMSTD.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUMSTD.h 30 Dec 2008 07:32:54 -0000 1.1 --- test_VIDIOC_ENUMSTD.h 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Added index=S32_MAX and S32_MAX+1 * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 9,14 **** */ ! void test_VIDIOC_ENUMSTD_1(void); ! void test_VIDIOC_ENUMSTD_2(void); void test_VIDIOC_ENUMSTD_3(void); void test_VIDIOC_ENUMSTD_NULL(void); --- 10,17 ---- */ ! void test_VIDIOC_ENUMSTD(void); ! void test_VIDIOC_ENUMSTD_S32_MAX(void); ! void test_VIDIOC_ENUMSTD_S32_MAX_1(void); ! void test_VIDIOC_ENUMSTD_U32_MAX(void); void test_VIDIOC_ENUMSTD_3(void); void test_VIDIOC_ENUMSTD_NULL(void); Index: test_VIDIOC_ENUMSTD.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMSTD.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUMSTD.c 30 Dec 2008 07:32:54 -0000 1.1 --- test_VIDIOC_ENUMSTD.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Added index=S32_MAX and S32_MAX+1 * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 9,12 **** --- 10,18 ---- */ + /* TODO: from V4L2 Spec: + * "Drivers may enumerate a different set of standards after switching the video input or output." + * + */ + #include <stdio.h> #include <sys/types.h> *************** *** 32,36 **** #define MAX_EM28XX_TVNORMS 10 ! void test_VIDIOC_ENUMSTD_1() { int ret; struct v4l2_standard std; --- 38,42 ---- #define MAX_EM28XX_TVNORMS 10 ! void test_VIDIOC_ENUMSTD() { int ret; struct v4l2_standard std; *************** *** 93,97 **** } ! void test_VIDIOC_ENUMSTD_2() { int ret; struct v4l2_standard std; --- 99,138 ---- } ! void test_VIDIOC_ENUMSTD_S32_MAX() { ! int ret; ! struct v4l2_standard std; ! struct v4l2_standard std2; ! ! memset(&std, 0xff, sizeof(std)); ! std.index = (__u32)S32_MAX; ! ret = ioctl(get_video_fd(), VIDIOC_ENUMSTD, &std); ! ! CU_ASSERT_EQUAL(ret, -1); ! CU_ASSERT_EQUAL(errno, EINVAL); ! ! memset(&std2, 0xff, sizeof(std2)); ! std2.index = (__u32)S32_MAX; ! CU_ASSERT_EQUAL(memcmp(&std, &std2, sizeof(std)), 0); ! } ! ! void test_VIDIOC_ENUMSTD_S32_MAX_1() { ! int ret; ! struct v4l2_standard std; ! struct v4l2_standard std2; ! ! memset(&std, 0xff, sizeof(std)); ! std.index = ((__u32)S32_MAX)+1; ! ret = ioctl(get_video_fd(), VIDIOC_ENUMSTD, &std); ! ! CU_ASSERT_EQUAL(ret, -1); ! CU_ASSERT_EQUAL(errno, EINVAL); ! ! memset(&std2, 0xff, sizeof(std2)); ! std2.index = ((__u32)S32_MAX)+1; ! CU_ASSERT_EQUAL(memcmp(&std, &std2, sizeof(std)), 0); ! } ! ! ! void test_VIDIOC_ENUMSTD_U32_MAX() { int ret; struct v4l2_standard std; Index: test_VIDIOC_QUERYCAP.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCAP.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_QUERYCAP.c 30 Dec 2008 07:32:54 -0000 1.1 --- test_VIDIOC_QUERYCAP.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 30,42 **** #include "test_VIDIOC_QUERYCAP.h" - #ifndef V4L2_CAP_VIDEO_OUTPUT_OVERLAY - #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 - #endif - - #ifndef V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY - #define V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 8 - #endif - - int valid_capabilities(__u32 capabilities) { int valid = 1; --- 30,33 ---- --- NEW FILE: test_VIDIOC_ENUMOUTPUT.c --- /* * v4l-test: Test environment for Video For Linux Two API * * 1 Jan 2009 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <errno.h> #include <string.h> #include <linux/videodev2.h> #include <linux/errno.h> #include <CUnit/CUnit.h> #include <CUnit/Basic.h> #include "v4l2_test.h" #include "dev_video.h" #include "video_limits.h" #include "test_VIDIOC_ENUMOUTPUT.h" void test_VIDIOC_ENUMOUTPUT() { int ret; struct v4l2_output output; struct v4l2_output output2; __u32 i; i = 0; do { memset(&output, 0xff, sizeof(output)); output.index = i; ret = ioctl(get_video_fd(), VIDIOC_ENUMOUTPUT, &output); dprintf("VIDIOC_ENUMOUTPUT, ret=%i\n", ret); if (ret == 0) { CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(output.index, i); //CU_ASSERT_EQUAL(output.name, ?); CU_ASSERT(0 < strlen( (char*)output.name )); //CU_ASSERT_EQUAL(output.type, ?); //CU_ASSERT_EQUAL(output.audioset, ?); //CU_ASSERT_EQUAL(output.modulator, ?); //CU_ASSERT_EQUAL(output.std, ?); CU_ASSERT_EQUAL(output.reserved[0], 0); CU_ASSERT_EQUAL(output.reserved[1], 0); CU_ASSERT_EQUAL(output.reserved[2], 0); CU_ASSERT_EQUAL(output.reserved[3], 0); dprintf("\toutput = {.index=%u, .name=\"%s\", " ".type=0x%X, .audioset=0x%X, .modulator=0x%X, " ".std=%llX, " ".reserved[]={ 0x%X, 0x%X, 0x%X, 0x%X } }\n", output.index, output.name, output.type, output.audioset, output.modulator, output.std, output.reserved[0], output.reserved[1], output.reserved[2], output.reserved[3] ); } else { CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&output2, 0xff, sizeof(output2)); output2.index = i; CU_ASSERT_EQUAL(memcmp(&output, &output2, sizeof(output)), 0); dprintf("\terrno=%i\n", errno); } i++; } while (ret == 0); } void test_VIDIOC_ENUMOUTPUT_S32_MAX() { int ret; struct v4l2_output output; struct v4l2_output output2; memset(&output, 0xff, sizeof(output)); output.index = (__u32)S32_MAX; ret = ioctl(get_video_fd(), VIDIOC_ENUMOUTPUT, &output); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&output2, 0xff, sizeof(output2)); output2.index = (__u32)S32_MAX; CU_ASSERT_EQUAL(memcmp(&output, &output2, sizeof(output)), 0); } void test_VIDIOC_ENUMOUTPUT_S32_MAX_1() { int ret; struct v4l2_output output; struct v4l2_output output2; memset(&output, 0xff, sizeof(output)); output.index = ((__u32)S32_MAX)+1; ret = ioctl(get_video_fd(), VIDIOC_ENUMOUTPUT, &output); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&output2, 0xff, sizeof(output2)); output2.index = ((__u32)S32_MAX)+1; CU_ASSERT_EQUAL(memcmp(&output, &output2, sizeof(output)), 0); } void test_VIDIOC_ENUMOUTPUT_U32_MAX() { int ret; struct v4l2_output output; struct v4l2_output output2; memset(&output, 0xff, sizeof(output)); output.index = U32_MAX; ret = ioctl(get_video_fd(), VIDIOC_ENUMOUTPUT, &output); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&output2, 0xff, sizeof(output2)); output2.index = U32_MAX; CU_ASSERT_EQUAL(memcmp(&output, &output2, sizeof(output)), 0); } void test_VIDIOC_ENUMOUTPUT_NULL() { int ret; ret = ioctl(get_video_fd(), VIDIOC_ENUMOUTPUT, NULL); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EFAULT); } --- NEW FILE: test_VIDIOC_ENUMOUTPUT.h --- /* * v4l-test: Test environment for Video For Linux Two API * * 1 Jan 2009 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL */ void test_VIDIOC_ENUMOUTPUT(void); void test_VIDIOC_ENUMOUTPUT_S32_MAX(void); void test_VIDIOC_ENUMOUTPUT_S32_MAX_1(void); void test_VIDIOC_ENUMOUTPUT_U32_MAX(void); void test_VIDIOC_ENUMOUTPUT_NULL(void); Index: v4l2_test.h =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_test.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** v4l2_test.h 30 Dec 2008 07:32:54 -0000 1.1 --- v4l2_test.h 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,7 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2008 0.2 Include stdio.h if needed; + * dprintf1() added * 18 Dec 2008 0.1 First release * *************** *** 11,17 **** #ifdef DEBUG #define dprintf(fmt, ...) printf(fmt, __VA_ARGS__) #else #define dprintf(fmt, ...) #endif - --- 13,21 ---- #ifdef DEBUG + #include <stdio.h> + #define dprintf1(fmt) printf(fmt) #define dprintf(fmt, ...) printf(fmt, __VA_ARGS__) #else + #define dprintf1(fmt) #define dprintf(fmt, ...) #endif Index: video_limits.h =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/video_limits.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** video_limits.h 30 Dec 2008 07:32:54 -0000 1.1 --- video_limits.h 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.2 SINT_MAX and SINT_MIN added * 18 Dec 2008 0.1 First release * *************** *** 8,11 **** --- 9,17 ---- */ + #include <limits.h> + #define S32_MAX 0x7FFFFFFF #define U32_MAX 0xFFFFFFFFU + + #define SINT_MAX INT_MAX + #define SINT_MIN INT_MIN Index: test_VIDIOC_ENUMAUDIO.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDIO.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUMAUDIO.c 30 Dec 2008 07:32:53 -0000 1.1 --- test_VIDIOC_ENUMAUDIO.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Added index=S32_MAX, S32_MAX+1 and U32_MAX * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 83,86 **** --- 84,141 ---- } + void test_VIDIOC_ENUMAUDIO_S32_MAX() { + int ret; + struct v4l2_audio audio; + struct v4l2_audio audio2; + + memset(&audio, 0xff, sizeof(audio)); + audio.index = (__u32)S32_MAX; + ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDIO, &audio); + + CU_ASSERT_EQUAL(ret, -1); + CU_ASSERT_EQUAL(errno, EINVAL); + + /* Check whether the original audio struct is untouched */ + memset(&audio2, 0xff, sizeof(audio2)); + audio2.index = (__u32)S32_MAX; + CU_ASSERT_EQUAL(memcmp(&audio, &audio2, sizeof(audio)), 0); + } + + void test_VIDIOC_ENUMAUDIO_S32_MAX_1() { + int ret; + struct v4l2_audio audio; + struct v4l2_audio audio2; + + memset(&audio, 0xff, sizeof(audio)); + audio.index = ((__u32)S32_MAX)+1; + ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDIO, &audio); + + CU_ASSERT_EQUAL(ret, -1); + CU_ASSERT_EQUAL(errno, EINVAL); + + /* Check whether the original audio struct is untouched */ + memset(&audio2, 0xff, sizeof(audio2)); + audio2.index = ((__u32)S32_MAX)+1; + CU_ASSERT_EQUAL(memcmp(&audio, &audio2, sizeof(audio)), 0); + } + + + void test_VIDIOC_ENUMAUDIO_U32_MAX() { + int ret; + struct v4l2_audio audio; + struct v4l2_audio audio2; + + memset(&audio, 0xff, sizeof(audio)); + audio.index = U32_MAX; + ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDIO, &audio); + + CU_ASSERT_EQUAL(ret, -1); + CU_ASSERT_EQUAL(errno, EINVAL); + + /* Check whether the original audio struct is untouched */ + memset(&audio2, 0xff, sizeof(audio2)); + audio2.index = U32_MAX; + CU_ASSERT_EQUAL(memcmp(&audio, &audio2, sizeof(audio)), 0); + } void test_VIDIOC_ENUMAUDIO_NULL() { Index: test_VIDIOC_ENUMINPUT.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMINPUT.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUMINPUT.c 30 Dec 2008 07:32:53 -0000 1.1 --- test_VIDIOC_ENUMINPUT.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Added index=S32_MAX and S32_MAX+1 * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 30,38 **** #include "test_VIDIOC_ENUMINPUT.h" - /* VIDIOC_ENUMINPUT */ - #define MAX_EM28XX_INPUT 4 ! void test_VIDIOC_ENUMINPUT_1() { int ret; struct v4l2_input input; --- 31,37 ---- #include "test_VIDIOC_ENUMINPUT.h" #define MAX_EM28XX_INPUT 4 ! void test_VIDIOC_ENUMINPUT() { int ret; struct v4l2_input input; *************** *** 99,103 **** } ! void test_VIDIOC_ENUMINPUT_2() { int ret; struct v4l2_input input; --- 98,137 ---- } ! void test_VIDIOC_ENUMINPUT_S32_MAX() { ! int ret; ! struct v4l2_input input; ! struct v4l2_input input2; ! ! memset(&input, 0xff, sizeof(input)); ! input.index = (__u32)S32_MAX; ! ret = ioctl(get_video_fd(), VIDIOC_ENUMINPUT, &input); ! ! CU_ASSERT_EQUAL(ret, -1); ! CU_ASSERT_EQUAL(errno, EINVAL); ! ! memset(&input2, 0xff, sizeof(input2)); ! input2.index = (__u32)S32_MAX; ! CU_ASSERT_EQUAL(memcmp(&input, &input2, sizeof(input)), 0); ! } ! ! void test_VIDIOC_ENUMINPUT_S32_MAX_1() { ! int ret; ! struct v4l2_input input; ! struct v4l2_input input2; ! ! memset(&input, 0xff, sizeof(input)); ! input.index = ((__u32)S32_MAX)+1; ! ret = ioctl(get_video_fd(), VIDIOC_ENUMINPUT, &input); ! ! CU_ASSERT_EQUAL(ret, -1); ! CU_ASSERT_EQUAL(errno, EINVAL); ! ! memset(&input2, 0xff, sizeof(input2)); ! input2.index = ((__u32)S32_MAX)+1; ! CU_ASSERT_EQUAL(memcmp(&input, &input2, sizeof(input)), 0); ! } ! ! ! void test_VIDIOC_ENUMINPUT_U32_MAX() { int ret; struct v4l2_input input; Index: test_VIDIOC_ENUMAUDIO.h =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDIO.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUMAUDIO.h 30 Dec 2008 07:32:53 -0000 1.1 --- test_VIDIOC_ENUMAUDIO.h 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Added index=S32_MAX, S32_MAX+1 and U32_MAX * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 10,12 **** --- 11,16 ---- void test_VIDIOC_ENUMAUDIO(void); + void test_VIDIOC_ENUMAUDIO_S32_MAX(void); + void test_VIDIOC_ENUMAUDIO_S32_MAX_1(void); + void test_VIDIOC_ENUMAUDIO_U32_MAX(void); void test_VIDIOC_ENUMAUDIO_NULL(void); Index: test_VIDIOC_ENUMINPUT.h =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMINPUT.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUMINPUT.h 30 Dec 2008 07:32:54 -0000 1.1 --- test_VIDIOC_ENUMINPUT.h 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Added index=S32_MAX and S32_MAX+1 * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 9,14 **** */ ! void test_VIDIOC_ENUMINPUT_1(void); ! void test_VIDIOC_ENUMINPUT_2(void); void test_VIDIOC_ENUMINPUT_3(void); void test_VIDIOC_ENUMINPUT_NULL(void); --- 10,17 ---- */ ! void test_VIDIOC_ENUMINPUT(void); ! void test_VIDIOC_ENUMINPUT_S32_MAX(void); ! void test_VIDIOC_ENUMINPUT_S32_MAX_1(void); ! void test_VIDIOC_ENUMINPUT_U32_MAX(void); void test_VIDIOC_ENUMINPUT_3(void); void test_VIDIOC_ENUMINPUT_NULL(void); Index: test_VIDIOC_CROPCAP.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_CROPCAP.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_CROPCAP.c 30 Dec 2008 07:32:53 -0000 1.1 --- test_VIDIOC_CROPCAP.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 28,35 **** #include "test_VIDIOC_CROPCAP.h" - #ifndef V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY - #define V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 8 - #endif - static void do_ioctl_VIDIOC_CROPCAP(enum v4l2_buf_type buf_type, int expected_ret) { int ret; --- 28,31 ---- Index: README =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/README,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** README 30 Dec 2008 07:32:53 -0000 1.1 --- README 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,12 ---- v4l-test: Test environment for Video For Linux Two API + Release History + --------------- + + 4 Jan 2008 0.3 Test cases for VIDIOC_ENUMOUTPUT, VIDIOC_ENUMAUDOUT, + VIDIOC_QUERYCTRL added; + New test cases for VIDIOC_ENUMAUDIO, VIDIOC_ENUM_FMT, + VIDIOC_ENUM_STD 22 Dec 2008 0.2 Test cases with NULL parameter added; Test cases for VIDIOC_CROPCAP added *************** *** 21,26 **** To build the test environment you will need a C compiler, "make" and the CUnit development files installed. Just type "make" and the test environment ! is ready. The CUnit framework can be downloaded & installed from: ! http://sourceforge.net/projects/cunit/ How to run? --- 28,32 ---- To build the test environment you will need a C compiler, "make" and the CUnit development files installed. Just type "make" and the test environment ! is ready. How to run? *************** *** 73,83 **** ioctl VIDIOC_ENCODER_CMD | no ioctl VIDIOC_TRY_ENCODER_CMD | no ! ioctl VIDIOC_ENUMAUDIO | yes, only valid cases ! ioctl VIDIOC_ENUMAUDOUT | no ioctl VIDIOC_ENUM_FMT | yes, only when STREAM_OFF ioctl VIDIOC_ENUM_FRAMESIZES | no ioctl VIDIOC_ENUM_FRAMEINTERVALS | no ioctl VIDIOC_ENUMINPUT | yes, only when STREAM_OFF ! ioctl VIDIOC_ENUMOUTPUT | no ioctl VIDIOC_ENUMSTD | yes, only when STREAM_OFF ioctl VIDIOC_G_AUDIO | no --- 79,89 ---- ioctl VIDIOC_ENCODER_CMD | no ioctl VIDIOC_TRY_ENCODER_CMD | no ! ioctl VIDIOC_ENUMAUDIO | yes, only when STREAM_OFF ! ioctl VIDIOC_ENUMAUDOUT | yes, only when STREAM_OFF ioctl VIDIOC_ENUM_FMT | yes, only when STREAM_OFF ioctl VIDIOC_ENUM_FRAMESIZES | no ioctl VIDIOC_ENUM_FRAMEINTERVALS | no ioctl VIDIOC_ENUMINPUT | yes, only when STREAM_OFF ! ioctl VIDIOC_ENUMOUTPUT | yes, only when STREAM_OFF ioctl VIDIOC_ENUMSTD | yes, only when STREAM_OFF ioctl VIDIOC_G_AUDIO | no *************** *** 118,122 **** ioctl VIDIOC_G_TUNER | no ioctl VIDIOC_S_TUNER | no ! ioctl VIDIOC_LOG_STATUS | no ioctl VIDIOC_OVERLAY | no ioctl VIDIOC_QBUF | no --- 124,128 ---- ioctl VIDIOC_G_TUNER | no ioctl VIDIOC_S_TUNER | no ! ioctl VIDIOC_LOG_STATUS | yes ioctl VIDIOC_OVERLAY | no ioctl VIDIOC_QBUF | no *************** *** 124,128 **** ioctl VIDIOC_QUERYBUF | no ioctl VIDIOC_QUERYCAP | no ! ioctl VIDIOC_QUERYCTRL | no ioctl VIDIOC_QUERYMENU | no ioctl VIDIOC_QUERYSTD | no --- 130,135 ---- ioctl VIDIOC_QUERYBUF | no ioctl VIDIOC_QUERYCAP | no ! ioctl VIDIOC_QUERYCTRL | yes, only private and user controls; ! | only user controls with V4L2_CTRL_FLAG_NEXT_CTRL ioctl VIDIOC_QUERYMENU | no ioctl VIDIOC_QUERYSTD | no *************** *** 139,143 **** Similar projects ---------------- ! http://www.linuxowl.com/v4ltest.html Feedbacks --- 146,155 ---- Similar projects ---------------- ! - v4ltest: http://www.linuxowl.com/v4ltest.html ! - test cases in dvb-apps repository, under /test directory: http://linuxtv.org/hg/dvb-apps/file ! - test cases in v4l-dvb repository, under /v4l2-apps/test directory: ! http://linuxtv.org/hg/v4l-dvb/file ! - this test environment is also available under Linux Test Project (LTP), ! under directory testcases/kernel/device-drivers/v4l/user_space: http://ltp.sourceforge.net/ Feedbacks Index: test_VIDIOC_STD.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_STD.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_STD.c 30 Dec 2008 07:32:54 -0000 1.1 --- test_VIDIOC_STD.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,6 ---- * v4l-test: Test environment for Video For Linux Two API * + * 23 Dec 2008 0.3 Debug messages added * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 101,105 **** if (std_id != id) { ! dprintf("std_id=0x0x%llX, id=0x%llX\n", std_id, id); } --- 102,106 ---- if (std_id != id) { ! dprintf("ret=%i, errno=%i, std_id=0x0x%llX, id=0x%llX\n", ret, errno, std_id, id); } *************** *** 219,222 **** --- 220,224 ---- CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); + dprintf("ret=%i, errno=%i\n", ret, errno); } std_id = std_id<<1; Index: v4l2_test.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_test.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** v4l2_test.c 30 Dec 2008 07:32:54 -0000 1.1 --- v4l2_test.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 1,5 **** ! ! /* v4l-test: Test environment for Video For Linux Two API * * 22 Dec 2008 0.2 Test cases with NULL parameter added; * Test cases for VIDIOC_CROPCAP added --- 1,10 ---- ! /* ! * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.4 Test cases for VIDIOC_ENUMOUTPUT, VIDIOC_ENUMAUDOUT, + * VIDIOC_QUERYCTRL added; + * New test cases for VIDIOC_ENUMAUDIO, VIDIOC_ENUM_FMT, + * VIDIOC_ENUM_STD + * 23 Dec 2008 0.3 Test cases for VIDIOC_LOG_STATUS added * 22 Dec 2008 0.2 Test cases with NULL parameter added; * Test cases for VIDIOC_CROPCAP added *************** *** 30,40 **** #include "test_VIDIOC_QUERYCAP.h" #include "test_VIDIOC_CROPCAP.h" #include "test_VIDIOC_ENUMSTD.h" #include "test_VIDIOC_ENUM_FMT.h" #include "test_VIDIOC_ENUMINPUT.h" ! #include "test_VIDIOC_ENUMAUDIO.h" #include "test_VIDIOC_STD.h" #include "test_VIDIOC_INPUT.h" #include "test_invalid_ioctl.h" --- 35,51 ---- #include "test_VIDIOC_QUERYCAP.h" + #include "test_VIDIOC_QUERYCTRL.h" #include "test_VIDIOC_CROPCAP.h" + + #include "test_VIDIOC_ENUMAUDIO.h" + #include "test_VIDIOC_ENUMAUDOUT.h" #include "test_VIDIOC_ENUMSTD.h" #include "test_VIDIOC_ENUM_FMT.h" #include "test_VIDIOC_ENUMINPUT.h" ! #include "test_VIDIOC_ENUMOUTPUT.h" ! #include "test_VIDIOC_STD.h" #include "test_VIDIOC_INPUT.h" + #include "test_VIDIOC_LOG_STATUS.h" #include "test_invalid_ioctl.h" *************** *** 51,71 **** static CU_TestInfo suite_enums[] = { ! { "VIDIOC_ENUMSTD", test_VIDIOC_ENUMSTD_1 }, ! { "VIDIOC_ENUMSTD, index=U32_MAX", test_VIDIOC_ENUMSTD_2 }, ! { "VIDIOC_ENUMSTD, index=MAX_EM28XX_TVNORMS", test_VIDIOC_ENUMSTD_3 }, ! { "VIDIOC_ENUMSTD with NULL parameter", test_VIDIOC_ENUMSTD_NULL }, ! { "VIDIOC_ENUMINPUT", test_VIDIOC_ENUMINPUT_1 }, ! { "VIDIOC_ENUMINPUT, index=U32_MAX", test_VIDIOC_ENUMINPUT_2 }, { "VIDIOC_ENUMINPUT, index=MAX_EM28XX_INPUT", test_VIDIOC_ENUMINPUT_3 }, { "VIDIOC_ENUMINPUT with NULL parameter", test_VIDIOC_ENUMINPUT_NULL }, ! { "VIDIOC_ENUM_FMT", test_VIDIOC_ENUM_FMT_1 }, ! { "VIDIOC_ENUM_FMT, index=U32_MAX", test_VIDIOC_ENUM_FMT_2 }, ! { "VIDIOC_ENUM_FMT, invalid type", test_VIDIOC_ENUM_FMT_3 }, ! { "VIDIOC_ENUM_FMT with NULL parameter", test_VIDIOC_ENUM_FMT_NULL }, ! { "VIDIOC_ENUMAUDIO", test_VIDIOC_ENUMAUDIO }, ! { "VIDIOC_ENUMAUDIO with NULL parameter", test_VIDIOC_ENUMAUDIO_NULL }, CU_TEST_INFO_NULL, --- 62,113 ---- static CU_TestInfo suite_enums[] = { ! { "VIDIOC_ENUMAUDIO", test_VIDIOC_ENUMAUDIO }, ! { "VIDIOC_ENUMAUDIO, index=S32_MAX", test_VIDIOC_ENUMAUDIO_S32_MAX }, ! { "VIDIOC_ENUMAUDIO, index=S32_MAX+1", test_VIDIOC_ENUMAUDIO_S32_MAX_1 }, ! { "VIDIOC_ENUMAUDIO, index=U32_MAX", test_VIDIOC_ENUMAUDIO_U32_MAX }, ! { "VIDIOC_ENUMAUDIO with NULL parameter", test_VIDIOC_ENUMAUDIO_NULL }, ! { "VIDIOC_ENUMAUDOUT", test_VIDIOC_ENUMAUDOUT }, ! { "VIDIOC_ENUMAUDOUT, index=S32_MAX", test_VIDIOC_ENUMAUDOUT_S32_MAX }, ! { "VIDIOC_ENUMAUDOUT, index=S32_MAX+1", test_VIDIOC_ENUMAUDOUT_S32_MAX_1 }, ! { "VIDIOC_ENUMAUDOUT, index=U32_MAX", test_VIDIOC_ENUMAUDOUT_U32_MAX }, ! { "VIDIOC_ENUMAUDOUT with NULL parameter", test_VIDIOC_ENUMAUDOUT_NULL }, ! ! { "VIDIOC_ENUM_FMT", test_VIDIOC_ENUM_FMT }, ! { "VIDIOC_ENUM_FMT, index=S32_MAX", test_VIDIOC_ENUM_FMT_S32_MAX }, ! { "VIDIOC_ENUM_FMT, index=S32_MAX+1", test_VIDIOC_ENUM_FMT_S32_MAX_1 }, ! { "VIDIOC_ENUM_FMT, index=U32_MAX", test_VIDIOC_ENUM_FMT_U32_MAX }, ! { "VIDIOC_ENUM_FMT, invalid type", test_VIDIOC_ENUM_FMT_invalid_type }, ! { "VIDIOC_ENUM_FMT with NULL parameter", test_VIDIOC_ENUM_FMT_NULL }, ! ! { "VIDIOC_ENUMINPUT", test_VIDIOC_ENUMINPUT }, ! { "VIDIOC_ENUMINPUT, index=S32_MAX", test_VIDIOC_ENUMINPUT_S32_MAX }, ! { "VIDIOC_ENUMINPUT, index=S32_MAX+1", test_VIDIOC_ENUMINPUT_S32_MAX_1 }, ! { "VIDIOC_ENUMINPUT, index=U32_MAX", test_VIDIOC_ENUMINPUT_U32_MAX }, { "VIDIOC_ENUMINPUT, index=MAX_EM28XX_INPUT", test_VIDIOC_ENUMINPUT_3 }, { "VIDIOC_ENUMINPUT with NULL parameter", test_VIDIOC_ENUMINPUT_NULL }, ! { "VIDIOC_ENUMOUTPUT", test_VIDIOC_ENUMOUTPUT }, ! { "VIDIOC_ENUMOUTPUT, index=S32_MAX", test_VIDIOC_ENUMOUTPUT_S32_MAX }, ! { "VIDIOC_ENUMOUTPUT, index=S32_MAX+1", test_VIDIOC_ENUMOUTPUT_S32_MAX_1 }, ! { "VIDIOC_ENUMOUTPUT, index=U32_MAX", test_VIDIOC_ENUMOUTPUT_U32_MAX }, ! { "VIDIOC_ENUMOUTPUT with NULL parameter", test_VIDIOC_ENUMOUTPUT_NULL }, ! { "VIDIOC_ENUMSTD", test_VIDIOC_ENUMSTD }, ! { "VIDIOC_ENUMSTD, index=S32_MAX", test_VIDIOC_ENUMSTD_S32_MAX }, ! { "VIDIOC_ENUMSTD, index=S32_MAX+1", test_VIDIOC_ENUMSTD_S32_MAX_1 }, ! { "VIDIOC_ENUMSTD, index=U32_MAX", test_VIDIOC_ENUMSTD_U32_MAX }, ! { "VIDIOC_ENUMSTD, index=MAX_EM28XX_TVNORMS", test_VIDIOC_ENUMSTD_3 }, ! { "VIDIOC_ENUMSTD with NULL parameter", test_VIDIOC_ENUMSTD_NULL }, ! ! { "VIDIOC_QUERYCTRL", test_VIDIOC_QUERYCTRL }, ! { "VIDIOC_QUERYCTRL, id=V4L2_CID_BASE-1", test_VIDIOC_QUERYCTRL_BASE_1 }, ! { "VIDIOC_QUERYCTRL, id=V4L2_CID_LASTP1", test_VIDIOC_QUERYCTRL_LASTP1 }, ! { "VIDIOC_QUERYCTRL, id=V4L2_CID_LASTP1+1", test_VIDIOC_QUERYCTRL_LASTP1_1 }, ! { "VIDIOC_QUERYCTRL with V4L2_CTRL_FLAG_NEXT_CTRL", test_VIDIOC_QUERYCTRL_flag_NEXT_CTRL }, ! { "VIDIOC_QUERYCTRL, enumerate private controls", test_VIDIOC_QUERYCTRL_private }, ! { "VIDIOC_QUERYCTRL, V4L2_CID_PRIVATE_BASE-1", test_VIDIOC_QUERYCTRL_private_base_1 }, ! { "VIDIOC_QUERYCTRL, last private control+1", test_VIDIOC_QUERYCTRL_private_last_1 }, ! { "VIDIOC_QUERYCTRL with NULL parameter", test_VIDIOC_QUERYCTRL_NULL }, CU_TEST_INFO_NULL, *************** *** 98,101 **** --- 140,148 ---- }; + static CU_TestInfo suite_debug_ioctl[] = { + { "test_VIDIOC_LOG_STATUS", test_VIDIOC_LOG_STATUS }, + + CU_TEST_INFO_NULL, + }; static CU_SuiteInfo suites[] = { *************** *** 103,106 **** --- 150,154 ---- { "VIDIOC_ENUM* ioctl calls", open_video, close_video, suite_enums }, { "VIDIOC_G_*, VIDIOC_S_* and VIDIOC_TRY_* ioctl calls", open_video, close_video, suite_get_set_try }, + { "debug ioctl calls", open_video, close_video, suite_debug_ioctl }, { "invalid ioctl calls", open_video, close_video, suite_invalid_ioctl }, CU_SUITE_INFO_NULL, --- NEW FILE: test_VIDIOC_ENUMAUDOUT.h --- /* * v4l-test: Test environment for Video For Linux Two API * * 1 Jan 2009 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL */ void test_VIDIOC_ENUMAUDOUT(void); void test_VIDIOC_ENUMAUDOUT_S32_MAX(void); void test_VIDIOC_ENUMAUDOUT_S32_MAX_1(void); void test_VIDIOC_ENUMAUDOUT_U32_MAX(void); void test_VIDIOC_ENUMAUDOUT_NULL(void); Index: test_VIDIOC_ENUM_FMT.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUM_FMT.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUM_FMT.c 30 Dec 2008 07:32:54 -0000 1.1 --- test_VIDIOC_ENUM_FMT.c 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,7 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Test cases added for index=S32_MAX and S32_MAX+1; + * Test functions renamed * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 30,40 **** #include "test_VIDIOC_ENUM_FMT.h" - #ifndef V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY - #define V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 8 - #endif - - - /* VIDIOC_ENUM_FMT */ - static void do_enumerate_formats(enum v4l2_buf_type type) { int ret; --- 32,35 ---- *************** *** 97,101 **** } ! void test_VIDIOC_ENUM_FMT_1() { do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_CAPTURE); do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_CAPTURE); --- 92,96 ---- } ! void test_VIDIOC_ENUM_FMT() { do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_CAPTURE); do_enumerate_formats(V4L2_BUF_TYPE_VIDEO_CAPTURE); *************** *** 110,114 **** } ! void test_VIDIOC_ENUM_FMT_2() { int ret; struct v4l2_fmtdesc format; --- 105,152 ---- } ! void test_VIDIOC_ENUM_FMT_S32_MAX() { ! int ret; ! struct v4l2_fmtdesc format; ! struct v4l2_fmtdesc format2; ! ! /* test invalid index */ ! memset(&format, 0xff, sizeof(format)); ! format.index = (__u32)S32_MAX; ! format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ! ret = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); ! ! CU_ASSERT_EQUAL(ret, -1); ! CU_ASSERT_EQUAL(errno, EINVAL); ! ! /* Check whether the original format struct is untouched */ ! memset(&format2, 0xff, sizeof(format2)); ! format2.index = (__u32)S32_MAX; ! format2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ! CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0); ! } ! ! void test_VIDIOC_ENUM_FMT_S32_MAX_1() { ! int ret; ! struct v4l2_fmtdesc format; ! struct v4l2_fmtdesc format2; ! ! /* test invalid index */ ! memset(&format, 0xff, sizeof(format)); ! format.index = ((__u32)S32_MAX)+1; ! format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ! ret = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); ! ! CU_ASSERT_EQUAL(ret, -1); ! CU_ASSERT_EQUAL(errno, EINVAL); ! ! /* Check whether the original format struct is untouched */ ! memset(&format2, 0xff, sizeof(format2)); ! format2.index = ((__u32)S32_MAX)+1; ! format2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ! CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0); ! } ! ! ! void test_VIDIOC_ENUM_FMT_U32_MAX() { int ret; struct v4l2_fmtdesc format; *************** *** 124,127 **** --- 162,166 ---- CU_ASSERT_EQUAL(errno, EINVAL); + /* Check whether the original format struct is untouched */ memset(&format2, 0xff, sizeof(format2)); format2.index = U32_MAX; *************** *** 130,134 **** } ! void test_VIDIOC_ENUM_FMT_3() { int ret; struct v4l2_fmtdesc format; --- 169,173 ---- } ! void test_VIDIOC_ENUM_FMT_invalid_type() { int ret; struct v4l2_fmtdesc format; *************** *** 136,139 **** --- 175,182 ---- int i; + /* In this test case the .index is valid (0) and only the .type + * is invalid. The .type filed is an enum which is stored in an 'int'. + */ + /* test invalid .type=0 */ memset(&format, 0xff, sizeof(format)); *************** *** 145,148 **** --- 188,192 ---- CU_ASSERT_EQUAL(errno, EINVAL); + /* Check whether the original format struct is untouched */ memset(&format2, 0xff, sizeof(format2)); format2.index = 0; *************** *** 150,157 **** CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0); ! /* test invalid .type=0x8000 0000 */ memset(&format, 0xff, sizeof(format)); format.index = 0; ! format.type = 0x80000000; ret = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); --- 194,202 ---- CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0); ! ! /* test invalid .type=SINT_MIN */ memset(&format, 0xff, sizeof(format)); format.index = 0; ! format.type = SINT_MIN; ret = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); *************** *** 159,165 **** CU_ASSERT_EQUAL(errno, EINVAL); memset(&format2, 0xff, sizeof(format2)); format2.index = 0; ! format2.type = 0x80000000; CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0); --- 204,211 ---- CU_ASSERT_EQUAL(errno, EINVAL); + /* Check whether the original format struct is untouched */ memset(&format2, 0xff, sizeof(format2)); format2.index = 0; ! format2.type = SINT_MIN; CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0); *************** *** 173,176 **** --- 219,223 ---- CU_ASSERT_EQUAL(errno, EINVAL); + /* Check whether the original format struct is untouched */ memset(&format2, 0xff, sizeof(format2)); format2.index = 0; *************** *** 188,191 **** --- 235,239 ---- CU_ASSERT_EQUAL(errno, EINVAL); + /* Check whether the original format struct is untouched */ memset(&format2, 0xff, sizeof(format2)); format2.index = 0; *************** *** 195,198 **** --- 243,264 ---- /* .type = 0x80..0x7FFF FFFF is the private range */ + + /* Assume that 0x7FFF FFFF is invalid in the private range. + * This might be a wrong assumption, but let's have a test case like + * this for now. + */ + memset(&format, 0xff, sizeof(format)); + format.index = 0; + format.type = SINT_MAX; + ret = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); + + CU_ASSERT_EQUAL(ret, -1); + CU_ASSERT_EQUAL(errno, EINVAL); + + /* Check whether the original format struct is untouched */ + memset(&format2, 0xff, sizeof(format2)); + format2.index = 0; + format2.type = SINT_MAX; + CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)), 0); } --- NEW FILE: test_VIDIOC_QUERYCTRL.c --- /* * v4l-test: Test environment for Video For Linux Two API * * 2 Jan 2009 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL */ /* * Note: V4L2_CID_LASTP1 != V4L2_CID_BASE_LASTP1 */ #include <sys/ioctl.h> #include <errno.h> #include <string.h> #include <linux/videodev2.h> #include <linux/errno.h> #include <CUnit/CUnit.h> #include "v4l2_test.h" #include "dev_video.h" #include "video_limits.h" #include "test_VIDIOC_QUERYCTRL.h" static int valid_control_flag(__u32 flags) { int valid = 0; if ( (flags & ~(V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_GRABBED | V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_UPDATE | V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_SLIDER)) == 0) { valid = 1; } else { valid = 0; } return valid; } static int valid_control_type(__u32 type) { int valid = 0; switch (type) { case V4L2_CTRL_TYPE_INTEGER: case V4L2_CTRL_TYPE_BOOLEAN: case V4L2_CTRL_TYPE_MENU: case V4L2_CTRL_TYPE_BUTTON: case V4L2_CTRL_TYPE_INTEGER64: case V4L2_CTRL_TYPE_CTRL_CLASS: valid = 1; break; default: valid = 0; } return valid; } void test_VIDIOC_QUERYCTRL() { int ret; struct v4l2_queryctrl queryctrl; struct v4l2_queryctrl queryctrl2; __u32 i; for (i = V4L2_CID_BASE; i < V4L2_CID_LASTP1; i++) { memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = i; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("VIDIOC_QUERYCTRL, id=%u (V4L2_CID_BASE+%i), ret=%i\n", i, i-V4L2_CID_BASE, ret); if (ret == 0) { CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(queryctrl.id, i); //CU_ASSERT_EQUAL(queryctrl.name, ?); CU_ASSERT(0 < strlen( (char*)queryctrl.name )); CU_ASSERT(valid_control_type(queryctrl.type)); switch (queryctrl.type) { case V4L2_CTRL_TYPE_INTEGER: /* min < max, because otherwise this control makes no sense */ CU_ASSERT(queryctrl.minimum < queryctrl.maximum); CU_ASSERT(0 < queryctrl.step); CU_ASSERT(queryctrl.minimum <= queryctrl.default_value); CU_ASSERT(queryctrl.default_value <= queryctrl.maximum); break; case V4L2_CTRL_TYPE_BOOLEAN: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 1); CU_ASSERT_EQUAL(queryctrl.step, 1); CU_ASSERT((queryctrl.default_value == 0) || (queryctrl.default_value == 1)); break; case V4L2_CTRL_TYPE_MENU: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT(queryctrl.minimum <= queryctrl.default_value); CU_ASSERT_EQUAL(queryctrl.step, 1); CU_ASSERT(queryctrl.minimum <= queryctrl.default_value); CU_ASSERT(queryctrl.default_value <= queryctrl.maximum); break; case V4L2_CTRL_TYPE_BUTTON: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 0); CU_ASSERT_EQUAL(queryctrl.step, 0); CU_ASSERT_EQUAL(queryctrl.default_value, 0); break; case V4L2_CTRL_TYPE_INTEGER64: /* fallthrough */ case V4L2_CTRL_TYPE_CTRL_CLASS: /* These parameters are defined as n/a by V4L2, so * they should be filled with zeros, the same like * the reserved fields. */ CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 0); CU_ASSERT_EQUAL(queryctrl.step, 0); CU_ASSERT_EQUAL(queryctrl.default_value, 0); break; default: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 0); CU_ASSERT_EQUAL(queryctrl.step, 0); CU_ASSERT_EQUAL(queryctrl.default_value, 0); } CU_ASSERT(valid_control_flag(queryctrl.flags)); CU_ASSERT_EQUAL(queryctrl.reserved[0], 0); CU_ASSERT_EQUAL(queryctrl.reserved[1], 0); dprintf("\tqueryctrl = {.id=%u, .type=%i, .name=\"%s\", " ".minimum=%i, .maximum=%i, .step=%i, " ".default_value=%i, " ".flags=0x%X, " ".reserved[]={ 0x%X, 0x%X } }\n", queryctrl.id, queryctrl.type, queryctrl.name, queryctrl.minimum, queryctrl.maximum, queryctrl.step, queryctrl.default_value, queryctrl.flags, queryctrl.reserved[0], queryctrl.reserved[1] ); } else { CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&queryctrl2, 0xff, sizeof(queryctrl2)); queryctrl2.id = i; CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)), 0); dprintf("\terrno=%i\n", errno); } } } void test_VIDIOC_QUERYCTRL_BASE_1() { int ret; struct v4l2_queryctrl queryctrl; struct v4l2_queryctrl queryctrl2; memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = V4L2_CID_BASE-1; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("VIDIOC_QUERYCTRL, id=%u (V4L2_CID_BASE-1), ret=%i\n", V4L2_CID_BASE-1, ret); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&queryctrl2, 0xff, sizeof(queryctrl2)); queryctrl2.id = V4L2_CID_BASE-1; CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)), 0); } void test_VIDIOC_QUERYCTRL_LASTP1() { int ret; struct v4l2_queryctrl queryctrl; struct v4l2_queryctrl queryctrl2; memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = V4L2_CID_LASTP1; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("VIDIOC_QUERYCTRL, id=%u (V4L2_CID_LASTP1), ret=%i\n", V4L2_CID_LASTP1, ret); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&queryctrl2, 0xff, sizeof(queryctrl2)); queryctrl2.id = V4L2_CID_LASTP1; CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)), 0); } void test_VIDIOC_QUERYCTRL_LASTP1_1() { int ret; struct v4l2_queryctrl queryctrl; struct v4l2_queryctrl queryctrl2; memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = V4L2_CID_LASTP1+1; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("VIDIOC_QUERYCTRL, id=%u (V4L2_CID_LASTP1+1), ret=%i\n", V4L2_CID_LASTP1+1, ret); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&queryctrl2, 0xff, sizeof(queryctrl2)); queryctrl2.id = V4L2_CID_LASTP1+1; CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)), 0); } void test_VIDIOC_QUERYCTRL_flag_NEXT_CTRL() { int ret; char count_controls1[V4L2_CID_LASTP1-V4L2_CID_BASE]; char count_controls2[V4L2_CID_LASTP1-V4L2_CID_BASE]; struct v4l2_queryctrl controls[V4L2_CID_LASTP1-V4L2_CID_BASE]; struct v4l2_queryctrl queryctrl; __u32 i; /* find out all the possible user controls */ memset(count_controls1, 0, sizeof(count_controls1)); memset(controls, 0, sizeof(controls)); for (i = V4L2_CID_BASE; i < V4L2_CID_LASTP1; i++) { memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = i; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); if (ret == 0) { CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(queryctrl.id, i); count_controls1[i-V4L2_CID_BASE]++; controls[i-V4L2_CID_BASE] = queryctrl; dprintf("\tqueryctrl = {.id=%u, .type=%i, .name=\"%s\", " ".minimum=%i, .maximum=%i, .step=%i, " ".default_value=%i, " ".flags=0x%X, " ".reserved[]={ 0x%X, 0x%X } }\n", queryctrl.id, queryctrl.type, queryctrl.name, queryctrl.minimum, queryctrl.maximum, queryctrl.step, queryctrl.default_value, queryctrl.flags, queryctrl.reserved[0], queryctrl.reserved[1] ); } else { CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); } } /* enumerate the controls with V4L2_CTRL_FLAG_NEXT_CTRL */ dprintf1("Starting enumeration with V4L2_CTRL_FLAG_NEXT_CTRL\n"); memset(count_controls2, 0, sizeof(count_controls2)); /* As described at V4L2 Chapter 1.9.3. Enumerating Extended Controls */ i = 0; memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = i | V4L2_CTRL_FLAG_NEXT_CTRL; dprintf("\tasking for id=%i=V4L2_CID_BASE+%i | V4L2_CTRL_FLAG_NEXT_CTRL\n", i, i-V4L2_CID_BASE); ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("\tret=%i\n", ret); if (ret == 0) { do { /* protect the count_controls2[] from overindexing */ if ((V4L2_CID_BASE <= queryctrl.id) && (queryctrl.id < V4L2_CID_LASTP1)) { count_controls2[queryctrl.id-V4L2_CID_BASE]++; CU_ASSERT_EQUAL(memcmp(&queryctrl, &controls[queryctrl.id-V4L2_CID_BASE], sizeof(queryctrl)), 0); } /* "The VIDIOC_QUERYCTRL ioctl will return the first * control with a higher ID than the specified one." */ CU_ASSERT(i < queryctrl.id); CU_ASSERT(V4L2_CID_BASE <= queryctrl.id); CU_ASSERT(queryctrl.id < V4L2_CID_LASTP1); dprintf("\tqueryctrl = {.id=%u, .type=%i, .name=\"%s\", " ".minimum=%i, .maximum=%i, .step=%i, " ".default_value=%i, " ".flags=0x%X, " ".reserved[]={ 0x%X, 0x%X } }\n", queryctrl.id, queryctrl.type, queryctrl.name, queryctrl.minimum, queryctrl.maximum, queryctrl.step, queryctrl.default_value, queryctrl.flags, queryctrl.reserved[0], queryctrl.reserved[1] ); i = queryctrl.id; memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = i | V4L2_CTRL_FLAG_NEXT_CTRL; dprintf("\tasking for id=%i=V4L2_CID_BASE+%i | V4L2_CTRL_FLAG_NEXT_CTRL\n", i, i-V4L2_CID_BASE); ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("\tret=%i\n", ret); } while (ret == 0 && V4L2_CTRL_ID2CLASS(queryctrl.id) == V4L2_CTRL_CLASS_USER); if (ret == 0) { /* some other controls also exists, stop for now. */ } else { CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); } /* Check whether the same controls are reported if using * V4L2_CTRL_FLAG_NEXT_CTRL and without using it. * This also checks if one control is not reported twice. */ CU_ASSERT_EQUAL(memcmp(count_controls1, count_controls2, sizeof(count_controls1)), 0); dprintf1("count_controls1 = { "); for (i=0; i<sizeof(count_controls1)/sizeof(*count_controls1); i++) { dprintf("%i ", count_controls1[i]); } dprintf1("}\n"); dprintf1("count_controls2 = { "); for (i=0; i<sizeof(count_controls2)/sizeof(*count_controls2); i++) { dprintf("%i ", count_controls2[i]); } dprintf1("}\n"); } else { dprintf1("V4L2_CTRL_FLAG_NEXT_CTRL is not supported or no control is available\n"); /* The flag V4L2_CTRL_FLAG_NEXT_CTRL is not supported * or no control is avaliable at all. Do not continue the * enumeration. */ CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); } } void test_VIDIOC_QUERYCTRL_private() { int ret; struct v4l2_queryctrl queryctrl; struct v4l2_queryctrl queryctrl2; __u32 i; i = V4L2_CID_PRIVATE_BASE; do { memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = i; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("VIDIOC_QUERYCTRL, id=%u (V4L2_CID_BASE+%i), ret=%i\n", i, i-V4L2_CID_BASE, ret); if (ret == 0) { CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(queryctrl.id, i); //CU_ASSERT_EQUAL(queryctrl.name, ?); CU_ASSERT(0 < strlen( (char*)queryctrl.name )); CU_ASSERT(valid_control_type(queryctrl.type)); switch (queryctrl.type) { case V4L2_CTRL_TYPE_INTEGER: /* min < max, because otherwise this control makes no sense */ CU_ASSERT(queryctrl.minimum < queryctrl.maximum); CU_ASSERT(0 < queryctrl.step); CU_ASSERT(queryctrl.minimum <= queryctrl.default_value); CU_ASSERT(queryctrl.default_value <= queryctrl.maximum); break; case V4L2_CTRL_TYPE_BOOLEAN: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 1); CU_ASSERT_EQUAL(queryctrl.step, 1); CU_ASSERT((queryctrl.default_value == 0) || (queryctrl.default_value == 1)); break; case V4L2_CTRL_TYPE_MENU: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT(queryctrl.minimum <= queryctrl.default_value); CU_ASSERT_EQUAL(queryctrl.step, 1); CU_ASSERT(queryctrl.minimum <= queryctrl.default_value); CU_ASSERT(queryctrl.default_value <= queryctrl.maximum); break; case V4L2_CTRL_TYPE_BUTTON: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 0); CU_ASSERT_EQUAL(queryctrl.step, 0); CU_ASSERT_EQUAL(queryctrl.default_value, 0); break; case V4L2_CTRL_TYPE_INTEGER64: /* fallthrough */ case V4L2_CTRL_TYPE_CTRL_CLASS: /* These parameters are defined as n/a by V4L2, so * they should be filled with zeros, the same like * the reserved fields. */ CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 0); CU_ASSERT_EQUAL(queryctrl.step, 0); CU_ASSERT_EQUAL(queryctrl.default_value, 0); break; default: CU_ASSERT_EQUAL(queryctrl.minimum, 0); CU_ASSERT_EQUAL(queryctrl.maximum, 0); CU_ASSERT_EQUAL(queryctrl.step, 0); CU_ASSERT_EQUAL(queryctrl.default_value, 0); } CU_ASSERT(valid_control_flag(queryctrl.flags)); CU_ASSERT_EQUAL(queryctrl.reserved[0], 0); CU_ASSERT_EQUAL(queryctrl.reserved[1], 0); dprintf("\tqueryctrl = {.id=%u, .type=%i, .name=\"%s\", " ".minimum=%i, .maximum=%i, .step=%i, " ".default_value=%i, " ".flags=0x%X, " ".reserved[]={ 0x%X, 0x%X } }\n", queryctrl.id, queryctrl.type, queryctrl.name, queryctrl.minimum, queryctrl.maximum, queryctrl.step, queryctrl.default_value, queryctrl.flags, queryctrl.reserved[0], queryctrl.reserved[1] ); } else { CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&queryctrl2, 0xff, sizeof(queryctrl2)); queryctrl2.id = i; CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)), 0); dprintf("\terrno=%i\n", errno); } } while (ret == 0); } void test_VIDIOC_QUERYCTRL_private_base_1() { int ret; struct v4l2_queryctrl queryctrl; struct v4l2_queryctrl queryctrl2; memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = V4L2_CID_PRIVATE_BASE-1; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("VIDIOC_QUERYCTRL, id=%u (V4L2_CID_PRIVATE_BASE-1), ret=%i\n", V4L2_CID_PRIVATE_BASE-1, ret); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&queryctrl2, 0xff, sizeof(queryctrl2)); queryctrl2.id = V4L2_CID_PRIVATE_BASE-1; CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)), 0); } void test_VIDIOC_QUERYCTRL_private_last_1() { int ret; struct v4l2_queryctrl queryctrl; struct v4l2_queryctrl queryctrl2; __u32 i; i = V4L2_CID_PRIVATE_BASE; do { memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = i; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); i++; } while (ret == 0); memset(&queryctrl, 0xff, sizeof(queryctrl)); queryctrl.id = i; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, &queryctrl); dprintf("VIDIOC_QUERYCTRL, id=%u (V4L2_CID_PRIVATE_BASE+%u), ret=%i\n", i, i-V4L2_CID_PRIVATE_BASE, ret); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&queryctrl2, 0xff, sizeof(queryctrl2)); queryctrl2.id = i; CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)), 0); } void test_VIDIOC_QUERYCTRL_NULL() { int ret; ret = ioctl(get_video_fd(), VIDIOC_QUERYCTRL, NULL); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EFAULT); } --- NEW FILE: test_VIDIOC_QUERYCTRL.h --- /* * v4l-test: Test environment for Video For Linux Two API * * 2 Jan 2009 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL */ void test_VIDIOC_QUERYCTRL(void); void test_VIDIOC_QUERYCTRL_BASE_1(void); void test_VIDIOC_QUERYCTRL_LASTP1(void); void test_VIDIOC_QUERYCTRL_LASTP1_1(void); void test_VIDIOC_QUERYCTRL_flag_NEXT_CTRL(void); void test_VIDIOC_QUERYCTRL_private(void); void test_VIDIOC_QUERYCTRL_private_base_1(void); void test_VIDIOC_QUERYCTRL_private_last_1(void); void test_VIDIOC_QUERYCTRL_NULL(void); Index: test_VIDIOC_ENUM_FMT.h =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUM_FMT.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** test_VIDIOC_ENUM_FMT.h 30 Dec 2008 07:32:54 -0000 1.1 --- test_VIDIOC_ENUM_FMT.h 5 Jan 2009 07:25:21 -0000 1.2 *************** *** 2,5 **** --- 2,7 ---- * v4l-test: Test environment for Video For Linux Two API * + * 1 Jan 2009 0.3 Test cases added for index=S32_MAX and S32_MAX+1; + * Test functions renamed * 22 Dec 2008 0.2 Test case with NULL parameter added * 18 Dec 2008 0.1 First release *************** *** 9,14 **** */ ! void test_VIDIOC_ENUM_FMT_1(void); ! void test_VIDIOC_ENUM_FMT_2(void); ! void test_VIDIOC_ENUM_FMT_3(void); void test_VIDIOC_ENUM_FMT_NULL(void); --- 11,18 ---- */ ! void test_VIDIOC_ENUM_FMT(void); ! void test_VIDIOC_ENUM_FMT_S32_MAX(void); ! void test_VIDIOC_ENUM_FMT_S32_MAX_1(void); ! void test_VIDIOC_ENUM_FMT_U32_MAX(void); ! void test_VIDIOC_ENUM_FMT_invalid_type(void); void test_VIDIOC_ENUM_FMT_NULL(void); --- NEW FILE: test_VIDIOC_ENUMAUDOUT.c --- /* * v4l-test: Test environment for Video For Linux Two API * * 1 Jan 2009 0.1 First release * * Written by Márton Németh <nm...@fr...> * Released under GPL * * Note: in ioctl VIDIOC_ENUMAUDOUT reference (doc/spec/r8304.htm) * the description text mentions the the VIDIOC_G_AUDOUT should * be called. This is a typo in the V4L2 specification (revision 0.24). * To enumerate the audio outputs the VIDIOC_ENUMAUDOUT should be * called. * */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <errno.h> #include <string.h> #include <linux/videodev2.h> #include <linux/errno.h> #include <CUnit/CUnit.h> #include <CUnit/Basic.h> #include "v4l2_test.h" #include "dev_video.h" #include "video_limits.h" #include "test_VIDIOC_ENUMAUDOUT.h" void test_VIDIOC_ENUMAUDOUT() { int ret; struct v4l2_audioout audioout; struct v4l2_audioout audioout2; __u32 i; i = 0; do { memset(&audioout, 0xff, sizeof(audioout)); audioout.index = i; ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDOUT, &audioout); dprintf("VIDIOC_ENUMAUDOUT, ret=%i\n", ret); if (ret == 0) { CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(audioout.index, i); //CU_ASSERT_EQUAL(audioout.name, ?); CU_ASSERT(0 < strlen( (char*)audioout.name )); //CU_ASSERT_EQUAL(audioout.capability, ?); //CU_ASSERT_EQUAL(audioout.mode, ?); CU_ASSERT_EQUAL(audioout.reserved[0], 0); CU_ASSERT_EQUAL(audioout.reserved[1], 0); dprintf("\taudioout = {.index=%u, .name=\"%s\", " ".capability=0x%X, .mode=0x%X, " ".reserved[]={ 0x%X, 0x%X } }\n", audioout.index, audioout.name, audioout.capability, audioout.mode, audioout.reserved[0], audioout.reserved[1] ); } else { CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); memset(&audioout2, 0xff, sizeof(audioout2)); audioout2.index = i; CU_ASSERT_EQUAL(memcmp(&audioout, &audioout2, sizeof(audioout)), 0); dprintf("\terrno=%i\n", errno); } i++; } while (ret == 0); } void test_VIDIOC_ENUMAUDOUT_S32_MAX() { int ret; struct v4l2_audioout audioout; struct v4l2_audioout audioout2; memset(&audioout, 0xff, sizeof(audioout)); audioout.index = (__u32)S32_MAX; ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDOUT, &audioout); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); /* Check whether the original audioout struct is untouched */ memset(&audioout2, 0xff, sizeof(audioout2)); audioout2.index = (__u32)S32_MAX; CU_ASSERT_EQUAL(memcmp(&audioout, &audioout2, sizeof(audioout)), 0); } void test_VIDIOC_ENUMAUDOUT_S32_MAX_1() { int ret; struct v4l2_audioout audioout; struct v4l2_audioout audioout2; memset(&audioout, 0xff, sizeof(audioout)); audioout.index = ((__u32)S32_MAX)+1; ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDOUT, &audioout); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); /* Check whether the original audioout struct is untouched */ memset(&audioout2, 0xff, sizeof(audioout2)); audioout2.index = ((__u32)S32_MAX)+1; CU_ASSERT_EQUAL(memcmp(&audioout, &audioout2, sizeof(audioout)), 0); } void test_VIDIOC_ENUMAUDOUT_U32_MAX() { int ret; struct v4l2_audioout audioout; struct v4l2_audioout audioout2; memset(&audioout, 0xff, sizeof(audioout)); audioout.index = U32_MAX; ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDOUT, &audioout); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EINVAL); /* Check whether the original audioout struct is untouched */ memset(&audioout2, 0xff, sizeof(audioout2)); audioout2.index = U32_MAX; CU_ASSERT_EQUAL(memcmp(&audioout, &audioout2, sizeof(audioout)), 0); } void test_VIDIOC_ENUMAUDOUT_NULL() { int ret; ret = ioctl(get_video_fd(), VIDIOC_ENUMAUDOUT, NULL); CU_ASSERT_EQUAL(ret, -1); CU_ASSERT_EQUAL(errno, EFAULT); } |