Russian Qt Forum

Qt => Мультимедиа => Тема начата: Crazy Sage от Февраль 09, 2018, 06:37



Название: Вылет на QImage::transformed[Qt 5.10]
Отправлено: Crazy Sage от Февраль 09, 2018, 06:37
Разрабатываю приложение, которое получает изображения с фотокамер и обрабатывает их. Изображение приходит в виде QByteArray, дальше я его обрабатываю следующим образом:

Код:
if(buf_.isNull())//собственно QByteArray с данными
    return;
QImage image;
QMatrix rm;
rm.rotate(90);//Надо получить вертикальную картинку
image.loadFromData(buf_);
if(image.isNull())
{
    emit error();
    return;
}
QImage trans_image = image.transformed(rm);
trans_image.save(path_, "JPG", 100);
buf_.clear();

На строке trans_image = image.transformed(rm) программа вылетает, не каждый раз, но регулярно. Иногда для этого требуется обработать 5-6 картинок, иногда 50-60.

Стек вызовов выглядит следующим образом:

Код:
1   qt_memrotate270_tiled_unpacked<unsigned int>                                                                                      qmemrotate.cpp           212  0x1b2ec6c  
2   qt_memrotate270_template<unsigned int>                                                                                            qmemrotate.cpp           275  0x1b2ec6c  
3   qt_memrotate270                                                                                                                   qmemrotate.cpp           315  0x1b2ec6c  
4   qt_memrotate270_32                                                                                                                qmemrotate.cpp           377  0x1b2ecd3  
5   rotated90                                                                                                                         qimage.cpp               4520 0x1a07c3f  
6   QImage::transformed                                                                                                               qimage.cpp               4627 0x1a0a502  
7   QImage::transformed                                                                                                               qimage.cpp               2792 0x1a0b1ce  
8   Camera::processImage                                                                                                              camera.cpp               293  0x438bea  
...

Начало буфера в дебаге выглядит как нормальное начало jpeg-заголовка, буфер не пустой, от размера буфера не похоже чтобы зависело.
Размер изображений - 6000*4000 пикселей
На нехватку памяти списать не получается, иногда приложение падает, когда памяти выделено всего 100-200мб, иногда - когда под гигабайт, но свободной памяти ещё дофигища.
Обработка крутится в потоке, может быть это важно.

Кто-нибудь знает, чем это может быть вызвано и что с этим можно сделать? Хотя бы поймать ошибку, чтобы сказать пользователю, что что-то пошло не так, а не падать с segfault'ом


Название: Re: Вылет на QImage::transformed[Qt 5.10]
Отправлено: qate от Февраль 09, 2018, 08:47
можно написать простой тест и постоянно его гонять, без камеры, просто картинки


Название: Re: Вылет на QImage::transformed[Qt 5.10]
Отправлено: Apktyc от Февраль 09, 2018, 10:52
На нехватку памяти списать не получается, иногда приложение падает, когда памяти выделено всего 100-200мб, иногда - когда под гигабайт, но свободной памяти ещё дофигища.

Ф - фрагментация (как вариант)