Artisan Numérique

/matos/matériel/vidéo/ Installation de la Leadtek WinFast TV2000 eXPert

Cette carte traînait dans mes placards depuis un certain temps mais comme je n'ai jamais réussi à avoir une assez bonne qualité de réception pour ma DVB Nova-T (carte TNT), je me suis donc rabattue elle. Basée sur un chipset CONEXANT CX23881 et un Tuner Philips, cette carte était assez évoluée pour l'époque avec la radio FM, une entrée S-Video, une télécommande, etc..

Installation

D'abord, les papier d'identité de la bestiole :

  • Bus 32-bit PCI 2.2 (compat. mastering)
  • Capture 10bits 768 x 576 pixels
  • Tuner PAL or SECAM
  • Tuner FM complet
  • RGB32/RGB24/RGB15/YUY2
  • Entrée S-Video
  • Entrée Hertienne
  • Une télécommande IR

Côté reconnaissance PCI sous Linux :

gastonlspci -vv
01:08.0 Multimedia video controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
Subsystem: LeadTek Research Inc. Unknown device 6611
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (5000ns min, 13750ns max), Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 11
Region 0: Memory at ea000000 (32-bit, non-prefetchable) [size=16M]
Capabilities: [44] Vital Product Data
Capabilities: [4c] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
recherche de la carte PCI

Comme sont nom ne l'indique pas, le chipset de la carte est géré par le module cx8800. Cependant ce qui pose souvent problème sur ce genre de carte, ce n'est pas le décoder, mais le tuner. Et celle-ci n'échappe pas à la règle. Dans un cas, plus de son, dans l'autre radio inaudible de parasites, pour arriver finalement à la "formule magique" à mettre dans un nouveau fichier /etc/modprobe.d/tv :

# i2c
alias char-major-89 i2c-dev
options i2c-algo-bit bit_test=1

# cx88
alias char-major-81 videodev
alias char-major-81-0 cx8800

# chez moi, si port1=0, la radio est parasitée
options tuner  secam=l tuner_debug=1
options tda9887  qss=1 port2=0 secam=1
fichier modprobe.d/tv

Rajoutez ensuite le module pour la carte à la fin du fichier /etc/modules/. Ceci fait, éditez le fichier /etc/modprobe.preload et rajouter cx8800.

Maintenant, tout est techniquement prêt. Vous pouvez soit rebooter, soit tester via un modprobe cx8800. La sortie de la commande dmesg devrait donner quelque chose comme cela :

