summaryrefslogtreecommitdiff
path: root/v4l2-apps/libv4l/libv4l2/log.c
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@kernellabs.com>2009-09-15 11:14:17 -0400
committerMichael Krufky <mkrufky@kernellabs.com>2009-09-15 11:14:17 -0400
commitb0d1e983e98ec9b72146c16d08b3409a418c62df (patch)
treeb61e50f54f11599f31b476c477a69883597f5fad /v4l2-apps/libv4l/libv4l2/log.c
parent2c16279409d239adbbc884a308e71264ea02ef46 (diff)
parent219fe38bd79dab42db83cacc1f5444d0e27fa8ea (diff)
downloadmediapointer-dvb-s2-b0d1e983e98ec9b72146c16d08b3409a418c62df.tar.gz
mediapointer-dvb-s2-b0d1e983e98ec9b72146c16d08b3409a418c62df.tar.bz2
merge: ~mkrufky/tda18271
From: Michael Krufky <mkrufky@kernellabs.com> Priority: normal Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
Diffstat (limited to 'v4l2-apps/libv4l/libv4l2/log.c')
-rw-r--r--v4l2-apps/libv4l/libv4l2/log.c91
1 files changed, 81 insertions, 10 deletions
diff --git a/v4l2-apps/libv4l/libv4l2/log.c b/v4l2-apps/libv4l/libv4l2/log.c
index 6237d55ec..86d71b64e 100644
--- a/v4l2-apps/libv4l/libv4l2/log.c
+++ b/v4l2-apps/libv4l/libv4l2/log.c
@@ -1,5 +1,7 @@
/*
-# (C) 2008 Hans de Goede <j.w.r.degoede@hhs.nl>
+# (C) 2008 Elmar Kleijn <elmar_kleijn@hotmail.com>
+# (C) 2008 Sjoerd Piepenbrink <need4weed@gmail.com>
+# (C) 2008 Hans de Goede <hdegoede@redhat.com>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
@@ -18,12 +20,9 @@
#include <stdio.h>
#include <stdlib.h>
-#include <linux/ioctl.h>
-/* These headers are not needed by us, but by linux/videodev2.h,
- which is broken on some systems and doesn't include them itself :( */
-#include <sys/time.h>
-#include <asm/types.h>
-/* end broken header workaround includes */
+#include <string.h>
+#include <errno.h>
+#include "../libv4lconvert/libv4lsyscall-priv.h"
#include <linux/videodev2.h>
#include "libv4l2.h"
#include "libv4l2-priv.h"
@@ -89,12 +88,17 @@ static const char *v4l2_ioctls[] = {
[_IOC_NR(VIDIOC_G_EXT_CTRLS)] = "VIDIOC_G_EXT_CTRLS",
[_IOC_NR(VIDIOC_S_EXT_CTRLS)] = "VIDIOC_S_EXT_CTRLS",
[_IOC_NR(VIDIOC_TRY_EXT_CTRLS)] = "VIDIOC_TRY_EXT_CTRLS",
+#ifdef VIDIOC_ENUM_FRAMESIZES
+ [_IOC_NR(VIDIOC_ENUM_FRAMESIZES)] = "VIDIOC_ENUM_FRAMESIZES",
+ [_IOC_NR(VIDIOC_ENUM_FRAMEINTERVALS)] = "VIDIOC_ENUM_FRAMEINTERVALS",
+#endif
};
void v4l2_log_ioctl(unsigned long int request, void *arg, int result)
{
const char *ioctl_str;
char buf[40];
+ int saved_errno = errno;
if (!v4l2_log_file)
return;
@@ -102,7 +106,7 @@ void v4l2_log_ioctl(unsigned long int request, void *arg, int result)
if (_IOC_TYPE(request) == 'V' && _IOC_NR(request) < ARRAY_SIZE(v4l2_ioctls))
ioctl_str = v4l2_ioctls[_IOC_NR(request)];
else {
- snprintf(buf, sizeof(buf), "unknown request: %c %d\n",
+ snprintf(buf, sizeof(buf), "unknown request: %c %d",
(int)_IOC_TYPE(request), (int)_IOC_NR(request));
ioctl_str = buf;
}
@@ -110,11 +114,18 @@ void v4l2_log_ioctl(unsigned long int request, void *arg, int result)
fprintf(v4l2_log_file, "request == %s\n", ioctl_str);
switch (request) {
+ case VIDIOC_ENUM_FMT:
+ {
+ struct v4l2_fmtdesc *fmt = arg;
+ fprintf(v4l2_log_file, " index: %u, description: %s\n",
+ fmt->index, (result < 0) ? "" : (const char *)fmt->description);
+ }
+ break;
case VIDIOC_G_FMT:
case VIDIOC_S_FMT:
case VIDIOC_TRY_FMT:
{
- struct v4l2_format* fmt = arg;
+ struct v4l2_format *fmt = arg;
int pixfmt = fmt->fmt.pix.pixelformat;
if (fmt->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
@@ -141,8 +152,68 @@ void v4l2_log_ioctl(unsigned long int request, void *arg, int result)
req->count, (int)req->type, (int)req->memory);
}
break;
+#ifdef VIDIOC_ENUM_FRAMESIZES
+ case VIDIOC_ENUM_FRAMESIZES:
+ {
+ struct v4l2_frmsizeenum *frmsize = arg;
+ int pixfmt = frmsize->pixel_format;
+
+ fprintf(v4l2_log_file, " index: %u pixelformat: %c%c%c%c\n",
+ frmsize->index,
+ pixfmt & 0xff,
+ (pixfmt >> 8) & 0xff,
+ (pixfmt >> 16) & 0xff,
+ pixfmt >> 24);
+ switch (frmsize->type) {
+ case V4L2_FRMSIZE_TYPE_DISCRETE:
+ fprintf(v4l2_log_file, " %ux%u\n", frmsize->discrete.width,
+ frmsize->discrete.height);
+ break;
+ case V4L2_FRMSIZE_TYPE_CONTINUOUS:
+ case V4L2_FRMSIZE_TYPE_STEPWISE:
+ fprintf(v4l2_log_file, " %ux%u -> %ux%u\n",
+ frmsize->stepwise.min_width, frmsize->stepwise.min_height,
+ frmsize->stepwise.max_width, frmsize->stepwise.max_height);
+ break;
+ }
+ }
+ break;
+ case VIDIOC_ENUM_FRAMEINTERVALS:
+ {
+ struct v4l2_frmivalenum *frmival = arg;
+ int pixfmt = frmival->pixel_format;
+
+ fprintf(v4l2_log_file, " index: %u pixelformat: %c%c%c%c %ux%u:\n",
+ frmival->index,
+ pixfmt & 0xff,
+ (pixfmt >> 8) & 0xff,
+ (pixfmt >> 16) & 0xff,
+ pixfmt >> 24,
+ frmival->width,
+ frmival->height);
+ switch (frmival->type) {
+ case V4L2_FRMIVAL_TYPE_DISCRETE:
+ fprintf(v4l2_log_file, " %u/%u\n", frmival->discrete.numerator,
+ frmival->discrete.denominator);
+ break;
+ case V4L2_FRMIVAL_TYPE_CONTINUOUS:
+ case V4L2_FRMIVAL_TYPE_STEPWISE:
+ fprintf(v4l2_log_file, " %u/%u -> %u/%u\n",
+ frmival->stepwise.min.numerator,
+ frmival->stepwise.min.denominator,
+ frmival->stepwise.max.numerator,
+ frmival->stepwise.max.denominator);
+ break;
+ }
+ }
+ break;
+#endif
}
- fprintf(v4l2_log_file, "result == %d\n", result);
+ if (result < 0)
+ fprintf(v4l2_log_file, "result == %d (%s)\n", result, strerror(saved_errno));
+ else
+ fprintf(v4l2_log_file, "result == %d\n", result);
+
fflush(v4l2_log_file);
}