Das Beispiel des Kapitels 1 wird nachfolgend auf die volle PAL-Auflösung geändert. Dabei wird gezeigt, wie 2 aufeinanderfolgende Halbbilder digitalisiert werden.
Das 384x288 Beispiel benötigte lediglich ein digitalisiertes Halbbild, um die gewünschten Bilddaten zu erhalten. Da Videosignale interlaced in zwei Halbbildern übertragen werden, ist die Digitaliserung eines Vollbildes ein wenig aufwendiger.

Nachdem das gewünschte Format mit den Funktionen 50,51,52 eingestellt wurde wird zunächst auf das gerade Halbbild gewartet:
cx=1;
while (cx!=0)
{
FG30DRV (57,&cx,&dx);
cx&=0x2000;
}
Die Digitalsierung wird jetzt gestartet, damit ist das nächste Halbbild ein ungerades Halbbild.
FG30DRV (53,&cx,&dx);
Nun wird das erste Halbbild aus der Karte in den Hauptspeicher übertragen. Dabei wird jede zweite Zeile frei gelassen. Der Wert xp.zoffset wird am Ende jeder Zeile zusätzlich zum Bilddatenpointer addiert. Mit entsprechenden xp.zoffset- Werten ist auch eine direkter Transfer in den Speicher der Grafilkkarte möglich. Für eine Bildschirmauflösung von 1024x768 Pixel mit 32K Farben würde xp.zoffset 768*2+256*2+256*2 betragen.
xp.ptr=pimg; //odd halfframe Adresse TopLeft
xp.dx=768; // Breite in Pixel
xp.zcount=288; // Zeilenanzahl
xp.zlen=768*2; // Zeilenoffset in Bytes
xp.zoffset=768*2; // Zeilenlänge in Bytes
DDRCO15 (&xp);
Zur Sicherheit werden zwei zusätzliche Zeilen digitalisiert. Über Funktion 116 ist ein Wert für die Anzahl blind zu lesender Zeilen abfragbar. Sollte eine Videoquelle eine nicht normgerechte Zeilenanzahl haben, so ist mit Funktion 115 die Lage des zweiten Halbbildes verschiebbar.
FG30DRV (116,&cx,&dx);//interlaced value
cx=cx*384;
dx=0;
FG30DRV (58,&cx,&dx);//read [interlaced value] lines blind
Jetzt wird das zweite Halbbild in die frei gelassenen Lücken transferiert.
xp.ptr=pimg+768*2; //even halfframe
DDRCO15 (&xp);
Hier das komplette Beispiel zum download:768x576x555.zip |