diff --git a/ChangeLog b/ChangeLog index 9b2bf0cb76..79e4c01234 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2004-04-10 Ronald Bultje + + * 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 * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file): diff --git a/configure.ac b/configure.ac index 7311bc7889..b83f5bf629 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 +#include +#define _LINUX_TIME_H +#include + ],[ +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 e46b24402c..61442aff83 100644 --- a/sys/v4l2/gstv4l2element.h +++ b/sys/v4l2/gstv4l2element.h @@ -40,6 +40,36 @@ #define _LINUX_TIME_H #include +/* + * 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 . + */ +#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())