Разрабатываю приложение, которое получает изображения с фотокамер и обрабатывает их. Изображение приходит в виде 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'ом