Производительность кодера JPEG - PullRequest
0 голосов
/ 24 мая 2018

В настоящее время я работаю над кодировщиком JPEG на C, и я только что закончил свою первую реализацию.Кодировщик отлично работает на изображениях ppm / pgm.Теперь я обеспокоен производительностью моего кодировщика.

Мой кодировщик на самом деле работает медленнее, чем кодировщик libjpeg-turbo JPEG cjpeg .Хотя cjpeg обрабатывает изображение размером 30 миллионов пикселей за 200 мс, мое кодирование занимает ~ 7 с.Я не понимаю, как это возможно, учитывая, что я использую быструю реализацию DCT.

Может кто-нибудь сказать мне, откуда эта огромная разница?Как быстро работает cjpeg?

1 Ответ

0 голосов
/ 24 мая 2018

Вам нужно будет выполнить какое-то профилирование, чтобы выяснить, что происходит.Тем не менее, я держу пари, что причина разницы в производительности заключается в буферизации.Говоря логически, JPEG рассматривает данные как имеющие разные форматы на разных этапах сжатия.

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

Для DCT предыдущие массивы принимают другую форму;массив массивов 8x8.

Для вывода DCT у вас есть 16-битный массив пикселей.

Управление этими различными массивами, вероятно, является источником разницы в производительности.Исключая физические преобразования, вы можете добиться наибольшего улучшения производительности.

...