summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--configure.ac17
-rw-r--r--sys/v4l2/gstv4l2element.h30
3 files changed, 54 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 9b2bf0cb..79e4c012 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * configure.ac:
+ * sys/v4l2/gstv4l2element.h:
+ Workaround for missing struct v4l2_buffer declaration in Suse 9
+ and Mandrake 10 linux/videodev2.h header file (#135919).
+
+2004-04-10 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
* ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
Bail out if no filename was given.
diff --git a/configure.ac b/configure.ac
index 7311bc78..b83f5bf6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -635,6 +635,23 @@ return 0;
[ AC_MSG_WARN([video4linux2 was not found])])
])
fi
+ dnl check for missing v4l2_buffer declaration (see #135919)
+ if [ test x$HAVE_V4L2 = xyes ]; then
+ MISSING_DECL=0
+ AC_MSG_CHECKING(struct v4l2_buffer declaration)
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <linux/types.h>
+#define _LINUX_TIME_H
+#include <linux/videodev2.h>
+ ],[
+struct v4l2_buffer buf;
+return 0;
+ ], [ AC_MSG_RESULT(yes) ], [ MISSING_DECL=1 && AC_MSG_RESULT(no) ])
+ if [ test x$MISSING_DECL = x1 ]; then
+ AC_DEFINE(GST_V4L2_MISSING_BUFDECL, 1, [struct v4l2_buffer missing])
+ fi
+ fi
])
dnl Next, check for the optional libraries:
diff --git a/sys/v4l2/gstv4l2element.h b/sys/v4l2/gstv4l2element.h
index e46b2440..61442aff 100644
--- a/sys/v4l2/gstv4l2element.h
+++ b/sys/v4l2/gstv4l2element.h
@@ -40,6 +40,36 @@
#define _LINUX_TIME_H
#include <linux/videodev2.h>
+/*
+ * See bug #135919, the Suse9 (and Mandrake10) videodev2 headers
+ * contain a bug where (for userspace applications) the v4l2_buffer
+ * struct is not declared, so applications have to declare it.
+ * Declaration straightly ripped out from <linux/videodev2.h>.
+ */
+#ifdef GST_V4L2_MISSING_BUFDECL
+struct v4l2_buffer
+{
+ __u32 index;
+ enum v4l2_buf_type type;
+ __u32 bytesused;
+ __u32 flags;
+ enum v4l2_field field;
+ struct timeval timestamp;
+ struct v4l2_timecode timecode;
+ __u32 sequence;
+
+ /* memory location */
+ enum v4l2_memory memory;
+ union {
+ __u32 offset;
+ unsigned long userptr;
+ } m;
+ __u32 length;
+
+ __u32 reserved[2];
+};
+#endif /* GST_V4L2_MISSING_BUFDECL */
+
#define GST_TYPE_V4L2ELEMENT \
(gst_v4l2element_get_type())