Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QML Camera method stop() error 127 pages are still in use! Driver ISL79987



  • How to solve?
    In the moment the camera is stopped, I'm getting error:

    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 746 at mm/page_alloc.c:7392 free_contig_range+0x94/0x98
    127 pages are still in use!
    Modules linked in:
    CPU: 0 PID: 746 Comm: camera_source:s Tainted: G W 4.9.144-2.8.5-ga2a5d39-dirty #291
    Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
    Backtrace:
    [<8010cd88>] (dump_backtrace) from [<8010d060>] (show_stack+0x18/0x1c)
    r7:00000009 r6:60000013 r5:00000000 r4:80f5ff88
    [<8010d048>] (show_stack) from [<80473e84>] (dump_stack+0x90/0xa4)
    [<80473df4>] (dump_stack) from [<80139e1c>] (__warn+0xf0/0x108)
    r7:00000009 r6:80c7aa9c r5:00000000 r4:e328fc20
    [<80139d2c>] (__warn) from [<80139e74>] (warn_slowpath_fmt+0x40/0x48)
    r9:80b95c50 r8:8103b480 r7:80f06704 r6:0007c1ff r5:0000007f r4:80c7b220
    [<80139e38>] (warn_slowpath_fmt) from [<80207604>] (free_contig_range+0x94/0x98)
    r3:0000007f r2:80c7b220
    r4:0007c1ff
    [<80207570>] (free_contig_range) from [<8024a474>] (cma_release+0x88/0x148)
    r9:80b95c50 r8:80d1235c r7:0000007f r6:e657a000 r5:8103c1c4 r4:0007c180
    [<8024a3ec>] (cma_release) from [<805abe60>] (dma_release_from_contiguous+0x38/0x40)
    r9:80b95c50 r8:80d1235c r7:80c7e460 r6:00000000 r5:0007f000 r4:e657a000
    [<805abe28>] (dma_release_from_contiguous) from [<80115c3c>] (cma_allocator_free+0x58/0x7c)
    [<80115be4>] (cma_allocator_free) from [<80116618>] (__arm_dma_free.constprop.2+0x124/0x138)
    r7:80c7e460 r6:80f0866c r5:f2c6a000 r4:e2d34d00
    [<801164f4>] (__arm_dma_free.constprop.2) from [<80116648>] (arm_dma_free+0x1c/0x24)
    r5:00000000 r4:e246b084
    [<8011662c>] (arm_dma_free) from [<8078af88>] (mxc_free_frame_buf+0x180/0x1ac)
    [<8078ae08>] (mxc_free_frame_buf) from [<8078f478>] (mxc_v4l_close+0x1cc/0x318)
    r10:e28140c0 r9:e2445c00 r8:e246b008 r7:00000000 r6:00000000 r5:00000000
    r4:e246b000
    [<8078f2ac>] (mxc_v4l_close) from [<80764214>] (v4l2_release+0x3c/0x80)
    r10:e269cc70 r9:00000008 r8:00000000 r7:e002bf68 r6:e27f2910 r5:e2662800
    r4:e28140c0
    [<807641d8>] (v4l2_release) from [<8024f908>] (__fput+0x90/0x1dc)
    r5:e269cc70 r4:e28140c0
    [<8024f878>] (__fput) from [<8024fab4>] (____fput+0x10/0x14)
    r10:e2e9403c r9:00000009 r8:e291bf00 r7:e2805d80 r6:e2806194 r5:80fed378
    r4:e2806178
    [<8024faa4>] (____fput) from [<801582ec>] (task_work_run+0xc4/0xe8)
    [<80158228>] (task_work_run) from [<8013d8e8>] (do_exit+0x34c/0xa3c)
    r9:00000009 r8:00000000 r7:e328fe30 r6:e2e94000 r5:e2806190 r4:e2805d80
    [<8013d59c>] (do_exit) from [<8013f224>] (do_group_exit+0x48/0xd8)
    r7:ffffe000
    [<8013f1dc>] (do_group_exit) from [<8014a37c>] (get_signal+0x2fc/0x708)
    r7:ffffe000 r6:e28d2f40 r5:76428678 r4:00418004
    [<8014a080>] (get_signal) from [<8010c1c0>] (do_signal+0x6c/0x40c)
    r10:00000036 r9:e328e000 r8:7642867c r7:fffffe00 r6:e328fec8 r5:76428678
    r4:e328ffb0
    [<8010c154>] (do_signal) from [<8010c72c>] (do_work_pending+0xac/0xbc)
    r10:00000036 r9:e328e000 r8:80108c04 r7:00000036 r6:e328ffb0 r5:80108c04
    r4:ffffe000
    [<8010c680>] (do_work_pending) from [<80108a80>] (slow_work_pending+0xc/0x20)
    r7:00000036 r6:60df8b8c r5:00000001 r4:6a33a070
    ---[ end trace e123636a04f76a1b ]---


  • Qt Champions 2019

    @Dioneva-M.-Krolow Is a warning not error and looks like memory leak.
    Does this happen if you use same camera with some other application (not Qt/QML based)?



  • Hi @jsulm
    With gst-launch-1.0 this doesn't happen.

    gst-launch-1.0 imxv4l2videosrc device=/dev/video0 ! imxipuvideosink

    The video is stopped normally without returning this warning.


  • Lifetime Qt Champion

    Hi,

    The GStreamer backend doesn't use that source. You might want to modify it and fix the source for that.



  • Where do I make this modification?


  • Lifetime Qt Champion

    You'll have to do that in Qt's sources and build the plugin (just the plugin, no need to rebuild all of Qt)



  • Right, that's exactly what I did, I changed the qtmultimedia, camerabin module, but the problem persists.
    See changes below:

    diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
    index ab0bea2..6660995 100644
    --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
    +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
    @@ -153,7 +153,7 @@ CameraBinSession::CameraBinSession(GstElementFactory *sourceFactory, QObject *pa
    {
    if (m_sourceFactory)
    gst_object_ref(GST_OBJECT(m_sourceFactory));
    -- m_camerabin = gst_element_factory_make(QT_GSTREAMER_CAMERABIN_ELEMENT_NAME, "camerabin");
    ++ m_camerabin = gst_element_factory_make(QT_GSTREAMER_CAMERABIN_ELEMENT_NAME, "imxv4l2videosrc");//camerabin

    g_signal_connect(G_OBJECT(m_camerabin), "notify::idle", G_CALLBACK(updateBusyStatus), this);
    g_signal_connect(G_OBJECT(m_camerabin), "element-added", G_CALLBACK(elementAdded), this);
    @@ -520,7 +520,7 @@ GstElement *CameraBinSession::buildCameraSource()
    }

    if (!m_videoSrc)
    -- m_videoSrc = gst_element_factory_make("v4l2src", "camera_source");
    ++ m_videoSrc = gst_element_factory_make("imxv4l2videosrc", "camera_source");

    if (m_videoSrc)
    g_object_set(G_OBJECT(m_cameraSrc), "video-source", m_videoSrc, NULL);



  • is it after you call stop()? Can the camera be usable after the error?


Log in to reply