Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 26b06d493204c5db8ddb1535b09cebef > files > 4

directfb-1.4.11-3.fc14.src.rpm

diff -up DirectFB-1.4.11/configure.in.libv4l DirectFB-1.4.11/configure.in
--- DirectFB-1.4.11/configure.in.libv4l	2010-11-27 19:39:47.688514115 +0100
+++ DirectFB-1.4.11/configure.in	2010-11-27 19:39:47.717518354 +0100
@@ -897,6 +895,22 @@ if test "$V4L" = "yes"; then
 fi
 
 
+
+dnl
+dnl libv4l2 support for video4linux.
+dnl
+AC_ARG_ENABLE( libv4l2,
+  [  --enable-libv4l2        Libv4l2 Video4Linux2 support (default enabled)])
+if test "${enable_libv4l2}" = "yes" -a "${enable_v4l2}" != "no"
+then
+    PKG_CHECK_MODULES( LIBV4L2, libv4l2, [
+      AC_DEFINE(HAVE_LIBV4L2, 1, Define if libv4l2 is available)],
+      AC_MSG_WARN([LibV4L2 support disabled because libv4l2 development headers were not found])
+    )
+fi
+
+
+
 dnl check which gfxdrivers to build
 ati128=no
 cle266=no
@@ -1849,7 +1863,7 @@ Building Image Provider Modules:
 
 Building Video Provider Modules:
   GIF                       $enable_gif
-  Video4Linux               $V4L (v2: $V4L2)
+  Video4Linux               $V4L (v2: $V4L2) libv4l2: $LIBV4L2_CFLAGS $LIBV4L2_LIBS
 
 Building Font Modules:
   FreeType2                 $FREETYPE                 $FREETYPE_CFLAGS $FREETYPE_LIBS
diff -up DirectFB-1.4.11/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_v4l.c.libv4l DirectFB-1.4.11/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_v4l.c
--- DirectFB-1.4.11/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_v4l.c.libv4l	2010-11-27 19:39:47.690514408 +0100
+++ DirectFB-1.4.11/interfaces/IDirectFBVideoProvider/idirectfbvideoprovider_v4l.c	2010-11-27 19:41:42.517294474 +0100
@@ -87,6 +87,18 @@
 #include "videodev2.h"
 #endif
 
+
+#ifdef HAVE_LIBV4L2
+#   include <libv4l2.h>
+#else
+#   define v4l2_fd_open(fd, flags) (fd)
+#   define v4l2_close close
+#   define v4l2_ioctl ioctl
+#   define v4l2_mmap mmap
+#   define v4l2_munmap munmap
+#endif
+
+
 static DFBResult
 Probe( IDirectFBVideoProvider_ProbeContext *ctx );
 
@@ -217,28 +229,28 @@ IDirectFBVideoProvider_V4L_GetCapabiliti
           *caps = 0;
 
           data->saturation.id = V4L2_CID_SATURATION;
-          if (ioctl( data->fd, VIDIOC_G_CTRL, &data->saturation )) {
+          if (v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->saturation )) {
                *caps |= DVCAPS_SATURATION;
           }
           else {
                data->saturation.id = 0;
           }
           data->brightness.id = V4L2_CID_BRIGHTNESS;
-          if (ioctl( data->fd, VIDIOC_G_CTRL, &data->brightness )) {
+          if (v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->brightness )) {
                *caps |= DVCAPS_BRIGHTNESS;
           }
           else {
                data->brightness.id = 0;
           }
           data->contrast.id = V4L2_CID_CONTRAST;
-          if (ioctl( data->fd, VIDIOC_G_CTRL, &data->contrast )) {
+          if (v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->contrast )) {
                *caps |= DVCAPS_CONTRAST;
           }
           else {
                data->contrast.id = 0;
           }
           data->hue.id = V4L2_CID_HUE;
