Ok I will compose an answer instead of making tons of comments.
You could try to change the source code for the QGstreamerVideoWidget here In that function you see xvimagesink.
Interesting is that there already is fallback to ximagesink if xvimagesink is not working.. I would try autovideosink which should always work..
void QGstreamerVideoWidgetControl::createVideoWidget()
{
if (m_widget)
return;
m_widget = new QGstreamerVideoWidget;
m_widget->installEventFilter(this);
m_windowId = m_widget->winId();
/// --- CHANGED HERE (xvimagesink -> autovideosink) -----
m_videoSink = gst_element_factory_make ("autovideosink", NULL);
if (m_videoSink) { /// --- maybe this if is not needed anymore ---
// Check if the xv sink is usable
if (gst_element_set_state(m_videoSink, GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS) {
gst_object_unref(GST_OBJECT(m_videoSink));
m_videoSink = 0;
} else {
gst_element_set_state(m_videoSink, GST_STATE_NULL);
g_object_set(G_OBJECT(m_videoSink), "force-aspect-ratio", 1, (const char*)NULL);
}
}
if (!m_videoSink)
m_videoSink = gst_element_factory_make ("ximagesink", NULL);
qt_gst_object_ref_sink(GST_OBJECT (m_videoSink)); //Take ownership
}
Or maybe its QGstreamerVideoWindow here
again replace xvimagesink with autovideosink, maybe it will help.
I am not sure what exactly is being used by your code..