App crash on QImage::transformed (Qt 5.10)



  • Hello. I have app that gets images from photo cameras for future processing. Initialy I get images as QByteArray buffer and then process them as follows:

    if(buf_.isNull())
        return;
    QImage image;
    QMatrix rm;
    rm.rotate(90);//I need vertical aligned picture
    image.loadFromData(buf_);//buf_ is raw data QByteArray
    if(image.isNull())
    {
        emit error();
        return;
    }
    QImage trans_image = image.transformed(rm);
    trans_image.save(path_, "JPG", 100);
    buf_.clear();
    

    Regulary I get crash on QImage trans_image = image.transformed(rm), sometimes it takes 5-6 images, sometimes 50-60.

    Call stack looks like that:

    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   
    ...
    

    Image variable looks pretty ok in debugger, not Invalid or anything like that, start of the buffer looks like proper jpeg header.
    Image size is 4000*6000px.
    It doesn't seem to be some memory leak problem, once it crashed when program only allocated around 100mb of RAM.
    Also this processing works in thread, maybe it is important.

    What can be reason for such crash and how can I deal with it (at least catch an error and tell user of it to avoid segfault)?


  • Moderators

    @Crazy-Sage said in App crash on QImage::transformed (Qt 5.10):

    What can be reason for such crash and how can I deal with it (at least catch an error and tell user of it to avoid segfault)?

    hard to say. In C/C++ it's easy that an arbitrary (on first sight unrelated) part of your code can cause be influencing and cause a crash, since it is possible to modify the memory from anywhere in your application.

    You can try to isolate the code and try to reproduce. I bet it wont crash, since the code part you've posted looks good.

    But also threading is a highly possible cause. You need to make sure that you protect resources that are shared among threads. (e.g. with a mutex).
    Or at least you need to make sure that each thread operates on a separate copy of data. So that no other thread interferes and is reading/writing the same data at the same time.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.