x2388x v4l2 driver version 0.0.5 loaded
ACPI: PCI Interrupt 0000:01:08.0[A] -> Link [LNK3] -> GSI 11 (level, low) -> IRQ 11
CORE cx88[0]: subsystem: 107d:6611, board: Leadtek Winfast 2000XP Expert [card=5,autodetected]
TV tuner 44 at 0x1fe, Radio tuner -1 at 0x1fe
i2c-algo-bit.o: (0) scl=1, sda=1
i2c-algo-bit.o: (1) scl=1, sda=0
i2c-algo-bit.o: (2) scl=1, sda=1
i2c-algo-bit.o: (3) scl=0, sda=1
i2c-algo-bit.o: (4) scl=1, sda=1
i2c-algo-bit.o: cx88[0] passed test.
cx88[0]: Leadtek Winfast 2000XP Expert config: tuner=38, eeprom[0]=0x01
input: cx88 IR (Leadtek Winfast 2000XP as /class/input/input42
cx88[0]/0: found at 0000:01:08.0, rev: 5, irq: 11, latency: 32, mmio: 0xea000000
tuner: tuner_debug is deprecated and will be removed in 2.6.17.
tuner: use the debug option instead.
tuner 5-0043: chip at addr 43 is not a tda8290
tuner: tuner_debug is deprecated and will be removed in 2.6.17.
tuner: use the debug option instead.
tuner 5-0060: All bytes are equal. It is not a TEA5767
tuner 5-0060: Setting mode_mask to 0x0e
tuner 5-0060: chip found @ 0xc0 (cx88[0])
tuner 5-0060: Calling set_type_addr for type=38, addr=0xff, mode=0x04
tuner 5-0060: tuner 0x60: called during i2c_client register by adapter's attach_inform
tuner 5-0060: type set to 38 (Philips PAL/SECAM multi (FM1216ME MK3))
tuner 5-0060: cx88[0] tuner I2C addr 0xc0 with type 38 used for 0x0e
tda9887 5-0043: chip found @ 0x86 (cx88[0])
cx88[0]/0: registered device video1 [v4l2]
cx88[0]/0: registered device vbi0
cx88[0]/0: registered device radio0
tuner 5-0060: Cmd VIDIOC_S_STD accepted for analog TV
tuner 5-0060: switching to v4l2
tuner 5-0060: tv freq set to 400.00
tuner 5-0060: IFPCoff = 732: tuner_params undefined for tuner 38
tuner 5-0060: tv: param 0, range 1
tuner 5-0060: Freq= 400.00 MHz, V_IF=45.75 MHz, Offset=0.00 MHz, div=7132
tuner 5-0060: tv 0x1b 0xdc 0x8e 0x02

S'il n'y a pas d'erreur flagrantes, ce devrait être bon. Vous devriez avoir entre autre un nouveau device /dev/video0. Attention cependant, si vous aviez par exemple une webcam de branché, celle-ci sera déjà sur vide0 et votre carte, elle, sera en video1, etc..

Maintenant les tuners sont des mécaniques assez délicates et il se peut que cela ne fonctionne pas du premier coup. J'ai du tester au minimum une cinquantaines de combinaison avant d'en arriver à celle-là. Bien évidemment,il n'est alors pas question de redémarrer la machine à chaque fois. La solution est alors de faire un petit script de redémarrage de la partie TV. Ensuite, il suffit de modifier /etc/modprobe.d/tv, de lancer le script, puis de tester le résultat :

 #! /bin/sh
# Suppression des modules
rmmod bttv  cx8800 tuner cx88xx videodev tda9887 btcx_risc evdev tveeprom
rmmod v4l2_common v4l1_compat compat_ioctl32 ir_common i2c_algo_bit video_buf

# On recharge la chaîne complète, les paramètres étant puisés automatiquement dans /etc/modprobe.d/tv
modprobe cx8800

Mise en oeuvre

Pour utiliser la radio ou capturer la vidéo, vous pouvez utiliser mplayer. Maintenant il existe pléthore d'application TV (XawTV, XDTv, etc..). Perso, j'utilise tvtime qui est relativement simple et directe avec un look pur OSD assez sympathique.

Une fois installé, vous devez configurer les canaux. Pour cela deux solutions, soit vous lancez tvtime-scanner, soit vous utilisez directement mon fichier de configuration cat ~/.tvtime/stationlist.xml et remplacez le votre :

<?xml version="1.0"?>
<!DOCTYPE stationlist PUBLIC "-//tvtime//DTD stationlist 1.0//EN" "http://tvtime.sourceforge.net/DTD/stationlist1.dtd">
<stationlist xmlns="http://tvtime.sourceforge.net/DTD/">
  <list norm="SECAM" frequencies="france" audio="i">
    <station name="TF1" active="1" position="1" band="Custom" channel="502,50MHz" finetune="0" norm="SECAM" audio="auto"/>
    <station name="France 2" active="1" position="2" band="Custom" channel="478,50MHz" finetune="-5" norm="SECAM" audio="auto"/>
    <station name="France 3" active="1" position="3" band="Custom" channel="526,50MHz" finetune="0" norm="SECAM" audio="auto"/>
    <station name="Canal +" active="1" position="4" band="Custom" channel="183,50MHz" finetune="0" norm="SECAM" audio="auto"/>
    <station name="ARTE" active="1" position="5" band="Custom" channel="542,75MHz" finetune="0" norm="SECAM" audio="auto"/>
    <station name="M6" active="1" position="6" band="Custom" channel="566,50MHz" finetune="9" norm="SECAM" audio="auto"/>
  </list>
</stationlist>

Certaines chaînes ne sont pas prise directement par tvtime, elle sont détectées par le scanner mais ont besoin de jouer sur le finetune pour obtenir une image claire, ce que j'ai fait pour deux chaînes du fichier précédent.

Une fois les chaînes rentrées, vous pouvez aussi remplacer votre fichier de configuration général de tvtime, cat ~/.tvtime/tvtime.xml par le mien. Il n'a rien d'extraordinaire mais va directement lire le fichier de chaînes cité plus haut et surtout corrige un méchant problème de contraste :

<?xml version="1.0"?>
<!DOCTYPE tvtime PUBLIC "-//tvtime//DTD tvtime 1.0//EN" "http://tvtime.sourceforge.net/DTD/tvtime1.dtd">
<tvtime xmlns="http://tvtime.sourceforge.net/DTD/">
  <option name="Frequencies" value="france"/>
  <option name="Norm" value="SECAM"/>
  <option name="DefaultBrightness" value="-1"/>
  <option name="DefaultContrast" value="20"/>
  <option name="DefaultSaturation" value="-1"/>
  <option name="DefaultHue" value="-1"/>
  <option name="PrevChannel" value="2"/>
  <option name="Channel" value="1"/>
  <option name="FramerateMode" value="0"/>
  <option name="OverScan" value="3.5"/>
  <option name="CheckForSignal" value="1"/>
  <option name="AudioBoost" value="100"/>
  <option name="AlwaysOnTop" value="0"/>
  <option name="QuietScreenshots" value="0"/>
  <option name="UnmuteVolume" value="771"/>
  <option name="Muted" value="0"/>
  <option name="V4LInput" value="0"/>
  <option name="AudioMode" value="stereo"/>
  <option name="PalDKMode" value="0"/>
  <option name="InputWidth" value="768"/>
  <option name="DeinterlaceMethod" value="AdaptiveAdvanced"/>
  <option name="ColourInvert" value="0"/>
  <option name="MirrorInput" value="0"/>
  <option name="WideScreen" value="0"/>
  <option name="FullScreen" value="1"/>
</tvtime>

Conclusion

Voilà, tout est prêt. Il suffit alors de lancer tvtime en ligne de commandes pour admirer le résultat. Si vous n'avez pas de son, il faut opérer comme pour la radio, si vous n'avez pas d'image, et bien idem, bidouillage forcé du fichier de configuration du driver ;-)