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)
+ 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to