rdieter pushed to qt5-qtmultimedia (el6). "Update to 5.4.1"

notifications at fedoraproject.org notifications at fedoraproject.org
Sat Apr 11 12:10:05 UTC 2015


>From a7e91cfce78aecdf35c3654d9511f732976ee7e2 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich at redhat.com>
Date: Tue, 24 Feb 2015 16:40:41 +0100
Subject: Update to 5.4.1


diff --git a/.gitignore b/.gitignore
index 00ed35e..79f4751 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 /qtmultimedia-opensource-src-5.3.2.tar.xz
 /qtmultimedia-opensource-src-5.4.0.tar.xz
+/qtmultimedia-opensource-src-5.4.1.tar.xz
diff --git a/0006-GStreamer-port-to-1.0.patch b/0006-GStreamer-port-to-1.0.patch
index 6ff377e..606d947 100644
--- a/0006-GStreamer-port-to-1.0.patch
+++ b/0006-GStreamer-port-to-1.0.patch
@@ -1,109 +1,10 @@
-From 108dda7a90bd0f0337358b0db47ae55acd16dea6 Mon Sep 17 00:00:00 2001
-From: Yoann Lopes <yoann.lopes at theqtcompany.com>
-Date: Thu, 20 Nov 2014 17:54:18 +0100
-Subject: [PATCH 06/12] GStreamer: port to 1.0.
-
-0.10 is still used by default.
-To enable GStreamer 1.0, pass GST_VERSION=1.0 to qmake
-for qtmultimedia.pro.
-
-Contributions from:
-Andrew den Exter <andrew.den.exter at qinetic.com.au>
-Ilya Smelykh <ilya at videoexpertsgroup.com>
-Jim Hodapp <jim.hodapp at canonical.com>
-Sergio Schvezov <sergio.schvezov at canonical.com>
-
-Change-Id: I72a46d1170a8794a149bdb5e20767afcc5b7587c
-Reviewed-by: Andrew den Exter <andrew.den.exter at qinetic.com.au>
----
- config.tests/gstreamer/gstreamer.pro               |  11 +-
- config.tests/gstreamer_appsrc/gstreamer_appsrc.pro |  13 +-
- .../gstreamer_encodingprofiles.pro                 |  13 +-
- .../gstreamer_photography.pro                      |  15 +-
- .../declarative-camera/declarative-camera.qml      |   2 +-
- qtmultimedia.pro                                   |  26 +-
- src/gsttools/gsttools.pro                          |  72 +-
- src/gsttools/qgstappsrc.cpp                        |  29 +-
- src/gsttools/qgstcodecsinfo.cpp                    |   8 +-
- src/gsttools/qgstreameraudioprobecontrol.cpp       |  47 +-
- src/gsttools/qgstreamerbufferprobe.cpp             | 174 +++++
- src/gsttools/qgstreamerbushelper.cpp               |   8 +
- src/gsttools/qgstreamermirtexturerenderer.cpp      | 351 +++++++++
- src/gsttools/qgstreamervideoprobecontrol.cpp       |  58 +-
- src/gsttools/qgstreamervideorenderer.cpp           |   3 +-
- src/gsttools/qgstreamervideowidget.cpp             |  29 +-
- src/gsttools/qgstreamervideowindow.cpp             | 105 ++-
- src/gsttools/qgstutils.cpp                         | 785 ++++++++++++++++++++-
- src/gsttools/qgstvideobuffer.cpp                   |  70 +-
- src/gsttools/qgstvideorendererplugin.cpp           |  53 ++
- src/gsttools/qgstvideorenderersink.cpp             | 605 ++++++++++++++++
- src/gsttools/qvideosurfacegstsink.cpp              | 232 +-----
- src/multimedia/gsttools_headers/qgstappsrc_p.h     |   3 +
- .../qgstreameraudioprobecontrol_p.h                |  13 +-
- .../gsttools_headers/qgstreamerbufferprobe_p.h     |  86 +++
- .../qgstreamermirtexturerenderer_p.h               | 102 +++
- .../qgstreamervideoprobecontrol_p.h                |  23 +-
- .../gsttools_headers/qgstreamervideowindow_p.h     |   9 +-
- src/multimedia/gsttools_headers/qgstutils_p.h      |  55 +-
- .../gsttools_headers/qgstvideobuffer_p.h           |  23 +-
- .../gsttools_headers/qgstvideorendererplugin_p.h   | 111 +++
- .../gsttools_headers/qgstvideorenderersink_p.h     | 183 +++++
- .../gsttools_headers/qvideosurfacegstsink_p.h      |  19 +-
- src/multimedia/multimedia.pro                      |   2 +
- .../qgstreameraudiodecoderserviceplugin.cpp        |  89 +--
- .../audiodecoder/qgstreameraudiodecodersession.cpp |  36 +-
- .../audiodecoder/qgstreameraudiodecodersession.h   |   2 +-
- src/plugins/gstreamer/camerabin/camerabin.pro      |   2 +-
- .../gstreamer/camerabin/camerabincontainer.cpp     |   2 +-
- .../gstreamer/camerabin/camerabincontrol.cpp       |   7 +-
- .../gstreamer/camerabin/camerabinexposure.cpp      |   8 +-
- src/plugins/gstreamer/camerabin/camerabinflash.cpp |   8 +-
- src/plugins/gstreamer/camerabin/camerabinfocus.cpp |  15 +-
- .../gstreamer/camerabin/camerabinimagecapture.cpp  | 146 ++--
- .../gstreamer/camerabin/camerabinimagecapture.h    |  50 +-
- .../gstreamer/camerabin/camerabinimageencoder.cpp  |   1 -
- .../camerabin/camerabinimageprocessing.cpp         |   8 +-
- .../gstreamer/camerabin/camerabinimageprocessing.h |   7 +-
- .../gstreamer/camerabin/camerabinmetadata.cpp      |   5 +-
- .../gstreamer/camerabin/camerabinrecorder.cpp      |   9 +-
- .../gstreamer/camerabin/camerabinservice.cpp       |   7 +-
- .../gstreamer/camerabin/camerabinsession.cpp       | 339 ++++-----
- src/plugins/gstreamer/common.pri                   |  22 +-
- src/plugins/gstreamer/gstreamer.pro                |   4 +-
- .../gstreamer/mediacapture/mediacapturecamera.json |   2 +-
- .../mediacapture/qgstreameraudioencode.cpp         |   3 +-
- .../mediacapture/qgstreamercaptureservice.cpp      |  58 +-
- .../mediacapture/qgstreamercaptureservice.h        |   3 +
- .../qgstreamercaptureserviceplugin.cpp             |  90 +--
- .../mediacapture/qgstreamercapturesession.cpp      | 285 +++-----
- .../mediacapture/qgstreamercapturesession.h        |  19 +-
- .../mediacapture/qgstreamervideoencode.cpp         |  39 +-
- src/plugins/gstreamer/mediaplayer/mediaplayer.pro  |   1 -
- .../mediaplayer/qgstreamerplayercontrol.cpp        |   1 -
- .../mediaplayer/qgstreamerplayerservice.cpp        |  65 +-
- .../mediaplayer/qgstreamerplayerservice.h          |   5 +
- .../mediaplayer/qgstreamerplayerserviceplugin.cpp  |  88 +--
- .../mediaplayer/qgstreamerplayersession.cpp        | 238 ++++---
- .../mediaplayer/qgstreamerplayersession.h          |  19 +-
- .../qcamerabackend/tst_qcamerabackend.cpp          |  10 +-
- .../tst_qmediaplayerbackend.cpp                    |   4 +-
- 71 files changed, 3661 insertions(+), 1374 deletions(-)
- create mode 100644 src/gsttools/qgstreamerbufferprobe.cpp
- create mode 100644 src/gsttools/qgstreamermirtexturerenderer.cpp
- create mode 100644 src/gsttools/qgstvideorendererplugin.cpp
- create mode 100644 src/gsttools/qgstvideorenderersink.cpp
- create mode 100644 src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h
- create mode 100644 src/multimedia/gsttools_headers/qgstreamermirtexturerenderer_p.h
- create mode 100644 src/multimedia/gsttools_headers/qgstvideorendererplugin_p.h
- create mode 100644 src/multimedia/gsttools_headers/qgstvideorenderersink_p.h
-
 diff --git a/config.tests/gstreamer/gstreamer.pro b/config.tests/gstreamer/gstreamer.pro
 index 02a7e34..6b9843a 100644
 --- a/config.tests/gstreamer/gstreamer.pro
 +++ b/config.tests/gstreamer/gstreamer.pro
 @@ -3,11 +3,10 @@ SOURCES += main.cpp
  CONFIG += link_pkgconfig
- 
+
  PKGCONFIG += \
 -    gstreamer-0.10 \
 -    gstreamer-base-0.10 \
@@ -116,15 +17,15 @@ index 02a7e34..6b9843a 100644
 +    gstreamer-audio-$$GST_VERSION \
 +    gstreamer-video-$$GST_VERSION \
 +    gstreamer-pbutils-$$GST_VERSION
- 
- 
+
+
 diff --git a/config.tests/gstreamer_appsrc/gstreamer_appsrc.pro b/config.tests/gstreamer_appsrc/gstreamer_appsrc.pro
 index 9f61703..0f3ca2b 100644
 --- a/config.tests/gstreamer_appsrc/gstreamer_appsrc.pro
 +++ b/config.tests/gstreamer_appsrc/gstreamer_appsrc.pro
 @@ -3,11 +3,8 @@ SOURCES += main.cpp
  CONFIG += link_pkgconfig
- 
+
  PKGCONFIG += \
 -    gstreamer-0.10 \
 -    gstreamer-base-0.10 \
@@ -144,9 +45,9 @@ index 7e8a9e7..fad40b0 100644
 --- a/config.tests/gstreamer_encodingprofiles/gstreamer_encodingprofiles.pro
 +++ b/config.tests/gstreamer_encodingprofiles/gstreamer_encodingprofiles.pro
 @@ -2,11 +2,10 @@ SOURCES += main.cpp
- 
+
  CONFIG += link_pkgconfig
- 
+
 -PKGCONFIG += \
 -    gstreamer-0.10 \
 -    gstreamer-base-0.10 \
@@ -154,7 +55,7 @@ index 7e8a9e7..fad40b0 100644
 -    gstreamer-audio-0.10 \
 -    gstreamer-video-0.10 \
 -    gstreamer-pbutils-0.10
- 
+
 +PKGCONFIG += \
 +    gstreamer-$$GST_VERSION \
 +    gstreamer-base-$$GST_VERSION \
@@ -167,7 +68,7 @@ index 6b530cb..975991f 100644
 +++ b/config.tests/gstreamer_photography/gstreamer_photography.pro
 @@ -3,12 +3,11 @@ SOURCES += main.cpp
  CONFIG += link_pkgconfig
- 
+
  PKGCONFIG += \
 -    gstreamer-0.10 \
 -    gstreamer-base-0.10 \
@@ -184,20 +85,20 @@ index 6b530cb..975991f 100644
 +    gstreamer-pbutils-$$GST_VERSION
 +
 +LIBS += -lgstphotography-$$GST_VERSION
- 
+
 diff --git a/examples/multimedia/declarative-camera/declarative-camera.qml b/examples/multimedia/declarative-camera/declarative-camera.qml
 index 751b38d..251df34 100644
 --- a/examples/multimedia/declarative-camera/declarative-camera.qml
 +++ b/examples/multimedia/declarative-camera/declarative-camera.qml
 @@ -96,7 +96,7 @@ Rectangle {
- 
+
          videoRecorder {
               resolution: "640x480"
 -             frameRate: 15
 +             frameRate: 30
          }
      }
- 
+
 diff --git a/qtmultimedia.pro b/qtmultimedia.pro
 index 3cec526..84f2548 100644
 --- a/qtmultimedia.pro
@@ -240,17 +141,17 @@ index 7c809a7..7c41f1a 100644
 --- a/src/gsttools/gsttools.pro
 +++ b/src/gsttools/gsttools.pro
 @@ -2,6 +2,7 @@ TEMPLATE = lib
- 
+
  TARGET = qgsttools_p
  QPRO_PWD = $$PWD
 +
  QT = core-private multimedia-private gui-private
- 
+
  !static:DEFINES += QT_MAKEDLL
 @@ -15,15 +16,17 @@ LIBS_PRIVATE += \
- 
+
  CONFIG += link_pkgconfig
- 
+
 -PKGCONFIG_PRIVATE += \
 -    gstreamer-0.10 \
 -    gstreamer-base-0.10 \
@@ -264,13 +165,13 @@ index 7c809a7..7c41f1a 100644
 +    gstreamer-audio-$$GST_VERSION \
 +    gstreamer-video-$$GST_VERSION \
 +    gstreamer-pbutils-$$GST_VERSION
- 
+
 -maemo*: PKGCONFIG_PRIVATE +=gstreamer-plugins-bad-0.10
 +equals(GST_VERSION,"0.10") {
 +    PKGCONFIG_PRIVATE += gstreamer-interfaces-0.10
 +    maemo*: PKGCONFIG_PRIVATE +=gstreamer-plugins-bad-0.10
 +}
