Перейти к содержанию

Сжатие кадрового буфера TurboPixel

Обзор

TurboPixel — формат сжатия с потерями и фиксированным коэффициентом для итогового отрисованного изображения на поддерживаемых устройствах SF32. Он входит в тракт вывода изображения: extDMA сжимает растровое изображение, а контроллер дисплея выполняет декомпрессию TurboPixel при передаче пикселей на панель.

TurboPixel не предназначен для хранения графических ресурсов и не заменяет eZip. eZip сжимает исходные ресурсы без потерь до их чтения из накопителя, а TurboPixel сжимает итоговое отрисованное изображение, сокращая требуемый объём PSRAM и трафик кадрового буфера через PSRAM.

Полный графический тракт и место TurboPixel относительно eZip, ePicasso и контроллера дисплея описаны в разделе Обзор графики. На этой странице рассматриваются принципы сжатия TurboPixel, компромиссы при интеграции и доступность технологии.

Обратитесь к этой странице, если в проекте на базе SF32LB55x, SF32LB56x или SF32LB58x ограничивающим фактором стали объём кадрового буфера или поток данных, считываемых дисплеем. Она помогает инженерам по продукту и прошивке сопоставить предсказуемую экономию PSRAM с потерей качества изображения. TurboPixel не заменяет сжатие ресурсов с помощью eZip.

Фиксированный коэффициент и сжатие с потерями

У TurboPixel есть два определяющих свойства:

  • Фиксированный коэффициент для выбранной конфигурации. Формат входных пикселей и уровень сжатия задают номинальный коэффициент; он не меняется с детализацией изображения. Объём выделяемой памяти также зависит от выравнивания строк и разбиения на блоки. Используйте правила расчёта выбранного чипа и SDK, а не коэффициент другой конфигурации.
  • Сжатие с потерями. После декомпрессии TurboPixel не гарантирует точного восстановления исходного значения каждого пикселя. Формат жертвует частью точности изображения ради предсказуемого сокращения использования PSRAM и объёма передаваемых через неё данных.

В ограниченной по ресурсам встраиваемой системе с дисплеем сжатие с потерями часто оказывается разумным компромиссом, однако его приемлемость зависит от требований продукта. Оценивайте реальные экраны при целевых разрешении панели, глубине цвета, расстоянии просмотра и режиме обновления, а не по универсальной тестовой картинке.

Шаблон измерений кадрового буфера

В этом разделе следует зафиксировать результаты измерений TurboPixel для одной характерной конфигурации SDK и разрешения дисплея. В отличие от сравнения размеров файлов eZip, здесь сравниваются выделение памяти под кадровый буфер и трафик PSRAM: TurboPixel обрабатывает изображение после отрисовки, а не исходный файл ресурса.

Включите в сравнение как непрозрачные экраны, так и экраны с альфа-смешением. Обычно альфа-смешение выполняется до обработки TurboPixel: рендерер объединяет пиксели переднего и заднего планов в итоговом кадровом буфере. Даже если на экране есть полупрозрачные значки, текст, тени или слои, итоговый буфер может быть непрозрачным и иметь формат RGB565. Учитывайте это различие: наличие альфа-канала в исходных ресурсах не означает, что в сжатом кадровом буфере есть альфа-канал.

Типовой шаблон измерений кадрового буфера TurboPixel
Сценарий Альфа-канал исходного ресурса/слоя Формат и состояние альфа-канала итогового кадрового буфера Память/трафик без сжатия Память/трафик TurboPixel Относительно несжатого буфера Параметры теста/результат визуальной оценки
Непрозрачный интерфейс Нет Формат уточнить; буфер непрозрачный Уточнить Уточнить Уточнить Разрешение, режим обновления и коэффициент/настройки TurboPixel: уточнить
Интерфейс с альфа-смешением до вывода Альфа-значение для каждого пикселя и/или глобальная альфа исходных слоёв Уточнить; после композиции буфер обычно непрозрачный Уточнить Уточнить Уточнить Зафиксировать смешиваемое содержимое; проверить артефакты на краях, тенях, градиентах и тексте
Вывод с сохранением альфа-канала, если поддерживается Альфа-канал сохраняется в итоговом буфере Уточнить Уточнить Уточнить Уточнить До испытаний проверить точную микросхему, SDK, формат и тракт вывода изображения

