v4l2: Fix support for 32bit mmap
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 7 Mar 2018 19:16:02 +0000 (14:16 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 7 Mar 2018 19:16:24 +0000 (14:16 -0500)
https://bugzilla.gnome.org/show_bug.cgi?id=793103

sys/v4l2/gstv4l2object.c
sys/v4l2/gstv4l2object.h

index a5e6707..1f14cd6 100644 (file)
@@ -55,10 +55,6 @@ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
 
 #define ENCODED_BUFFER_SIZE             (2 * 1024 * 1024)
 
-#if SIZEOF_OFF_T == 8 && !defined(mmap64)
-#define mmap64 mmap
-#endif
-
 enum
 {
   PROP_0,
@@ -460,6 +456,22 @@ gst_v4l2_object_install_m2m_properties_helper (GObjectClass * gobject_class)
           GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
+/* Support for 32bit off_t, this wrapper is casting off_t to gint64 */
+#ifdef HAVE_LIBV4L2
+#if SIZEOF_OFF_T < 8
+
+static gpointer
+v4l2_mmap_wrapper (gpointer start, gsize length, gint prot, gint flags, gint fd,
+    off_t offset)
+{
+  return v4l2_mmap (start, length, prot, flags, fd, (gint64) offset);
+}
+
+#define v4l2_mmap v4l2_mmap_wrapper
+
+#endif /* SIZEOF_OFF_T < 8 */
+#endif /* HAVE_LIBV4L2 */
+
 GstV4l2Object *
 gst_v4l2_object_new (GstElement * element,
     GstObject * debug_object,
index 73ba624..fc3c4c7 100644 (file)
@@ -194,7 +194,7 @@ struct _GstV4l2Object {
   gint (*ioctl) (gint fd, gulong request, ...);
   gssize (*read) (gint fd, gpointer buffer, gsize n);
   gpointer (*mmap) (gpointer start, gsize length, gint prot, gint flags,
-      gint fd, gint64 offset);
+      gint fd,  off_t offset);
   gint (*munmap) (gpointer _start, gsize length);
 
   /* Quirks */