qtmobility/plugins/multimedia/gstreamer/qgstreamervideowidget.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
--- a/qtmobility/plugins/multimedia/gstreamer/qgstreamervideowidget.cpp	Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/plugins/multimedia/gstreamer/qgstreamervideowidget.cpp	Wed Jun 23 19:08:38 2010 +0300
@@ -96,9 +96,26 @@
 QGstreamerVideoWidgetControl::QGstreamerVideoWidgetControl(QObject *parent)
     : QVideoWidgetControl(parent)
     , m_videoSink(0)
-    , m_widget(new QGstreamerVideoWidget)
+    , m_widget(0)
     , m_fullScreen(false)
+{    
+}
+
+QGstreamerVideoWidgetControl::~QGstreamerVideoWidgetControl()
 {
+    if (m_videoSink)
+        gst_object_unref(GST_OBJECT(m_videoSink));
+
+    delete m_widget;
+}
+
+void QGstreamerVideoWidgetControl::createVideoWidget()
+{
+    if (m_widget)
+        return;
+
+    m_widget = new QGstreamerVideoWidget;
+
     m_widget->installEventFilter(this);
     m_windowId = m_widget->winId();
 
@@ -129,22 +146,15 @@
 
 }
 
-QGstreamerVideoWidgetControl::~QGstreamerVideoWidgetControl()
-{
-    if (m_videoSink)
-        gst_object_unref(GST_OBJECT(m_videoSink));
-
-    delete m_widget;
-}
-
 GstElement *QGstreamerVideoWidgetControl::videoSink()
 {
+    createVideoWidget();
     return m_videoSink;
 }
 
 bool QGstreamerVideoWidgetControl::eventFilter(QObject *object, QEvent *e)
 {
-    if (object == m_widget) {
+    if (m_widget && object == m_widget) {
         if (e->type() == QEvent::ParentChange || e->type() == QEvent::Show) {
             WId newWId = m_widget->winId();
             if (newWId != m_windowId) {
@@ -209,7 +219,8 @@
             gst_caps_unref(caps);
         }
     } else {
-        m_widget->setNativeSize(QSize());
+        if (m_widget)
+            m_widget->setNativeSize(QSize());
     }
 }
 
@@ -222,6 +233,7 @@
 
 QWidget *QGstreamerVideoWidgetControl::videoWidget()
 {
+    createVideoWidget();
     return m_widget;
 }
 
@@ -256,7 +268,7 @@
 {
     int brightness = 0;
 
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "brightness"))
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "brightness"))
         g_object_get(G_OBJECT(m_videoSink), "brightness", &brightness, NULL);
 
     return brightness / 10;
@@ -264,7 +276,7 @@
 
 void QGstreamerVideoWidgetControl::setBrightness(int brightness)
 {
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "brightness")) {
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "brightness")) {
         g_object_set(G_OBJECT(m_videoSink), "brightness", brightness * 10, NULL);
 
         emit brightnessChanged(brightness);
@@ -275,15 +287,15 @@
 {
     int contrast = 0;
 
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "contrast"))
-    g_object_get(G_OBJECT(m_videoSink), "contrast", &contrast, NULL);
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "contrast"))
+        g_object_get(G_OBJECT(m_videoSink), "contrast", &contrast, NULL);
 
     return contrast / 10;
 }
 
 void QGstreamerVideoWidgetControl::setContrast(int contrast)
 {
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "contrast")) {
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "contrast")) {
         g_object_set(G_OBJECT(m_videoSink), "contrast", contrast * 10, NULL);
 
         emit contrastChanged(contrast);
@@ -294,7 +306,7 @@
 {
     int hue = 0;
 
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "hue"))
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "hue"))
         g_object_get(G_OBJECT(m_videoSink), "hue", &hue, NULL);
 
     return hue / 10;
@@ -302,7 +314,7 @@
 
 void QGstreamerVideoWidgetControl::setHue(int hue)
 {
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "hue")) {
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "hue")) {
         g_object_set(G_OBJECT(m_videoSink), "hue", hue * 10, NULL);
 
         emit hueChanged(hue);
@@ -313,7 +325,7 @@
 {
     int saturation = 0;
 
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "saturation"))
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "saturation"))
         g_object_get(G_OBJECT(m_videoSink), "saturation", &saturation, NULL);
 
     return saturation / 10;
@@ -321,7 +333,7 @@
 
 void QGstreamerVideoWidgetControl::setSaturation(int saturation)
 {
-    if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "saturation")) {
+    if (m_videoSink && g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "saturation")) {
         g_object_set(G_OBJECT(m_videoSink), "saturation", saturation * 10, NULL);
 
         emit saturationChanged(saturation);