Для каждого поддерживаемого варианта TurboPixel вычисляйте «Относительно несжатого буфера» по формуле TurboPixel framebuffer bytes ÷ uncompressed framebuffer bytes × 100%. Ожидаемый объём выделенной памяти определяется применимым фиксированным коэффициентом, однако точный коэффициент, поддерживаемые форматы, выравнивание, режим обновления и измеренный трафик PSRAM нужно брать из документации на выбранную микросхему и SDK и подтверждать испытаниями на целевой аппаратуре. Приемлемость качества изображения оценивайте отдельно: фиксированный коэффициент выделения памяти не гарантирует одинаковых артефактов на непрозрачном содержимом, тексте, градиентах и содержимом с альфа-смешением.

Зачем использовать TurboPixel

Сократить память под кадровый буфер

Полный кадровый буфер может занимать много PSRAM при высоком разрешении или нескольких буферах отрисовки. TurboPixel уменьшает память под итоговое сжатое изображение, что может высвободить место для ресурсов интерфейса, аудио, данных приложения и других графических поверхностей.

Однако рассчитывайте пиковый объём одновременно занятой памяти, а не только размер этого изображения. Несжатый буфер отрисовки, сжатый буфер дисплея, рабочая память сжатия и копии для двойной буферизации могут существовать одновременно. Их размеры и сроки использования определяют, требуется ли всей системе меньше PSRAM.

Сократить чтение данных для дисплея

Контроллер дисплея читает меньше байтов из сжатого кадрового буфера перед декомпрессией. Это снижает объём чтения для дисплея и конкуренцию с CPU, ePicasso, DMA, аудио и беспроводной связью.

Это не экономия всего трафика памяти. Отрисовка по-прежнему записывает пиксели, а сжатие читает вход и записывает выход. Измерьте эти передачи и их совпадение по времени с чтением дисплея. При частой перерисовке затраты на сжатие могут компенсировать экономию чтения; при повторном выводе одного кадра результат может быть другим. Измеряйте также энергопотребление системы.

Сделать планирование бюджета предсказуемым

При одинаковом формате пикселей и уровне сжатия содержание не меняет номинальный коэффициент. Выделяйте буферы по правилам SDK для размеров сжатых строк и выравнивания; учитывайте все чтения и записи отрисовки, сжатия и дисплея. Байты передачи на панель считайте отдельно: TurboPixel распаковывается перед выводом и не уменьшает этот поток автоматически.

Компромиссы качества и интеграции

TurboPixel необходимо проверять в составе всей системы отображения:

  • Проверьте, заметны ли артефакты на тексте, тонких линиях, градиентах, значках, фотографиях, анимации и контрастных элементах интерфейса.
  • Убедитесь, что выбранные устройство и SDK поддерживают нужный формат цвета, выравнивание буфера, тракт extDMA и конфигурацию контроллера дисплея.
  • Измерьте время кадра, пропускную способность PSRAM, задержку интерфейса и энергопотребление при совместной нагрузке от дисплея, Bluetooth, аудио и AI.
  • На этапе первичного запуска сохраните возможность вывода без сжатия, чтобы отдельно выявлять проблемы качества изображения и драйвера.
  • Не называйте TurboPixel сжатием без потерь, даже если в конкретном пользовательском интерфейсе артефакты незаметны.

Проверки интеграции с SDK

Указанное руководство extDMA перечисляет десять номинальных уровней, но указанная реализация расчёта размера в SDK поддерживает уровни 1, 2 и 3. Не рассчитывайте, что ваша сборка принимает все уровни из документации. Проверьте выбранный уровень и соответствующий расчёт размера строки; неподдерживаемое значение может привести к выбору другой настройки во вспомогательной функции.

Руководство extDMA перечисляет входные форматы RGB565, RGB888 и ARGB8888. Поддержка этих форматов сама по себе не гарантирует сохранение альфа-канала в сжатом тракте дисплея. Ветка LCDC без отдельного регистра декомпрессии слоя 0 принимает для сжатых слоёв RGB565/RGB888; проверьте ветку выбранного чипа. В указанном драйвере LCDC функция HAL_LCDC_LayerSetCmpr включает сжатие слоя 0.

Текущий заголовочный файл LCDC в OpenSiFli определяет макрос поддержки сжатых слоёв только при включённом HAL_EXTDMA_MODULE_ENABLED; условие для семейства исключает SF32LB52x и SF32LB57x. В заголовке заданы максимальные размеры сжатого слоя по ширине: 512 пикселей для SF32LB55x/SF32LB56x и 1024 пикселя для SF32LB58x. Это ограничения интеграции сжатых слоёв, а не универсальные ограничения разрешения панели. В комментарии к исходному коду также отмечено, что тракт LCPU не включён.