- 
+
  config_resourcepolicy {
      DEFINES += HAVE_RESOURCE_POLICY
 @@ -33,38 +36,36 @@ config_resourcepolicy {
@@ -279,7 +180,7 @@ index 7c809a7..7c41f1a 100644
  INCLUDEPATH += ../multimedia/gsttools_headers/
 +INCLUDEPATH += ../plugins/gstreamer/mediaplayer/
  VPATH += ../multimedia/gsttools_headers/
- 
+
  PRIVATE_HEADERS += \
 -    qgstbufferpoolinterface_p.h \
      qgstreamerbushelper_p.h \
@@ -297,7 +198,7 @@ index 7c809a7..7c41f1a 100644
      qgstreamervideoprobecontrol_p.h \
      qgstreameraudioprobecontrol_p.h \
      qgstreamervideowindow_p.h
- 
+
  SOURCES += \
 -    qgstbufferpoolinterface.cpp \
      qgstreamerbushelper.cpp \
@@ -318,7 +219,7 @@ index 7c809a7..7c41f1a 100644
 @@ -79,25 +80,54 @@ qtHaveModule(widgets) {
          qgstreamervideowidget.cpp
  }
- 
+
 -maemo6 {
 -    PKGCONFIG_PRIVATE += qmsystem2
 +equals(GST_VERSION,"0.10") {
@@ -350,7 +251,7 @@ index 7c809a7..7c41f1a 100644
 +        qgstvideorendererplugin.cpp \
 +        qgstvideorenderersink.cpp
 +}
- 
+
 +mir: {
      contains(QT_CONFIG, opengles2):qtHaveModule(widgets) {
 -        PRIVATE_HEADERS += qgstreamergltexturerenderer_p.h
@@ -364,19 +265,19 @@ index 7c809a7..7c41f1a 100644
      }
 +    DEFINES += HAVE_MIR
  }
- 
+
  config_gstreamer_appsrc {
 -    PKGCONFIG_PRIVATE += gstreamer-app-0.10
 +    PKGCONFIG_PRIVATE += gstreamer-app-$$GST_VERSION
      PRIVATE_HEADERS += qgstappsrc_p.h
      SOURCES += qgstappsrc.cpp
- 
+
      DEFINES += HAVE_GST_APPSRC
- 
+
 -    LIBS_PRIVATE += -lgstapp-0.10
 +    LIBS_PRIVATE += -lgstapp-$$GST_VERSION
  }
- 
+
  config_linux_v4l: DEFINES += USE_V4L
 diff --git a/src/gsttools/qgstappsrc.cpp b/src/gsttools/qgstappsrc.cpp
 index 561a96f..178e118 100644
@@ -384,7 +285,7 @@ index 561a96f..178e118 100644
 +++ b/src/gsttools/qgstappsrc.cpp
 @@ -147,23 +147,44 @@ void QGstAppSrc::pushDataToAppSrc()
              size = qMin(m_stream->bytesAvailable(), (qint64)m_dataRequestSize);
- 
+
          if (size) {
 -            void *data = g_malloc(size);
 -            GstBuffer* buffer = gst_app_buffer_new(data, size, g_free, data);
@@ -402,7 +303,7 @@ index 561a96f..178e118 100644
 -            qint64 bytesRead = m_stream->read((char*)GST_BUFFER_DATA(buffer), size);
 +            qint64 bytesRead = m_stream->read((char*)bufferData, size);
              buffer->offset_end =  buffer->offset + bytesRead - 1;
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +            gst_buffer_unmap(buffer, &mapInfo);
 +#endif
@@ -437,26 +338,26 @@ index f584fbe..888722a 100644
 +++ b/src/gsttools/qgstcodecsinfo.cpp
 @@ -32,7 +32,7 @@
  ****************************************************************************/
- 
+
  #include "qgstcodecsinfo_p.h"
 -
 +#include "qgstutils_p.h"
  #include <QtCore/qset.h>
- 
+
  #ifdef QMEDIA_GSTREAMER_CAMERABIN
 @@ -146,7 +146,7 @@ GstCaps* QGstCodecsInfo::supportedElementCaps(GstElementFactoryListType elementT
                      if (fakeEncoderMimeTypes.contains(gst_structure_get_name(structure)))
                          continue;
- 
+
 -                    GstStructure *newStructure = gst_structure_new(gst_structure_get_name(structure), NULL);
 +                    GstStructure *newStructure = qt_gst_structure_new_empty(gst_structure_get_name(structure));
- 
+
                      //add structure fields to distinguish between formats with similar mime types,
                      //like audio/mpeg
 @@ -166,7 +166,11 @@ GstCaps* QGstCodecsInfo::supportedElementCaps(GstElementFactoryListType elementT
                          }
                      }
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +                    res =
 +#endif
@@ -475,12 +376,12 @@ index 3baca53..9670d0f 100644
  {
 -
  }
- 
+
  QGstreamerAudioProbeControl::~QGstreamerAudioProbeControl()
  {
 -
  }
- 
+
 -void QGstreamerAudioProbeControl::bufferProbed(GstBuffer* buffer)
 +void QGstreamerAudioProbeControl::probeCaps(GstCaps *caps)
  {
@@ -492,12 +393,12 @@ index 3baca53..9670d0f 100644
 -    gst_caps_unref(caps);
 -    if (!format.isValid())
 -        return;
- 
+
 -    QAudioBuffer audioBuffer = QAudioBuffer(QByteArray((const char*)buffer->data, buffer->size), format);
 +    QMutexLocker locker(&m_bufferMutex);
 +    m_format = format;
 +}
- 
+
 -    {
 -        QMutexLocker locker(&m_bufferMutex);
 -        m_pendingBuffer = audioBuffer;
@@ -531,7 +432,7 @@ index 3baca53..9670d0f 100644
 +
 +    return true;
  }
- 
+
  void QGstreamerAudioProbeControl::bufferProbed()
 @@ -73,6 +89,7 @@ void QGstreamerAudioProbeControl::bufferProbed()
          if (!m_pendingBuffer.isValid())
@@ -736,7 +637,7 @@ index 84eda46..eb1fc36 100644
 +#endif
      gst_object_ref(GST_OBJECT(bus));
  }
- 
+
  QGstreamerBusHelper::~QGstreamerBusHelper()
  {
 +#if GST_CHECK_VERSION(1,0,0)
@@ -746,7 +647,7 @@ index 84eda46..eb1fc36 100644
 +#endif
      gst_object_unref(GST_OBJECT(d->bus()));
  }
- 
+
 diff --git a/src/gsttools/qgstreamermirtexturerenderer.cpp b/src/gsttools/qgstreamermirtexturerenderer.cpp
 new file mode 100644
 index 0000000..39e0db7
@@ -1110,13 +1011,13 @@ index a78a9da..71a402d 100644
 +++ b/src/gsttools/qgstreamervideoprobecontrol.cpp
 @@ -32,7 +32,8 @@
  ****************************************************************************/
- 
+
  #include "qgstreamervideoprobecontrol_p.h"
 -#include <private/qvideosurfacegstsink_p.h>
 +
 +#include "qgstutils_p.h"
  #include <private/qgstvideobuffer_p.h>
- 
+
  QGstreamerVideoProbeControl::QGstreamerVideoProbeControl(QObject *parent)
 @@ -40,12 +41,10 @@ QGstreamerVideoProbeControl::QGstreamerVideoProbeControl(QObject *parent)
      , m_flushing(false)
@@ -1124,17 +1025,17 @@ index a78a9da..71a402d 100644
  {
 -
  }
- 
+
  QGstreamerVideoProbeControl::~QGstreamerVideoProbeControl()
  {
 -
  }
- 
+
  void QGstreamerVideoProbeControl::startFlushing()
 @@ -67,33 +66,49 @@ void QGstreamerVideoProbeControl::stopFlushing()
      m_flushing = false;
  }
- 
+
 -void QGstreamerVideoProbeControl::bufferProbed(GstBuffer* buffer)
 +void QGstreamerVideoProbeControl::probeCaps(GstCaps *caps)
  {
@@ -1147,7 +1048,7 @@ index a78a9da..71a402d 100644
 +#if GST_CHECK_VERSION(1,0,0)
 +    GstVideoInfo videoInfo;
 +    QVideoSurfaceFormat format = QGstUtils::formatForCaps(caps, &videoInfo);
- 
+
 +    QMutexLocker locker(&m_frameMutex);
 +    m_videoInfo = videoInfo;
 +#else
@@ -1170,7 +1071,7 @@ index a78a9da..71a402d 100644
 +
 +    if (m_flushing || !m_format.isValid())
 +        return true;
- 
+
 -    QVideoFrame frame = QVideoFrame(new QGstVideoBuffer(buffer, bytesPerLine),
 -                                    format.frameSize(), format.pixelFormat());
 +    QVideoFrame frame(
@@ -1181,12 +1082,12 @@ index a78a9da..71a402d 100644
 +#endif
 +                m_format.frameSize(),
 +                m_format.pixelFormat());
- 
+
 -    QVideoSurfaceGstSink::setFrameTimeStamps(&frame, buffer);
 +    QGstUtils::setFrameTimeStamps(&frame, buffer);
- 
+
      m_frameProbed = true;
- 
+
 -    {
 -        QMutexLocker locker(&m_frameMutex);
 -        m_pendingFrame = frame;
@@ -1197,7 +1098,7 @@ index a78a9da..71a402d 100644
 +
 +    return true;
  }
- 
+
  void QGstreamerVideoProbeControl::frameProbed()
 @@ -104,6 +119,7 @@ void QGstreamerVideoProbeControl::frameProbed()
          if (!m_pendingFrame.isValid())
@@ -1218,16 +1119,16 @@ index 2b66f76..804dce9 100644
 -
 -#include <QDebug>
 +#include <QtCore/qdebug.h>
- 
+
  #include <gst/gst.h>
- 
+
 diff --git a/src/gsttools/qgstreamervideowidget.cpp b/src/gsttools/qgstreamervideowidget.cpp
 index aa2e2a3..1ae57a0 100644
 --- a/src/gsttools/qgstreamervideowidget.cpp
 +++ b/src/gsttools/qgstreamervideowidget.cpp
 @@ -40,8 +40,13 @@
  #include <QtGui/qpainter.h>
- 
+
  #include <gst/gst.h>
 +
 +#if !GST_CHECK_VERSION(1,0,0)
@@ -1236,22 +1137,22 @@ index aa2e2a3..1ae57a0 100644
 +#else
 +#include <gst/video/videooverlay.h>
 +#endif
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 @@ -130,8 +135,6 @@ void QGstreamerVideoWidgetControl::createVideoWidget()
          m_videoSink = gst_element_factory_make ("ximagesink", NULL);
- 
+
      qt_gst_object_ref_sink(GST_OBJECT (m_videoSink)); //Take ownership
 -
 -
  }
- 
+
  GstElement *QGstreamerVideoWidgetControl::videoSink()
 @@ -169,9 +172,13 @@ bool QGstreamerVideoWidgetControl::processSyncMessage(const QGstreamerMessage &m
  {
      GstMessage* gm = message.rawMessage();
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
      if (gm && (GST_MESSAGE_TYPE(gm) == GST_MESSAGE_ELEMENT) &&
              gst_structure_has_name(gm->structure, "prepare-xwindow-id")) {
@@ -1264,7 +1165,7 @@ index aa2e2a3..1ae57a0 100644
          QMetaObject::invokeMethod(this, "updateNativeVideoSize", Qt::QueuedConnection);
          return true;
 @@ -199,17 +206,24 @@ bool QGstreamerVideoWidgetControl::processBusMessage(const QGstreamerMessage &me
- 
+
  void QGstreamerVideoWidgetControl::setOverlay()
  {
 +#if !GST_CHECK_VERSION(1,0,0)
@@ -1277,7 +1178,7 @@ index aa2e2a3..1ae57a0 100644
 +    }
 +#endif
  }
- 
+
  void QGstreamerVideoWidgetControl::updateNativeVideoSize()
  {
      if (m_videoSink) {
@@ -1288,10 +1189,10 @@ index aa2e2a3..1ae57a0 100644
 +        GstCaps *caps = qt_gst_pad_get_current_caps(pad);
 +
          gst_object_unref(GST_OBJECT(pad));
- 
+
          if (caps) {
 @@ -225,8 +239,13 @@ void QGstreamerVideoWidgetControl::updateNativeVideoSize()
- 
+
  void QGstreamerVideoWidgetControl::windowExposed()
  {
 +#if !GST_CHECK_VERSION(1,0,0)
@@ -1302,7 +1203,7 @@ index aa2e2a3..1ae57a0 100644
 +        gst_video_overlay_expose(GST_VIDEO_OVERLAY(m_videoSink));
 +#endif
  }
- 
+
  QWidget *QGstreamerVideoWidgetControl::videoWidget()
 diff --git a/src/gsttools/qgstreamervideowindow.cpp b/src/gsttools/qgstreamervideowindow.cpp
 index a373dcc..8011349 100644
@@ -1310,7 +1211,7 @@ index a373dcc..8011349 100644
 +++ b/src/gsttools/qgstreamervideowindow.cpp
 @@ -37,36 +37,49 @@
  #include <QtCore/qdebug.h>
- 
+
  #include <gst/gst.h>
 +
 +#if !GST_CHECK_VERSION(1,0,0)
@@ -1319,8 +1220,8 @@ index a373dcc..8011349 100644
 +#else
 +#include <gst/video/videooverlay.h>
 +#endif
- 
- 
+
+
  QGstreamerVideoWindow::QGstreamerVideoWindow(QObject *parent, const char *elementName)
      : QVideoWindowControl(parent)
 +    , QGstreamerBufferProbe(QGstreamerBufferProbe::ProbeCaps)
@@ -1337,10 +1238,10 @@ index a373dcc..8011349 100644
 +    } 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);
 +        GstPad *pad = gst_element_get_static_pad(m_videoSink, "sink");
@@ -1350,7 +1251,7 @@ index a373dcc..8011349 100644
 +    else
 +        qDebug() << "No m_videoSink available!";
  }
- 
+
  QGstreamerVideoWindow::~QGstreamerVideoWindow()
  {
 -    if (m_videoSink)
@@ -1361,11 +1262,11 @@ index a373dcc..8011349 100644
          gst_object_unref(GST_OBJECT(m_videoSink));
 +    }
  }
- 
+
  WId QGstreamerVideoWindow::winId() const
 @@ -82,11 +95,15 @@ void QGstreamerVideoWindow::setWinId(WId id)
      WId oldId = m_windowId;
- 
+
      m_windowId = id;
 -
 +#if GST_CHECK_VERSION(1,0,0)
@@ -1380,7 +1281,7 @@ index a373dcc..8011349 100644
 +#endif
      if (!oldId)
          emit readyChanged(true);
- 
+
 @@ -97,20 +114,26 @@ void QGstreamerVideoWindow::setWinId(WId id)
  bool QGstreamerVideoWindow::processSyncMessage(const QGstreamerMessage &message)
  {
@@ -1392,16 +1293,16 @@ index a373dcc..8011349 100644
 +            m_videoSink && GST_IS_VIDEO_OVERLAY(m_videoSink)) {
 +
 +        gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(m_videoSink), m_windowId);
- 
+
 +        return true;
 +    }
 +#else
      if ((GST_MESSAGE_TYPE(gm) == GST_MESSAGE_ELEMENT) &&
              gst_structure_has_name(gm->structure, "prepare-xwindow-id") &&
              m_videoSink && GST_IS_X_OVERLAY(m_videoSink)) {
- 
+
          gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(m_videoSink), m_windowId);
- 
+
 -        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));
@@ -1412,7 +1313,7 @@ index a373dcc..8011349 100644
 +#endif
      return false;
  }
- 
+
 @@ -122,7 +145,19 @@ QRect QGstreamerVideoWindow::displayRect() const
  void QGstreamerVideoWindow::setDisplayRect(const QRect &rect)
  {
@@ -1440,10 +1341,10 @@ index a373dcc..8011349 100644
      }
 +#endif
  }
- 
+
  Qt::AspectRatioMode QGstreamerVideoWindow::aspectRatioMode() const
 @@ -157,6 +193,16 @@ void QGstreamerVideoWindow::setAspectRatioMode(Qt::AspectRatioMode mode)
- 
+
  void QGstreamerVideoWindow::repaint()
  {
 +#if GST_CHECK_VERSION(1,0,0)
@@ -1465,12 +1366,12 @@ index a373dcc..8011349 100644
      }
 +#endif
  }
- 
+
  QColor QGstreamerVideoWindow::colorKey() const
 @@ -296,32 +343,22 @@ QSize QGstreamerVideoWindow::nativeSize() const
      return m_nativeSize;
  }
- 
+
 -void QGstreamerVideoWindow::padBufferProbe(GstPad *pad, GstBuffer * /* buffer */, gpointer user_data)
 +void QGstreamerVideoWindow::probeCaps(GstCaps *caps)
  {
@@ -1484,7 +1385,7 @@ index a373dcc..8011349 100644
 +                Qt::QueuedConnection,
 +                Q_ARG(QSize, resolution));
  }
- 
+
 -void QGstreamerVideoWindow::updateNativeVideoSize()
 +void QGstreamerVideoWindow::updateNativeVideoSize(const QSize &size)
  {
@@ -1509,10 +1410,10 @@ index a373dcc..8011349 100644
          emit nativeSizeChanged();
 +    }
  }
- 
+
  GstElement *QGstreamerVideoWindow::videoSink()
 diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp
-index 556fc03..65124c9 100644
+index 1281d3f..86d9404 100644
 --- a/src/gsttools/qgstutils.cpp
 +++ b/src/gsttools/qgstutils.cpp
 @@ -40,7 +40,14 @@
@@ -1527,7 +1428,7 @@ index 556fc03..65124c9 100644
 +#include <gst/video/video.h>
 +
 +template<typename T, int N> static int lengthOf(const T (&)[N]) { return N; }
- 
+
  #ifdef USE_V4L
  #  include <private/qcore_unix_p.h>
 @@ -82,15 +89,24 @@ static void addTagToMap(const GstTagList *list,
@@ -1558,7 +1459,7 @@ index 556fc03..65124c9 100644
 @@ -169,6 +185,42 @@ QSize QGstUtils::capsCorrectedResolution(const GstCaps *caps)
      return size;
  }
