blob: 6430d306e0abb4c0571e6db8bb69ca722a8ef643 [file] [log] [blame]
/*
* v4l-test: Test environment for Video For Linux Two API
*
* 16 Jun 2009 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 "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
#include "v4l2_validator.h"
#include "v4l2_foreach.h"
#include "test_VIDIOC_JPEGCOMP.h"
static int valid_jpeg_markers(__u32 jpeg_markers) {
int valid = 0;
if ( (jpeg_markers & ~(V4L2_JPEG_MARKER_DHT |
V4L2_JPEG_MARKER_DQT |
V4L2_JPEG_MARKER_DRI |
V4L2_JPEG_MARKER_COM |
V4L2_JPEG_MARKER_APP))
== 0) {
valid = 1;
} else {
valid = 0;
}
return valid;
}
void test_VIDIOC_G_JPEGCOMP() {
struct v4l2_jpegcompression jpegcomp;
int ret_get, errno_get;
memset(&jpegcomp, 0xff, sizeof(jpegcomp));
ret_get = ioctl(get_video_fd(), VIDIOC_G_JPEGCOMP, &jpegcomp);
errno_get = errno;
dprintf("\tVIDIOC_G_JPEGCOMP, ret_get=%i, errno_get=%i\n", ret_get, errno_get);
if (ret_get == 0) {
CU_ASSERT_EQUAL(ret_get, 0);
//CU_ASSERT_EQUAL(jpegcomp.quality, ???);
//CU_ASSERT_EQUAL(jpegcomp.APPn, ???);
CU_ASSERT(0 <= jpegcomp.APP_len);
CU_ASSERT(jpegcomp.APP_len <= (int)sizeof(jpegcomp.APP_data));
//CU_ASSERT_EQUAL(jpegcomp.APP_data, ???);
CU_ASSERT(0 <= jpegcomp.COM_len);
CU_ASSERT(jpegcomp.COM_len <= (int)sizeof(jpegcomp.COM_data));
//CU_ASSERT_EQUAL(jpegcomp.COM_data, ???);
CU_ASSERT(valid_jpeg_markers(jpegcomp.jpeg_markers));
dprintf("\tjpegcomp = { .quality=%i, "
".APPn=%i, "
".APP_len=%i, "
".APP_data=..., "
".COM_len=%i, "
".COM_data=..., "
".jpeg_markers=0x%x ",
jpegcomp.quality,
jpegcomp.APPn,
jpegcomp.APP_len,
//jpegcomp.APP_data,
jpegcomp.COM_len,
//jpegcomp.COM_data,
jpegcomp.jpeg_markers
);
} else {
CU_ASSERT_EQUAL(ret_get, -1);
CU_ASSERT_EQUAL(errno_get, EINVAL);
}
}
void test_VIDIOC_G_JPEGCOMP_NULL() {
struct v4l2_jpegcompression jpegcomp;
int ret_get, errno_get;
int ret_null, errno_null;
memset(&jpegcomp, 0, sizeof(jpegcomp));
ret_get = ioctl(get_video_fd(), VIDIOC_G_JPEGCOMP, &jpegcomp);
errno_get = errno;
dprintf("\tVIDIOC_G_JPEGCOMP, ret_get=%i, errno_get=%i\n", ret_get, errno_get);
ret_null = ioctl(get_video_fd(), VIDIOC_G_JPEGCOMP, NULL);
errno_null = errno;
dprintf("\tVIDIOC_G_JPEGCOMP, ret_null=%i, errno_null=%i\n", ret_null, errno_null);
if (ret_get == 0) {
CU_ASSERT_EQUAL(ret_get, 0);
CU_ASSERT_EQUAL(ret_null, -1);
CU_ASSERT_EQUAL(errno_null, EFAULT);
} else {
CU_ASSERT_EQUAL(ret_get, -1);
CU_ASSERT_EQUAL(errno_get, EINVAL);
CU_ASSERT_EQUAL(ret_null, -1);
CU_ASSERT_EQUAL(errno_null, EINVAL);
}
}