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