AVMaster cardFAST AV Master driver per Linux

View this page in English In English


1. Introduzione - Storia
2. Cosa è stato fatto, cosa c'è da fare
3. Hardware di test
4. Sistema operativo e software
5. Installazione
6. Bug
7. Aiuto!
8. Download
9. Licenza
10. Documentazione per lo sviluppo
11. Contatti
12. Ringraziamenti

1. Introduzione - Storia

Sto cercardo di fare un driver per la AVMaster che funzioni con il kernel Linux.
Fast Multimedia
(che è diventata Dazzle e adesso è Pinnacle) non ha mai voluto fornire alcuna documentazione riguardo questa - a mio giudizio ottima - scheda di acquisizione video.
Michel Stickel (che desidero ringraziare moltissimo per il supporto che mi ha fornito) ha scritto nel 2000 un driver alfa per l'AVMaster, che però era limitato a "giocare" con il bus I2C e quindi con i soli decoder/encoder video. Il driver non ha avuto più nessuna evoluzione.
Allora ho preso il driver unificato del chipset PCI Zoran 36057 ed ho fatto un fork per l'AVMaster. La scelta di questo driver si è basata principalmente su due aspetti:
  1. Il driver include alcuni moduli che si possono riutilizzare (videocodec, saa7110, saa7185/87, zr36016/15, zr36050)
  2. Il driver ha il supporto sia per V4L che per V4L2.
L'idea è quella di sostituire le parti specifiche del chipset originario PCI zr36057 con quelle del chipset PCI della AVMaster saa7145. Purtroppo la faccenda è piuttosto complicata...

2. Cosa è stato fatto, cosa c'è da fare

Ad oggi (12 settembre 2004) l'unica cosa che "quasi" funziona è l'overlay video. Il "quasi" è d'obbligo: per vedere qualcosa occorre prima avviare Windows (scarica il driver per Win95b/98: AVMaster_driver_Win98.zip) e poi resettare il PC senza spegnere. Questo perché all'avvio è abilitato il bus video che proviene dall'FPGA, e questo va in conflitto con il chipset di ingresso video SAA7110.
Non ho testato l'output video (SAA7187), ma credo che dovrebbe funzionare.
Da fare rimane quindi tutta la gestione della parte di codifica/decodifica JPEG e la parte audio (vedi più avanti la documentazione per una descrizione dettagliata). Adesso come adesso si può usare solo come televisore...

3. Hardware di test

Il sistema con cui sto sviluppando e facendo i test è il seguente:
Non credo che le altre informazioni siano influenti (se però vuoi sapere qualcos'altro, contattami).

4. Sistema operativo e software

Il sistema operativo utilizzato è GNU/Linux x86, distribuzione Slackware 9.1. Il driver è stato testato con il kernel Linux 2.4.24 (V4L) e 2.6.6 (V4L2).
Il software utilizzato per i test di overlay è xawtv. Per farlo funzionare ho dovuto commentare la riga Option "omit xfree86-dga" in /etc/X11/XF86Config (credo però che questa opzione sia specifica della Slackware).
Purtroppo lavvideo degli mjpeg-tools non funziona: sembra che non riesca a recuperare le informazioni necessarie da X per il frame buffer, e quindi il driver dell'AVMaster non può fare l'overlay.
Le risoluzione video testate sono: RGB15, RGB16, RGB32. RGB24 e YUV422 non le ho testate, il primo perchè la mia scheda grafica non lo supporta, il secondo perchè non ho il software che faccia l'overlay in YUV422 (o meglio, xawtv -xv non usa XVideo per l'overlay, probabilmente sbaglio qualcosa io).

5. Installazione

