Problem with Qt application and real-time Gstreamer video
I have a SW application running on Boundary Devices Nitrogen6xQP_MAX board with embedded Linux system (Yocto project, Morty branch). GUI is created in Qt and there is a Gstreamer pipeline like this (very simplified):
-> live video sink (imxeglvivsink)
rtsp input -> tee -> I. recording bin (imxvpuenc_h264 -> splitmuxsink) -> II. recording bin (imxvpuenc_h264 -> filesink)
I'm able to dynamically connect and disconnect all the bins right from the tee element in HD resolution with no freeze or crash. However, I have a setting screen (fullscreen size) and when I open this screen and close it, the live video sink freezes, Gst_Debug outputs
0:02:18.821705683 1639 0x67e0a350 ERROR imxvpuapi imxvpuapi_vpulib.c:514:default_dmabufalloc_allocate: allocating 1612801 bytes of physical memory failed 0:02:18.821983016 1639 0x67e0a350 WARN imxphysmemallocator phys_mem_allocator.c:154:gst_imx_phys_mem_allocator_alloc:<imxvpuallocator2> could not allocate memory block with 1612801 bytes 0:02:18.822171016 1639 0x67e0a350 ERROR imxvpuencoderbase encoder_base.c:466:gst_imx_vpu_encoder_base_set_format:<encRecPrest> could not create new framebuffer array 0:02:18.822334683 1639 0x67e0a350 WARN videoencoder gstvideoencoder.c:623:gst_video_encoder_setcaps:<encRecPrest> rejected caps video/x-raw, width=(int)1280, height=(int)720, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)25/1, format=(string)NV12
and I have to restart the application to make Gstreamer run again. This happens incidentally without any regularity.
Could you please help me with avoiding of this problem? I'm thinking about prevent Qt graphics rendering from GPU acceleration but I don't know if this is the right way.