[meego-commits] 9229: Changes to Trunk/qt-mobility

Peter Zhu no_reply at build.meego.com
Fri Nov 5 10:10:24 UTC 2010


Hi,
I have made the following changes to qt-mobility in project Trunk. Please review and accept ASAP.

Thank You,
Peter Zhu

[This message was auto-generated]

---

Request #9229:

  submit:   Trunk:Testing/qt-mobility(r12) -> Trunk/qt-mobility


Message:
    Move to Trunk

State:   new          2010-11-05T03:10:24 peter
Comment: None



changes files:
--------------
--- qt-mobility.changes
+++ qt-mobility.changes
@@ -0,0 +1,5 @@
+* Wed Nov 03 2010 Fathi Boudra <fathi.boudra at nokia.com> - 1.1.0~beta2
+- Gstreamer mediacapture backend: postpone starting pipeline if video
+  output is not configured yet. Fix QCamera not working with QGraphicsVideoItem
+  (BMC#9202)
+
@@ -2 +7 @@
-- Fixed segmentation fault in situation when sensor interface is not available.
+- Fix segmentation fault in situation when sensor interface is not available
@@ -4 +9 @@
-- Reverting previous changes. libqtsensors_maemo6.so is included again.
+- Revert previous changes: libqtsensors_maemo6.so is included again.
@@ -7,2 +12,2 @@
-- BMC#8705 - update enable_sensorfw_support.patch so that 
-  libqtsensors_maemo6.so is not included - this plugin cases crashes
+- Update enable_sensorfw_support.patch so that libqtsensors_maemo6.so is not
+  included - this plugin causes crashes (BMC#8705)

new:
----
  gstreamer_mediacapture_backend_bmc9202.patch

spec files:
-----------
--- qt-mobility.spec
+++ qt-mobility.spec
@@ -26,6 +26,7 @@
 Patch9:     use_isabspath.patch
 Patch10:     qmf_2010w36_support.patch
 Patch11:     fix_bmc_8705.patch
+Patch12:     gstreamer_mediacapture_backend_bmc9202.patch
 Requires:   libqtcontacts1 = %{version}
 Requires:   libqtfeedback1 = %{version}
 Requires:   libqtgallery1 = %{version}
@@ -430,6 +431,8 @@
 %patch10 -p1
 # fix_bmc_8705.patch
 %patch11 -p1
+# gstreamer_mediacapture_backend_bmc9202.patch
+%patch12 -p1
 # >> setup
 # << setup
 

other changes:
--------------

++++++ gstreamer_mediacapture_backend_bmc9202.patch (new)
--- gstreamer_mediacapture_backend_bmc9202.patch
+++ gstreamer_mediacapture_backend_bmc9202.patch
+From 44f04fea41dd2641947ae8d1ec4825f083976908 Mon Sep 17 00:00:00 2001
+From: Dmytro Poplavskiy <dmytro.poplavskiy at nokia.com>
+Date: Fri, 24 Sep 2010 13:53:04 +1000
+Subject: [PATCH] Gstreamer mediacapture backend: postpone starting pipeline if video
+ output is not configured yet.
+
+The same behavior as currently implemented in the camerabin backend.
+---
+ .../mediacapture/qgstreamercameracontrol.cpp       |   17 ++++-
+ .../mediacapture/qgstreamercaptureservice.cpp      |   79 +------------------
+ .../mediacapture/qgstreamercaptureservice.h        |    4 +-
+ .../mediacapture/qgstreamercapturesession.cpp      |   48 ++++++++++--
+ .../mediacapture/qgstreamercapturesession.h        |   12 ++-
+ 5 files changed, 70 insertions(+), 90 deletions(-)
+
+--- a/plugins/multimedia/gstreamer/mediacapture/qgstreamercameracontrol.cpp
++++ b/plugins/multimedia/gstreamer/mediacapture/qgstreamercameracontrol.cpp
+@@ -66,6 +66,10 @@ QGstreamerCameraControl::QGstreamerCamer
+ 
+     connect(m_session->imageEncodeControl(), SIGNAL(settingsChanged()),
+             SLOT(reloadLater()));
++    connect(m_session, SIGNAL(viewfinderChanged()),
++            SLOT(reloadLater()));
++    connect(m_session, SIGNAL(readyChanged(bool)),
++            SLOT(reloadLater()));
+ }
+ 
+ QGstreamerCameraControl::~QGstreamerCameraControl()
+@@ -102,8 +106,15 @@ void QGstreamerCameraControl::setState(Q
+     case QCamera::LoadedState:
+         m_session->setState(QGstreamerCaptureSession::StoppedState);
+         break;
+-    case QCamera::ActiveState:        
+-        m_session->setState(QGstreamerCaptureSession::PreviewState);
++    case QCamera::ActiveState:
++        //postpone changing to Active if the session is nor ready yet
++        if (m_session->isReady()) {
++            m_session->setState(QGstreamerCaptureSession::PreviewState);
++        } else {
++#ifdef CAMEABIN_DEBUG
++            qDebug() << "Camera session is not ready yet, postpone activating";
++#endif
++        }
+         break;
+     default:
+         emit error(QCamera::NotSupportedFeatureError, tr("State not supported."));
+@@ -158,7 +169,7 @@ void QGstreamerCameraControl::reloadPipe
+     //qDebug() << "reload pipeline";
+     if (m_reloadPending) {
+         m_reloadPending = false;
+-        if (m_state == QCamera::ActiveState) {            
++        if (m_state == QCamera::ActiveState && m_session->isReady()) {
+             m_session->setState(QGstreamerCaptureSession::PreviewState);
+         }
+     }
+--- a/plugins/multimedia/gstreamer/mediacapture/qgstreamercaptureservice.cpp
++++ b/plugins/multimedia/gstreamer/mediacapture/qgstreamercaptureservice.cpp
+@@ -69,66 +69,6 @@
+ #include <qmediaserviceprovider.h>
+ 
+ 
+-class QGstreamerVideoRendererWrapper : public QGstreamerElementFactory
+-{
+-public:
+-    QGstreamerVideoRendererWrapper(QGstreamerVideoRendererInterface *videoRenderer)
+-        :m_videoRenderer(videoRenderer),
+-         m_bin(0),
+-         m_element(0),
+-         m_colorspace(0)
+-    {
+-    }
+-
+-    virtual ~QGstreamerVideoRendererWrapper()
+-    {
+-        if (m_bin)
+-            gst_object_unref(GST_OBJECT(m_bin));
+-    }
+-
+-    GstElement *buildElement()
+-    {
+-#ifdef Q_WS_MAEMO_5
+-        return m_element = m_videoRenderer->videoSink();
+-#endif
+-        if (m_bin == NULL) {
+-            GstBin * bin = GST_BIN(gst_bin_new(NULL));
+-
+-            m_colorspace = gst_element_factory_make("ffmpegcolorspace", NULL);
+-            m_element = m_videoRenderer->videoSink();
+-
+-            gst_bin_add(bin, m_colorspace);
+-            gst_bin_add(bin, m_element);
+-            gst_element_link(m_colorspace, m_element);
+-
+-            // add ghostpads
+-            GstPad *pad = gst_element_get_static_pad(m_colorspace, "sink");
+-            gst_element_add_pad(GST_ELEMENT(bin), gst_ghost_pad_new("sink", pad));
+-            gst_object_unref(GST_OBJECT(pad));
+-
+-            m_bin = GST_ELEMENT(bin);
+-        }
+-
+-        m_videoRenderer->precessNewStream();
+-
+-        gst_object_ref(GST_OBJECT(m_bin));
+-        return m_bin;
+-    }
+-
+-    void prepareWinId()
+-    {
+-        m_videoRenderer->precessNewStream();
+-    }
+-
+-private:
+-    QGstreamerVideoRendererInterface *m_videoRenderer;
+-
+-    GstElement *m_bin;
+-    GstElement *m_element;
+-    GstElement *m_colorspace;
+-};
+-
+-
+ QGstreamerCaptureService::QGstreamerCaptureService(const QString &service, QObject *parent):
+     QMediaService(parent)
+ {
+@@ -142,11 +82,8 @@ QGstreamerCaptureService::QGstreamerCapt
+ 
+     m_videoOutput = 0;
+     m_videoRenderer = 0;
+-    m_videoRendererFactory = 0;
+     m_videoWindow = 0;
+-    m_videoWindowFactory = 0;
+     m_videoWidgetControl = 0;
+-    m_videoWidgetFactory = 0;
+     m_imageCaptureControl = 0;
+ 
+     if (service == Q_MEDIASERVICE_AUDIOSOURCE) {
+@@ -167,16 +104,10 @@ QGstreamerCaptureService::QGstreamerCapt
+             m_videoInput->setDevice(m_videoInputDevice->deviceName(m_videoInputDevice->selectedDevice()));
+ 
+         m_videoRenderer = new QGstreamerVideoRenderer(this);
+-        m_videoRendererFactory = new QGstreamerVideoRendererWrapper(m_videoRenderer);
+ 
+ #if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
+-        QGstreamerVideoOverlay *videoWindow = new QGstreamerVideoOverlay(this);
+-        m_videoWindow = videoWindow;
+-        m_videoWindowFactory = new QGstreamerVideoRendererWrapper(videoWindow);
+-
+-        QGstreamerVideoWidgetControl *videoWidget = new QGstreamerVideoWidgetControl(this);
+-        m_videoWidgetControl = videoWidget;
+-        m_videoWidgetFactory = new QGstreamerVideoRendererWrapper(videoWidget);
++        m_videoWindow = new QGstreamerVideoOverlay(this);
++        m_videoWidgetControl = new QGstreamerVideoWidgetControl(this);
+ #endif    
+         m_imageCaptureControl = new QGstreamerImageCaptureControl(m_captureSession);
+     }
+@@ -235,12 +166,12 @@ QMediaControl *QGstreamerCaptureService:
+     if (!m_videoOutput) {
+         if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
+             m_videoOutput = m_videoRenderer;
+-            m_captureSession->setVideoPreview(m_videoRendererFactory);
++            m_captureSession->setVideoPreview(m_videoRenderer);
+         } else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
+             m_videoOutput = m_videoWindow;
+-            m_captureSession->setVideoPreview(m_videoWindowFactory);
++            m_captureSession->setVideoPreview(m_videoWindow);
+         } else if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
+-            m_captureSession->setVideoPreview(m_videoWidgetFactory);
++            m_captureSession->setVideoPreview(m_videoWidgetControl);
+             m_videoOutput = m_videoWidgetControl;
+         }
+ 
+--- a/plugins/multimedia/gstreamer/mediacapture/qgstreamercaptureservice.h
++++ b/plugins/multimedia/gstreamer/mediacapture/qgstreamercaptureservice.h
+@@ -49,6 +49,7 @@
+ #define QGSTREAMERCAPTURESERVICE_H
+ 
+ #include <qmediaservice.h>
++#include <qmediacontrol.h>
+ 
+ #include <gst/gst.h>
+ QT_BEGIN_NAMESPACE
+@@ -93,11 +94,8 @@ private:
+     QMediaControl *m_videoOutput;
+ 
+     QGstreamerVideoRenderer *m_videoRenderer;
+-    QGstreamerElementFactory *m_videoRendererFactory;
+     QMediaControl *m_videoWindow;
+-    QGstreamerElementFactory *m_videoWindowFactory;
+     QMediaControl *m_videoWidgetControl;
+-    QGstreamerElementFactory *m_videoWidgetFactory;
+     QGstreamerImageCaptureControl *m_imageCaptureControl;
+ };
+ 
+--- a/plugins/multimedia/gstreamer/mediacapture/qgstreamercapturesession.cpp
++++ b/plugins/multimedia/gstreamer/mediacapture/qgstreamercapturesession.cpp
+@@ -48,6 +48,7 @@
+ #include "qgstreamercapturesession.h"
+ #include "qgstreamerrecordercontrol.h"
(133 more lines skipped)

++++++ qt-mobility.yaml
--- qt-mobility.yaml
+++ qt-mobility.yaml
@@ -21,6 +21,7 @@
     - use_isabspath.patch
     - qmf_2010w36_support.patch
     - fix_bmc_8705.patch
+    - gstreamer_mediacapture_backend_bmc9202.patch
 Description: |
     Qt Mobility delivers a set of new APIs for mobile device functionality. These
     APIs allow the developer to use these features with ease from one framework and




More information about the MeeGo-commits mailing list