La DC10+ de pinnacle est une carte d'acquisition d'entrée de gamme prévue pour fonctionner avec le logiciel Studio disponible uniquement sous Windows. Heureusement il existe un driver pour le zoran-36067, la puce utilisée dans la DC10+(http://mjpeg.sourceforge.net/driver-zoran/). Voici comment bénéficier de la capture analogique de la DC10+ sous Debian lenny.

Chargement des modules

La recompilation du noyau n'est pas indispensable, les modules zoran étant fournis avec le noyau généric Debian. Commençons par ajouter les modules zr36060 et zr36067 à la liste des modules chargés lors du boot :

~$ cat >> /etc/modules
zr36060
zr36067 v4l_bufsize=1296 card=2 v4l_nbufs=2

La DC10+ est identifiée par le numéro 2 ; voir ici pour la liste des cartes d'acquisition supportées.

Affichage / Capture

Pour afficher un signal vidéo en temps réel sur un écran, le fait de perdre des frames importe peu. Il est donc inutile d'avoir beaucoup de buffers mais il faut tout de même de la mémoire pour capturer des images "raw".

Puisque la perte de trame importe peut, 2 buffers seront suffisants. Parlons maintenant de la taille de ces buffers. La taille d'un buffer par défaut est de 128Ko : c'est la taille maximale d'un segment de mémoire physique contigue que le noyau Linux peut fournir. Nous sommes donc limités à une résolution de 320x200 en 16bits (320*200*2 = 128000; 128Ko = 131072). Pour capturer des images 24bits avec la résolution maximale de la carte (768x576) il nous faut donc des buffers de 1296Ko. Pour de plus amples informations, jettez un coup d'oeil dans la doc du noyau linux : Documentation/video4linux/Zoran.

Si vous désirez enregistrer des vidéos sur votre disque dur il vous faut des valeurs différentes. Les paramètres à passer au module seront de la forme :

zr36067 v4l_bufsize=512 card=2 v4l_nbufs=32

En capturant les frames, la carte DC10+ les compresse au format MJPEG donc une taille de buffer de 512Ko est suffisante. Par contre il vaut mieux avoir beaucoup de buffers (ici, 32) pour éviter de sauter des trames.

Réservation de la mémoire

Les buffers utilisés pour l'acquisition du signal vidéo doivent former une zone mémoire contigue. Puisque le noyau ne peut le garantir, le driver zoran utilise quelques astuces notamment l'utilisation de mémoire en dehors de la plage utilisée par le noyau. Puisque par défaut toute la RAM est utilisée, nous allons spécifier au noyau le montant de mémoire dont il dispose au moment du boot. Ouvrez le fichier /boot/grub/menu.lst et éditez la ligne kopt pour y ajouter l'option "mem" :

~$ kopt=root=/dev/mapper/raid0-root ro mem=2020M

Redémarrez ensuite votre machine après avoir pris soin de mettre à jour toutes les entrées de menu.lst :

~$ update-grub

Logiciels de capture

Munissons nous à présent de logiciels permettant la capture et l'enregistrement du flux vidéo fourni par la carte. Ajoutons l'url "www.debian-multimedia.org" à la liste des dépots et installons mplayer (pour la lecture) et mencoder (pour l'enregistrement).

~$ cat >> /etc/apt/sources.list
deb http://www.debian-multimedia.org testing main
~$ apt-get update
~$ apt-get install mplayer mencoder

Pour visualiser l'entrée analogique composite la carte, il faut lancer mplayer avec la ligne de commande suivante :

~$ mplayer tv:// -tv driver=v4l2:device=/dev/video0:input=0:outfmt=yuy2:width=768:height=572 -vf pp=lb/fd -fps 25 -zoom

Pour visualiser l'entrée S-vidéo, il suffit de changer le paramètre "input" de l'option "-tv". L'option "-vf" permet de spécifier un ou plusieurs filtres vidéos, nécessaires pour désentrelacer l'image. On utilise ici un fitre linear blend ("ld") suivi d'un filtre de désentrelacement de ffmpeg ("fd"). L'option "-zoom" permet l'affichage en plein écran.

Notez que l'utilisation d'mplayer est possible sous compiz Laughing !

 

Capture DC10+ sous compiz

Pour l'enregistrement, l'ensemble des paramètres de l'option "-tv" reste inchangé.

~$ mencoder -oac mp3lame -ovc lavc tv:// -lavcopts vbitrate=1600:vcodec=mpeg4:vqmin=2 -tv driver=v4l2:device=/dev/video0:input=0:forceaudio:forcechan=2:outfmt=yuy2:width=382:height=286 -o test.avi

En cas de problème

La capture vidéo refuse parfois de s'initialiser. Ajoutez une option de log au chargement du module zoran pour obtenir plus d'information. Sur certains systèmes, le module ne peut allouer la mémoire pour les buffers (erreur dans "get_high_mem"). Dans ce cas, une solution consiste à recompiler le module en considérant que le noyau allouera correctement les 1296Ko de mémoire. Editez le fichier drivers/media/video/zoran_driver.c de votre noyau linux et remplacez la ligne

if (fh->v4l_buffers.buffer_size <= MAX_KMALLOC_MEM) {

par

if (true) {

Cette modification ne garantit pas une réussite systématique de l'initialisation de la capture vidéo : dans certains cas il faudra au préalable fermer quelques applications.