Дельта-кодирование. Спринт 4. Итоги.
Коллеги, добрый день!
Я доделал тестовую версию приложения-компрессора на основе материалов первых трёх спринтов и теперь могу подвести некоторые промежуточные итоги:
1) Использование дельта-кодирования для сжатия данных применимо и очень неплохо себя показывает в микроконтроллерных системах низкого и среднего уровня. Декомпрессор легко можно запустить даже на семействе ATtiny (см. пример для ATtiny85). Но и для более продвинутых микроконтроллеров, в тех случаях когда нет возможности (или желания) применять более распространённые технологии сжатия, вполне можно воспользоваться простым и нетребовательным дельта-кодированием.
2) Степень сжатия, конечно же, сильно зависит от исходных данных, но в целом вполне приемлема. К тому же, в моём приложении можно устанавливать произвольную глубину цвета для каждого из цветовых каналов (если речь идёт об изображениях), а это оказалось очень удобно для создания элементов интерфейса. В приведённых примерах я на платформе AVR (Arduino Nano) использовал формат Grayscale 2bit, который позволил обеспечить и хорошую степень сжатия и высокую скорость декомпрессии и некоторое сглаживание краёв изображения по сравнению с форматом B/W 1bit. А при помощи небольшой модификации алгоритма декомпрессии я смог раскрашивать иконки "на лету", прямо во время распаковки и вывода на экран. В результате данные 25-ти иконок 48x48 и код распаковки заняли около 5.5 килобайт флеш-памяти.
3) Для более производительных систем, алгоритмы дельта-кодирования тоже не лишены смысла, поскольку выигрыш от применения более мощных алгоритмов сжатия может быть перекрыт бОльшим объёмом кода декомпрессора. Тут, само-собой, надо исходить из конкретной задачи и дополнительный инструмент в арсенале разработчика вряд ли будет лишним.
Все материалы, исходные коды, скомпилированный компрессор (я на всякий случай сделал варианты self-contained для x86 и x64) и примеры применения (пока что только для AVR) доступны по ссылке: https://drive.google.com/drive/folders/1WRB-s4aPv4rQhnDVdqntXX3w0xl3WAg_
Скорее всего код сейчас содержит какие-то ошибочки, но я думаю, что к моменту "официального релиза" на GitHub они будут исправлены и в библиотеку добавятся примеры применения на платформах STM32 и ESP32.