Devi avere installato i sorgenti del kernel e devi avere abilitato nel kernel almeno le seguenti opzioni (puoi accedere alle opzioni del kernel andando nella directory sorgente - solitamente /usr/src/linux o /usr/src/linux-<versione_del_kernel> - e digitando da root "make menuconfig" or "make xconfig"):
Solitamente queste opzioni sono già abilitate nei kernel standard delle distribuzioni più comuni.
Poi occorre scompattare il codice sorgente e compilarlo:
	# tar xzvf avmaster-0.0.1.tar.gz
# cd avmaster-0.0.1
# make
Infine devi entrare come root e installare i moduli appena compilati:
	# su
Password:
# make install
Se hai abilitato anche l'opzione "PCI hotplug" e la tua distribuzione ha gli script per supportarla (Slackware li ha), il modulo avmaster i quelli relativi (saa7110, saa7187, zr36015, zr36050, videodev, videocodec, i2c-core) saranno caricati automaticamente al prossimo riavvio.
Se vuoi caricarli manualmente senza riavviare, puoi semplicemente digitare il comando (da root):
	# modprobe avmaster
Poi puoi avviare da utente normale l'applicazione TV (io uso xawtv) e puoi vedere l'overlay video sul tuo PC (dopo aver ribostrappato da Windows).

6. Bug

Ce ne saranno un vagonata! Però, dai test che ho fatto, ne ho trovato solo uno che non sono riuscito a correggere: se si passa velocemente da modalità full-screen a modalità normale, il sistema operativo si impalla completamente. Generalmente l'overlay continua a funzionare, ma credo che usare un computer solo come televisore non sia una grande idea...
Prima di fare qualsiasi prova, date sempre il comando sync in modo da non perdere eventuali dati  (cosa che invece è capitata a me: ed erano due file sorgenti del driver). Se è possibile usate un file system journaled, in modo che anche se vi dimenticate di fare il sync almeno il file system rimane integro e al massimo perdete le ultime modifiche fatte. Con tune2fs potete convertire in modo molto semplice un ext2 con un ext3.

7. Aiuto!

Purtroppo c'è un ostacolo abbastanza impegnativo da superare: l'AVMaster ha due chipset programmabili (un FPGA e un DSP, vedi la documentazione) di cui purtroppo nessuno (ad eccezione di FAST) conosce come sono stati programmati. Io sto tentando di estrarre le informazioni necessarie facendo un po' di reverse engineering dei driver di Windows. Se qualcuno vuole darmi una mano o ha qualche altra idea, ogni contributo è sempre il benvenuto.

8. Download

Qui trovi i sorgenti: avmaster-0.0.1.tar.gz. Non ci sono i moduli precompilati, sarebbe troppo oneroso per me prepararli per le varie distribuzioni e le varie versioni del kernel. Se però vuoi prepararli tu, spediscimeli che li inserisco in questa sezione. Preferibilmente spediscimi solo i binari relativi al kernel standard della distribuzione con la quale hai testato i moduli.

9. Licenza

Questo programma è software libero; puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public Licence (Licenza Pubblica Generica) come è pubblicata dalla Free Software Foundation; o la versione 2 della Licenza, o (a tua scelta) una versione successiva.

Questo programma è ditribuito nella  speranza che sia  utile, ma SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di NEGOZIABILITÀ o di APPLICABILITÀ PER UN PARTICOLARE SCOPO. Si veda la GNU General Public Licence per avere maggiori dettagli.

10. Documentazione per lo sviluppo

Ho analizzato la scheda dell'AVMaster cercando di rifare uno schema dei collegamenti fisici. Non fateci troppo affidamento, è solamente uno schema indicativo. Quello che ne è venuto fuori è il seguente (scarica in formato sxd):
Schema a blocchi della FAST AV Master

