Hi Uwe, I made an initial attempt at a patch (attached) to port aatv to libv4l1. I tested with a webcam at the BSP, but I could not get it to return data from the webcam. I suspect someone with knowledge of V4L2 should port the app to the proper V4L2 APIs instead. Alternatively, since mplayer has a V4L driver and can output colour on the console using libcaca, aatv could simply be removed from the archive.
Hello from the 2010 Thai BSP: http://wiki.debian.org/DebianThailand/MiniDebCamp2010/BSP -- bye, pabs http://wiki.debian.org/PaulWise
diff -u aatv-0.3/debian/changelog aatv-0.3/debian/changelog --- aatv-0.3/debian/changelog +++ aatv-0.3/debian/changelog @@ -1,3 +1,10 @@ +aatv (0.3-5.1) UNRELEASED; urgency=low + + * Non-maintainer upload. + * Use the libv4l1 emulation of V4L v2 + + -- Paul Wise <p...@debian.org> Tue, 16 Mar 2010 11:57:23 +0700 + aatv (0.3-5) unstable; urgency=low * Standards-Version: 3.8.1 (no changes required). diff -u aatv-0.3/debian/control aatv-0.3/debian/control --- aatv-0.3/debian/control +++ aatv-0.3/debian/control @@ -2,7 +2,7 @@ Section: graphics Priority: optional Maintainer: Uwe Hermann <u...@debian.org> -Build-Depends: cdbs, debhelper (>= 5), autotools-dev, libaa1-dev +Build-Depends: cdbs, debhelper (>= 5), autotools-dev, libaa1-dev, libv4l-dev, automake, autoconf, pkg-config Standards-Version: 3.8.1 Homepage: http://aatv.sourceforge.net/ diff -u aatv-0.3/debian/rules aatv-0.3/debian/rules --- aatv-0.3/debian/rules +++ aatv-0.3/debian/rules @@ -11,6 +11,12 @@ DEB_MAKE_INSTALL_TARGET := install prefix=$(CURDIR)/debian/aatv/usr \ AATV_CONFIGFILE=$(CURDIR)/debian/aatv/etc/aatv.conf +DEB_AUTO_UPDATE_ACLOCAL := $(shell find /usr/bin/aclocal-*.* | sed 's/.*aclocal-//') --force +DEB_AUTO_UPDATE_AUTOCONF := yes +DEB_AUTO_UPDATE_AUTOHEADER := yes +DEB_AUTO_UPDATE_AUTOMAKE := $(shell find /usr/bin/automake-*.* | sed 's/.*automake-//') +DEB_AUTOMAKE_ARGS := --add-missing --force-missing + # For /usr/share/cdbs/1/rules/utils.mk sanity check. common-binary-post-install-arch:: list-missing only in patch2: unchanged: --- aatv-0.3.orig/debian/patches/30_v4l2_migration.patch +++ aatv-0.3/debian/patches/30_v4l2_migration.patch @@ -0,0 +1,242 @@ +diff -Nur -x '*.orig' -x '*~' aatv-0.3//configure.in aatv-0.3.new//configure.in +--- aatv-0.3//configure.in 2002-01-14 18:47:13.000000000 +0700 ++++ aatv-0.3.new//configure.in 2010-03-16 15:38:35.000000000 +0700 +@@ -29,6 +29,7 @@ + AC_PROG_CC + AC_PROG_INSTALL + AC_PROG_MAKE_SET ++PKG_PROG_PKG_CONFIG + + + dnl --------------------------------------------------------------------------- +@@ -47,6 +48,11 @@ + AC_CHECK_LIB([aa], [aa_parseoptions], , + [AC_MSG_ERROR(Cannot find aalib! Aborting.)]) + ++PKG_CHECK_MODULES([LIBV4L1], [libv4l1], [HAVE_LIBV4L1=yes], [HAVE_LIBV4L1=no]) ++if test $HAVE_LIBV4L1 = yes ; then ++AC_DEFINE(HAVE_LIBV4L1, 1, [define to use libv4l1]) ++fi ++ + + dnl --------------------------------------------------------------------------- + dnl Checks for header files. +diff -Nur -x '*.orig' -x '*~' aatv-0.3//src/grabber.c aatv-0.3.new//src/grabber.c +--- aatv-0.3//src/grabber.c 2002-01-14 18:47:13.000000000 +0700 ++++ aatv-0.3.new//src/grabber.c 2010-03-16 15:41:45.000000000 +0700 +@@ -36,6 +36,14 @@ + #include <asm/types.h> + #include <linux/videodev.h> + ++#ifdef HAVE_LIBV4L1 ++#include <libv4l1.h> ++#else ++#define v4l1_open open ++#define v4l1_ioctl ioctl ++#define v4l1_mmap mmap ++#endif ++ + #include "aatv.h" + + /* grabber device variables */ +@@ -75,13 +83,13 @@ + int i; + + /* open the device */ +- if ((grab_fd = open(grab_device,O_RDWR)) == -1) { ++ if ((grab_fd = v4l1_open(grab_device,O_RDWR)) == -1) { + fprintf(stderr,"open %s: %s\n",grab_device,strerror(errno)); + exit_aatv (1); + } + + /* fill the grabber structures */ +- if (ioctl(grab_fd,VIDIOCGCAP,&grab_cap) == -1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCGCAP,&grab_cap) == -1) { + fprintf(stderr,"%s: no v4l device\n",grab_device); + exit_aatv (1); + } +@@ -93,27 +101,27 @@ + printf ("minheight\t: %d\n", grab_cap.minheight); + + +- if (ioctl(grab_fd,VIDIOCGCHAN,&grab_chan)==-1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCGCHAN,&grab_chan)==-1) { + perror("ioctl VIDIOCGCHAN"); + exit_aatv (1); + } + +- if (ioctl(grab_fd,VIDIOCGAUDIO,&grab_audio) == -1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCGAUDIO,&grab_audio) == -1) { + perror("ioctl VIDIOCGAUDIO"); +- exit_aatv (1); ++// exit_aatv (1); + } + +- if (ioctl(grab_fd, VIDIOCGMBUF, &grab_info) == -1) { ++ if (v4l1_ioctl(grab_fd, VIDIOCGMBUF, &grab_info) == -1) { + perror ("ioctl VIDIOCGMBUF"); + exit_aatv (1); + } + +- if (ioctl(grab_fd, VIDIOCGPICT, &grab_pict) == -1) { ++ if (v4l1_ioctl(grab_fd, VIDIOCGPICT, &grab_pict) == -1) { + perror ("ioctl VIDIOCGPICT"); + exit_aatv (1); + } + +- if (ioctl(grab_fd,VIDIOCGWIN,&grab_win) == -1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCGWIN,&grab_win) == -1) { + perror("ioctl VIDIOCGWIN"); + exit_aatv (1); + } +@@ -155,9 +163,9 @@ + /* turn audio on */ + grab_audio.flags &= ~VIDEO_AUDIO_MUTE; + +- if (ioctl(grab_fd,VIDIOCSAUDIO,&grab_audio) == -1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCSAUDIO,&grab_audio) == -1) { + perror("ioctl VIDIOCSAUDIO"); +- exit_aatv(1); ++// exit_aatv(1); + } + + /* try to setup mmap-based capture */ +@@ -171,7 +179,7 @@ + grab_buf[i].height = grab_height; + } + +- grab_data[0] = mmap(0,(size_t)grab_info.size, PROT_READ|PROT_WRITE, ++ grab_data[0] = v4l1_mmap(0,(size_t)grab_info.size, PROT_READ|PROT_WRITE, + MAP_SHARED, grab_fd, 0); + + +@@ -179,7 +187,7 @@ + have_mmap = 1; + for (i=1;i<buffers_nb;i++) { + grab_data[i] = grab_data[0] + grab_info.offsets[i]; +- ioctl(grab_fd,VIDIOCMCAPTURE,&grab_buf[i]); ++ v4l1_ioctl(grab_fd,VIDIOCMCAPTURE,&grab_buf[i]); + } + return; + } +@@ -193,11 +201,11 @@ + memset(&grab_win,0,sizeof(struct video_window)); + grab_win.width = grab_width; + grab_win.height = grab_height; +- if (ioctl(grab_fd,VIDIOCSWIN,&grab_win) == -1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCSWIN,&grab_win) == -1) { + perror("ioctl VIDIOCSWIN"); + exit_aatv(1); + } +- if (ioctl(grab_fd,VIDIOCGWIN,&grab_win) == -1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCGWIN,&grab_win) == -1) { + perror("ioctl VIDIOCGWIN"); + exit_aatv(1); + } +@@ -217,7 +225,7 @@ + { + /* turn off audio */ + grab_audio.flags |= VIDEO_AUDIO_MUTE; +- if (ioctl(grab_fd,VIDIOCSAUDIO,&grab_audio) == -1) ++ if (v4l1_ioctl(grab_fd,VIDIOCSAUDIO,&grab_audio) == -1) + perror("ioctl VIDIOCSAUDIO"); + } + +@@ -227,13 +235,13 @@ + int rc; + for (;;) { + if (have_mmap) { +- if (ioctl(grab_fd, VIDIOCMCAPTURE, ++ if (v4l1_ioctl(grab_fd, VIDIOCMCAPTURE, + &grab_buf[current_buffer]) == -1) { + perror("ioctl VIDIOCMCAPTURE"); + } else { + current_buffer = (current_buffer + 1) % + buffers_nb; +- if (ioctl(grab_fd, VIDIOCSYNC, ++ if (v4l1_ioctl(grab_fd, VIDIOCSYNC, + &grab_buf[current_buffer]) == -1) { + perror("ioctl VIDIOCSYNC"); + } else { +@@ -243,7 +251,7 @@ + } + } + } else { +- rc = read(grab_fd,grab_data[current_buffer], ++ rc = v4l1_read(grab_fd,grab_data[current_buffer], + (size_t)grab_size); + if (grab_size != rc) { + fprintf(stderr, "grabber read error (rc=%d)\n", +@@ -262,7 +270,7 @@ + get_freq (void) + { + unsigned long freq; +- if (ioctl(grab_fd, VIDIOCGFREQ, &freq) == -1) ++ if (v4l1_ioctl(grab_fd, VIDIOCGFREQ, &freq) == -1) + perror("ioctl VIDIOCGFREQ"); + return (freq * 125 / 2); + } +@@ -271,12 +279,12 @@ + change_freq (unsigned long freq) + { + freq = freq * 2 / 125; +- if (ioctl(grab_fd, VIDIOCSFREQ, &freq) == -1) ++ if (v4l1_ioctl(grab_fd, VIDIOCSFREQ, &freq) == -1) + perror("ioctl VIDIOCSFREQ"); + /* + usleep (100000); + +- if (ioctl(grab_fd, VIDIOCGTUNER, &grab_tuner) == -1) ++ if (v4l1_ioctl(grab_fd, VIDIOCGTUNER, &grab_tuner) == -1) + perror("ioctl VIDIOCGTUNER"); + + if (grab_tuner.signal) printf("tuned\n"); +@@ -289,7 +297,7 @@ + set_video_norm (int vidnorm) + { + grab_chan.norm = vidnorm; +- if (ioctl(grab_fd,VIDIOCSCHAN, &grab_chan)) { ++ if (v4l1_ioctl(grab_fd,VIDIOCSCHAN, &grab_chan)) { + perror ("ioctl VIDIOCSCHAN"); + return -1; + } +@@ -309,7 +317,7 @@ + return -1; + + grab_chan.channel = source; +- if (ioctl(grab_fd,VIDIOCSCHAN,&grab_chan) == -1) { ++ if (v4l1_ioctl(grab_fd,VIDIOCSCHAN,&grab_chan) == -1) { + perror ("ioctl VIDIOCSCHAN"); + return -1; + } +@@ -325,17 +333,17 @@ + void + set_picture_properties (void) + { +- if (ioctl(grab_fd, VIDIOCSPICT, &grab_pict) == -1) ++ if (v4l1_ioctl(grab_fd, VIDIOCSPICT, &grab_pict) == -1) + perror ("ioctl VIDIOCSPICT"); + usleep (10000); +- if (ioctl(grab_fd, VIDIOCGPICT, &grab_pict) == -1) ++ if (v4l1_ioctl(grab_fd, VIDIOCGPICT, &grab_pict) == -1) + perror ("ioctl VIDIOCGPICT"); + } + + void + get_picture_properties (void) + { +- if (ioctl(grab_fd, VIDIOCGPICT, &grab_pict) == -1) ++ if (v4l1_ioctl(grab_fd, VIDIOCGPICT, &grab_pict) == -1) + perror ("ioctl VIDIOCGPICT"); + } + +diff -Nur -x '*.orig' -x '*~' aatv-0.3//src/Makefile.am aatv-0.3.new//src/Makefile.am +--- aatv-0.3//src/Makefile.am 2002-01-10 22:39:55.000000000 +0700 ++++ aatv-0.3.new//src/Makefile.am 2010-03-16 15:38:35.000000000 +0700 +@@ -8,5 +8,5 @@ + aatv.c aatv.h \ + grabber.c + +-aatv_LDFLAGS += -lm ++aatv_LDADD = -lm $(LIBV4L1_LIBS) +
signature.asc
Description: This is a digitally signed message part