QML, Qt-GStreamer-1.2, dynamic loading VideoItem

_dmp dm.pozhidaev at gmail.com
Wed Oct 21 06:47:14 PDT 2015


Hello

I got crash application when use QtGStreamer-1.2. The logic of programm uses
dynamic loading of component by Loader in qml. First load of  VideoItem work
fine.
If I load VideoItem second time i got Q_ASSERT  in code 
Please help

List of stack
0	__kernel_vsyscall			0xb7fdd424	
1	__GI_raise	/usr/lib/debug/lib/i386-linux-gnu/libc-2.19.so	56	0xb6114577	
2	__GI_abort	/usr/lib/debug/lib/i386-linux-gnu/libc-2.19.so	89	0xb61179a3	
3	QMessageLogger::fatal(const char *, ...) const			0xb6493437	
4	qt_assert(const char *, const char *, int)			0xb648ed36	
5	VideoNode::setCurrentFrame	videonode.cpp	49	0xae8a0d00	
6	QtQuick2VideoSinkDelegate::updateNode	qtquick2videosinkdelegate.cpp	100
0xae8a1f0d	
7	gst_qt_quick2_video_sink_update_node	gstqtquick2videosink.cpp	265
0xae8a2b49	
8	g_cclosure_user_marshal_POINTER__POINTER_DOUBLE_DOUBLE_DOUBLE_DOUBLE
gstqtvideosinkmarshal.c	221	0xae89e06a	
9	??			0xb609f5a4	
10	g_closure_invoke			0xb60a0a7e	
11	??			0xb60b2c80	
12	g_signal_emitv			0xb60b9bc3	
13	QGlib::Private::emit(void *, const char *, QGlib::Quark,
QList<QGlib::Value> const&)			0xb7fbb323	
14	QGst::Quick::VideoItem::updatePaintNode(QSGNode *,
QQuickItem::UpdatePaintNodeData *)			0xb7f49eda	
15	QQuickWindowPrivate::updateDirtyNode(QQuickItem *)			0xb7c78ffc	
16	QQuickWindowPrivate::updateDirtyNodes()			0xb7c7987d	
17	QQuickWindowPrivate::syncSceneGraph()			0xb7c79c27	
18	??			0xb7c44db4	
19	??			0xb7c464a8	
20	QCoreApplicationPrivate::notify_helper(QObject *, QEvent *)			0xb6689aac	
21	QCoreApplication::notify(QObject *, QEvent *)			0xb6689b0e	
22	QGuiApplication::notify(QObject *, QEvent *)			0xb7443b1a	
23	QCoreApplication::notifyInternal(QObject *, QEvent *)			0xb6689c37	
24	QTimerInfoList::activateTimers()			0xb66e0fa0	
25	??			0xb66e147c	
26	g_main_context_dispatch			0xb5fce1e3	
27	??			0xb5fce468	
28	g_main_context_iteration			0xb5fce528	
29
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)		
0xb66e2154	
30	??			0xb39900f1	
31	QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)		
0xb66871c3	
32	QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)			0xb668763a	
33	QCoreApplication::exec()			0xb668f72a	
34	QGuiApplication::exec()			0xb743e531	
35	main	main.cpp	543	0x805d7dc	

void VideoNode::setCurrentFrame(GstBuffer* buffer)
{
    Q_ASSERT (m_materialType == MaterialTypeVideo);
    static_cast<VideoMaterial*>(material())->setCurrentFrame(buffer);
    markDirty(DirtyMaterial);
}

Source of my code

void CamTestPipeline::createPipeline()
{
    m_surface = new QGst::Quick::VideoSurface;
    m_contextQml->setContextProperty(QLatin1String("testVideoSurface"),
m_surface);
    m_qmlvideosink = m_surface->videoSink ();
    m_videobin = QGst::Bin::create("videobin");
    
    m_capsfilter2 = QGst::ElementFactory::make("capsfilter", "capsfilter2");
    if (!m_capsfilter2)
        goto iserror;
    m_capsfilter2->setProperty("caps", QGst::Caps::fromString("video/x-raw,"
                                                            
"format=(string)RGB,"
                                                            
"width=(int)640,"
                                                            
"height=(int)480,"
                                                            
"framerate=(fraction)30/1"));
    m_camera = QGst::ElementFactory::make("v4l2src", "v4l2src");
    if (!m_camera)
        goto iserror;
    m_camera->setProperty("device", "/dev/video0");
    m_capsfilter = QGst::ElementFactory::make("capsfilter", "capsfilter");
    if (!m_capsfilter)
        goto iserror;
    m_capsfilter->setProperty("caps", QGst::Caps::fromString("video/x-raw,"
                                                            
"format=(string)YUY2,"
                                                            
"width=(int)640,"
                                                            
"height=(int)480,"
                                                            
"pixel-aspect-ratio=(fraction)1/1,"
                                                            
"interlace-mode=(string)progressive,"
                                                            
"framerate=(fraction)30/1"));
    m_videoconverter = QGst::ElementFactory::make("videoconvert",
"videoconvert");
    if (!m_videoconverter)
        goto iserror;
    m_imxipuvideotransform =
QGst::ElementFactory::make("imxipuvideotransform", "imxipuvideotransform");
    if (!m_imxipuvideotransform)
        goto iserror;
    m_imxipuvideotransform->setProperty("output-rotation", 1);
    m_videobin->add (m_camera);
    m_videobin->add (m_capsfilter);
    m_videobin->add (m_videoconverter);
    m_videobin->add (m_imxipuvideotransform);
    m_videobin->add (m_capsfilter2);
    m_videobin->add (m_qmlvideosink);
    m_camera->link (m_capsfilter);
    m_capsfilter->link (m_videoconverter);
    m_videoconverter->link (m_imxipuvideotransform);
    m_imxipuvideotransform->link (m_capsfilter2);
    m_capsfilter2->link (m_qmlvideosink);
    m_pipeline->add (m_videobin);
    m_pipeline->setState (QGst::StateReady);
    return;
iserror:
    qDebug() << "Can't create pipeline for camera. We will use videotest
image instead. Check hardware!";
    m_videotestsrc = QGst::ElementFactory::make("videotestsrc",
"videotestsrc");
    m_videobin->add (m_videotestsrc);
    m_videobin->add (m_capsfilter2);
    m_videobin->add (m_qmlvideosink);
    m_videotestsrc->link (m_capsfilter2);
    m_capsfilter2->link (m_qmlvideosink);
    m_pipeline->add (m_videobin);
    m_pipeline->setState (QGst::StateReady);
}

and qml


    Loader {
        anchors.centerIn: parent
        sourceComponent: testflag==1?steptestcam_id:undefined
        }
    Component {
        id: steptestcam_id
        Rectangle {
            width: 1024
            height: 768
            color: "#404040"
            MouseArea {
                anchors.fill: parent
                onPressed: {
                }
            }
            VideoItem {
                id: videoitem_ID
                anchors.centerIn: parent
                width:  640
                height: 480
                surface: testVideoSurface
            }
        }
    }




--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/QML-Qt-GStreamer-1-2-dynamic-loading-VideoItem-tp4674193.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list