blob: faf1ba9a321c5ea18b2e98fd8c2af6fb42edd6e6 [file] [log] [blame]
/*
* v4l-test: Test environment for Video For Linux Two API
*
* 22 Dec 2008 0.2 Test case with NULL parameter added
* 18 Dec 2008 0.1 First release
*
* Written by Márton Németh <nm127@freemail.hu>
* 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_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;
if ((capabilities & ~(V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_VIDEO_OUTPUT |
V4L2_CAP_VIDEO_OVERLAY |
V4L2_CAP_VBI_CAPTURE |
V4L2_CAP_VBI_OUTPUT |
V4L2_CAP_SLICED_VBI_CAPTURE |
V4L2_CAP_SLICED_VBI_OUTPUT |
V4L2_CAP_RDS_CAPTURE |
V4L2_CAP_VIDEO_OUTPUT_OVERLAY |
V4L2_CAP_TUNER |
V4L2_CAP_AUDIO |
V4L2_CAP_RADIO |
V4L2_CAP_READWRITE |
V4L2_CAP_ASYNCIO |
V4L2_CAP_STREAMING)) != 0) {
valid = 0;
}
return valid;
}
void test_VIDIOC_QUERYCAP() {
int ret;
struct v4l2_capability cap;
memset(&cap, 0xff, sizeof(cap));
ret = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
dprintf("VIDIOC_QUERYCAP, ret=%i\n", ret);
dprintf("\tcap = { .driver = \"%s\", .card = \"%s\", "
".bus_info = \"%s\", "
".version = %u.%u.%u, "
".capabilities = 0x%X, "
".reserved[]={ 0x%X, 0x%X, 0x%X, 0x%X } }\n",
cap.driver,
cap.card,
cap.bus_info,
(cap.version >> 16) & 0xFF,
(cap.version >> 8) & 0xFF,
cap.version & 0xFF,
cap.capabilities,
cap.reserved[0],
cap.reserved[1],
cap.reserved[2],
cap.reserved[3]
);
/* This ioctl must be implemented by ALL drivers */
CU_ASSERT_EQUAL(ret, 0);
if (ret == 0) {
//CU_ASSERT_EQUAL(cap.driver, ?);
CU_ASSERT(0 < strlen( (char*)cap.driver) );
//CU_ASSERT_EQUAL(cap.card, ?);
CU_ASSERT(0 < strlen( (char*)cap.card) );
//CU_ASSERT_EQUAL(cap.bus_info, ?);
//CU_ASSERT_EQUAL(cap.version, ?);
CU_ASSERT(valid_capabilities(cap.capabilities));
CU_ASSERT_EQUAL(cap.reserved[0], 0);
CU_ASSERT_EQUAL(cap.reserved[1], 0);
CU_ASSERT_EQUAL(cap.reserved[2], 0);
CU_ASSERT_EQUAL(cap.reserved[3], 0);
}
}
void test_VIDIOC_QUERYCAP_NULL() {
int ret;
ret = ioctl(get_video_fd(), VIDIOC_QUERYCAP, NULL);
CU_ASSERT_EQUAL(ret, -1);
CU_ASSERT_EQUAL(errno, EFAULT);
}