class TVDisplay – Driver pentru TV Shield

Clasa TVDisplay acționează OpenMV TV Shield, care convertește un tampon de cadre RGB565 într-un semnal video compus NTSC (352x240, 60 câmpuri/s întrețesut) potrivit pentru orice televizor sau monitor video analogic.

Sunt acceptate două variante de shield:

  • Versiunea cu fir TV Shield, care expune semnalul compus pe o singură mufă RCA.

  • Versiunea Wireless TV Shield, care alimentează același semnal într-un transmițător video analogic de 2,4 GHz. Canalul receptorului (1–8) este selectat la rulare prin ioctl() cu display.IOCTL_CHANNEL; până la efectuarea acelui apel niciun canal nu este selectat.

Rezoluția și încadrarea sunt fixe – TVDisplay nu acceptă un argument framesize. Cadrele sunt prezentate prin transmiterea unui image.Image către write(), care gestionează intern scalarea, ROI-ul, paleta și transformările de orientare.

Exemplu de utilizare:

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())

Constructori

class display.TVDisplay(triple_buffer: bool = True)

triple_buffer Dacă este True, atunci face actualizările ecranului neblocante, cu prețul a de 3X dimensiunea afișajului în RAM. Valoarea implicită depinde de placă.

deinit() None

Eliberează pinii I/O și RAM-ul utilizate de clasă. Acest lucru este apelat automat la distrugere.

width() int

Returnează lățimea ecranului (352).

height() int

Returnează înălțimea ecranului (240).

refresh() int

Returnează rata de reîmprospătare (60).

triple_buffer() bool

Returnează dacă triplul buffering este activat.

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

Afișează o image al cărei colț din stânga sus începe la locația x, y.

x_scale controlează cât de mult este scalată imaginea afișată pe direcția x (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă orizontal.

y_scale controlează cât de mult este scalată imaginea afișată pe direcția y (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă vertical.

roi este tuplul dreptunghiular al regiunii de interes (x, y, w, h) al imaginii de afișat.

rgb_channel este canalul RGB (0=R, G=1, B=2) de extras dintr-o imagine RGB565 și de redat pe afișaj.

alpha controlează cât de opacă este imaginea. O valoare de 256 afișează o imagine opacă, în timp ce o valoare mai mică de 256 produce o imagine neagră transparentă. 0 produce o imagine perfect neagră.

color_palette dacă nu este -1 poate fi o enumerare de paletă de culori sau o imagine RGB565 de 256 de pixeli în total de utilizat ca tabel de căutare a culorilor pe valoarea în tonuri de gri a imaginii de intrare.

alpha_palette dacă nu este -1 poate fi o imagine GRAYSCALE de 256 de pixeli în total de utilizat ca paletă alfa care modulează valoarea alpha a imaginii de intrare la nivel de pixel.

hint SAU logic al indicatorilor:

clear(display_off: bool = False) None

Șterge ecranul la negru.

display_off este acceptat pentru compatibilitatea API cu alte clase de afișaj și este ignorat.

ioctl(cmd: int, *args) object

Punct de intrare ioctl generic.

Transmiteți display.IOCTL_CHANNEL ca cmd pentru a seta sau obține canalul de difuzare al shield-ului TV wireless. Cu un al doilea argument (1-8) canalul este setat; fără un al doilea argument se returnează canalul curent. Niciun canal nu este selectat până la efectuarea primului apel de setare.