Russian Qt Forum
Ноябрь 22, 2024, 00:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вылет на QImage::transformed[Qt 5.10]  (Прочитано 7986 раз)
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'ом
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Февраль 09, 2018, 08:47 »

можно написать простой тест и постоянно его гонять, без камеры, просто картинки
Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #2 : Февраль 09, 2018, 10:52 »

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

Ф - фрагментация (как вариант)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.