-          if (ioctl( data->fd, VIDIOC_G_CTRL, &data->hue )) {
+          if (v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->hue )) {
                *caps |= DVCAPS_HUE;
           }
           else {
@@ -478,28 +490,28 @@ IDirectFBVideoProvider_V4L_GetColorAdjus
 
           if (data->brightness.id) {
                ctrl.id = data->brightness.id;
-               if (!ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
+               if (!v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
                     adj->flags |= DCAF_BRIGHTNESS;
                     adj->brightness = 0xffff * ctrl.value / (data->brightness.maximum - data->brightness.minimum);
                }
           }
           if (data->contrast.id) {
                ctrl.id = data->contrast.id;
-               if (!ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
+               if (!v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
                     adj->flags |= DCAF_CONTRAST;
                     adj->contrast = 0xffff * ctrl.value / (data->contrast.maximum - data->contrast.minimum);
                }
           }
           if (data->hue.id) {
                ctrl.id = data->hue.id;
-               if (!ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
+               if (!v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
                     adj->flags |= DCAF_HUE;
                     adj->hue = 0xffff * ctrl.value / (data->hue.maximum - data->hue.minimum);
                }
           }
           if (data->saturation.id) {
                ctrl.id = data->saturation.id;
-               if (!ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
+               if (!v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &ctrl )) {
                     adj->flags |= DCAF_SATURATION;
                     adj->saturation = 0xffff * ctrl.value / (data->saturation.maximum - data->saturation.minimum);
                }
@@ -508,7 +520,7 @@ IDirectFBVideoProvider_V4L_GetColorAdjus
      else
 #endif
      {
-          ioctl( data->fd, VIDIOCGPICT, &pic );
+          v4l2_ioctl( data->fd, VIDIOCGPICT, &pic );
 
           adj->flags = DCAF_BRIGHTNESS | DCAF_CONTRAST | DCAF_HUE | DCAF_SATURATION;
 
@@ -540,28 +552,28 @@ IDirectFBVideoProvider_V4L_SetColorAdjus
           if ((adj->flags & DCAF_BRIGHTNESS) && data->brightness.id) {
                ctrl.id = data->brightness.id;
                ctrl.value = (adj->brightness * (data->brightness.maximum - data->brightness.minimum)) / 0xfff;
-               ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
+               v4l2_ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
           }
           if ((adj->flags & DCAF_CONTRAST) && data->contrast.id) {
                ctrl.id = data->contrast.id;
                ctrl.value = (adj->contrast * (data->contrast.maximum - data->contrast.minimum)) / 0xfff;
-               ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
+               v4l2_ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
           }
           if ((adj->flags & DCAF_HUE) && data->hue.id) {
                ctrl.id = data->hue.id;
                ctrl.value = (adj->hue * (data->hue.maximum - data->hue.minimum)) / 0xfff;
-               ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
+               v4l2_ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
           }
           if ((adj->flags & DCAF_SATURATION) && data->saturation.id) {
                ctrl.id = data->saturation.id;
                ctrl.value = (adj->saturation * (data->saturation.maximum - data->saturation.minimum)) / 0xfff;
-               ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
+               v4l2_ioctl( data->fd, VIDIOC_S_CTRL, &ctrl );
           }
      }
      else
 #endif
      {
-          if (ioctl( data->fd, VIDIOCGPICT, &pic ) < 0) {
+          if (v4l2_ioctl( data->fd, VIDIOCGPICT, &pic ) < 0) {
                DFBResult ret = errno2result( errno );
 
                D_PERROR( "DirectFB/Video4Linux: VIDIOCGPICT failed!\n" );
@@ -574,7 +586,7 @@ IDirectFBVideoProvider_V4L_SetColorAdjus
           if (adj->flags & DCAF_HUE)        pic.hue        = adj->hue;
           if (adj->flags & DCAF_SATURATION) pic.colour     = adj->saturation;
 
-          if (ioctl( data->fd, VIDIOCSPICT, &pic ) < 0) {
+          if (v4l2_ioctl( data->fd, VIDIOCSPICT, &pic ) < 0) {
                DFBResult ret = errno2result( errno );
 
                D_PERROR( "DirectFB/Video4Linux: VIDIOCSPICT failed!\n" );
@@ -634,11 +646,11 @@ Construct( IDirectFBVideoProvider *thiz,
 
      buffer_data = (IDirectFBDataBuffer_data*) buffer->priv;
 
-     fd = open( buffer_data->filename, O_RDWR );     
+     fd = v4l2_open( buffer_data->filename, O_RDWR );     
      if (fd < 0) {
           DFBResult ret = errno2result( errno );
 
-          D_PERROR( "DirectFB/Video4Linux: Cannot open `%s'!\n",
+          D_PERROR( "DirectFB/Video4Linux: Cannot v4l2_open `%s'!\n",
                      buffer_data->filename );
 
           DIRECT_DEALLOCATE_INTERFACE( thiz );
@@ -651,7 +663,7 @@ Construct( IDirectFBVideoProvider *thiz,
      data->is_v4l2 = 0;
 
      /* look if the device is a v4l2 device */
-     if (!ioctl( fd, VIDIOC_QUERYCAP, &data->caps )) {
+     if (!v4l2_ioctl( fd, VIDIOC_QUERYCAP, &data->caps )) {
           D_INFO( "DirectFB/Video4Linux: This is a Video4Linux-2 device.\n" );
           data->is_v4l2 = 1;
      }
@@ -664,12 +676,12 @@ Construct( IDirectFBVideoProvider *thiz,
      {
           D_INFO( "DirectFB/Video4Linux: This is a Video4Linux-1 device.\n" );
 
-          ioctl( fd, VIDIOCGCAP, &data->vcap );
-          ioctl( fd, VIDIOCCAPTURE, &zero );
+          v4l2_ioctl( fd, VIDIOCGCAP, &data->vcap );
+          v4l2_ioctl( fd, VIDIOCCAPTURE, &zero );
 
-          ioctl( fd, VIDIOCGMBUF, &data->vmbuf );
+          v4l2_ioctl( fd, VIDIOCGMBUF, &data->vmbuf );
 
-          data->buffer = mmap( NULL, data->vmbuf.size,
+          data->buffer = v4l2_mmap( NULL, data->vmbuf.size,
                                PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 );
      }
 
@@ -752,7 +764,7 @@ GrabThread( DirectThread *thread, void *
 
      while (frame < data->vmbuf.frames) {
           data->vmmap.frame = frame;
-          ioctl( data->fd, VIDIOCMCAPTURE, &data->vmmap );
+          v4l2_ioctl( data->fd, VIDIOCMCAPTURE, &data->vmmap );
           frame++;
      }
 
@@ -763,7 +775,7 @@ GrabThread( DirectThread *thread, void *
 
      frame = 0;
      while (data->running) {
-          ioctl( data->fd, VIDIOCSYNC, &frame );
+          v4l2_ioctl( data->fd, VIDIOCSYNC, &frame );
 
           if (!data->running)
                break;
@@ -808,7 +820,7 @@ GrabThread( DirectThread *thread, void *
           dfb_surface_unlock_buffer( surface, &data->destinationlock );
 
           data->vmmap.frame = frame;
-          ioctl( data->fd, VIDIOCMCAPTURE, &data->vmmap );
+          v4l2_ioctl( data->fd, VIDIOCMCAPTURE, &data->vmmap );
 
           if (!data->running)
                break;
@@ -952,7 +964,7 @@ v4l_to_surface_overlay( CoreSurface *sur
           b.depth = bpp;
           b.bytesperline = lock->pitch;
 
-          if (ioctl( data->fd, VIDIOCSFBUF, &b ) < 0) {
+          if (v4l2_ioctl( data->fd, VIDIOCSFBUF, &b ) < 0) {
                DFBResult ret = errno2result( errno );
 
                D_PERROR( "DirectFB/Video4Linux: VIDIOCSFBUF failed, must run being root!\n" );
@@ -963,7 +975,7 @@ v4l_to_surface_overlay( CoreSurface *sur
      {
           struct video_picture p;
 
-          if (ioctl( data->fd, VIDIOCGPICT, &p ) < 0) {
+          if (v4l2_ioctl( data->fd, VIDIOCGPICT, &p ) < 0) {
                DFBResult ret = errno2result( errno );
 
                D_PERROR( "DirectFB/Video4Linux: VIDIOCGPICT failed!\n" );
@@ -974,7 +986,7 @@ v4l_to_surface_overlay( CoreSurface *sur
           p.depth = bpp;
           p.palette = palette;
 
-          if (ioctl( data->fd, VIDIOCSPICT, &p ) < 0) {
+          if (v4l2_ioctl( data->fd, VIDIOCSPICT, &p ) < 0) {
                DFBResult ret = errno2result( errno );
 
                D_PERROR( "DirectFB/Video4Linux: VIDIOCSPICT failed!\n" );
@@ -994,7 +1006,7 @@ v4l_to_surface_overlay( CoreSurface *sur
           win.clipcount = 0;
           win.chromakey = 0;
 
-          if (ioctl( data->fd, VIDIOCSWIN, &win ) < 0) {
+          if (v4l2_ioctl( data->fd, VIDIOCSWIN, &win ) < 0) {
                DFBResult ret = errno2result( errno );
 
                D_PERROR( "DirectFB/Video4Linux: VIDIOCSWIN failed!\n" );
@@ -1006,7 +1018,7 @@ v4l_to_surface_overlay( CoreSurface *sur
      if (!data->cleanup)
           data->cleanup = dfb_core_cleanup_add( NULL, v4l_cleanup, data, true );
 
-     if (ioctl( data->fd, VIDIOCCAPTURE, &one ) < 0) {
+     if (v4l2_ioctl( data->fd, VIDIOCCAPTURE, &one ) < 0) {
           DFBResult ret = errno2result( errno );
 
           D_PERROR( "DirectFB/Video4Linux: Could not start capturing (VIDIOCCAPTURE failed)!\n" );
@@ -1072,7 +1084,7 @@ v4l_to_surface_grab( CoreSurface *surfac
      data->vmmap.height = surface->config.size.h;
      data->vmmap.format = palette;
      data->vmmap.frame = 0;
-     if (ioctl( data->fd, VIDIOCMCAPTURE, &data->vmmap ) < 0) {
+     if (v4l2_ioctl( data->fd, VIDIOCMCAPTURE, &data->vmmap ) < 0) {
           DFBResult ret = errno2result( errno );
 
           D_PERROR( "DirectFB/Video4Linux: Could not start capturing (VIDIOCMCAPTURE failed)!\n" );
@@ -1120,7 +1132,7 @@ v4l_stop( IDirectFBVideoProvider_V4L_dat
      if (data->is_v4l2) {
           /* turn off streaming */
           int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-          int err = ioctl( data->fd, VIDIOC_STREAMOFF, &type );
+          int err = v4l2_ioctl( data->fd, VIDIOC_STREAMOFF, &type );
           if (err) {
                D_PERROR( "DirectFB/Video4Linux2: VIDIOC_STREAMOFF.\n" );
                /* don't quit here */
@@ -1130,7 +1142,7 @@ v4l_stop( IDirectFBVideoProvider_V4L_dat
 #endif
      {
           if (!data->grab_mode) {
-               if (ioctl( data->fd, VIDIOCCAPTURE, &zero ) < 0)
+               if (v4l2_ioctl( data->fd, VIDIOCCAPTURE, &zero ) < 0)
                     D_PERROR( "DirectFB/Video4Linux: "
                               "Could not stop capturing (VIDIOCCAPTURE failed)!\n" );
           }
@@ -1151,8 +1163,8 @@ v4l_stop( IDirectFBVideoProvider_V4L_dat
                for (i = 0; i < data->req.count; i++) {
                     struct v4l2_buffer *vidbuf = &data->vidbuf[i];
                     D_DEBUG( "DirectFB/Video4Linux2: %d => 0x%08x, len:%d\n", i, (u32) data->ptr[i], vidbuf->length );
-                    if (munmap( data->ptr[i], vidbuf->length )) {
-                         D_PERROR( "DirectFB/Video4Linux2: munmap().\n" );
+                    if (v4l2_munmap( data->ptr[i], vidbuf->length )) {
+                         D_PERROR( "DirectFB/Video4Linux2: v4l2_munmap().\n" );
                     }
                }
           }
@@ -1187,8 +1199,8 @@ v4l_deinit( IDirectFBVideoProvider_V4L_d
 
      v4l_stop( data, true );
 
-     munmap( data->buffer, data->vmbuf.size );
-     close( data->fd );
+     v4l2_munmap( data->buffer, data->vmbuf.size );
+     v4l2_close( data->fd );
      data->fd = -1;
 }
 
@@ -1233,7 +1245,7 @@ wait_for_buffer( int vid, struct v4l2_bu
           return -1;     /* fixme */
      }
      else if (FD_ISSET( vid, &rdset )) {
-          err = ioctl( vid, VIDIOC_DQBUF, cur );
+          err = v4l2_ioctl( vid, VIDIOC_DQBUF, cur );
           if (err) {
                D_PERROR( "DirectFB/Video4Linux2: VIDIOC_DQBUF.\n" );
                return -1;     /* fixme */
@@ -1265,7 +1277,7 @@ V4L2_Thread( DirectThread *thread, void 
                vidbuf->m.offset = data->destinationlock.offset;
           }
 
-          err = ioctl( data->fd, VIDIOC_QBUF, vidbuf );
+          err = v4l2_ioctl( data->fd, VIDIOC_QBUF, vidbuf );
           if (err) {
                D_PERROR( "DirectFB/Video4Linux2: VIDIOC_QBUF.\n" );
                return NULL;
@@ -1273,7 +1285,7 @@ V4L2_Thread( DirectThread *thread, void 
      }
 
      /* start streaming */
-     if (ioctl( data->fd, VIDIOC_STREAMON, &type )) {
+     if (v4l2_ioctl( data->fd, VIDIOC_STREAMON, &type )) {
           D_PERROR( "DirectFB/Video4Linux2: VIDIOC_STREAMON.\n" );
           return NULL;   /* fixme */
      }
@@ -1344,7 +1356,7 @@ V4L2_Thread( DirectThread *thread, void 
           if (data->callback)
                data->callback( data->ctx );
 
-          if (ioctl( data->fd, VIDIOC_QBUF, &cur )) {
+          if (v4l2_ioctl( data->fd, VIDIOC_QBUF, &cur )) {
                D_PERROR( "DirectFB/Video4Linux2: VIDIOC_QBUF.\n" );
                return NULL;
           }
@@ -1417,7 +1429,7 @@ v4l2_playto( CoreSurface *surface, DFBRe
 
      D_DEBUG( "DirectFB/Video4Linux2: surface->config.size.w:%d, surface->config.size.h:%d.\n", surface->config.size.w, surface->config.size.h );
 
-     err = ioctl( data->fd, VIDIOC_S_FMT, &data->fmt );
+     err = v4l2_ioctl( data->fd, VIDIOC_S_FMT, &data->fmt );
      if (err) {
           D_PERROR( "DirectFB/Video4Linux2: VIDIOC_S_FMT.\n" );
           dfb_surface_unlock_buffer( surface, &data->destinationlock );
@@ -1431,16 +1443,16 @@ v4l2_playto( CoreSurface *surface, DFBRe
      }
 
      if (data->brightness.id) {
-          ioctl( data->fd, VIDIOC_G_CTRL, &data->brightness );
+          v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->brightness );
      }
      if (data->contrast.id) {
-          ioctl( data->fd, VIDIOC_G_CTRL, &data->contrast );
+          v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->contrast );
      }
      if (data->saturation.id) {
-          ioctl( data->fd, VIDIOC_G_CTRL, &data->saturation );
+          v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->saturation );
      }
      if (data->hue.id) {
-          ioctl( data->fd, VIDIOC_G_CTRL, &data->hue );
+          v4l2_ioctl( data->fd, VIDIOC_G_CTRL, &data->hue );
      }
 
      if (surface->config.caps & DSCAPS_SYSTEMONLY) {
@@ -1462,7 +1474,7 @@ v4l2_playto( CoreSurface *surface, DFBRe
           D_DEBUG( "w:%d, h:%d, bpl:%d, base:0x%08lx\n",
                    fb.fmt.width, fb.fmt.height, fb.fmt.bytesperline, (unsigned long)fb.base );
 
-          if (ioctl( data->fd, VIDIOC_S_FBUF, &fb ) < 0) {
+          if (v4l2_ioctl( data->fd, VIDIOC_S_FBUF, &fb ) < 0) {
                DFBResult ret = errno2result( errno );
 
                D_PERROR( "DirectFB/Video4Linux2: VIDIOC_S_FBUF failed, must run being root!\n" );
@@ -1475,7 +1487,7 @@ v4l2_playto( CoreSurface *surface, DFBRe
      /* Ask Video Device for Buffers */
      data->req.count = NUMBER_OF_BUFFERS;
      data->req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-     err = ioctl( data->fd, VIDIOC_REQBUFS, &data->req );
+     err = v4l2_ioctl( data->fd, VIDIOC_REQBUFS, &data->req );
      if (err < 0 || data->req.count < NUMBER_OF_BUFFERS) {
           D_PERROR( "DirectFB/Video4Linux2: VIDIOC_REQBUFS: %d, %d.\n", err, data->req.count );
           if (!data->framebuffer_or_system)
@@ -1490,7 +1502,7 @@ v4l2_playto( CoreSurface *surface, DFBRe
           vidbuf->index = i;
           vidbuf->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 
-          err = ioctl( data->fd, VIDIOC_QUERYBUF, vidbuf );
+          err = v4l2_ioctl( data->fd, VIDIOC_QUERYBUF, vidbuf );
           if (err < 0) {
                D_PERROR( "DirectFB/Video4Linux2: VIDIOC_QUERYBUF.\n" );
                if (!data->framebuffer_or_system)
@@ -1505,9 +1517,9 @@ v4l2_playto( CoreSurface *surface, DFBRe
           }
 */
           if (data->framebuffer_or_system) {
-               data->ptr[i] = mmap( 0, vidbuf->length, PROT_READ | PROT_WRITE, MAP_SHARED, data->fd, vidbuf->m.offset );
+               data->ptr[i] = v4l2_mmap( 0, vidbuf->length, PROT_READ | PROT_WRITE, MAP_SHARED, data->fd, vidbuf->m.offset );
                if (data->ptr[i] == MAP_FAILED) {
-                    D_PERROR( "DirectFB/Video4Linux2: mmap().\n" );
+                    D_PERROR( "DirectFB/Video4Linux2: v4l2_mmap().\n" );
                     if (!data->framebuffer_or_system)
                          dfb_surface_unlock_buffer( surface, &data->destinationlock );
                     return err;