class TVDisplay – Driver per TV Shield#

La classe TVDisplay pilota la OpenMV TV Shield, che converte un framebuffer RGB565 in un segnale video composito NTSC (352x240, 60 campi/s interlacciato) adatto a qualsiasi televisore o monitor video analogico.

Sono supportate due varianti di shield:

  • La TV Shield cablata, che espone il segnale composito su un singolo jack RCA.

  • La Wireless TV Shield, che invia lo stesso segnale a un trasmettitore video analogico a 2,4 GHz. Il canale del ricevitore (1–8) viene selezionato a runtime tramite ioctl() con display.IOCTL_CHANNEL; finché tale chiamata non viene effettuata, non viene selezionato alcun canale.

La risoluzione e la formattazione dei frame sono fisse – TVDisplay non accetta un argomento framesize. I frame vengono presentati passando un image.Image a write(), che gestisce internamente le trasformazioni di scaling, ROI, palette e orientamento.

Esempio di utilizzo:

import csi
import display

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.SIF)              # 352x240, matches the TV output

tv = display.TVDisplay()

while True:
    tv.write(csi0.snapshot())

Costruttori#

class display.TVDisplay(triple_buffer: bool = True)#

triple_buffer Se True rende gli aggiornamenti dello schermo non bloccanti al costo di 3 volte la dimensione del display in RAM. Il valore predefinito dipende dalla scheda.

deinit() None#

Rilascia i pin di I/O e la RAM utilizzati dalla classe. Viene chiamato automaticamente alla distruzione.

width() int#

Restituisce la larghezza dello schermo (352).

height() int#

Restituisce l’altezza dello schermo (240).

refresh() int#

Restituisce la frequenza di aggiornamento (60).

triple_buffer() bool#

Restituisce se il triple buffering è abilitato.

write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 256, color_palette: int | 'image.Image' | None = None, alpha_palette: 'image.Image' | None = None, hint: int = 0) None#

Visualizza un”image il cui angolo in alto a sinistra parte dalla posizione x, y.

x_scale controlla di quanto l’immagine visualizzata viene scalata nella direzione x (float). Se questo valore è negativo l’immagine verrà capovolta orizzontalmente.

y_scale controlla di quanto l’immagine visualizzata viene scalata nella direzione y (float). Se questo valore è negativo l’immagine verrà capovolta verticalmente.

roi è la tupla del rettangolo della regione di interesse (x, y, w, h) dell’immagine da visualizzare.

rgb_channel è il canale RGB (0=R, G=1, B=2) da estrarre da un’immagine RGB565 e da visualizzare sul display.

alpha controlla quanto è opaca l’immagine. Un valore di 256 visualizza un’immagine opaca mentre un valore inferiore a 256 produce un’immagine nera trasparente. 0 produce un’immagine perfettamente nera.

color_palette se diverso da -1 può essere un enum di palette di colori o un’immagine RGB565 di 256 pixel totali da utilizzare come tabella di lookup dei colori sul valore in scala di grigi dell’immagine di input.

alpha_palette se diverso da -1 può essere un’immagine GRAYSCALE di 256 pixel totali da utilizzare come palette alpha che modula il valore alpha dell’immagine di input a livello di singolo pixel.

hint OR logico dei flag:

clear(display_off: bool = False) None#

Azzera lo schermo portandolo al nero.

display_off è accettato per compatibilità API con altre classi di display e viene ignorato.

ioctl(cmd: int, *args) object#

Punto di ingresso ioctl generico.

Passa display.IOCTL_CHANNEL come cmd per impostare o ottenere il canale di trasmissione della wireless TV shield. Con un secondo argomento (1-8) il canale viene impostato; senza secondo argomento viene restituito il canale corrente. Nessun canale viene selezionato finché non viene effettuata la prima chiamata di impostazione.