[meego-commits] 9187: Changes to Trunk:Testing/qt-mobility
Fathi Boudra
no_reply at build.meego.com
Wed Nov 3 17:38:27 UTC 2010
Hi,
I have made the following changes to qt-mobility in project Trunk:Testing. Please review and accept ASAP.
Thank You,
Fathi Boudra
[This message was auto-generated]
---
Request #9187:
submit: devel:qt-mtf/qt-mobility(r97) -> Trunk:Testing/qt-mobility
Message:
* 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)
State: new 2010-11-03T10:38:27 boudra
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