void QGstreamerVideoWidgetControl::createVideoWidget() { if (m_widget) return; m_widget = new QGstreamerVideoWidget; m_widget->installEventFilter(this); m_windowId = m_widget->winId(); m_videoSink = gst_element_factory_make ("xvimagesink", NULL); if (m_videoSink) { // 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 }
GstElement *QGstreamerVideoRenderer::videoSink() { if (!m_videoSink && m_surface) { m_videoSink = QVideoSurfaceGstSink::createSink(m_surface); qt_gst_object_ref_sink(GST_OBJECT(m_videoSink)); //Take ownership } return reinterpret_cast<GstElement*>(m_videoSink); }
QGstreamerVideoWindow::QGstreamerVideoWindow(QObject *parent, const char *elementName) : QVideoWindowControl(parent) , m_videoSink(0) , m_windowId(0) , m_aspectRatioMode(Qt::KeepAspectRatio) , m_fullScreen(false) , m_colorKey(QColor::Invalid) { if (elementName) m_videoSink = gst_element_factory_make(elementName, NULL); else m_videoSink = gst_element_factory_make("xvimagesink", NULL); if (m_videoSink) { qt_gst_object_ref_sink(GST_OBJECT(m_videoSink)); //Take ownership GstPad *pad = gst_element_get_static_pad(m_videoSink,"sink"); m_bufferProbeId = gst_pad_add_buffer_probe(pad, G_CALLBACK(padBufferProbe), this); gst_object_unref(GST_OBJECT(pad)); } }