- 
+
 +
 +#if GST_CHECK_VERSION(1,0,0)
 +namespace {
@@ -1599,7 +1500,7 @@ index 556fc03..65124c9 100644
    Returns audio format for caps.
    If caps doesn't have a valid audio format, an empty QAudioFormat is returned.
 @@ -176,9 +228,26 @@ QSize QGstUtils::capsCorrectedResolution(const GstCaps *caps)
- 
+
  QAudioFormat QGstUtils::audioFormatForCaps(const GstCaps *caps)
  {
 -    const GstStructure *structure = gst_caps_get_structure(caps, 0);
@@ -1624,9 +1525,9 @@ index 556fc03..65124c9 100644
 +    }
 +#else
 +    const GstStructure *structure = gst_caps_get_structure(caps, 0);
- 
+
      if (qstrcmp(gst_structure_get_name(structure), "audio/x-raw-int") == 0) {
- 
+
 @@ -249,16 +318,28 @@ QAudioFormat QGstUtils::audioFormatForCaps(const GstCaps *caps)
      } else {
          return QAudioFormat();
@@ -1635,7 +1536,7 @@ index 556fc03..65124c9 100644
 +#endif
      return format;
  }
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +/*!
 +  Returns audio format for a sample.
@@ -1646,7 +1547,7 @@ index 556fc03..65124c9 100644
 +    GstCaps* caps = gst_sample_get_caps(sample);
 +    if (!caps)
 +        return QAudioFormat();
- 
+
 +    return QGstUtils::audioFormatForCaps(caps);
 +}
 +#else
@@ -1664,13 +1565,13 @@ index 556fc03..65124c9 100644
  }
 -
 +#endif
- 
+
  /*!
    Builds GstCaps for an audio format.
 @@ -277,8 +358,32 @@ QAudioFormat QGstUtils::audioFormatForBuffer(GstBuffer *buffer)
    Caller must unref GstCaps.
  */
- 
+
 -GstCaps *QGstUtils::capsForAudioFormat(QAudioFormat format)
 +GstCaps *QGstUtils::capsForAudioFormat(const QAudioFormat &format)
  {
@@ -1699,20 +1600,20 @@ index 556fc03..65124c9 100644
 +    return 0;
 +#else
      GstStructure *structure = 0;
- 
+
      if (format.isValid()) {
 @@ -313,6 +418,7 @@ GstCaps *QGstUtils::capsForAudioFormat(QAudioFormat format)
      }
- 
+
      return caps;
 +#endif
  }
- 
+
  void QGstUtils::initializeGst()
-@@ -576,10 +682,629 @@ QByteArray QGstUtils::cameraDriver(const QString &device, GstElementFactory *fac
+@@ -578,10 +684,629 @@ QByteArray QGstUtils::cameraDriver(const QString &device, GstElementFactory *fac
      return QByteArray();
  }
- 
+
 +QSet<QString> QGstUtils::supportedMimeTypes(bool (*isValidFactory)(GstElementFactory *factory))
 +{
 +    QSet<QString> supportedMimeTypes;
@@ -2332,7 +2233,7 @@ index 556fc03..65124c9 100644
 +
 +    return gst_caps_make_writable(gst_static_caps_get(&staticCaps));
 +}
- 
+
  void qt_gst_object_ref_sink(gpointer object)
  {
 -#if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 24)
@@ -2340,10 +2241,10 @@ index 556fc03..65124c9 100644
      gst_object_ref_sink(object);
  #else
      g_return_if_fail (GST_IS_OBJECT(object));
-@@ -595,4 +1320,50 @@ void qt_gst_object_ref_sink(gpointer object)
+@@ -597,4 +1322,50 @@ void qt_gst_object_ref_sink(gpointer object)
  #endif
  }
- 
+
 +GstCaps *qt_gst_pad_get_current_caps(GstPad *pad)
 +{
 +#if GST_CHECK_VERSION(1,0,0)
@@ -2396,9 +2297,9 @@ index 18702ec..1ce07ca 100644
 --- a/src/gsttools/qgstvideobuffer.cpp
 +++ b/src/gsttools/qgstvideobuffer.cpp
 @@ -35,21 +35,35 @@
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +QGstVideoBuffer::QGstVideoBuffer(GstBuffer *buffer, const GstVideoInfo &info)
 +    : QAbstractPlanarVideoBuffer(NoHandle)
@@ -2414,7 +2315,7 @@ index 18702ec..1ce07ca 100644
  {
      gst_buffer_ref(m_buffer);
  }
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +QGstVideoBuffer::QGstVideoBuffer(GstBuffer *buffer, const GstVideoInfo &info,
 +                QGstVideoBuffer::HandleType handleType,
@@ -2434,18 +2335,18 @@ index 18702ec..1ce07ca 100644
      , m_handle(handle)
  {
 @@ -58,6 +72,8 @@ QGstVideoBuffer::QGstVideoBuffer(GstBuffer *buffer, int bytesPerLine,
- 
+
  QGstVideoBuffer::~QGstVideoBuffer()
  {
 +    unmap();
 +
      gst_buffer_unref(m_buffer);
  }
- 
+
 @@ -67,12 +83,49 @@ QAbstractVideoBuffer::MapMode QGstVideoBuffer::mapMode() const
      return m_mode;
  }
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +
 +int QGstVideoBuffer::map(MapMode mode, int *numBytes, int bytesPerLine[4], uchar *data[4])
@@ -2492,7 +2393,7 @@ index 18702ec..1ce07ca 100644
 -
          if (bytesPerLine)
              *bytesPerLine = m_bytesPerLine;
- 
+
 @@ -83,8 +136,19 @@ uchar *QGstVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
          return 0;
      }
@@ -2512,7 +2413,7 @@ index 18702ec..1ce07ca 100644
 +#endif
      m_mode = NotMapped;
  }
- 
+
 diff --git a/src/gsttools/qgstvideorendererplugin.cpp b/src/gsttools/qgstvideorendererplugin.cpp
 new file mode 100644
 index 0000000..5eda85a
@@ -3190,16 +3091,16 @@ index f3e2d88..147db66 100644
 @@ -41,8 +41,13 @@
  #include <private/qmediapluginloader_p.h>
  #include "qgstvideobuffer_p.h"
- 
+
 +#include "qgstutils_p.h"
  #include "qvideosurfacegstsink_p.h"
- 
+
 +#if GST_VERSION_MAJOR >=1
 +#include <gst/video/video.h>
 +#endif
 +
  //#define DEBUG_VIDEO_SURFACE_SINK
- 
+
  QT_BEGIN_NAMESPACE
 @@ -62,10 +67,12 @@ QVideoSurfaceGstDelegate::QVideoSurfaceGstDelegate(
      if (m_surface) {
@@ -3217,12 +3118,12 @@ index f3e2d88..147db66 100644
 @@ -191,13 +198,15 @@ GstFlowReturn QVideoSurfaceGstDelegate::render(GstBuffer *buffer)
              m_format.frameSize(),
              m_format.pixelFormat());
- 
+
 -    QVideoSurfaceGstSink::setFrameTimeStamps(&m_frame, buffer);
 +    QGstUtils::setFrameTimeStamps(&m_frame, buffer);
- 
+
      m_renderReturn = GST_FLOW_OK;
- 
+
      if (QThread::currentThread() == thread()) {
          if (!m_surface.isNull())
              m_surface->present(m_frame);
@@ -3234,7 +3135,7 @@ index f3e2d88..147db66 100644
 @@ -283,90 +292,6 @@ void QVideoSurfaceGstDelegate::updateSupportedFormats()
      }
  }
- 
+
 -struct YuvFormat
 -{
 -    QVideoFrame::PixelFormat pixelFormat;
@@ -3320,12 +3221,12 @@ index f3e2d88..147db66 100644
 -}
 -
  static GstVideoSinkClass *sink_parent_class;
- 
+
  #define VO_SINK(s) QVideoSurfaceGstSink *sink(reinterpret_cast<QVideoSurfaceGstSink *>(s))
 @@ -494,8 +419,6 @@ GstCaps *QVideoSurfaceGstSink::get_caps(GstBaseSink *base)
  {
      VO_SINK(base);
- 
+
 -    GstCaps *caps = gst_caps_new_empty();
 -
      // Find the supported pixel formats
@@ -3342,7 +3243,7 @@ index f3e2d88..147db66 100644
 @@ -513,47 +437,7 @@ GstCaps *QVideoSurfaceGstSink::get_caps(GstBaseSink *base)
              supportedFormats.append(format);
      }
- 
+
 -    foreach (QVideoFrame::PixelFormat format, supportedFormats) {
 -        int index = indexOfYuvColor(format);
 -
@@ -3386,20 +3287,20 @@ index f3e2d88..147db66 100644
 -    return caps;
 +    return QGstUtils::capsForFormats(supportedFormats);
  }
- 
+
  gboolean QVideoSurfaceGstSink::set_caps(GstBaseSink *base, GstCaps *caps)
 @@ -575,7 +459,7 @@ gboolean QVideoSurfaceGstSink::set_caps(GstBaseSink *base, GstCaps *caps)
          QAbstractVideoBuffer::HandleType handleType =
                  pool ? pool->handleType() : QAbstractVideoBuffer::NoHandle;
- 
+
 -        QVideoSurfaceFormat format = formatForCaps(caps, &bytesPerLine, handleType);
 +        QVideoSurfaceFormat format = QGstUtils::formatForCaps(caps, &bytesPerLine, handleType);
- 
+
          if (sink->delegate->isActive()) {
              QVideoSurfaceFormat surfaceFormst = sink->delegate->surfaceFormat();
 @@ -592,7 +476,7 @@ gboolean QVideoSurfaceGstSink::set_caps(GstBaseSink *base, GstCaps *caps)
          sink->lastRequestedCaps = 0;
- 
+
  #ifdef DEBUG_VIDEO_SURFACE_SINK
 -        qDebug() << "Staring video surface, format:";
 +        qDebug() << "Starting video surface, format:";
@@ -3409,7 +3310,7 @@ index f3e2d88..147db66 100644
 @@ -606,87 +490,6 @@ gboolean QVideoSurfaceGstSink::set_caps(GstBaseSink *base, GstCaps *caps)
      return FALSE;
  }
- 
+
 -QVideoSurfaceFormat QVideoSurfaceGstSink::formatForCaps(GstCaps *caps, int *bytesPerLine, QAbstractVideoBuffer::HandleType handleType)
 -{
 -    const GstStructure *structure = gst_caps_get_structure(caps, 0);
@@ -3495,32 +3396,32 @@ index f3e2d88..147db66 100644
          GstBaseSink *base, guint64 offset, guint size, GstCaps *caps, GstBuffer **buffer)
  {
 @@ -731,7 +534,7 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc(
- 
+
      if (sink->delegate->isActive()) {
          //if format was changed, restart the surface
 -        QVideoSurfaceFormat format = formatForCaps(intersection);
 +        QVideoSurfaceFormat format = QGstUtils::formatForCaps(intersection);
          QVideoSurfaceFormat surfaceFormat = sink->delegate->surfaceFormat();
- 
+
          if (format.pixelFormat() != surfaceFormat.pixelFormat() ||
 @@ -749,7 +552,7 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc(
          QAbstractVideoBuffer::HandleType handleType =
                  pool ? pool->handleType() : QAbstractVideoBuffer::NoHandle;
- 
+
 -        QVideoSurfaceFormat format = formatForCaps(intersection, &bytesPerLine, handleType);
 +        QVideoSurfaceFormat format = QGstUtils::formatForCaps(intersection, &bytesPerLine, handleType);
- 
+
          if (!sink->delegate->start(format, bytesPerLine)) {
              qWarning() << "failed to start video surface";
 @@ -763,7 +566,7 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc(
      QVideoSurfaceFormat surfaceFormat = sink->delegate->surfaceFormat();
- 
+
      if (!pool->isFormatSupported(surfaceFormat)) {
 -        //qDebug() << "sink doesn't support native pool format, skip custom buffers allocation";
 +        qDebug() << "sink doesn't support native pool format, skip custom buffers allocation";
          return GST_FLOW_OK;
      }
- 
+
 @@ -787,7 +590,6 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc(
  gboolean QVideoSurfaceGstSink::start(GstBaseSink *base)
  {
@@ -3528,22 +3429,22 @@ index f3e2d88..147db66 100644
 -
      return TRUE;
  }
- 
+
 diff --git a/src/multimedia/gsttools_headers/qgstappsrc_p.h b/src/multimedia/gsttools_headers/qgstappsrc_p.h
 index 4af9252..0e0fc0a 100644
 --- a/src/multimedia/gsttools_headers/qgstappsrc_p.h
 +++ b/src/multimedia/gsttools_headers/qgstappsrc_p.h
 @@ -39,7 +39,10 @@
- 
+
  #include <gst/gst.h>
  #include <gst/app/gstappsrc.h>
 +
 +#if GST_VERSION_MAJOR < 1
  #include <gst/app/gstappbuffer.h>
 +#endif
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 diff --git a/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h b/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h
 index 34669b8..571a7ce 100644
 --- a/src/multimedia/gsttools_headers/qgstreameraudioprobecontrol_p.h
@@ -3555,9 +3456,9 @@ index 34669b8..571a7ce 100644
 +#include <qshareddata.h>
 +
 +#include <private/qgstreamerbufferprobe_p.h>
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 -class QGstreamerAudioProbeControl : public QMediaAudioProbeControl
 +class QGstreamerAudioProbeControl
 +    : public QMediaAudioProbeControl
@@ -3568,21 +3469,21 @@ index 34669b8..571a7ce 100644
  public:
      explicit QGstreamerAudioProbeControl(QObject *parent);
      virtual ~QGstreamerAudioProbeControl();
- 
+
 -    void bufferProbed(GstBuffer* buffer);
 +protected:
 +    void probeCaps(GstCaps *caps);
 +    bool probeBuffer(GstBuffer *buffer);
- 
+
  private slots:
      void bufferProbed();
- 
+
  private:
      QAudioBuffer m_pendingBuffer;
 +    QAudioFormat m_format;
      QMutex m_bufferMutex;
  };
- 
+
 diff --git a/src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h b/src/multimedia/gsttools_headers/qgstreamerbufferprobe_p.h
 new file mode 100644
 index 0000000..9240742
@@ -3789,7 +3690,7 @@ index 49064f9..f035f65 100644
 +++ b/src/multimedia/gsttools_headers/qgstreamervideoprobecontrol_p.h
 @@ -35,20 +35,29 @@
  #define QGSTREAMERVIDEOPROBECONTROL_H
- 
+
  #include <gst/gst.h>
 +#include <gst/video/video.h>
  #include <qmediavideoprobecontrol.h>
@@ -3798,9 +3699,9 @@ index 49064f9..f035f65 100644
 +#include <qvideosurfaceformat.h>
 +
 +#include <private/qgstreamerbufferprobe_p.h>
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 -class QGstreamerVideoProbeControl : public QMediaVideoProbeControl
 +class QGstreamerVideoProbeControl
 +    : public QMediaVideoProbeControl
@@ -3811,17 +3712,17 @@ index 49064f9..f035f65 100644
  public:
      explicit QGstreamerVideoProbeControl(QObject *parent);
      virtual ~QGstreamerVideoProbeControl();
- 
+
 -    void bufferProbed(GstBuffer* buffer);
 +    void probeCaps(GstCaps *caps);
 +    bool probeBuffer(GstBuffer *buffer);
 +
      void startFlushing();
      void stopFlushing();
- 
+
 @@ -56,10 +65,16 @@ private slots:
      void frameProbed();
- 
+
  private:
 -    bool m_flushing;
 -    bool m_frameProbed; // true if at least one frame was probed
@@ -3836,22 +3737,22 @@ index 49064f9..f035f65 100644
 +    bool m_flushing;
 +    bool m_frameProbed; // true if at least one frame was probed
  };
- 
+
  QT_END_NAMESPACE
 diff --git a/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h b/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h
 index 81e5764..d38156c 100644
 --- a/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h
 +++ b/src/multimedia/gsttools_headers/qgstreamervideowindow_p.h
 @@ -38,6 +38,7 @@
- 
+
  #include "qgstreamervideorendererinterface_p.h"
  #include <private/qgstreamerbushelper_p.h>
 +#include <private/qgstreamerbufferprobe_p.h>
  #include <QtGui/qcolor.h>
- 
+
  QT_BEGIN_NAMESPACE
 @@ -45,7 +46,8 @@ class QAbstractVideoSurface;
- 
+
  class QGstreamerVideoWindow : public QVideoWindowControl,
          public QGstreamerVideoRendererInterface,
 -        public QGstreamerSyncMessageFilter
@@ -3862,15 +3763,15 @@ index 81e5764..d38156c 100644
      Q_INTERFACES(QGstreamerVideoRendererInterface QGstreamerSyncMessageFilter)
 @@ -101,10 +103,10 @@ signals:
      void readyChanged(bool);
- 
+
  private slots:
 -    void updateNativeVideoSize();
 +    void updateNativeVideoSize(const QSize &size);
- 
+
  private:
 -    static void padBufferProbe(GstPad *pad, GstBuffer *buffer, gpointer user_data);
 +    void probeCaps(GstCaps *caps);
- 
+
      GstElement *m_videoSink;
      WId m_windowId;
 @@ -113,7 +115,6 @@ private:
@@ -3879,7 +3780,7 @@ index 81e5764..d38156c 100644
      mutable QColor m_colorKey;
 -    int m_bufferProbeId;
  };
- 
+
  QT_END_NAMESPACE
 diff --git a/src/multimedia/gsttools_headers/qgstutils_p.h b/src/multimedia/gsttools_headers/qgstutils_p.h
 index 65ff759..71a0a57 100644
@@ -3907,15 +3808,15 @@ index 65ff759..71a0a57 100644
 +# define QT_GSTREAMER_COLORCONVERSION_ELEMENT_NAME "ffmpegcolorspace"
 +# define QT_GSTREAMER_RAW_AUDIO_MIME "audio/x-raw-int"
 +#endif
- 
+
  QT_BEGIN_NAMESPACE
- 
+
  class QSize;
  class QVariant;
  class QByteArray;
 +class QImage;
 +class QVideoSurfaceFormat;
- 
+
  namespace QGstUtils {
      struct CameraInfo
 @@ -73,8 +91,12 @@ namespace QGstUtils {
@@ -3962,7 +3863,7 @@ index 65ff759..71a0a57 100644
 +    GstCaps *videoFilterCaps();
 +
  }
- 
+
  void qt_gst_object_ref_sink(gpointer object);
 +GstCaps *qt_gst_pad_get_current_caps(GstPad *pad);
 +GstStructure *qt_gst_structure_new_empty(const char *name);
@@ -3970,21 +3871,21 @@ index 65ff759..71a0a57 100644
 +gboolean qt_gst_element_query_duration(GstElement *element, GstFormat format, gint64 *cur);
 +
 +QDebug operator <<(QDebug debug, GstCaps *caps);
- 
+
  QT_END_NAMESPACE
- 
+
 diff --git a/src/multimedia/gsttools_headers/qgstvideobuffer_p.h b/src/multimedia/gsttools_headers/qgstvideobuffer_p.h
 index 1e0fda8..00aca48 100644
 --- a/src/multimedia/gsttools_headers/qgstvideobuffer_p.h
 +++ b/src/multimedia/gsttools_headers/qgstvideobuffer_p.h
 @@ -49,26 +49,47 @@
  #include <QtCore/qvariant.h>
- 
+
  #include <gst/gst.h>
 +#include <gst/video/video.h>
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +class QGstVideoBuffer : public QAbstractPlanarVideoBuffer
 +{
@@ -4002,9 +3903,9 @@ index 1e0fda8..00aca48 100644
 +#endif
 +
      ~QGstVideoBuffer();
- 
+
      MapMode mapMode() const;
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +    int map(MapMode mode, int *numBytes, int bytesPerLine[4], uchar *data[4]);
 +#else
@@ -4012,7 +3913,7 @@ index 1e0fda8..00aca48 100644
 +#endif
 +
      void unmap();
- 
+
      QVariant handle() const { return m_handle; }
  private:
 -    GstBuffer *m_buffer;
@@ -4339,7 +4240,7 @@ index 11b305d..0ea18c0 100644
 @@ -45,6 +45,18 @@
  // We mean it.
  //
- 
+
 +#include <gst/gst.h>
 +
 +#if GST_CHECK_VERSION(1,0,0)
@@ -4353,30 +4254,30 @@ index 11b305d..0ea18c0 100644
 +#else
 +
  #include <gst/video/gstvideosink.h>
- 
+
  #include <QtCore/qlist.h>
 @@ -116,10 +128,6 @@ public:
      GstVideoSink parent;
- 
+
      static QVideoSurfaceGstSink *createSink(QAbstractVideoSurface *surface);
 -    static QVideoSurfaceFormat formatForCaps(GstCaps *caps,
 -                                             int *bytesPerLine = 0,
 -                                             QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle);
 -    static void setFrameTimeStamps(QVideoFrame *frame, GstBuffer *buffer);
- 
+
  private:
      static GType get_type();
 @@ -150,7 +158,6 @@ private:
      QVideoSurfaceFormat *lastSurfaceFormat;
  };
- 
+
 -
  class QVideoSurfaceGstSinkClass
  {
  public:
 @@ -160,3 +167,5 @@ public:
  QT_END_NAMESPACE
- 
+
  #endif
 +
 +#endif
@@ -4392,7 +4293,7 @@ index b3bdaa8..ff47768 100644
 +    video/gstvideorenderer \
      video/videonode \
      playlistformats
- 
+
 diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.cpp b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.cpp
 index 3098aab..befbb9a 100644
 --- a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecoderserviceplugin.cpp
@@ -4400,7 +4301,7 @@ index 3098aab..befbb9a 100644
 @@ -68,89 +68,16 @@ QMultimedia::SupportEstimate QGstreamerAudioDecoderServicePlugin::hasSupport(con
      return QGstUtils::hasSupport(mimeType, codecs, m_supportedMimeTypeSet);
  }
- 
+
 -void QGstreamerAudioDecoderServicePlugin::updateSupportedMimeTypes() const
 +static bool isDecoderOrDemuxer(GstElementFactory *factory)
  {
@@ -4480,7 +4381,7 @@ index 3098aab..befbb9a 100644
 +                || gst_element_factory_list_is_type(factory, GST_ELEMENT_FACTORY_TYPE_DECODER
 +                            | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO);
 +}
- 
+
 -#if defined QT_SUPPORTEDMIMETYPES_DEBUG
 -    QStringList list = m_supportedMimeTypeSet.toList();
 -    list.sort();
@@ -4493,7 +4394,7 @@ index 3098aab..befbb9a 100644
 +{
 +    m_supportedMimeTypeSet = QGstUtils::supportedMimeTypes(isDecoderOrDemuxer);
  }
- 
+
  QStringList QGstreamerAudioDecoderServicePlugin::supportedMimeTypes() const
 diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp
 index f944a60..69876b9 100644
@@ -4505,13 +4406,13 @@ index f944a60..69876b9 100644
      // Create pipeline here
 -    m_playbin = gst_element_factory_make("playbin2", NULL);
 +    m_playbin = gst_element_factory_make(QT_GSTREAMER_PLAYBIN_ELEMENT_NAME, NULL);
- 
+
      if (m_playbin != 0) {
          // Sort out messages
 @@ -446,21 +446,40 @@ QAudioBuffer QGstreamerAudioDecoderSession::read()
          if (buffersAvailable == 1)
              emit bufferAvailableChanged(false);
- 
+
 +        const char* bufferData = 0;
 +        int bufferSize = 0;
 +
@@ -4549,19 +4450,19 @@ index f944a60..69876b9 100644
          gst_buffer_unref(buffer);
 +#endif
      }
- 
+
      return audioBuffer;
 @@ -488,7 +507,7 @@ void QGstreamerAudioDecoderSession::processInvalidMedia(QAudioDecoder::Error err
      emit error(int(errorCode), errorString);
  }
- 
+
 -GstFlowReturn QGstreamerAudioDecoderSession::new_buffer(GstAppSink *, gpointer user_data)
 +GstFlowReturn QGstreamerAudioDecoderSession::new_sample(GstAppSink *, gpointer user_data)
  {
      // "Note that the preroll buffer will also be returned as the first buffer when calling gst_app_sink_pull_buffer()."
      QGstreamerAudioDecoderSession *session = reinterpret_cast<QGstreamerAudioDecoderSession*>(user_data);
 @@ -531,7 +550,11 @@ void QGstreamerAudioDecoderSession::addAppSink()
- 
+
      GstAppSinkCallbacks callbacks;
      memset(&callbacks, 0, sizeof(callbacks));
 -    callbacks.new_buffer = &new_buffer;
@@ -4574,17 +4475,17 @@ index f944a60..69876b9 100644
      gst_app_sink_set_max_buffers(m_appSink, MAX_BUFFERS_IN_QUEUE);
      gst_base_sink_set_sync(GST_BASE_SINK(m_appSink), FALSE);
 @@ -553,11 +576,10 @@ void QGstreamerAudioDecoderSession::removeAppSink()
- 
+
  void QGstreamerAudioDecoderSession::updateDuration()
  {
 -    GstFormat format = GST_FORMAT_TIME;
      gint64 gstDuration = 0;
      int duration = -1;
- 
+
 -    if (m_playbin && gst_element_query_duration(m_playbin, &format, &gstDuration))
 +    if (m_playbin && qt_gst_element_query_duration(m_playbin, GST_FORMAT_TIME, &gstDuration))
          duration = gstDuration / 1000000;
- 
+
      if (m_duration != duration) {
 diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.h b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.h
 index 0912196..068221c 100644
@@ -4593,10 +4494,10 @@ index 0912196..068221c 100644
 @@ -92,7 +92,7 @@ public:
      qint64 position() const;
      qint64 duration() const;
- 
+
 -    static GstFlowReturn new_buffer(GstAppSink *sink, gpointer user_data);
 +    static GstFlowReturn new_sample(GstAppSink *sink, gpointer user_data);
- 
+
  signals:
      void stateChanged(QAudioDecoder::State newState);
 diff --git a/src/plugins/gstreamer/camerabin/camerabin.pro b/src/plugins/gstreamer/camerabin/camerabin.pro
@@ -4606,19 +4507,19 @@ index bba797f..64fee3e 100644
 @@ -79,7 +79,7 @@ config_gstreamer_photography {
          $$PWD/camerabinlocks.cpp \
          $$PWD/camerabinzoom.cpp
- 
+
 -    LIBS += -lgstphotography-0.10
 +    LIBS += -lgstphotography-$$GST_VERSION
      DEFINES += GST_USE_UNSTABLE_API #prevents warnings because of unstable photography API
  }
- 
+
 diff --git a/src/plugins/gstreamer/camerabin/camerabincontainer.cpp b/src/plugins/gstreamer/camerabin/camerabincontainer.cpp
 index ebb914b..9531f01 100644
 --- a/src/plugins/gstreamer/camerabin/camerabincontainer.cpp
 +++ b/src/plugins/gstreamer/camerabin/camerabincontainer.cpp
 @@ -96,7 +96,7 @@ GstEncodingContainerProfile *CameraBinContainer::createProfile()
      GstCaps *caps;
- 
+
      if (m_actualFormat.isEmpty()) {
 -        caps = gst_caps_new_any();
 +        return 0;
@@ -4642,7 +4543,7 @@ index 3ec9927..8c6b8b0 100644
          emit captureModeChanged(mode);
      }
 @@ -299,6 +294,8 @@ bool CameraBinControl::canChangeProperty(PropertyChangeType changeType, QCamera:
- 
+
      switch (changeType) {
      case QCameraControl::CaptureMode:
 +        return status != QCamera::ActiveStatus;
@@ -4655,15 +4556,15 @@ index a235de2..795fd42 100644
 --- a/src/plugins/gstreamer/camerabin/camerabinexposure.cpp
 +++ b/src/plugins/gstreamer/camerabin/camerabinexposure.cpp
 @@ -37,6 +37,10 @@
- 
+
  #include <QDebug>
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
 +typedef GstSceneMode GstPhotographySceneMode;
 +#endif
 +
  QT_BEGIN_NAMESPACE
- 
+
  CameraBinExposure::CameraBinExposure(CameraBinSession *session)
 @@ -119,7 +123,7 @@ QVariant CameraBinExposure::actualValue(ExposureParameter parameter) const
      }
@@ -4672,7 +4573,7 @@ index a235de2..795fd42 100644
 -        GstSceneMode sceneMode;
 +        GstPhotographySceneMode sceneMode;
          gst_photography_get_scene_mode(m_session->photography(), &sceneMode);
- 
+
          switch (sceneMode) {
 @@ -167,7 +171,7 @@ bool CameraBinExposure::setValue(ExposureParameter parameter, const QVariant& va
      case QCameraExposureControl::ExposureMode:
@@ -4681,40 +4582,40 @@ index a235de2..795fd42 100644
 -        GstSceneMode sceneMode;
 +        GstPhotographySceneMode sceneMode;
          gst_photography_get_scene_mode(m_session->photography(), &sceneMode);
- 
+
          switch (mode) {
 diff --git a/src/plugins/gstreamer/camerabin/camerabinflash.cpp b/src/plugins/gstreamer/camerabin/camerabinflash.cpp
 index 2140f66..51bb9a2 100644
 --- a/src/plugins/gstreamer/camerabin/camerabinflash.cpp
 +++ b/src/plugins/gstreamer/camerabin/camerabinflash.cpp
 @@ -37,6 +37,10 @@
- 
+
  #include <QDebug>
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
 +typedef GstFlashMode GstPhotographyFlashMode;
 +#endif
 +
  QT_BEGIN_NAMESPACE
- 
+
  CameraBinFlash::CameraBinFlash(CameraBinSession *session)
 @@ -51,7 +55,7 @@ CameraBinFlash::~CameraBinFlash()
- 
+
  QCameraExposure::FlashModes CameraBinFlash::flashMode() const
  {
 -    GstFlashMode flashMode;
 +    GstPhotographyFlashMode flashMode;
      gst_photography_get_flash_mode(m_session->photography(), &flashMode);
- 
+
      QCameraExposure::FlashModes modes;
 @@ -70,7 +74,7 @@ QCameraExposure::FlashModes CameraBinFlash::flashMode() const
- 
+
  void CameraBinFlash::setFlashMode(QCameraExposure::FlashModes mode)
  {
 -    GstFlashMode flashMode;
 +    GstPhotographyFlashMode flashMode;
      gst_photography_get_flash_mode(m_session->photography(), &flashMode);
- 
+
      if (mode.testFlag(QCameraExposure::FlashAuto)) flashMode = GST_PHOTOGRAPHY_FLASH_MODE_AUTO;
 diff --git a/src/plugins/gstreamer/camerabin/camerabinfocus.cpp b/src/plugins/gstreamer/camerabin/camerabinfocus.cpp
 index 665e204..061c680 100644
@@ -4723,7 +4624,7 @@ index 665e204..061c680 100644
 @@ -39,6 +39,12 @@
  #include <QDebug>
  #include <QtCore/qmetaobject.h>
- 
+
 +#include <private/qgstutils_p.h>
 +
 +#if !GST_CHECK_VERSION(1,0,0)
@@ -4731,15 +4632,15 @@ index 665e204..061c680 100644
 +#endif
 +
  //#define CAMERABIN_DEBUG 1
- 
+
  QT_BEGIN_NAMESPACE
 @@ -73,7 +79,7 @@ QCameraFocus::FocusModes CameraBinFocus::focusMode() const
- 
+
  void CameraBinFocus::setFocusMode(QCameraFocus::FocusModes mode)
  {
 -    GstFocusMode photographyMode;
 +    GstPhotographyFocusMode photographyMode;
- 
+
      switch (mode) {
      case QCameraFocus::AutoFocus:
 @@ -181,9 +187,10 @@ QCameraFocusZoneList CameraBinFocus::focusZones() const
@@ -4754,7 +4655,7 @@ index 665e204..061c680 100644
 +        gst_structure_get_int (structure, "status", &status);
          QCamera::LockStatus focusStatus = m_focusStatus;
          QCamera::LockChangeReason reason = QCamera::UserRequest;
- 
+
 @@ -243,7 +250,7 @@ void CameraBinFocus::_q_handleCameraStateChange(QCamera::State state)
      m_cameraState = state;
      if (state == QCamera::ActiveState) {
@@ -4769,7 +4670,7 @@ index 6952155..8b51306 100644
 --- a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
 +++ b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
 @@ -53,11 +53,13 @@ QT_BEGIN_NAMESPACE
- 
+
  CameraBinImageCapture::CameraBinImageCapture(CameraBinSession *session)
      :QCameraImageCaptureControl(session)
 +    , m_encoderProbe(this)
@@ -4787,7 +4688,7 @@ index 6952155..8b51306 100644
 @@ -108,11 +110,18 @@ void CameraBinImageCapture::updateState()
      }
  }
- 
+
 -gboolean CameraBinImageCapture::metadataEventProbe(GstPad *pad, GstEvent *event, CameraBinImageCapture *self)
 +#if GST_CHECK_VERSION(1,0,0)
 +GstPadProbeReturn CameraBinImageCapture::encoderEventProbe(
@@ -4817,7 +4718,7 @@ index 6952155..8b51306 100644
 +    return TRUE;
 +#endif
 +}
- 
+
 -    return true;
 +void CameraBinImageCapture::EncoderProbe::probeCaps(GstCaps *caps)
 +{
@@ -4830,22 +4731,22 @@ index 6952155..8b51306 100644
 +    capture->m_bufferFormat = format;
 +#endif
  }
- 
+
 -gboolean CameraBinImageCapture::uncompressedBufferProbe(GstPad *pad, GstBuffer *buffer, CameraBinImageCapture *self)
 +bool CameraBinImageCapture::EncoderProbe::probeBuffer(GstBuffer *buffer)
  {
 -    Q_UNUSED(pad);
 -    CameraBinSession *session = self->m_session;
 +    CameraBinSession * const session = capture->m_session;
- 
+
  #ifdef DEBUG_CAPTURE
 -    qDebug() << "Uncompressed buffer probe" << gst_caps_to_string(GST_BUFFER_CAPS(buffer));
 +    qDebug() << "Uncompressed buffer probe";
  #endif
- 
+
      QCameraImageCapture::CaptureDestinations destination =
 @@ -165,21 +188,23 @@ gboolean CameraBinImageCapture::uncompressedBufferProbe(GstPad *pad, GstBuffer *
- 
+
      if (destination & QCameraImageCapture::CaptureToBuffer) {
          if (format != QVideoFrame::Format_Jpeg) {
 -            GstCaps *caps = GST_BUFFER_CAPS(buffer);
@@ -4860,7 +4761,7 @@ index 6952155..8b51306 100644
 +#else
 +            QGstVideoBuffer *videoBuffer = new QGstVideoBuffer(buffer, capture->m_bytesPerLine);
 +#endif
- 
+
 -            QVideoFrame frame(videoBuffer,
 -                              format.frameSize(),
 -                              format.pixelFormat());
@@ -4868,7 +4769,7 @@ index 6952155..8b51306 100644
 +                        videoBuffer,
 +                        capture->m_bufferFormat.frameSize(),
 +                        capture->m_bufferFormat.pixelFormat());
- 
+
 -            QMetaObject::invokeMethod(self, "imageAvailable",
 +            QMetaObject::invokeMethod(capture, "imageAvailable",
                                        Qt::QueuedConnection,
@@ -4880,7 +4781,7 @@ index 6952155..8b51306 100644
 @@ -192,25 +217,40 @@ gboolean CameraBinImageCapture::uncompressedBufferProbe(GstPad *pad, GstBuffer *
      return keepBuffer;
  }
- 
+
 -gboolean CameraBinImageCapture::jpegBufferProbe(GstPad *pad, GstBuffer *buffer, CameraBinImageCapture *self)
 +void CameraBinImageCapture::MuxerProbe::probeCaps(GstCaps *caps)
  {
@@ -4888,22 +4789,22 @@ index 6952155..8b51306 100644
 -    CameraBinSession *session = self->m_session;
 +    capture->m_jpegResolution = QGstUtils::capsCorrectedResolution(caps);
 +}
- 
+
 -#ifdef DEBUG_CAPTURE
 -    qDebug() << "Jpeg buffer probe" << gst_caps_to_string(GST_BUFFER_CAPS(buffer));
 -#endif
 +bool CameraBinImageCapture::MuxerProbe::probeBuffer(GstBuffer *buffer)
 +{
 +    CameraBinSession * const session = capture->m_session;
- 
+
      QCameraImageCapture::CaptureDestinations destination =
              session->captureDestinationControl()->captureDestination();
- 
+
      if ((destination & QCameraImageCapture::CaptureToBuffer) &&
           session->captureBufferFormatControl()->bufferFormat() == QVideoFrame::Format_Jpeg) {
 -        QGstVideoBuffer *videoBuffer = new QGstVideoBuffer(buffer,
 -                                                           -1); //bytesPerLine is not available for jpegs
- 
+
 -        QSize resolution = QGstUtils::capsCorrectedResolution(GST_BUFFER_CAPS(buffer));
 +        QSize resolution = capture->m_jpegResolution;
          //if resolution is not presented in caps, try to find it from encoded jpeg data:
@@ -4930,7 +4831,7 @@ index 6952155..8b51306 100644
 @@ -218,20 +258,28 @@ gboolean CameraBinImageCapture::jpegBufferProbe(GstPad *pad, GstBuffer *buffer,
              resolution = reader.size();
          }
- 
+
 +        QGstVideoBuffer *videoBuffer = new QGstVideoBuffer(buffer,
 +                                                           -1); //bytesPerLine is not available for jpegs
 +#endif
@@ -4947,7 +4848,7 @@ index 6952155..8b51306 100644
 +                                  Q_ARG(int, capture->m_requestId),
                                    Q_ARG(QVideoFrame, frame));
      }
- 
+
 -    //drop the buffer if capture to file was disabled
 -    return destination & QCameraImageCapture::CaptureToFile;
 +
@@ -4956,14 +4857,14 @@ index 6952155..8b51306 100644
 +    // to its idle state.
 +    return true;
  }
- 
+
 +
  bool CameraBinImageCapture::processBusMessage(const QGstreamerMessage &message)
  {
      //Install metadata event and buffer probes
 @@ -252,9 +300,10 @@ bool CameraBinImageCapture::processBusMessage(const QGstreamerMessage &message)
                  return false;
- 
+
              QString elementName = QString::fromLatin1(gst_element_get_name(element));
 +#if !GST_CHECK_VERSION(1,0,0)
              GstElementClass *elementClass = GST_ELEMENT_GET_CLASS(element);
@@ -4994,7 +4895,7 @@ index 6952155..8b51306 100644
 -                                         G_CALLBACK(CameraBinImageCapture::uncompressedBufferProbe),
 -                                         this);
 +                m_encoderProbe.addProbeToPad(sinkpad, true);
- 
+
                  gst_object_unref(sinkpad);
 -            } else if ((elementName.contains("jifmux") ||
 -                        elementName.startsWith("metadatamux") ||
@@ -5026,7 +4927,7 @@ index c2e26f5..9a52dd9 100644
 @@ -38,6 +38,14 @@
  #include <qcameraimagecapturecontrol.h>
  #include "camerabinsession.h"
- 
+
 +#include <qvideosurfaceformat.h>
 +
 +#include <private/qgstreamerbufferprobe_p.h>
@@ -5036,11 +4937,11 @@ index c2e26f5..9a52dd9 100644
 +#endif
 +
  QT_BEGIN_NAMESPACE
- 
+
  class CameraBinImageCapture : public QCameraImageCaptureControl, public QGstreamerBusMessageFilter
 @@ -61,15 +69,47 @@ private slots:
      void updateState();
- 
+
  private:
 -    static gboolean metadataEventProbe(GstPad *pad, GstEvent *event, CameraBinImageCapture *);
 -    static gboolean uncompressedBufferProbe(GstPad *pad, GstBuffer *buffer, CameraBinImageCapture *);
@@ -5068,7 +4969,7 @@ index c2e26f5..9a52dd9 100644
 +        MuxerProbe(CameraBinImageCapture *capture) : capture(capture) {}
 +        void probeCaps(GstCaps *caps);
 +        bool probeBuffer(GstBuffer *buffer);
- 
+
 +    private:
 +        CameraBinImageCapture * const capture;
 +
@@ -5089,20 +4990,20 @@ index c2e26f5..9a52dd9 100644
 +    int m_requestId;
 +    bool m_ready;
  };
- 
+
  QT_END_NAMESPACE
 diff --git a/src/plugins/gstreamer/camerabin/camerabinimageencoder.cpp b/src/plugins/gstreamer/camerabin/camerabinimageencoder.cpp
 index 824f996..739364f 100644
 --- a/src/plugins/gstreamer/camerabin/camerabinimageencoder.cpp
 +++ b/src/plugins/gstreamer/camerabin/camerabinimageencoder.cpp
 @@ -49,7 +49,6 @@ CameraBinImageEncoder::~CameraBinImageEncoder()
- 
+
  QList<QSize> CameraBinImageEncoder::supportedResolutions(const QImageEncoderSettings &, bool *continuous) const
  {
 -    qDebug() << "CameraBinImageEncoder::supportedResolutions()";
      if (continuous)
          *continuous = false;
- 
+
 diff --git a/src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp b/src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp
 index ebfb087..811225f 100644
 --- a/src/plugins/gstreamer/camerabin/camerabinimageprocessing.cpp
@@ -5110,16 +5011,16 @@ index ebfb087..811225f 100644
 @@ -34,7 +34,11 @@
  #include "camerabinimageprocessing.h"
  #include "camerabinsession.h"
- 
+
 -#include <gst/interfaces/colorbalance.h>
 +#if GST_CHECK_VERSION(1,0,0)
 +# include <gst/video/colorbalance.h>
 +#else
 +# include <gst/interfaces/colorbalance.h>
 +#endif
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 @@ -126,7 +130,7 @@ bool CameraBinImageProcessing::setColorBalanceValue(const QString& channel, qrea
  QCameraImageProcessing::WhiteBalanceMode CameraBinImageProcessing::whiteBalanceMode() const
  {
@@ -5135,7 +5036,7 @@ index dcefcd0..2c6347f 100644
 +++ b/src/plugins/gstreamer/camerabin/camerabinimageprocessing.h
 @@ -41,7 +41,10 @@
  #include <glib.h>
- 
+
  #ifdef HAVE_GST_PHOTOGRAPHY
 -#include <gst/interfaces/photography.h>
 +# include <gst/interfaces/photography.h>
@@ -5143,7 +5044,7 @@ index dcefcd0..2c6347f 100644
 +typedef GstWhiteBalanceMode GstPhotographyWhiteBalanceMode;
 +# endif
  #endif
- 
+
  QT_BEGIN_NAMESPACE
 @@ -73,7 +76,7 @@ private:
      CameraBinSession *m_session;
@@ -5153,7 +5054,7 @@ index dcefcd0..2c6347f 100644
 +    QMap<GstPhotographyWhiteBalanceMode, QCameraImageProcessing::WhiteBalanceMode> m_mappedWbValues;
  #endif
  };
- 
+
 diff --git a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
 index 5148135..bc1b260 100644
 --- a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp
@@ -5193,16 +5094,16 @@ index 3a04c2f..801c7ab 100644
 +                ? QMediaRecorder::LoadingStatus
 +                : QMediaRecorder::UnloadedStatus;
      }
- 
+
      if (m_state != oldState)
 @@ -161,8 +162,6 @@ void CameraBinRecorder::applySettings()
- 
+
                  QVideoEncoderSettings videoSettings = videoEncoderControl->videoSettings();
                  videoSettings.setCodec(candidate[1]);
 -                if (videoSettings.resolution().isEmpty())
 -                    videoSettings.setResolution(640, 480);
                  videoEncoderControl->setActualVideoSettings(videoSettings);
- 
+
                  QAudioEncoderSettings audioSettings = audioEncoderControl->audioSettings();
 diff --git a/src/plugins/gstreamer/camerabin/camerabinservice.cpp b/src/plugins/gstreamer/camerabin/camerabinservice.cpp
 index 969955f..388f2fd 100644
@@ -5213,10 +5114,10 @@ index 969955f..388f2fd 100644
  #include "camerabinviewfindersettings.h"
  #include <private/qgstreamerbushelper_p.h>
 +#include <private/qgstutils_p.h>
- 
+
  #include <private/qgstreameraudioinputselector_p.h>
  #include <private/qgstreamervideoinputdevicecontrol_p.h>
- 
+
 -
  #if defined(HAVE_WIDGETS)
  #include <private/qgstreamervideowidget_p.h>
@@ -5232,14 +5133,14 @@ index 969955f..388f2fd 100644
 @@ -150,8 +149,6 @@ QMediaControl *CameraBinService::requestControl(const char *name)
      if (!m_captureSession)
          return 0;
- 
+
 -    //qDebug() << "Request control" << name;
 -
      if (!m_videoOutput) {
          if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
              m_videoOutput = m_videoRenderer;
 @@ -249,7 +246,7 @@ void CameraBinService::releaseControl(QMediaControl *control)
- 
+
  bool CameraBinService::isCameraBinAvailable()
  {
 -    GstElementFactory *factory = gst_element_factory_find("camerabin2");
@@ -5248,7 +5149,7 @@ index 969955f..388f2fd 100644
          gst_object_unref(GST_OBJECT(factory));
          return true;
 diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
-index a4038c5..f916b58 100644
+index 1ed663b..b62fbbf 100644
 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
 +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
 @@ -140,8 +140,8 @@ CameraBinSession::CameraBinSession(GstElementFactory *sourceFactory, QObject *pa
@@ -5256,7 +5157,7 @@ index a4038c5..f916b58 100644
      if (m_sourceFactory)
          gst_object_ref(GST_OBJECT(m_sourceFactory));
 +    m_camerabin = gst_element_factory_make(QT_GSTREAMER_CAMERABIN_ELEMENT_NAME, "camerabin");
- 
+
 -    m_camerabin = gst_element_factory_make("camerabin2", "camerabin2");
      g_signal_connect(G_OBJECT(m_camerabin), "notify::idle", G_CALLBACK(updateBusyStatus), this);
      g_signal_connect(G_OBJECT(m_camerabin), "element-added",  G_CALLBACK(elementAdded), this);
@@ -5264,7 +5165,7 @@ index a4038c5..f916b58 100644
 @@ -178,7 +178,15 @@ CameraBinSession::CameraBinSession(GstElementFactory *sourceFactory, QObject *pa
      //post image preview in RGB format
      g_object_set(G_OBJECT(m_camerabin), POST_PREVIEWS_PROPERTY, TRUE, NULL);
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +    GstCaps *previewCaps = gst_caps_new_simple(
 +                "video/x-raw",
@@ -5288,14 +5189,14 @@ index a4038c5..f916b58 100644
 @@ -251,61 +260,27 @@ bool CameraBinSession::setupCameraBin()
      return true;
  }
- 
+
 -static GstCaps *resolutionToCaps(const QSize &resolution, const QPair<int, int> &rate = qMakePair<int,int>(0,0))
 +static GstCaps *resolutionToCaps(const QSize &resolution, qreal frameRate = 0.0)
  {
 -    if (resolution.isEmpty())
 -        return gst_caps_new_any();
 +    GstCaps *caps = QGstUtils::videoFilterCaps();
- 
+
 -    GstCaps *caps = 0;
 -    if (rate.second > 0) {
 -        caps = gst_caps_new_full(gst_structure_new("video/x-raw-yuv",
@@ -5364,13 +5265,14 @@ index a4038c5..f916b58 100644
 +                    "framerate", GST_TYPE_FRACTION, numerator, denominator,
 +                    NULL);
      }
- 
+
      return caps;
-@@ -314,40 +289,40 @@ static GstCaps *resolutionToCaps(const QSize &resolution, const QPair<int, int>
+@@ -314,28 +289,29 @@ static GstCaps *resolutionToCaps(const QSize &resolution, const QPair<int, int>
  void CameraBinSession::setupCaptureResolution()
  {
      QSize resolution = m_imageEncodeControl->imageSettings().resolution();
 -    if (!resolution.isEmpty()) {
++    if (!resolution.isEmpty())
 +    {
          GstCaps *caps = resolutionToCaps(resolution);
  #if CAMERABIN_DEBUG
@@ -5384,7 +5286,7 @@ index a4038c5..f916b58 100644
 +        if (caps)
 +            gst_caps_unref(caps);
      }
- 
+
 +    const QSize viewfinderResolution = m_viewfinderSettingsControl->resolution();
      resolution = m_videoEncodeControl->actualVideoSettings().resolution();
 -    //qreal framerate = m_videoEncodeControl->videoSettings().frameRate();
@@ -5405,7 +5307,12 @@ index a4038c5..f916b58 100644
 +        if (caps)
 +            gst_caps_unref(caps);
      }
- 
+
+     GstElement *mfw_v4lsrc = 0;
+@@ -349,15 +325,14 @@ void CameraBinSession::setupCaptureResolution()
+         }
+     }
+
 -    resolution = m_viewfinderSettingsControl->resolution();
 -    if (!resolution.isEmpty()) {
 +    if (!viewfinderResolution.isEmpty())
@@ -5418,17 +5325,25 @@ index a4038c5..f916b58 100644
  #endif
          g_object_set(m_camerabin, VIEWFINDER_CAPS_PROPERTY, caps, NULL);
 -        gst_caps_unref(caps);
+-
+         if (mfw_v4lsrc) {
+             int capMode = 0;
+             if (resolution == QSize(320, 240))
+@@ -372,8 +347,8 @@ void CameraBinSession::setupCaptureResolution()
+                 capMode = 5;
+             g_object_set(G_OBJECT(mfw_v4lsrc), "capture-mode", capMode, NULL);
+         }
 -    } else {
 -        g_object_set(m_camerabin, VIEWFINDER_CAPS_PROPERTY, NULL, NULL);
-+        if (caps)
-+            gst_caps_unref(caps);
++       if (caps)
++           gst_caps_unref(caps);
      }
- 
-     if (m_videoEncoder)
-@@ -363,13 +338,17 @@ void CameraBinSession::setAudioCaptureCaps()
+
+     const qreal maxFps = m_viewfinderSettingsControl->maximumFrameRate();
+@@ -399,13 +374,17 @@ void CameraBinSession::setAudioCaptureCaps()
      if (sampleRate == -1 && channelCount == -1)
          return;
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +    GstStructure *structure = gst_structure_new_empty(QT_GSTREAMER_RAW_AUDIO_MIME);
 +#else
@@ -5444,7 +5359,7 @@ index a4038c5..f916b58 100644
      if (sampleRate != -1)
          gst_structure_set(structure, "rate", G_TYPE_INT, sampleRate, NULL);
      if (channelCount != -1)
-@@ -760,7 +739,7 @@ qint64 CameraBinSession::duration() const
+@@ -796,7 +775,7 @@ qint64 CameraBinSession::duration() const
          if (fileSink) {
              GstFormat format = GST_FORMAT_TIME;
              gint64 duration = 0;
@@ -5453,10 +5368,10 @@ index a4038c5..f916b58 100644
              gst_object_unref(GST_OBJECT(fileSink));
              if (ret)
                  return duration / 1000000;
-@@ -795,129 +774,57 @@ void CameraBinSession::setMetaData(const QMap<QByteArray, QVariant> &data)
+@@ -831,129 +810,57 @@ void CameraBinSession::setMetaData(const QMap<QByteArray, QVariant> &data)
  {
      m_metaData = data;
- 
+
 -    if (m_camerabin) {
 -        GstIterator *elements = gst_bin_iterate_all_by_interface(GST_BIN(m_camerabin), GST_TYPE_TAG_SETTER);
 -        GstElement *element = 0;
@@ -5513,14 +5428,14 @@ index a4038c5..f916b58 100644
 +    if (m_camerabin)
 +        QGstUtils::setMetaData(m_camerabin, data);
  }
- 
+
  bool CameraBinSession::processSyncMessage(const QGstreamerMessage &message)
  {
      GstMessage* gm = message.rawMessage();
 -    const GstStructure *st;
 -    const GValue *image;
 -    GstBuffer *buffer = NULL;
- 
+
      if (gm && GST_MESSAGE_TYPE(gm) == GST_MESSAGE_ELEMENT) {
 -        if (m_captureMode == QCamera::CaptureStillImage &&
 -            gst_structure_has_name(gm->structure, "preview-image")) {
@@ -5555,7 +5470,7 @@ index a4038c5..f916b58 100644
 +                    && (sampleValue = gst_structure_get_value(st, "buffer"))) {
 +            GstBuffer * const buffer = gst_value_get_buffer(sampleValue);
  #endif
- 
+
 -                        if (structure &&
 -                            gst_structure_get_int(structure, "width", &width) &&
 -                            gst_structure_get_int(structure, "height", &height) &&
@@ -5622,7 +5537,7 @@ index a4038c5..f916b58 100644
              m_cameraFocusControl->handleFocusMessage(gm);
  #endif
      }
-@@ -1109,20 +1016,12 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
+@@ -1145,20 +1052,12 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
      if (frameSize.isEmpty()) {
          caps = gst_caps_copy(supportedCaps);
      } else {
@@ -5646,10 +5561,10 @@ index a4038c5..f916b58 100644
 +                    "width", G_TYPE_INT, frameSize.width(),
 +                    "height", G_TYPE_INT, frameSize.height(),
 +                     NULL);
- 
+
          caps = gst_caps_intersect(supportedCaps, filter);
          gst_caps_unref(filter);
-@@ -1133,7 +1032,7 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
+@@ -1169,7 +1068,7 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
      caps = gst_caps_make_writable(caps);
      for (uint i=0; i<gst_caps_get_size(caps); i++) {
          GstStructure *structure = gst_caps_get_structure(caps, i);
@@ -5658,7 +5573,7 @@ index a4038c5..f916b58 100644
          const GValue *oldRate = gst_structure_get_value(structure, "framerate");
          GValue rate;
          memset(&rate, 0, sizeof(rate));
-@@ -1142,8 +1041,11 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
+@@ -1178,8 +1077,11 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
          gst_structure_remove_all_fields(structure);
          gst_structure_set_value(structure, "framerate", &rate);
      }
@@ -5668,22 +5583,22 @@ index a4038c5..f916b58 100644
      gst_caps_do_simplify(caps);
 -
 +#endif
- 
+
      for (uint i=0; i<gst_caps_get_size(caps); i++) {
          GstStructure *structure = gst_caps_get_structure(caps, i);
-@@ -1154,7 +1056,7 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
+@@ -1190,7 +1092,7 @@ QList< QPair<int,int> > CameraBinSession::supportedFrameRates(const QSize &frame
      qSort(res.begin(), res.end(), rateLessThan);
- 
+
  #if CAMERABIN_DEBUG
 -    qDebug() << "Supported rates:" << gst_caps_to_string(caps);
 +    qDebug() << "Supported rates:" << caps;
      qDebug() << res;
  #endif
- 
-@@ -1213,31 +1115,24 @@ QList<QSize> CameraBinSession::supportedResolutions(QPair<int,int> rate,
+
+@@ -1249,31 +1151,24 @@ QList<QSize> CameraBinSession::supportedResolutions(QPair<int,int> rate,
                       SUPPORTED_IMAGE_CAPTURE_CAPS_PROPERTY : SUPPORTED_VIDEO_CAPTURE_CAPS_PROPERTY,
                   &supportedCaps, NULL);
- 
+
 -    if (!supportedCaps)
 -        return res;
 -
@@ -5691,13 +5606,13 @@ index a4038c5..f916b58 100644
 -    qDebug() << "Source caps:" << gst_caps_to_string(supportedCaps);
 +    qDebug() << "Source caps:" << supportedCaps;
  #endif
- 
+
 +    if (!supportedCaps)
 +        return res;
 +
      GstCaps *caps = 0;
      bool isContinuous = false;
- 
+
      if (rate.first <= 0 || rate.second <= 0) {
          caps = gst_caps_copy(supportedCaps);
      } else {
@@ -5721,7 +5636,7 @@ index a4038c5..f916b58 100644
          caps = gst_caps_intersect(supportedCaps, filter);
          gst_caps_unref(filter);
      }
-@@ -1247,7 +1142,7 @@ QList<QSize> CameraBinSession::supportedResolutions(QPair<int,int> rate,
+@@ -1283,7 +1178,7 @@ QList<QSize> CameraBinSession::supportedResolutions(QPair<int,int> rate,
      caps = gst_caps_make_writable(caps);
      for (uint i=0; i<gst_caps_get_size(caps); i++) {
          GstStructure *structure = gst_caps_get_structure(caps, i);
@@ -5730,7 +5645,7 @@ index a4038c5..f916b58 100644
          const GValue *oldW = gst_structure_get_value(structure, "width");
          const GValue *oldH = gst_structure_get_value(structure, "height");
          GValue w;
-@@ -1262,7 +1157,13 @@ QList<QSize> CameraBinSession::supportedResolutions(QPair<int,int> rate,
+@@ -1298,7 +1193,13 @@ QList<QSize> CameraBinSession::supportedResolutions(QPair<int,int> rate,
          gst_structure_set_value(structure, "width", &w);
          gst_structure_set_value(structure, "height", &h);
      }
@@ -5741,7 +5656,7 @@ index a4038c5..f916b58 100644
      gst_caps_do_simplify(caps);
 +#endif
 +
- 
+
      for (uint i=0; i<gst_caps_get_size(caps); i++) {
          GstStructure *structure = gst_caps_get_structure(caps, i);
 diff --git a/src/plugins/gstreamer/common.pri b/src/plugins/gstreamer/common.pri
@@ -5750,7 +5665,7 @@ index 8b421b8..eb6a299 100644
 +++ b/src/plugins/gstreamer/common.pri
 @@ -12,14 +12,18 @@ LIBS += -lqgsttools_p
  CONFIG += link_pkgconfig
- 
+
  PKGCONFIG += \
 -    gstreamer-0.10 \
 -    gstreamer-base-0.10 \
@@ -5769,14 +5684,14 @@ index 8b421b8..eb6a299 100644
 +mir: {
 +    DEFINES += HAVE_MIR
 +}
- 
+
 -maemo*:PKGCONFIG +=gstreamer-plugins-bad-0.10
- 
+
  config_resourcepolicy {
      DEFINES += HAVE_RESOURCE_POLICY
 @@ -27,8 +31,8 @@ config_resourcepolicy {
  }
- 
+
  config_gstreamer_appsrc {
 -    PKGCONFIG += gstreamer-app-0.10
 +    PKGCONFIG += gstreamer-app-$$GST_VERSION
@@ -5784,20 +5699,20 @@ index 8b421b8..eb6a299 100644
 -    LIBS += -lgstapp-0.10
 +    LIBS += -lgstapp-$$GST_VERSION
  }
- 
+
 diff --git a/src/plugins/gstreamer/gstreamer.pro b/src/plugins/gstreamer/gstreamer.pro
 index 7649010..0ff3510 100644
 --- a/src/plugins/gstreamer/gstreamer.pro
 +++ b/src/plugins/gstreamer/gstreamer.pro
 @@ -2,8 +2,8 @@ TEMPLATE = subdirs
- 
+
  SUBDIRS += \
      audiodecoder \
 -    mediacapture \
 -    mediaplayer
 +    mediaplayer \
 +    mediacapture
- 
+
  config_gstreamer_encodingprofiles {
      SUBDIRS += camerabin
 diff --git a/src/plugins/gstreamer/mediacapture/mediacapturecamera.json b/src/plugins/gstreamer/mediacapture/mediacapturecamera.json
@@ -5819,16 +5734,16 @@ index d05df49..8881445 100644
  #include "qgstreamercapturesession.h"
  #include "qgstreamermediacontainercontrol.h"
 +#include <private/qgstutils_p.h>
- 
+
  #include <QtCore/qdebug.h>
- 
+
 @@ -175,7 +176,7 @@ GstElement *QGstreamerAudioEncode::createEncoder()
- 
+
      if (m_audioSettings.sampleRate() > 0 || m_audioSettings.channelCount() > 0) {
          GstCaps *caps = gst_caps_new_empty();
 -        GstStructure *structure = gst_structure_new("audio/x-raw-int", NULL);
 +        GstStructure *structure = qt_gst_structure_new_empty(QT_GSTREAMER_RAW_AUDIO_MIME);
- 
+
          if (m_audioSettings.sampleRate() > 0)
              gst_structure_set(structure, "rate", G_TYPE_INT, m_audioSettings.sampleRate(), NULL );
 diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
@@ -5836,9 +5751,9 @@ index 97a165d..1ab98cd 100644
 --- a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
 +++ b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
 @@ -62,27 +62,25 @@
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 -QGstreamerCaptureService::QGstreamerCaptureService(const QString &service, QObject *parent):
 -    QMediaService(parent)
 -{
@@ -5880,7 +5795,7 @@ index 97a165d..1ab98cd 100644
      }
 @@ -163,12 +161,12 @@ QMediaControl *QGstreamerCaptureService::requestControl(const char *name)
          return m_imageCaptureControl;
- 
+
      if (qstrcmp(name,QMediaAudioProbeControl_iid) == 0) {
 -        if (m_captureSession) {
 -            QGstreamerAudioProbeControl *probe = new QGstreamerAudioProbeControl(this);
@@ -5894,10 +5809,10 @@ index 97a165d..1ab98cd 100644
 +        m_audioProbeControl->ref.ref();
 +        return m_audioProbeControl;
      }
- 
+
      if (!m_videoOutput) {
 @@ -194,17 +192,15 @@ QMediaControl *QGstreamerCaptureService::requestControl(const char *name)
- 
+
  void QGstreamerCaptureService::releaseControl(QMediaControl *control)
  {
 -    if (control && control == m_videoOutput) {
@@ -5920,7 +5835,7 @@ index 97a165d..1ab98cd 100644
 +        m_audioProbeControl = 0;
      }
  }
- 
+
 diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h
 index 7ff8ce2..e0cf4ee 100644
 --- a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h
@@ -5928,7 +5843,7 @@ index 7ff8ce2..e0cf4ee 100644
 @@ -43,6 +43,7 @@ QT_BEGIN_NAMESPACE
  class QAudioInputSelectorControl;
  class QVideoDeviceSelectorControl;
- 
+
 +class QGstreamerAudioProbeControl;
  class QGstreamerCaptureSession;
  class QGstreamerCameraControl;
@@ -5940,7 +5855,7 @@ index 7ff8ce2..e0cf4ee 100644
 +
 +    QGstreamerAudioProbeControl *m_audioProbeControl;
  };
- 
+
  QT_END_NAMESPACE
 diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.cpp
 index 0ac34ee..85ed687 100644
@@ -5949,7 +5864,7 @@ index 0ac34ee..85ed687 100644
 @@ -110,90 +110,16 @@ QMultimedia::SupportEstimate QGstreamerCaptureServicePlugin::hasSupport(const QS
      return QGstUtils::hasSupport(mimeType, codecs, m_supportedMimeTypeSet);
  }
- 
+
 +
 +static bool isEncoderOrMuxer(GstElementFactory *factory)
 +{
@@ -6043,18 +5958,18 @@ index 0ac34ee..85ed687 100644
 -#endif
 +    m_supportedMimeTypeSet = QGstUtils::supportedMimeTypes(isEncoderOrMuxer);
  }
- 
+
  QStringList QGstreamerCaptureServicePlugin::supportedMimeTypes() const
 diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp
 index a2bd80d..af5b339 100644
 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp
 +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp
 @@ -45,6 +45,7 @@
- 
+
  #include <gst/gsttagsetter.h>
  #include <gst/gstversion.h>
 +#include <gst/video/video.h>
- 
+
  #include <QtCore/qdebug.h>
  #include <QtCore/qurl.h>
 @@ -52,7 +53,6 @@
@@ -6063,7 +5978,7 @@ index a2bd80d..af5b339 100644
  #include <QtCore/qfile.h>
 -
  #include <QtGui/qimage.h>
- 
+
  QT_BEGIN_NAMESPACE
 @@ -64,7 +64,7 @@ QGstreamerCaptureSession::QGstreamerCaptureSession(QGstreamerCaptureSession::Cap
       m_waitingForEos(false),
@@ -6075,27 +5990,27 @@ index a2bd80d..af5b339 100644
       m_audioPreviewFactory(0),
       m_videoInputFactory(0),
 @@ -169,7 +169,7 @@ GstElement *QGstreamerCaptureSession::buildEncodeBin()
- 
+
      if (m_captureMode & Video) {
          GstElement *videoQueue = gst_element_factory_make("queue", "video-encode-queue");
 -        GstElement *colorspace = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace-encoder");
 +        GstElement *colorspace = gst_element_factory_make(QT_GSTREAMER_COLORCONVERSION_ELEMENT_NAME, "videoconvert-encoder");
          GstElement *videoscale = gst_element_factory_make("videoscale","videoscale-encoder");
          gst_bin_add_many(GST_BIN(encodeBin), videoQueue, colorspace, videoscale, NULL);
- 
+
 @@ -280,7 +280,7 @@ GstElement *QGstreamerCaptureSession::buildVideoPreview()
- 
+
      if (m_viewfinderInterface) {
          GstElement *bin = gst_bin_new("video-preview-bin");
 -        GstElement *colorspace = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace-preview");
 +        GstElement *colorspace = gst_element_factory_make(QT_GSTREAMER_COLORCONVERSION_ELEMENT_NAME, "videoconvert-preview");
          GstElement *capsFilter = gst_element_factory_make("capsfilter", "capsfilter-video-preview");
          GstElement *preview = m_viewfinderInterface->videoSink();
- 
+
 @@ -299,36 +299,25 @@ GstElement *QGstreamerCaptureSession::buildVideoPreview()
              resolution = m_imageEncodeControl->imageSettings().resolution();
          }
- 
+
 -        if (!resolution.isEmpty() || frameRate > 0.001) {
 -            GstCaps *caps = gst_caps_new_empty();
 -            QStringList structureTypes;
@@ -6112,7 +6027,7 @@ index a2bd80d..af5b339 100644
 -                if (frameRate > 0.001) {
 -                    QPair<int,int> rate = m_videoEncodeControl->rateAsRational();
 +        GstCaps *caps = QGstUtils::videoFilterCaps();
- 
+
 -                    //qDebug() << "frame rate:" << num << denum;
 +        if (!resolution.isEmpty()) {
 +            gst_caps_set_simple(caps, "width", G_TYPE_INT, resolution.width(), NULL);
@@ -6120,26 +6035,26 @@ index a2bd80d..af5b339 100644
 +        }
 +        if (frameRate > 0.001) {
 +            QPair<int,int> rate = m_videoEncodeControl->rateAsRational();
- 
+
 -                    gst_structure_set(structure, "framerate", GST_TYPE_FRACTION, rate.first, rate.second, NULL);
 -                }
 +            //qDebug() << "frame rate:" << num << denum;
- 
+
 -                gst_caps_append_structure(caps,structure);
 -            }
 +            gst_caps_set_simple(caps, "framerate", GST_TYPE_FRACTION, rate.first, rate.second, NULL);
 +        }
- 
+
 -            //qDebug() << "set video preview caps filter:" << gst_caps_to_string(caps);
 +        //qDebug() << "set video preview caps filter:" << gst_caps_to_string(caps);
- 
+
 -            g_object_set(G_OBJECT(capsFilter), "caps", caps, NULL);
 +        g_object_set(G_OBJECT(capsFilter), "caps", caps, NULL);
- 
+
 -            gst_caps_unref(caps);
 -        }
 +        gst_caps_unref(caps);
- 
+
          // add ghostpads
          GstPad *pad = gst_element_get_static_pad(colorspace, "sink");
 @@ -342,7 +331,7 @@ GstElement *QGstreamerCaptureSession::buildVideoPreview()
@@ -6154,7 +6069,7 @@ index a2bd80d..af5b339 100644
 @@ -360,101 +349,49 @@ GstElement *QGstreamerCaptureSession::buildVideoPreview()
      return previewElement;
  }
- 
+
 -
 -static gboolean passImageFilter(GstElement *element,
 -                                GstBuffer *buffer,
@@ -6200,7 +6115,7 @@ index a2bd80d..af5b339 100644
 +    Q_UNUSED(caps);
 +#endif
 +}
- 
+
 -                            for (int y=0; y<height; y+=2) {
 -                                const uchar *yLine = data + y*width;
 -                                const uchar *uLine = data + width*height + y*width/4;
@@ -6210,7 +6125,7 @@ index a2bd80d..af5b339 100644
 +    if (m_passPrerollImage) {
 +        m_passImage = false;
 +        m_passPrerollImage = false;
- 
+
 -                                for (int x=0; x<width; x+=2) {
 -                                    const qreal Y = 1.164*(yLine[x]-16);
 -                                    const int U = uLine[x/2]-128;
@@ -6219,12 +6134,12 @@ index a2bd80d..af5b339 100644
 +    } else  if (!m_passImage) {
 +        return false;
 +    }
- 
+
 -                                    int b = qBound(0, int(Y + 2.018*U), 255);
 -                                    int g = qBound(0, int(Y - 0.813*V - 0.391*U), 255);
 -                                    int r = qBound(0, int(Y + 1.596*V), 255);
 +    m_passImage = false;
- 
+
 -                                    img.setPixel(x/2,y/2,qRgb(r,g,b));
 -                                }
 -                            }
@@ -6234,7 +6149,7 @@ index a2bd80d..af5b339 100644
 +#else
 +    QImage img = QGstUtils::bufferToImage(buffer);
 +#endif
- 
+
 -                    } else if (qstrcmp(gst_structure_get_name(structure), "video/x-raw-rgb") == 0) {
 -                        QImage::Format format = QImage::Format_Invalid;
 -                        int bpp = 0;
@@ -6258,7 +6173,7 @@ index a2bd80d..af5b339 100644
 -        }
 +    if (img.isNull())
 +        return true;
- 
+
 -        static QMetaMethod exposedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageExposed);
 -        exposedSignal.invoke(session,
 -                             Qt::QueuedConnection,
@@ -6267,7 +6182,7 @@ index a2bd80d..af5b339 100644
 +    exposedSignal.invoke(this,
 +                         Qt::QueuedConnection,
 +                         Q_ARG(int,m_imageRequestId));
- 
+
 -        static QMetaMethod capturedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageCaptured);
 -        capturedSignal.invoke(session,
 -                              Qt::QueuedConnection,
@@ -6278,14 +6193,14 @@ index a2bd80d..af5b339 100644
 +                          Qt::QueuedConnection,
 +                          Q_ARG(int,m_imageRequestId),
 +                          Q_ARG(QImage,img));
- 
+
 -        return TRUE;
 -    } else {
 -        return FALSE;
 -    }
 +    return true;
  }
- 
+
  static gboolean saveImageFilter(GstElement *element,
 @@ -471,7 +408,15 @@ static gboolean saveImageFilter(GstElement *element,
      if (!fileName.isEmpty()) {
@@ -6302,7 +6217,7 @@ index a2bd80d..af5b339 100644
 +            f.write(reinterpret_cast<const char *>(buffer->data), buffer->size);
 +#endif
              f.close();
- 
+
              static QMetaMethod savedSignal = QMetaMethod::fromSignal(&QGstreamerCaptureSession::imageSaved);
 @@ -489,18 +434,19 @@ GstElement *QGstreamerCaptureSession::buildImageCapture()
  {
@@ -6312,7 +6227,7 @@ index a2bd80d..af5b339 100644
 +    GstElement *colorspace = gst_element_factory_make(QT_GSTREAMER_COLORCONVERSION_ELEMENT_NAME, "videoconvert-image-capture");
      GstElement *encoder = gst_element_factory_make("jpegenc", "image-encoder");
      GstElement *sink = gst_element_factory_make("fakesink","sink-image-capture");
- 
+
      GstPad *pad = gst_element_get_static_pad(queue, "src");
      Q_ASSERT(pad);
 -    gst_pad_add_buffer_probe(pad, G_CALLBACK(passImageFilter), this);
@@ -6320,12 +6235,12 @@ index a2bd80d..af5b339 100644
 +    addProbeToPad(pad, false);
 +
      gst_object_unref(GST_OBJECT(pad));
- 
+
      g_object_set(G_OBJECT(sink), "signal-handoffs", TRUE, NULL);
 -    g_signal_connect(G_OBJECT(sink), "handoff",
 -                     G_CALLBACK(saveImageFilter), this);
 +    g_signal_connect(G_OBJECT(sink), "handoff", G_CALLBACK(saveImageFilter), this);
- 
+
      gst_bin_add_many(GST_BIN(bin), queue, colorspace, encoder, sink,  NULL);
      gst_element_link_many(queue, colorspace, encoder, sink, NULL);
 @@ -715,6 +661,8 @@ void QGstreamerCaptureSession::dumpGraph(const QString &fileName)
@@ -6336,9 +6251,9 @@ index a2bd80d..af5b339 100644
 +    Q_UNUSED(fileName);
  #endif
  }
- 
+
 @@ -877,10 +825,8 @@ void QGstreamerCaptureSession::setState(QGstreamerCaptureSession::State newState
- 
+
  qint64 QGstreamerCaptureSession::duration() const
  {
 -    GstFormat   format = GST_FORMAT_TIME;
@@ -6353,7 +6268,7 @@ index a2bd80d..af5b339 100644
 @@ -896,50 +842,8 @@ void QGstreamerCaptureSession::setMetaData(const QMap<QByteArray, QVariant> &dat
      //qDebug() << "QGstreamerCaptureSession::setMetaData" << data;
      m_metaData = data;
- 
+
 -    if (m_encodeBin) {
 -        GstIterator *elements = gst_bin_iterate_all_by_interface(GST_BIN(m_encodeBin), GST_TYPE_TAG_SETTER);
 -        GstElement *element = 0;
@@ -6401,10 +6316,10 @@ index a2bd80d..af5b339 100644
 +    if (m_encodeBin)
 +        QGstUtils::setMetaData(GST_BIN(m_encodeBin), data);
  }
- 
+
  bool QGstreamerCaptureSession::processBusMessage(const QGstreamerMessage &message)
 @@ -1058,34 +962,16 @@ void QGstreamerCaptureSession::setVolume(qreal volume)
- 
+
  void QGstreamerCaptureSession::addProbe(QGstreamerAudioProbeControl* probe)
  {
 -    QMutexLocker locker(&m_audioProbeMutex);
@@ -6417,7 +6332,7 @@ index a2bd80d..af5b339 100644
 +    m_audioProbe = probe;
 +    addAudioBufferProbe();
  }
- 
+
  void QGstreamerCaptureSession::removeProbe(QGstreamerAudioProbeControl* probe)
  {
 -    QMutexLocker locker(&m_audioProbeMutex);
@@ -6442,16 +6357,16 @@ index a2bd80d..af5b339 100644
 +    removeAudioBufferProbe();
 +    m_audioProbe = 0;
  }
- 
+
  GstPad *QGstreamerCaptureSession::getAudioProbePad()
 @@ -1114,26 +1000,25 @@ GstPad *QGstreamerCaptureSession::getAudioProbePad()
- 
+
  void QGstreamerCaptureSession::removeAudioBufferProbe()
  {
 -    if (m_audioBufferProbeId == -1)
 +    if (!m_audioProbe)
          return;
- 
+
      GstPad *pad = getAudioProbePad();
      if (pad) {
 -        gst_pad_remove_buffer_probe(pad, m_audioBufferProbeId);
@@ -6462,13 +6377,13 @@ index a2bd80d..af5b339 100644
 -
 -    m_audioBufferProbeId = -1;
  }
- 
+
  void QGstreamerCaptureSession::addAudioBufferProbe()
  {
 -    Q_ASSERT(m_audioBufferProbeId == -1);
 +    if (!m_audioProbe)
 +        return;
- 
+
      GstPad *pad = getAudioProbePad();
      if (pad) {
 -        m_audioBufferProbeId = gst_pad_add_buffer_probe(pad, G_CALLBACK(padAudioBufferProbe), this);
@@ -6477,26 +6392,26 @@ index a2bd80d..af5b339 100644
 +        gst_object_unref(GST_OBJECT(pad));
      }
  }
- 
+
 diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h
 index a759f22..ad26327 100644
 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h
 +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h
 @@ -41,8 +41,10 @@
  #include <QtCore/qurl.h>
- 
+
  #include <gst/gst.h>
 +#include <gst/video/video.h>
- 
+
  #include <private/qgstreamerbushelper_p.h>
 +#include <private/qgstreamerbufferprobe_p.h>
- 
+
  QT_BEGIN_NAMESPACE
- 
+
 @@ -70,7 +72,10 @@ public:
      virtual QList<QSize> supportedResolutions(qreal frameRate = -1) const = 0;
  };
- 
+
 -class QGstreamerCaptureSession : public QObject, public QGstreamerBusMessageFilter
 +class QGstreamerCaptureSession
 +        : public QObject
@@ -6506,38 +6421,38 @@ index a759f22..ad26327 100644
      Q_OBJECT
      Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged)
 @@ -131,7 +136,6 @@ public:
- 
+
      void addProbe(QGstreamerAudioProbeControl* probe);
      void removeProbe(QGstreamerAudioProbeControl* probe);
 -    static gboolean padAudioBufferProbe(GstPad *pad, GstBuffer *buffer, gpointer user_data);
- 
+
  signals:
      void stateChanged(QGstreamerCaptureSession::State state);
 @@ -156,6 +160,9 @@ public slots:
      void setVolume(qreal volume);
- 
+
  private:
 +    void probeCaps(GstCaps *caps);
 +    bool probeBuffer(GstBuffer *buffer);
 +
      enum PipelineMode { EmptyPipeline, PreviewPipeline, RecordingPipeline, PreviewAndRecordingPipeline };
- 
+
      GstElement *buildEncodeBin();
 @@ -180,9 +187,7 @@ private:
      QGstreamerCaptureSession::CaptureMode m_captureMode;
      QMap<QByteArray, QVariant> m_metaData;
- 
+
 -    QList<QGstreamerAudioProbeControl*> m_audioProbes;
 -    QMutex m_audioProbeMutex;
 -    int m_audioBufferProbeId;
 +    QGstreamerAudioProbeControl *m_audioProbe;
- 
+
      QGstreamerElementFactory *m_audioInputFactory;
      QGstreamerElementFactory *m_audioPreviewFactory;
 @@ -217,6 +222,10 @@ private:
- 
+
      GstElement *m_encodeBin;
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +    GstVideoInfo m_previewInfo;
 +#endif
@@ -6556,20 +6471,20 @@ index 2f0d0ee..81b85d7 100644
 -
 +#include <private/qgstutils_p.h>
  #include <QtCore/qdebug.h>
- 
+
  #include <math.h>
 @@ -147,7 +147,7 @@ GstElement *QGstreamerVideoEncode::createEncoder()
      GstElement *capsFilter = gst_element_factory_make("capsfilter", "capsfilter-video");
      gst_bin_add(encoderBin, capsFilter);
- 
+
 -    GstElement *colorspace = gst_element_factory_make("ffmpegcolorspace", NULL);
 +    GstElement *colorspace = gst_element_factory_make(QT_GSTREAMER_COLORCONVERSION_ELEMENT_NAME, NULL);
      gst_bin_add(encoderBin, colorspace);
      gst_bin_add(encoderBin, encoderElement);
- 
+
 @@ -252,27 +252,22 @@ GstElement *QGstreamerVideoEncode::createEncoder()
      }
- 
+
      if (!m_videoSettings.resolution().isEmpty() || m_videoSettings.frameRate() > 0.001) {
 -        GstCaps *caps = gst_caps_new_empty();
 -        QStringList structureTypes;
@@ -6599,7 +6514,7 @@ index 2f0d0ee..81b85d7 100644
 +                        "height", G_TYPE_INT, m_videoSettings.resolution().height(),
 +                        NULL);
 +        }
- 
+
 -            gst_caps_append_structure(caps,structure);
 +        if (m_videoSettings.frameRate() > 0.001) {
 +            QPair<int,int> rate = rateAsRational();
@@ -6608,14 +6523,14 @@ index 2f0d0ee..81b85d7 100644
 +                        "framerate", GST_TYPE_FRACTION, rate.first, rate.second,
 +                        NULL);
          }
- 
+
          //qDebug() << "set video caps filter:" << gst_caps_to_string(caps);
 diff --git a/src/plugins/gstreamer/mediaplayer/mediaplayer.pro b/src/plugins/gstreamer/mediaplayer/mediaplayer.pro
 index 2ca9377..b986fc7 100644
 --- a/src/plugins/gstreamer/mediaplayer/mediaplayer.pro
 +++ b/src/plugins/gstreamer/mediaplayer/mediaplayer.pro
 @@ -28,4 +28,3 @@ SOURCES += \
- 
+
  OTHER_FILES += \
      mediaplayer.json
 -
@@ -6626,7 +6541,7 @@ index fed756a..c1fb64a 100644
 @@ -425,7 +425,6 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
          m_session->loadFromUri(request);
  #endif
- 
+
 -
  #if defined(HAVE_GST_APPSRC)
      if (!request.url().isEmpty() || userStreamValid) {
@@ -6637,7 +6552,7 @@ index ce267d7..84805b6 100644
 +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
 @@ -51,7 +51,11 @@
  #include <private/qgstreamervideorenderer_p.h>
- 
+
  #if defined(Q_WS_MAEMO_6) && defined(__arm__)
 -#include "qgstreamergltexturerenderer.h"
 +#include "private/qgstreamergltexturerenderer.h"
@@ -6646,10 +6561,10 @@ index ce267d7..84805b6 100644
 +#if defined(HAVE_MIR) && defined (__arm__)
 +#include "private/qgstreamermirtexturerenderer_p.h"
  #endif
- 
+
  #include "qgstreamerstreamscontrol.h"
 @@ -66,6 +70,8 @@ QT_BEGIN_NAMESPACE
- 
+
  QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
       QMediaService(parent)
 +     , m_audioProbeControl(0)
@@ -6658,7 +6573,7 @@ index ce267d7..84805b6 100644
       , m_videoRenderer(0)
       , m_videoWindow(0)
 @@ -82,6 +88,8 @@ QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
- 
+
  #if defined(Q_WS_MAEMO_6) && defined(__arm__)
      m_videoRenderer = new QGstreamerGLTextureRenderer(this);
 +#elif defined(HAVE_MIR) && defined (__arm__)
@@ -6669,7 +6584,7 @@ index ce267d7..84805b6 100644
 @@ -115,23 +123,23 @@ QMediaControl *QGstreamerPlayerService::requestControl(const char *name)
      if (qstrcmp(name, QMediaAvailabilityControl_iid) == 0)
          return m_availabilityControl;
- 
+
 -    if (qstrcmp(name,QMediaVideoProbeControl_iid) == 0) {
 -        if (m_session) {
 -            QGstreamerVideoProbeControl *probe = new QGstreamerVideoProbeControl(this);
@@ -6685,7 +6600,7 @@ index ce267d7..84805b6 100644
 +        m_videoProbeControl->ref.ref();
 +        return m_videoProbeControl;
      }
- 
+
 -    if (qstrcmp(name,QMediaAudioProbeControl_iid) == 0) {
 -        if (m_session) {
 -            QGstreamerAudioProbeControl *probe = new QGstreamerAudioProbeControl(this);
@@ -6700,10 +6615,10 @@ index ce267d7..84805b6 100644
 +        m_audioProbeControl->ref.ref();
 +        return m_audioProbeControl;
      }
- 
+
      if (!m_videoOutput) {
 @@ -156,28 +164,21 @@ QMediaControl *QGstreamerPlayerService::requestControl(const char *name)
- 
+
  void QGstreamerPlayerService::releaseControl(QMediaControl *control)
  {
 -    if (control == m_videoOutput) {
@@ -6742,7 +6657,7 @@ index ce267d7..84805b6 100644
 +        m_audioProbeControl = 0;
      }
  }
- 
+
 diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
 index f3081e9..22be262 100644
 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
@@ -6753,13 +6668,13 @@ index f3081e9..22be262 100644
  class QGStreamerAvailabilityControl;
 +class QGstreamerAudioProbeControl;
 +class QGstreamerVideoProbeControl;
- 
+
  class QGstreamerPlayerService : public QMediaService
  {
 @@ -70,6 +72,9 @@ private:
      QGstreamerStreamsControl *m_streamsControl;
      QGStreamerAvailabilityControl *m_availabilityControl;
- 
+
 +    QGstreamerAudioProbeControl *m_audioProbeControl;
 +    QGstreamerVideoProbeControl *m_videoProbeControl;
 +
@@ -6773,7 +6688,7 @@ index 7d20b6d..f1fd421 100644
 @@ -81,89 +81,15 @@ QMultimedia::SupportEstimate QGstreamerPlayerServicePlugin::hasSupport(const QSt
      return QGstUtils::hasSupport(mimeType, codecs, m_supportedMimeTypeSet);
  }
- 
+
 -void QGstreamerPlayerServicePlugin::updateSupportedMimeTypes() const
 +static bool isDecoderOrDemuxer(GstElementFactory *factory)
  {
@@ -6852,7 +6767,7 @@ index 7d20b6d..f1fd421 100644
 +    return gst_element_factory_list_is_type(factory, GST_ELEMENT_FACTORY_TYPE_DEMUXER)
 +                || gst_element_factory_list_is_type(factory, GST_ELEMENT_FACTORY_TYPE_DECODER);
 +}
- 
+
 -#if defined QT_SUPPORTEDMIMETYPES_DEBUG
 -    QStringList list = m_supportedMimeTypeSet.toList();
 -    list.sort();
@@ -6865,7 +6780,7 @@ index 7d20b6d..f1fd421 100644
 +{
 +     m_supportedMimeTypeSet = QGstUtils::supportedMimeTypes(isDecoderOrDemuxer);
  }
- 
+
  QStringList QGstreamerPlayerServicePlugin::supportedMimeTypes() const
 diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
 index 15924a6..b5c354d 100644
@@ -6884,7 +6799,7 @@ index 15924a6..b5c354d 100644
 @@ -85,6 +87,7 @@ typedef enum {
      GST_PLAY_FLAG_BUFFERING     = 0x000000100
  } GstPlayFlags;
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
  #define DEFAULT_RAW_CAPS \
      "video/x-raw-yuv; " \
@@ -6896,7 +6811,7 @@ index 15924a6..b5c354d 100644
 +
  static GstStaticCaps static_RawCaps = GST_STATIC_CAPS(DEFAULT_RAW_CAPS);
 +#endif
- 
+
  QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
      :QObject(parent),
 @@ -105,7 +110,9 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
@@ -6923,7 +6838,7 @@ index 15924a6..b5c354d 100644
 @@ -138,8 +145,7 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
      Q_ASSERT(result == TRUE);
      Q_UNUSED(result);
- 
+
 -    m_playbin = gst_element_factory_make("playbin2", NULL);
 -
 +    m_playbin = gst_element_factory_make(QT_GSTREAMER_PLAYBIN_ELEMENT_NAME, NULL);
@@ -6950,29 +6865,29 @@ index 15924a6..b5c354d 100644
 @@ -185,12 +192,16 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
          }
      }
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +    m_videoIdentity = gst_element_factory_make("identity", NULL); // floating ref
 +#else
      m_videoIdentity = GST_ELEMENT(g_object_new(gst_video_connector_get_type(), 0)); // floating ref
      g_signal_connect(G_OBJECT(m_videoIdentity), "connection-failed", G_CALLBACK(insertColorSpaceElement), (gpointer)this);
 +    m_colorSpace = gst_element_factory_make(QT_GSTREAMER_COLORCONVERSION_ELEMENT_NAME, "ffmpegcolorspace-vo");
- 
+
 -    m_colorSpace = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace-vo");
      // might not get a parent, take ownership to avoid leak
      qt_gst_object_ref_sink(GST_OBJECT(m_colorSpace));
 +#endif
- 
+
      m_nullVideoSink = gst_element_factory_make("fakesink", NULL);
      g_object_set(G_OBJECT(m_nullVideoSink), "sync", true, NULL);
 @@ -206,7 +217,7 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
- 
+
      // add ghostpads
      GstPad *pad = gst_element_get_static_pad(m_videoIdentity,"sink");
 -    gst_element_add_pad(GST_ELEMENT(m_videoOutputBin), gst_ghost_pad_new("videosink", pad));
 +    gst_element_add_pad(GST_ELEMENT(m_videoOutputBin), gst_ghost_pad_new("sink", pad));
      gst_object_unref(GST_OBJECT(pad));
- 
+
      if (m_playbin != 0) {
 @@ -244,7 +255,9 @@ QGstreamerPlayerSession::~QGstreamerPlayerSession()
          delete m_busHelper;
@@ -6985,23 +6900,23 @@ index 15924a6..b5c354d 100644
          gst_object_unref(GST_OBJECT(m_videoOutputBin));
      }
 @@ -339,12 +352,10 @@ qint64 QGstreamerPlayerSession::duration() const
- 
+
  qint64 QGstreamerPlayerSession::position() const
  {
 -    GstFormat   format = GST_FORMAT_TIME;
      gint64      position = 0;
- 
+
 -    if ( m_playbin && gst_element_query_position(m_playbin, &format, &position))
 +    if (m_playbin && qt_gst_element_query_position(m_playbin, GST_FORMAT_TIME, &position))
          m_lastPosition = position / 1000000;
 -
      return m_lastPosition;
  }
- 
+
 @@ -474,17 +485,26 @@ bool QGstreamerPlayerSession::isAudioAvailable() const
      return m_audioAvailable;
  }
- 
+
 +#if GST_CHECK_VERSION(1,0,0)
 +static GstPadProbeReturn block_pad_cb(GstPad *pad, GstPadProbeInfo *info, gpointer user_data)
 +#else
@@ -7024,11 +6939,11 @@ index 15924a6..b5c354d 100644
      }
 +#endif
  }
- 
+
  void QGstreamerPlayerSession::updateVideoRenderer()
 @@ -529,7 +549,7 @@ void QGstreamerPlayerSession::setVideoRenderer(QObject *videoOutput)
      m_renderer = renderer;
- 
+
  #ifdef DEBUG_VO_BIN_DUMP
 -    _gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_playbin),
 +    gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_playbin),
@@ -7038,7 +6953,7 @@ index 15924a6..b5c354d 100644
 @@ -570,12 +590,14 @@ void QGstreamerPlayerSession::setVideoRenderer(QObject *videoOutput)
          gst_element_set_state(m_videoSink, GST_STATE_NULL);
          gst_element_set_state(m_playbin, GST_STATE_NULL);
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
          if (m_usingColorspaceElement) {
              gst_element_unlink(m_colorSpace, m_videoSink);
@@ -7047,13 +6962,13 @@ index 15924a6..b5c354d 100644
              gst_element_unlink(m_videoIdentity, m_videoSink);
          }
 +#endif
- 
+
          removeVideoBufferProbe();
- 
+
 @@ -585,8 +607,9 @@ void QGstreamerPlayerSession::setVideoRenderer(QObject *videoOutput)
- 
+
          gst_bin_add(GST_BIN(m_videoOutputBin), m_videoSink);
- 
+
 -        m_usingColorspaceElement = false;
          bool linked = gst_element_link(m_videoIdentity, m_videoSink);
 +#if !GST_CHECK_VERSION(1,0,0)
@@ -7069,11 +6984,11 @@ index 15924a6..b5c354d 100644
 +
 +        if (!linked)
 +            qWarning() << "Linking video output element failed";
- 
+
          if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "show-preroll-frame") != 0) {
              gboolean value = m_displayPrerolledFrame;
 @@ -633,7 +660,11 @@ void QGstreamerPlayerSession::setVideoRenderer(QObject *videoOutput)
- 
+
          //block pads, async to avoid locking in paused state
          GstPad *srcPad = gst_element_get_static_pad(m_videoIdentity, "src");
 +#if GST_CHECK_VERSION(1,0,0)
@@ -7082,11 +6997,11 @@ index 15924a6..b5c354d 100644
          gst_pad_set_blocked_async(srcPad, true, &block_pad_cb, this);
 +#endif
          gst_object_unref(GST_OBJECT(srcPad));
- 
+
          //Unpause the sink to avoid waiting until the buffer is processed
 @@ -671,16 +702,22 @@ void QGstreamerPlayerSession::finishVideoOutputChange()
      }
- 
+
      if (m_pendingVideoSink == m_videoSink) {
 +        qDebug() << "Abort, no change";
          //video output was change back to the current one,
@@ -7097,12 +7012,12 @@ index 15924a6..b5c354d 100644
 +#else
              gst_pad_set_blocked_async(srcPad, false, &block_pad_cb, 0);
 +#endif
- 
+
          m_pendingVideoSink = 0;
          gst_object_unref(GST_OBJECT(srcPad));
          return;
      }
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
      if (m_usingColorspaceElement) {
          gst_element_set_state(m_colorSpace, GST_STATE_NULL);
@@ -7118,9 +7033,9 @@ index 15924a6..b5c354d 100644
          gst_element_unlink(m_videoIdentity, m_videoSink);
      }
 @@ -703,8 +743,9 @@ void QGstreamerPlayerSession::finishVideoOutputChange()
- 
+
      addVideoBufferProbe();
- 
+
 -    m_usingColorspaceElement = false;
      bool linked = gst_element_link(m_videoIdentity, m_videoSink);
 +#if !GST_CHECK_VERSION(1,0,0)
@@ -7133,7 +7048,7 @@ index 15924a6..b5c354d 100644
          linked = gst_element_link_many(m_videoIdentity, m_colorSpace, m_videoSink, NULL);
      }
 +#endif
- 
+
      if (!linked)
          qWarning() << "Linking video output element failed";
 @@ -720,6 +762,8 @@ void QGstreamerPlayerSession::finishVideoOutputChange()
@@ -7151,22 +7066,22 @@ index 15924a6..b5c354d 100644
                            );
 -
 +#endif
- 
+
      GstState state = GST_STATE_VOID_PENDING;
- 
+
 @@ -743,8 +787,10 @@ void QGstreamerPlayerSession::finishVideoOutputChange()
          break;
      }
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
      if (m_usingColorspaceElement)
          gst_element_set_state(m_colorSpace, state);
 +#endif
- 
+
      gst_element_set_state(m_videoSink, state);
- 
+
 @@ -760,16 +806,23 @@ void QGstreamerPlayerSession::finishVideoOutputChange()
- 
+
      //don't have to wait here, it will unblock eventually
      if (gst_pad_is_blocked(srcPad))
 -        gst_pad_set_blocked_async(srcPad, false, &block_pad_cb, 0);
@@ -7177,7 +7092,7 @@ index 15924a6..b5c354d 100644
 +#endif
 +
      gst_object_unref(GST_OBJECT(srcPad));
- 
+
  #ifdef DEBUG_VO_BIN_DUMP
 -    _gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_playbin),
 -                                  GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL /* GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES*/),
@@ -7186,7 +7101,7 @@ index 15924a6..b5c354d 100644
                                    "playbin_finish");
  #endif
  }
- 
+
 +#if !GST_CHECK_VERSION(1,0,0)
 +
  void QGstreamerPlayerSession::insertColorSpaceElement(GstElement *element, gpointer data)
@@ -7195,9 +7110,9 @@ index 15924a6..b5c354d 100644
 @@ -814,6 +867,7 @@ void QGstreamerPlayerSession::insertColorSpaceElement(GstElement *element, gpoin
      gst_element_set_state(session->m_colorSpace, state);
  }
- 
+
 +#endif
- 
+
  bool QGstreamerPlayerSession::isVideoAvailable() const
  {
 @@ -830,6 +884,7 @@ bool QGstreamerPlayerSession::play()
@@ -7254,39 +7169,39 @@ index 15924a6..b5c354d 100644
      GstPad *pad = gst_element_get_static_pad(m_videoIdentity, "src");
 -    GstCaps *caps = gst_pad_get_negotiated_caps(pad);
 +    GstCaps *caps = qt_gst_pad_get_current_caps(pad);
- 
+
      if (caps) {
          const GstStructure *structure = gst_caps_get_structure(caps, 0);
 @@ -1407,11 +1463,10 @@ void QGstreamerPlayerSession::updateVideoResolutionTag()
- 
+
  void QGstreamerPlayerSession::updateDuration()
  {
 -    GstFormat format = GST_FORMAT_TIME;
      gint64 gstDuration = 0;
      int duration = -1;
- 
+
 -    if (m_playbin && gst_element_query_duration(m_playbin, &format, &gstDuration))
 +    if (m_playbin && qt_gst_element_query_duration(m_playbin, GST_FORMAT_TIME, &gstDuration))
          duration = gstDuration / 1000000;
- 
+
      if (m_duration != duration) {
 @@ -1467,7 +1522,7 @@ void QGstreamerPlayerSession::playbinNotifySource(GObject *o, GParamSpec *p, gpo
- 
+
      // The rest
      if (g_object_class_find_property(G_OBJECT_GET_CLASS(source), "extra-headers") != 0) {
 -        GstStructure *extras = gst_structure_empty_new("extras");
 +        GstStructure *extras = qt_gst_structure_new_empty("extras");
- 
+
          foreach (const QByteArray &rawHeader, self->m_request.rawHeaderList()) {
              if (rawHeader == userAgentString) // Filter User-Agent
 @@ -1528,7 +1583,8 @@ void QGstreamerPlayerSession::playbinNotifySource(GObject *o, GParamSpec *p, gpo
          qDebug() << "Current source is a non-live source";
  #endif
- 
+
 -    g_object_set(G_OBJECT(self->m_videoSink), "sync", !self->m_isLiveSource, NULL);
 +    if (self->m_videoSink)
 +        g_object_set(G_OBJECT(self->m_videoSink), "sync", !self->m_isLiveSource, NULL);
- 
+
      gst_object_unref(source);
  }
 @@ -1623,7 +1679,11 @@ GstAutoplugSelectResult QGstreamerPlayerSession::handleAutoplugSelect(GstBin *bi
@@ -7298,7 +7213,7 @@ index 15924a6..b5c354d 100644
 +#else
          GstCaps *sinkCaps = gst_pad_get_caps(sinkPad);
 +#endif
- 
+
  #if (GST_VERSION_MAJOR == 0) && ((GST_VERSION_MINOR < 10) || (GST_VERSION_MICRO < 33))
          if (!factory_can_src_any_caps(factory, sinkCaps))
 @@ -1652,8 +1712,10 @@ void QGstreamerPlayerSession::handleElementAdded(GstBin *bin, GstElement *elemen
@@ -7324,7 +7239,7 @@ index 15924a6..b5c354d 100644
          //Don't touch other bins since they may have unrelated queues
          g_signal_connect(element, "element-added",
 @@ -1711,68 +1773,30 @@ void QGstreamerPlayerSession::showPrerollFrames(bool enabled)
- 
+
  void QGstreamerPlayerSession::addProbe(QGstreamerVideoProbeControl* probe)
  {
 -    QMutexLocker locker(&m_videoProbeMutex);
@@ -7337,7 +7252,7 @@ index 15924a6..b5c354d 100644
 +    m_videoProbe = probe;
 +    addVideoBufferProbe();
  }
- 
+
  void QGstreamerPlayerSession::removeProbe(QGstreamerVideoProbeControl* probe)
  {
 -    QMutexLocker locker(&m_videoProbeMutex);
@@ -7364,7 +7279,7 @@ index 15924a6..b5c354d 100644
 +    removeVideoBufferProbe();
 +    m_videoProbe = 0;
  }
- 
+
  void QGstreamerPlayerSession::addProbe(QGstreamerAudioProbeControl* probe)
  {
 -    QMutexLocker locker(&m_audioProbeMutex);
@@ -7377,7 +7292,7 @@ index 15924a6..b5c354d 100644
 +    m_audioProbe = probe;
 +    addAudioBufferProbe();
  }
- 
+
  void QGstreamerPlayerSession::removeProbe(QGstreamerAudioProbeControl* probe)
  {
 -    QMutexLocker locker(&m_audioProbeMutex);
@@ -7402,16 +7317,16 @@ index 15924a6..b5c354d 100644
 +    removeAudioBufferProbe();
 +    m_audioProbe = 0;
  }
- 
+
  // This function is similar to stop(),
 @@ -1797,80 +1821,62 @@ void QGstreamerPlayerSession::endOfMediaReset()
- 
+
  void QGstreamerPlayerSession::removeVideoBufferProbe()
  {
 -    if (m_videoBufferProbeId == -1)
 +    if (!m_videoProbe)
          return;
- 
+
 -    if (!m_videoSink) {
 -        m_videoBufferProbeId = -1;
 -        return;
@@ -7426,14 +7341,14 @@ index 15924a6..b5c354d 100644
 -
 -    m_videoBufferProbeId = -1;
  }
- 
+
  void QGstreamerPlayerSession::addVideoBufferProbe()
  {
 -    Q_ASSERT(m_videoBufferProbeId == -1);
 -    if (!m_videoSink)
 +    if (!m_videoProbe)
          return;
- 
+
      GstPad *pad = gst_element_get_static_pad(m_videoSink, "sink");
      if (pad) {
 -        m_videoBufferProbeId = gst_pad_add_buffer_probe(pad, G_CALLBACK(padVideoBufferProbe), this);
@@ -7441,7 +7356,7 @@ index 15924a6..b5c354d 100644
          gst_object_unref(GST_OBJECT(pad));
      }
  }
- 
+
  void QGstreamerPlayerSession::removeAudioBufferProbe()
  {
 -    if (m_audioBufferProbeId == -1)
@@ -7452,7 +7367,7 @@ index 15924a6..b5c354d 100644
 +    if (!m_audioProbe)
          return;
 -    }
- 
+
      GstPad *pad = gst_element_get_static_pad(m_audioSink, "sink");
      if (pad) {
 -        gst_pad_remove_buffer_probe(pad, m_audioBufferProbeId);
@@ -7462,14 +7377,14 @@ index 15924a6..b5c354d 100644
 -
 -    m_audioBufferProbeId = -1;
  }
- 
+
  void QGstreamerPlayerSession::addAudioBufferProbe()
  {
 -    Q_ASSERT(m_audioBufferProbeId == -1);
 -    if (!m_audioSink)
 +    if (!m_audioProbe)
          return;
- 
+
      GstPad *pad = gst_element_get_static_pad(m_audioSink, "sink");
      if (pad) {
 -        m_audioBufferProbeId = gst_pad_add_buffer_probe(pad, G_CALLBACK(padAudioBufferProbe), this);
@@ -7477,7 +7392,7 @@ index 15924a6..b5c354d 100644
          gst_object_unref(GST_OBJECT(pad));
      }
  }
- 
+
  void QGstreamerPlayerSession::flushVideoProbes()
  {
 -    QMutexLocker locker(&m_videoProbeMutex);
@@ -7486,7 +7401,7 @@ index 15924a6..b5c354d 100644
 +    if (m_videoProbe)
 +        m_videoProbe->startFlushing();
  }
- 
+
  void QGstreamerPlayerSession::resumeVideoProbes()
  {
 -    QMutexLocker locker(&m_videoProbeMutex);
@@ -7495,23 +7410,23 @@ index 15924a6..b5c354d 100644
 +    if (m_videoProbe)
 +        m_videoProbe->stopFlushing();
  }
- 
+
  void QGstreamerPlayerSession::playlistTypeFindFunction(GstTypeFind *find, gpointer userData)
 @@ -1878,7 +1884,11 @@ void QGstreamerPlayerSession::playlistTypeFindFunction(GstTypeFind *find, gpoint
      QGstreamerPlayerSession* session = (QGstreamerPlayerSession*)userData;
- 
+
      const gchar *uri = 0;
 +#if GST_CHECK_VERSION(1,0,0)
 +    g_object_get(G_OBJECT(session->m_playbin), "current-uri", &uri, NULL);
 +#else
      g_object_get(G_OBJECT(session->m_playbin), "uri", &uri, NULL);
 +#endif
- 
+
      guint64 length = gst_type_find_get_length(find);
      if (!length)
 @@ -1887,7 +1897,7 @@ void QGstreamerPlayerSession::playlistTypeFindFunction(GstTypeFind *find, gpoint
          length = qMin(length, guint64(1024));
- 
+
      while (length > 0) {
 -        guint8 *data = gst_type_find_peek(find, 0, length);
 +        const guint8 *data = gst_type_find_peek(find, 0, length);
@@ -7523,17 +7438,17 @@ index f2e760a..92b4a0c 100644
 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.h
 +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.h
 @@ -119,11 +119,9 @@ public:
- 
+
      void addProbe(QGstreamerVideoProbeControl* probe);
      void removeProbe(QGstreamerVideoProbeControl* probe);
 -    static gboolean padVideoBufferProbe(GstPad *pad, GstBuffer *buffer, gpointer user_data);
- 
+
      void addProbe(QGstreamerAudioProbeControl* probe);
      void removeProbe(QGstreamerAudioProbeControl* probe);
 -    static gboolean padAudioBufferProbe(GstPad *pad, GstBuffer *buffer, gpointer user_data);
- 
+
      void endOfMediaReset();
- 
+
 @@ -172,7 +170,9 @@ private:
      static void playbinNotifySource(GObject *o, GParamSpec *p, gpointer d);
      static void handleVolumeChange(GObject *o, GParamSpec *p, gpointer d);
@@ -7547,7 +7462,7 @@ index f2e760a..92b4a0c 100644
 @@ -194,11 +194,14 @@ private:
      QGstreamerBusHelper* m_busHelper;
      GstElement* m_playbin;
- 
+
 +    GstElement* m_videoSink;
 +
      GstElement* m_videoOutputBin;
@@ -7559,11 +7474,11 @@ index f2e760a..92b4a0c 100644
 +#endif
      GstElement* m_pendingVideoSink;
      GstElement* m_nullVideoSink;
- 
+
 @@ -218,13 +221,8 @@ private:
      QList<QMediaStreamsControl::StreamType> m_streamTypes;
      QMap<QMediaStreamsControl::StreamType, int> m_playbin2StreamOffset;
- 
+
 -    QList<QGstreamerVideoProbeControl*> m_videoProbes;
 -    QMutex m_videoProbeMutex;
 -    int m_videoBufferProbeId;
@@ -7573,16 +7488,16 @@ index f2e760a..92b4a0c 100644
 -    int m_audioBufferProbeId;
 +    QGstreamerVideoProbeControl *m_videoProbe;
 +    QGstreamerAudioProbeControl *m_audioProbe;
- 
+
      int m_volume;
      qreal m_playbackRate;
 @@ -252,6 +250,7 @@ private:
      bool m_isLiveSource;
- 
+
      bool m_isPlaylist;
 +    gulong pad_probe_id;
  };
- 
+
  QT_END_NAMESPACE
 diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
 index 344f1f5..2711ae0 100644
@@ -7591,7 +7506,7 @@ index 344f1f5..2711ae0 100644
 @@ -495,6 +495,8 @@ void tst_QCameraBackend::testCaptureToBuffer()
          QCOMPARE(imageCapture.bufferFormat(), QVideoFrame::Format_Jpeg);
      }
- 
+
 +    QTRY_VERIFY(imageCapture.isReadyForCapture());
 +
      //Try to capture to both buffer and file
@@ -7600,18 +7515,18 @@ index 344f1f5..2711ae0 100644
 @@ -651,11 +653,11 @@ void tst_QCameraBackend::testVideoRecording()
  {
      QFETCH(QByteArray, device);
- 
+
 -    QCamera *camera = device.isEmpty() ? new QCamera : new QCamera(device);
 +    QScopedPointer<QCamera> camera(device.isEmpty() ? new QCamera : new QCamera(device));
- 
+
 -    QMediaRecorder recorder(camera);
 +    QMediaRecorder recorder(camera.data());
- 
+
 -    QSignalSpy errorSignal(camera, SIGNAL(error(QCamera::Error)));
 +    QSignalSpy errorSignal(camera.data(), SIGNAL(error(QCamera::Error)));
      QSignalSpy recorderErrorSignal(&recorder, SIGNAL(error(QMediaRecorder::Error)));
      QSignalSpy recorderStatusSignal(&recorder, SIGNAL(statusChanged(QMediaRecorder::Status)));
- 
+
 @@ -702,8 +704,6 @@ void tst_QCameraBackend::testVideoRecording()
      camera->setCaptureMode(QCamera::CaptureStillImage);
      QTRY_COMPARE(recorder.status(), QMediaRecorder::UnloadedStatus);
@@ -7619,14 +7534,14 @@ index 344f1f5..2711ae0 100644
 -
 -    delete camera;
  }
- 
+
  QTEST_MAIN(tst_QCameraBackend)
 diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
 index 0a1441c..ddf438b 100644
 --- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
 +++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
 @@ -724,7 +724,7 @@ void tst_QMediaPlayerBackend::seekPauseSeek()
- 
+
      {
          QVideoFrame frame = surface->m_frameList.back();
 -        const qint64 elapsed = frame.startTime() - position;
@@ -7635,7 +7550,7 @@ index 0a1441c..ddf438b 100644
          QCOMPARE(frame.width(), 160);
          QCOMPARE(frame.height(), 120);
 @@ -748,7 +748,7 @@ void tst_QMediaPlayerBackend::seekPauseSeek()
- 
+
      {
          QVideoFrame frame = surface->m_frameList.back();
 -        const qint64 elapsed = frame.startTime() - position;
@@ -7643,6 +7558,3 @@ index 0a1441c..ddf438b 100644
          QVERIFY2(qAbs(elapsed) < (qint64)500, QByteArray::number(elapsed).constData());
          QCOMPARE(frame.width(), 160);
          QCOMPARE(frame.height(), 120);
--- 
-1.9.3
-
diff --git a/qt5-qtmultimedia.spec b/qt5-qtmultimedia.spec
index 86f3989..cdf01ed 100644
--- a/qt5-qtmultimedia.spec
+++ b/qt5-qtmultimedia.spec
@@ -19,7 +19,7 @@
 
 Summary: Qt5 - Multimedia support
 Name:    qt5-%{qt_module}
-Version: 5.4.0
+Version: 5.4.1
 Release: 1%{?dist}
 
 # See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
@@ -199,6 +199,9 @@ popd
 
 
 %changelog
+* Tue Feb 24 2015 Jan Grulich <jgrulich at redhat.com> 5.4.1-1
+- 5.4.1
+
 * Thu Dec 11 2014 Rex Dieter <rdieter at fedoraproject.org> 5.4.0-1
 - 5.4.0 (final) + backported gst1 support from dev/ branch
 
diff --git a/sources b/sources
index 69c5717..707518a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-3a6a415813b54a54cf283a5e2906e012  qtmultimedia-opensource-src-5.4.0.tar.xz
+7412a5c62da71b44b9f29e29fdc6af4d  qtmultimedia-opensource-src-5.4.1.tar.xz
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/qt5-qtmultimedia.git/commit/?h=el6&id=a7e91cfce78aecdf35c3654d9511f732976ee7e2


More information about the scm-commits mailing list