Для SF32LB55x требуется оговорка по интеграции. Текущий заголовочный файл LCDC OpenSiFli определяет макрос сжатых слоёв при включённом HAL_EXTDMA_MODULE_ENABLED, однако в комментарии отмечено, что тракт LCPU не включён. В опубликованной таблице возможностей LCDC в SDK декомпрессия сжатых слоёв для 55x помечена как неподдерживаемая, тогда как в даташите SF32LB55x указаны TurboPixel и декомпрессия контроллером LCD. Наличие макроса на этапе компиляции не доказывает, что весь тракт дисплея проверен. Считайте поддержку 55x условной и проверьте точную версию SDK, ядро, конфигурацию сборки и целевое оборудование; не выводите поддержку во время выполнения из одного лишь макроса.

Разделяйте владение буферами между рендерером, extDMA и контроллером дисплея. Начинайте сжатие после завершения отрисовки, передачу на вывод — после сжатия, а повторно используйте буфер только после окончания чтения дисплеем. Для кэшируемой общей памяти перед чтением аппаратурой выполните clean для входных данных, записанных CPU. Подготовьте строки кэша буфера назначения так, чтобы отложенная запись изменённых строк не перезаписала результат аппаратной операции; после её завершения инвалидируйте устаревшие строки, прежде чем CPU прочитает результат. Учитывайте границы строк кэша и соседние данные. Завершение сжатия не означает завершения передачи на панель.

Исходный адрес, адрес назначения и длина передачи extDMA должны быть выровнены по 4 байтам. Следуйте правилам SDK для шага строки, блоков и размеров буфера; делить байты несжатого кадра на номинальный коэффициент недостаточно.

Доступность в семействе SF32

Документация описывает поддержку TurboPixel в следующих семействах SF32:

Документированная доступность TurboPixel
Семейство SF32 Статус TurboPixel Особенности интеграции
SF32LB52x Не поддерживается Используйте несжатый кадровый буфер или другую поддерживаемую стратегию работы с памятью/пропускной способностью.
SF32LB55x Условная поддержка в текущем коде; работа всего тракта не подтверждена Текущий заголовок LCDC задаёт поддержку сжатых слоёв при активном extDMA, но указывает, что тракт LCPU не включён; в опубликованной таблице SDK 55x отмечен как неподдерживаемый. Проверьте ядро, конфигурацию SDK и целевое оборудование.
SF32LB56x Описана в документации extDMA сжимает итоговый кадровый буфер с потерями и фиксированным коэффициентом; контроллер дисплея выполняет декомпрессию.
SF32LB57x Не поддерживается Используйте несжатый кадровый буфер или другую поддерживаемую стратегию работы с памятью/пропускной способностью.
SF32LB58x Описана в документации extDMA сжимает итоговый кадровый буфер с потерями и фиксированным коэффициентом; контроллер дисплея выполняет декомпрессию.
Другие семейства SF32 Проверять для каждой микросхемы Не делайте вывод о поддержке TurboPixel по наличию eZip, ePicasso или PSRAM. Проверьте даташит и справочное руководство для конкретной микросхемы, версию SDK и драйвер дисплея.

В таблице приведены сведения о доступности на уровне семейств; они не гарантируют поддержку любого корпуса, интерфейса панели, формата пикселей, выпуска SDK или конфигурации платы. Прежде чем принимать решения по объёму памяти или пропускной способности, проверьте конкретную целевую конфигурацию.

Основные выводы

  • TurboPixel — формат сжатия итогового кадрового буфера с фиксированным коэффициентом и потерями.
  • extDMA преобразует отрисованное растровое изображение в формат TurboPixel, а контроллер дисплея выполняет декомпрессию в тракте вывода на панель.
  • Основная задача технологии — сократить память под кадровый буфер и чтение данных для дисплея; проверяйте экономию с учётом всех буферов и передач.
  • В документации TurboPixel указан для SF32LB55x, SF32LB56x и SF32LB58x. Для 55x текущий заголовок определяет макрос сжатых слоёв при активном extDMA, но отмечает, что тракт LCPU не включён; опубликованная таблица SDK указывает, что 55x не поддерживается. Считайте поддержку условной и проверьте весь тракт дисплея. Текущий код исключает SF32LB52x и SF32LB57x; поддержку остальных устройств проверяйте отдельно.
  • TurboPixel дополняет eZip: eZip сжимает ресурсы без потерь, а TurboPixel — итоговое изображение с потерями.

Первичные источники

Последнее обновление: