QT, конвертируйте необработанное изображение в jpg, используя аппаратное ускорение (gpu) - PullRequest
0 голосов
/ 05 октября 2011

Мне нужно конвертировать буфер необработанных изображений в буфер изображений jpg.

В данный момент я делаю эту операцию следующим образом:

QImage tmpImage 
         = QImage(rawImgBuffer, img_width, img_height, image.format ); //image.format=RGB888 
QBuffer bufferJpeg(&ba);
bufferJpeg.open(QIODevice::WriteOnly);
tmpImage.save(&bufferJpeg, "JPG");
QByteArray finalJpgBuffer = bufferJpeg.data();

Работает нормально, но загрузка процессора слишком высока (у меня много потоков, которые выполняют эту операцию много раз в секунду). Читая документацию Qt, я нашел эту статью: Аппаратное ускорение и встроенные платформы amp . Если я понял, я могу использовать класс QPainter для выполнения операций GPU ... Возможно ли сделать это преобразование (из raw в jpg), используя этот класс? (или другой аналогичный класс Qt, использующий аппаратное ускорение (gpu)) !!

Мое приложение должно быть независимым от платформы.

Спасибо за все.

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Я не думаю, что QImage использует GPU для генерации jpeg.
Это, вероятно, не поможет (за исключением очень ограниченных процессоров), так как время передачи данных из GPU обычно доминирует.Причина использования аппаратного ускорения для отображения заключается в том, что результат уже находится в графическом процессоре, готовом к отображению.

0 голосов
/ 05 октября 2011

Насколько я знаю, декодирование форматов изображений (в данном случае jpeg) не обрабатывается QPainter.Это делается Qt с использованием libjpeg, который управляется Qt с помощью плагина.Вы можете найти плагин в qt_source_tree / src / plugins / imageformats / jpeg.Это просто использование библиотеки, имеющейся в вашей системе (libjpeg.so в Linux).Если это аппаратное ускорение или нет, это зависит от вашей системы.

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

...