QT, преобразование необработанного изображения в jpg с использованием аппаратного ускорения (gpu)

Мне нужно преобразовать буфер изображения Raw в буфер изображения 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, я нашел эту статью: Аппаратное ускорение и встроенные платформы. Если я понял, я могу использовать класс QPainter для выполнения операций с графическим процессором... Можно ли сделать это преобразование (из необработанного в jpg) с помощью этого класса? (или другой аналогичный класс Qt, использующий аппаратное ускорение (gpu))!!

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

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


person Fabry    schedule 05.10.2011    source источник


Ответы (2)


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

person Martin Beckett    schedule 05.10.2011

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

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

person Luca Carlon    schedule 05.10.2011