class TVDisplay – Controlador do Shield de TV

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

São suportadas duas variantes do shield:

  • O Shield de TV com fio, que expõe o sinal composto numa tomada RCA.

  • O Shield de TV sem Fios, que envia o mesmo sinal para um transmissor de vídeo analógico a 2,4 GHz. O canal do recetor (1–8) é selecionado em tempo de execução via ioctl() com display.IOCTL_CHANNEL; enquanto essa chamada não for feita, nenhum canal está selecionado.

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

Exemplo de utilização:

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 do ecrã não bloqueantes ao custo de 3 vezes o tamanho do ecrã em RAM. O valor predefinido depende da placa.

deinit() None

Liberta os pinos de E/S e a RAM utilizados pela classe. É chamado automaticamente na destruição.

width() int

Devolve a largura do ecrã (352).

height() int

Devolve a altura do ecrã (240).

refresh() int

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

triple_buffer() bool

Devolve se o triplo buffer está ativado.

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

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

x_scale controla o fator de escala da imagem apresentada na direção x (float). Se o valor for negativo, a imagem será espelhada horizontalmente.

y_scale controla o fator de escala da imagem apresentada na direção y (float). Se o valor for negativo, a imagem será espelhada verticalmente.

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

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

alpha controla a opacidade da imagem. Um valor de 256 apresenta uma imagem opaca; um valor inferior a 256 produz uma imagem preta transparente. 0 resulta numa imagem completamente 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, utilizada como tabela de consulta de cores sobre o valor em escala de cinzentos da imagem de entrada.

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

hint OR lógico dos sinalizadores:

clear(display_off: bool = False) None

Limpa o ecrã para preto.

display_off é aceite para compatibilidade de API com outras classes de ecrã 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 shield de TV sem fios. Com um segundo argumento (1-8), o canal é definido; sem segundo argumento, o canal atual é devolvido. Nenhum canal é selecionado até que a primeira chamada de definição seja feita.