Spero che possa aiutare in qualche mode a sviluppare le parti mancanti (tutta la parte a destra dell'FPGA e DSP compresi).
Di seguito invece ci sono i link per i vari datasheet (in formato pdf):
Chipset
Produttore
Descrizione
Altro
SAA7145
Philips
PCI Multimedia Bridge
formato sxw
SAA7110A
Philips
Video decoder (input)

SAA7187
Philips
Video encoder (output)

ZR35015
Zoran
Color space/raster to block converter

ZR36050
Zoran
JPEG image compression processor

AD1843
Analog Devices
Audio input/output
Engineer note
ADSP2105
Analog Devices
DSP (Digital Signal Processor)
Application note
A1280XL
Actel
FPGA (Field Programmable Gate Array)
High-Reliability
Programming

Altri datasheet che possono essere utili come comparazione con i driver esistenti:
Chipset
Produttore
Descrizione
Altro
SAA7146
Philips
PCI Multimedia Bridge with HPS
driver
SAA7185
Philips
Video encoder (output)
driver zoran
ZR35016
Zoran
Color space/raster to block converter
driver zoran
ZR36057
Zoran
PCI Multimedia Controller
driver zoran

Per chi volesse poi cimentarsi con un po' di reverse engineering, ho disassemblato (con Borg) i driver della AVMaster per Windows 98 (versione 2.5 build 0017). Io partirei dal driver (AVMdrv32.dll, AVMdrv.dll) che dovrebbe essere la parte in cui vengono gestiti l'FPGA e il DSP. Purtroppo non ho avuto ancora tempo di guardarci, ma se vuoi darmi una mano tu...
File
Assembler
Descrizione
Codice
AVMaudio.DRV
AVMaudio.asm.gz
Gestione dell'audio
16 bit
AVMcdc32.DRV
AVMcdc32.asm.gz
Codec per Windows
32 bit
AVMcsc.dll
AVMcsc.asm.gz
Sembra l'interfaccia per la conversione del ColorSpace
16 bit
AVMdlg.DLL
AVMdlg.asm.gz
Componenti per l'interfaccia utente
16 bit
AVMdraw.dll
AVMdraw.asm.gz
MJPEG Draw Driver
16 bit
AVMdrv16.dll
AVMdrv16.asm.gz
Interfaccia per la connessione al driver
16 bit
AVMdrv32.dll
AVMdrv32.asm.gz
Interfaccia per la connessione al driver 32 bit
AVMdrv.dll
AVMdrv.asm.gz
Driver Principale
16 bit
AVMdrw32.DRV
AVMdrw32.asm.gz
MJPEG Draw Driver
32 bit
AVMjpg32.dll
AVMjpg32.asm.gz
Compressione/Decompressione JPEG Software
32 bit
AVMovl16.dll
AVMovl16.asm.gz
Interfaccia per l'overlay video
16 bit
AVMovl32.dll
AVMovl32.asm.gz
Interfaccia per l'overlay video 32 bit
AVMovl.dll
AVMovl.asm.gz
Driver per l'overlay video
16 bit
AVMvcap.dll
AVMvcap.asm.gz
Driver per la cattura video
16 bit
fastavm.vxd

Virtual Device Driver
32 bit

Qui puoi scaricare il setup completo per installare il driver su Windows 95b e 98: AVMaster_driver_Win98.zip

11. Contatti

Io sono Luca Bonissi, sono un programmatore, appassionato da GNU/Linux (e il software libero in generale) e ai montaggi audio/video. Per qualsiasi cosa relativa all'AVMaster, GNU/Linux e affini, contattami senza problemi

12. Ringraziamenti

Desidero ringraziare prima di tutti Michael Stickel, senza il quale la stesura di questo driver non avrebbe avuto nemmeno inizio. Mi ha fornito il preziosissimo manuale del chipset SAA7145 e soprattutto mi ha dato lo "speranza" che l'AVMaster poteva funzionare sotto GNU/Linux.
Inoltre i miei ringraziamenti vanno al team che cura il driver unificato Zoran, al team degli mjpeg-tools, ad Alessandro Rubini per la sua preziosa documentazione riguardo ai Linux Device Driver e a tutti quelli che hanno sviluppato qualche parte che da me utilizzata.


Ultima modifica: 23 novembre 2004