клас TVDisplay – Драйвер TV Shield

Клас TVDisplay керує OpenMV TV Shield, який перетворює кадровий буфер RGB565 на композитний відеосигнал NTSC (352x240, 60 полів/с із прогресивним скануванням), придатний для будь-якого телевізора або аналогового відеомонітора.

Підтримуються два варіанти шилда:

  • Дротовий TV Shield, який виводить композитний сигнал на один роз’єм RCA.

  • Wireless TV Shield, який подає той самий сигнал на аналоговий відеопередавач 2,4 ГГц. Канал приймача (1–8) вибирається під час виконання через ioctl() з display.IOCTL_CHANNEL; до цього виклику канал не вибрано.

Роздільна здатність та кадрування фіксовані — TVDisplay не приймає аргумент framesize. Кадри відображаються шляхом передачі image.Image до write(), який внутрішньо виконує масштабування, ROI, перетворення палітри та орієнтації.

Приклад використання:

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

Конструктори

class display.TVDisplay(triple_buffer: bool = True)

triple_buffer Якщо True, оновлення екрана стає неблокуючим за рахунок витрат 3X розміру дисплея в RAM. Значення за замовчуванням залежить від плати.

deinit() None

Звільняє виводи та RAM, що використовуються класом. Викликається автоматично при знищенні об’єкта.

width() int

Повертає ширину екрана (352).

height() int

Повертає висоту екрана (240).

refresh() int

Повертає частоту оновлення (60).

triple_buffer() bool

Повертає інформацію про те, чи увімкнено потрійну буферизацію.

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

Відображає image, лівий верхній кут якого починається у точці x, y.

x_scale визначає масштабування відображуваного зображення по осі x (число з плаваючою точкою). Від’ємне значення горизонтально відображає зображення.

y_scale визначає масштабування відображуваного зображення по осі y (число з плаваючою точкою). Від’ємне значення вертикально перевертає зображення.

roi — кортеж прямокутника області інтересу (x, y, w, h) зображення для відображення.

rgb_channel — канал RGB (0=R, G=1, B=2) для витягнення з зображення RGB565 та відображення на дисплеї.

alpha визначає непрозорість зображення. Значення 256 відображає непрозоре зображення, значення менше 256 дає чорне прозоре зображення. 0 дає повністю чорне зображення.

color_palette якщо не -1, може бути переліком кольорової палітри або 256-піксельним зображенням RGB565 для використання як таблиці відповідності кольорів за значенням відтінків сірого вхідного зображення.

alpha_palette якщо не -1, може бути 256-піксельним зображенням GRAYSCALE для використання як палітри альфа-каналу, що модулює значення alpha вхідного зображення на рівні кожного пікселя.

hint — логічне АБО прапорців:

  • image.AREA: Використовувати масштабування по площі при зменшенні.

  • image.BILINEAR: Використовувати білінійне масштабування.

  • image.BICUBIC: Використовувати бікубічне масштабування.

  • image.CENTER: Центрувати зображення на дисплеї (після масштабування).

  • image.HMIRROR: Горизонтально відобразити зображення.

  • image.VFLIP: Вертикально перевернути зображення.

  • image.TRANSPOSE: Транспонувати зображення (поміняти x/y).

  • image.EXTRACT_RGB_CHANNEL_FIRST: Застосувати витягнення rgb_channel перед масштабуванням.

  • image.APPLY_COLOR_PALETTE_FIRST: Застосувати color_palette перед масштабуванням.

  • image.SCALE_ASPECT_KEEP: Масштабувати з вписуванням у дисплей.

  • image.SCALE_ASPECT_EXPAND: Масштабувати для заповнення дисплея (з обрізанням).

  • image.SCALE_ASPECT_IGNORE: Масштабувати для заповнення дисплея (з розтягуванням).

  • image.ROTATE_90: Повернути на 90 градусів (VFLIP | TRANSPOSE).

  • image.ROTATE_180: Повернути на 180 градусів (HMIRROR | VFLIP).

  • image.ROTATE_270: Повернути на 270 градусів (HMIRROR | TRANSPOSE).

clear(display_off: bool = False) None

Очищує екран до чорного кольору.

display_off приймається для сумісності API з іншими класами дисплеїв та ігнорується.

ioctl(cmd: int, *args) object

Загальна точка входу ioctl.

Передайте display.IOCTL_CHANNEL як cmd, щоб встановити або отримати канал трансляції бездротового TV Shield. З другим аргументом (1-8) канал встановлюється; без другого аргументу повертається поточний канал. Канал не вибирається до першого виклику встановлення.