class TVDisplay – Driver do TV Shield

A classe TVDisplay aciona o OpenMV TV Shield, que converte um framebuffer RGB565 em um sinal de vídeo composto NTSC (352x240, 60 campos/s entrelaçado) adequado para qualquer televisão ou monitor de vídeo analógico.

Há suporte a duas variantes de shield:

  • O TV Shield com fio, que expõe o sinal composto em um único conector RCA.

  • O Wireless TV Shield, que alimenta o mesmo sinal em um transmissor de vídeo analógico de 2,4 GHz. O canal do receptor (1–8) é selecionado em tempo de execução via ioctl() com display.IOCTL_CHANNEL; até que essa chamada seja feita, nenhum canal é selecionado.

A resolução e o enquadramento são fixos – TVDisplay não recebe um argumento framesize. Os quadros são apresentados passando uma image.Image para write(), que trata internamente do escalonamento, ROI, paleta e transformações de orientação.

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

Construtores

class display.TVDisplay(triple_buffer: bool = True)

triple_buffer Se True, torna as atualizações da tela não bloqueantes ao custo de 3X o tamanho do display em RAM. O padrão depende da placa.

deinit() None

Libera os pinos de E/S e a RAM usados pela classe. Isso é chamado automaticamente na destruição.

width() int

Retorna a largura da tela (352).

height() int

Retorna a altura da tela (240).

refresh() int

Retorna a taxa de atualização (60).

triple_buffer() bool

Retorna se o triple buffering 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

Exibe uma image cujo canto superior esquerdo começa na localização x, y.

x_scale controla o quanto a imagem exibida é escalada na direção x (float). Se este valor for negativo, a imagem será espelhada horizontalmente.

y_scale controla o quanto a imagem exibida é escalada na direção y (float). Se este valor for negativo, a imagem será espelhada verticalmente.

roi é a tupla de retângulo da região de interesse (x, y, w, h) da imagem a exibir.

rgb_channel é o canal RGB (0=R, G=1, B=2) a extrair de uma imagem RGB565 e renderizar no display.

alpha controla o quão opaca é a imagem. Um valor de 256 exibe uma imagem opaca, enquanto um valor menor que 256 produz uma imagem preta transparente. 0 resulta em uma imagem perfeitamente preta.

color_palette se não for -1 pode ser um enum de paleta de cores ou uma imagem RGB565 de 256 pixels no total a ser usada como tabela de consulta de cores sobre o valor em escala de cinza da imagem de entrada.

alpha_palette se não for -1 pode ser uma imagem GRAYSCALE de 256 pixels no total a ser usada como paleta de alpha, que modula o valor de alpha da imagem de entrada em nível de pixel.

hint OR lógico das flags:

clear(display_off: bool = False) None

Limpa a tela para preto.

display_off é aceito por compatibilidade de API com outras classes de display e é ignorado.

ioctl(cmd: int, *args) object

Ponto de entrada ioctl genérico.

Passe display.IOCTL_CHANNEL como cmd para definir ou obter o canal de transmissão do wireless TV shield. Com um segundo argumento (1-8) o canal é definido; sem um segundo argumento o canal atual é retornado. Nenhum canal é selecionado até que a primeira chamada de definição seja feita.