clase TVDisplay – Controlador del TV Shield

La clase TVDisplay controla el OpenMV TV Shield, que convierte un framebuffer RGB565 en una señal de vídeo compuesto NTSC (352x240, 60 campos/s entrelazados) apta para cualquier televisor o monitor de vídeo analógico.

Se admiten dos variantes del shield:

  • El TV Shield con cable, que expone la señal compuesta en un único conector RCA.

  • El Wireless TV Shield, que envía la misma señal a un transmisor de vídeo analógico de 2,4 GHz. El canal del receptor (1–8) se selecciona en tiempo de ejecución mediante ioctl() con display.IOCTL_CHANNEL; hasta que se realice esa llamada no hay ningún canal seleccionado.

La resolución y el encuadre son fijos – TVDisplay no recibe un argumento framesize. Los fotogramas se presentan pasando una image.Image a write(), que gestiona internamente el escalado, la ROI, la paleta y las transformaciones de orientación.

Ejemplo de uso:

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

Constructores

class display.TVDisplay(triple_buffer: bool = True)

triple_buffer Si es True, hace que las actualizaciones de la pantalla no sean bloqueantes a costa de 3 veces el tamaño de la pantalla en RAM. El valor predeterminado depende de la placa.

deinit() None

Libera los pines de E/S y la RAM utilizados por la clase. Esto se llama automáticamente al destruir el objeto.

width() int

Devuelve el ancho de la pantalla (352).

height() int

Devuelve el alto de la pantalla (240).

refresh() int

Devuelve la frecuencia de actualización (60).

triple_buffer() bool

Devuelve si el triple búfer está habilitado.

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

Muestra una image cuya esquina superior izquierda comienza en la ubicación x, y.

x_scale controla cuánto se escala la imagen mostrada en la dirección x (float). Si este valor es negativo, la imagen se voltea horizontalmente.

y_scale controla cuánto se escala la imagen mostrada en la dirección y (float). Si este valor es negativo, la imagen se voltea verticalmente.

roi es la tupla del rectángulo de la región de interés (x, y, w, h) de la imagen que se va a mostrar.

rgb_channel es el canal RGB (0=R, G=1, B=2) que se extrae de una imagen RGB565 y se representa en la pantalla.

alpha controla cuán opaca es la imagen. Un valor de 256 muestra una imagen opaca, mientras que un valor inferior a 256 produce una imagen negra transparente. 0 da como resultado una imagen perfectamente negra.

color_palette si no es -1 puede ser un enum de paleta de colores o una imagen RGB565 de 256 píxeles en total para usar como tabla de búsqueda de color sobre el valor en escala de grises de la imagen de entrada.

alpha_palette si no es -1 puede ser una imagen GRAYSCALE de 256 píxeles en total para usar como paleta alfa que modula el valor alpha de la imagen de entrada a nivel de píxel.

hint OR lógico de las banderas:

clear(display_off: bool = False) None

Borra la pantalla a negro.

display_off se acepta por compatibilidad de API con otras clases de pantalla y se ignora.

ioctl(cmd: int, *args) object

Punto de entrada genérico ioctl.

Pase display.IOCTL_CHANNEL como cmd para establecer u obtener el canal de difusión del wireless TV shield. Con un segundo argumento (1-8) se establece el canal; sin segundo argumento se devuelve el canal actual. No se selecciona ningún canal hasta que se realice la primera llamada de establecimiento.