diff options
author | Parabola <dev@list.parabolagnulinux.org> | 2011-04-05 14:26:38 +0000 |
---|---|---|
committer | Parabola <dev@list.parabolagnulinux.org> | 2011-04-05 14:26:38 +0000 |
commit | 415856bdd4f48ab4f2732996f0bae58595092bbe (patch) | |
tree | ede2018b591f6dfb477fe9341ba17b9bc000fab9 /extra/xawtv/xawtv-3.95-libv4l2.patch |
Tue Apr 5 14:26:38 UTC 2011
Diffstat (limited to 'extra/xawtv/xawtv-3.95-libv4l2.patch')
-rw-r--r-- | extra/xawtv/xawtv-3.95-libv4l2.patch | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/extra/xawtv/xawtv-3.95-libv4l2.patch b/extra/xawtv/xawtv-3.95-libv4l2.patch new file mode 100644 index 000000000..45a5e69cb --- /dev/null +++ b/extra/xawtv/xawtv-3.95-libv4l2.patch @@ -0,0 +1,176 @@ +--- xawtv-3.95/libng/plugins/Subdir.mk~ 2008-07-30 09:51:01.000000000 +0200 ++++ xawtv-3.95/libng/plugins/Subdir.mk 2008-07-30 09:51:01.000000000 +0200 +@@ -41,6 +41,7 @@ libng/plugins/read-qt.so : LDLIBS := $( + libng/plugins/write-qt.so : LDLIBS := $(QT_LIBS) + libng/plugins/read-dv.so : LDLIBS := $(DV_LIBS) + libng/plugins/write-dv.so : LDLIBS := $(DV_LIBS) ++libng/plugins/drv0-v4l2.so: LDLIBS := -lv4l2 + + # global targets + all:: $(TARGETS-plugins) +diff -up xawtv-3.95/libng/plugins/drv0-v4l2.c.orig xawtv-3.95/libng/plugins/drv0-v4l2.c +--- xawtv-3.95/libng/plugins/drv0-v4l2.c.orig 2008-08-03 21:26:13.000000000 +0200 ++++ xawtv-3.95/libng/plugins/drv0-v4l2.c 2008-08-03 21:27:50.000000000 +0200 +@@ -29,11 +29,26 @@ + #include "struct-dump.h" + #include "struct-v4l2.h" + ++/* FIXME replace with autoconf detection */ ++#define HAVE_LIBV4L ++ ++#ifdef HAVE_LIBV4L ++#include <libv4l2.h> ++#else ++#define v4l2_fd_open(fd, flags) (fd) ++#define v4l2_close close ++#define v4l2_dup dup ++#define v4l2_ioctl ioctl ++#define v4l2_read read ++#define v4l2_mmap mmap ++#define v4l2_munmap munmap ++#endif ++ + /* ---------------------------------------------------------------------- */ + + /* open+close */ +-static void* v4l2_open(char *device); +-static int v4l2_close(void *handle); ++static void* v4l2_open_handle(char *device); ++static int v4l2_close_handle(void *handle); + + /* attributes */ + static char* v4l2_devname(void *handle); +@@ -111,8 +126,8 @@ struct v4l2_handle { + + struct ng_vid_driver v4l2_driver = { + name: "v4l2", +- open: v4l2_open, +- close: v4l2_close, ++ open: v4l2_open_handle, ++ close: v4l2_close_handle, + + get_devname: v4l2_devname, + capabilities: v4l2_flags, +@@ -166,7 +181,7 @@ xioctl(int fd, int cmd, void *arg, int m + { + int rc; + +- rc = ioctl(fd,cmd,arg); ++ rc = v4l2_ioctl(fd,cmd,arg); + if (rc >= 0 && ng_debug < 2) + return rc; + if (mayfail && errno == mayfail && ng_debug < 2) +@@ -220,7 +235,7 @@ get_device_capabilities(struct v4l2_hand + } + + h->streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +- ioctl(h->fd,VIDIOC_G_PARM,&h->streamparm); ++ v4l2_ioctl(h->fd,VIDIOC_G_PARM,&h->streamparm); + + /* controls */ + for (i = 0; i < MAX_CTRL; i++) { +@@ -444,10 +459,10 @@ static void v4l2_write_attr(struct ng_at + /* ---------------------------------------------------------------------- */ + + static void* +-v4l2_open(char *device) ++v4l2_open_handle(char *device) + { + struct v4l2_handle *h; +- int i; ++ int i, libv4l2_fd; + + h = malloc(sizeof(*h)); + if (NULL == h) +@@ -459,6 +474,16 @@ v4l2_open(char *device) + goto err; + } + ++ /* Note the v4l2_xxx functions are designed so that if they get passed an ++ unknown fd, the will behave exactly as their regular xxx counterparts, so ++ if v4l2_fd_open fails, we continue as normal (missing the libv4l2 custom ++ cam format to normal formats conversion). Chances are big we will still ++ fail then though, as normally v4l2_fd_open only fails if the device is not ++ a v4l2 device. */ ++ libv4l2_fd = v4l2_fd_open(h->fd, 0); ++ if (libv4l2_fd != -1) ++ h->fd = libv4l2_fd; ++ + if (-1 == xioctl(h->fd,VIDIOC_QUERYCAP,&h->cap,EINVAL)) + goto err; + if (ng_debug) +@@ -495,21 +520,21 @@ v4l2_open(char *device) + + err: + if (h->fd != -1) +- close(h->fd); ++ v4l2_close(h->fd); + if (h) + free(h); + return NULL; + } + + static int +-v4l2_close(void *handle) ++v4l2_close_handle(void *handle) + { + struct v4l2_handle *h = handle; + + if (ng_debug) + fprintf(stderr, "v4l2: close\n"); + +- close(h->fd); ++ v4l2_close(h->fd); + free(h); + return 0; + } +@@ -818,7 +843,7 @@ v4l2_start_streaming(struct v4l2_handle + h->buf_me[i].fmt = h->fmt_me; + h->buf_me[i].size = h->buf_me[i].fmt.bytesperline * + h->buf_me[i].fmt.height; +- h->buf_me[i].data = mmap(NULL, h->buf_v4l2[i].length, ++ h->buf_me[i].data = v4l2_mmap(NULL, h->buf_v4l2[i].length, + PROT_READ | PROT_WRITE, MAP_SHARED, + h->fd, h->buf_v4l2[i].m.offset); + if (MAP_FAILED == h->buf_me[i].data) { +@@ -859,7 +884,7 @@ v4l2_stop_streaming(struct v4l2_handle * + unsigned int i; + + /* stop capture */ +- if (-1 == ioctl(h->fd,VIDIOC_STREAMOFF,&h->fmt_v4l2.type)) ++ if (-1 == v4l2_ioctl(h->fd,VIDIOC_STREAMOFF,&h->fmt_v4l2.type)) + perror("ioctl VIDIOC_STREAMOFF"); + + /* free buffers */ +@@ -868,7 +893,7 @@ v4l2_stop_streaming(struct v4l2_handle * + ng_waiton_video_buf(&h->buf_me[i]); + if (ng_debug) + print_bufinfo(&h->buf_v4l2[i]); +- if (-1 == munmap(h->buf_me[i].data, h->buf_v4l2_size[i])) ++ if (-1 == v4l2_munmap(h->buf_me[i].data, h->buf_v4l2_size[i])) + perror("munmap"); + } + h->queue = 0; +@@ -989,7 +1014,7 @@ v4l2_nextframe(void *handle) + } else { + size = h->fmt_me.bytesperline * h->fmt_me.height; + buf = ng_malloc_video_buf(&h->fmt_me,size); +- rc = read(h->fd,buf->data,size); ++ rc = v4l2_read(h->fd,buf->data,size); + if (rc != size) { + if (-1 == rc) { + perror("v4l2: read"); +@@ -1023,11 +1048,11 @@ v4l2_getimage(void *handle) + size = h->fmt_me.bytesperline * h->fmt_me.height; + buf = ng_malloc_video_buf(&h->fmt_me,size); + if (h->cap.capabilities & V4L2_CAP_READWRITE) { +- rc = read(h->fd,buf->data,size); ++ rc = v4l2_read(h->fd,buf->data,size); + if (-1 == rc && EBUSY == errno && h->ov_on) { + h->ov_on = 0; + xioctl(h->fd, VIDIOC_OVERLAY, &h->ov_on, 0); +- rc = read(h->fd,buf->data,size); ++ rc = v4l2_read(h->fd,buf->data,size); + h->ov_on = 1; + xioctl(h->fd, VIDIOC_OVERLAY, &h->ov_on, 0); + } |