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.