From 0beea7fd96cc32965a4e8bcc3c7de9608694accb Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Wed, 14 Apr 2010 16:24:41 +1000
Subject: Gstreamer media backend: seek to media start on end of stream.

To ensure the sequential play() calls work without setMedia().
Since in many case new media is assigned to playback after EOS,
seeking is delayed and performed just before playing the same media.

Task-number: QTBUG-9798
Reviewed-by: Andrew den Exter
---
 .../mediaplayer/qgstreamerplayercontrol.cpp        | 98 ++++++++++++++++------
 .../mediaplayer/qgstreamerplayercontrol.h          |  2 +
 2 files changed, 76 insertions(+), 24 deletions(-)

diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
index e646693..6dd914a 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
@@ -62,6 +62,7 @@ QGstreamerPlayerControl::QGstreamerPlayerControl(QGstreamerPlayerSession *sessio
     , m_state(QMediaPlayer::StoppedState)
     , m_mediaStatus(QMediaPlayer::NoMedia)
     , m_bufferProgress(-1)
+    , m_seekToStartPending(false)
     , m_stream(0)
     , m_fifoNotifier(0)
     , m_fifoCanWrite(false)
@@ -107,7 +108,7 @@ QGstreamerPlayerControl::~QGstreamerPlayerControl()
 
 qint64 QGstreamerPlayerControl::position() const
 {
-    return m_session->position();
+    return m_seekToStartPending ? 0 : m_session->position();
 }
 
 qint64 QGstreamerPlayerControl::duration() const
@@ -170,37 +171,77 @@ void QGstreamerPlayerControl::setPlaybackRate(qreal rate)
 
 void QGstreamerPlayerControl::setPosition(qint64 pos)
 {
-    m_session->seek(pos);
+    if (m_mediaStatus == QMediaPlayer::EndOfMedia) {
+        m_mediaStatus = QMediaPlayer::LoadedMedia;
+        emit mediaStatusChanged(m_mediaStatus);
+    }
+
+    if (m_session->seek(pos))
+        m_seekToStartPending = false;
 }
 
 void QGstreamerPlayerControl::play()
 {
-    if (m_session->play()) {
-        if (m_state != QMediaPlayer::PlayingState)
-            emit stateChanged(m_state = QMediaPlayer::PlayingState);
-    }
+    playOrPause(QMediaPlayer::PlayingState);
 }
 
 void QGstreamerPlayerControl::pause()
 {
-    if (m_session->pause()) {
-        if (m_state != QMediaPlayer::PausedState)
-            emit stateChanged(m_state = QMediaPlayer::PausedState);
-    }
+    playOrPause(QMediaPlayer::PausedState);
 }
 
-void QGstreamerPlayerControl::stop()
+void QGstreamerPlayerControl::playOrPause(QMediaPlayer::State newState)
 {
-    if (m_state != QMediaPlayer::StoppedState) {
+    QMediaPlayer::State oldState = m_state;
+    QMediaPlayer::MediaStatus oldMediaStatus = m_mediaStatus;
+
+    if (m_mediaStatus == QMediaPlayer::EndOfMedia)
+        m_mediaStatus = QMediaPlayer::BufferedMedia;
+
+    if (m_seekToStartPending) {
         m_session->pause();
         if (!m_session->seek(0)) {
             m_bufferProgress = -1;
             m_session->stop();
-            m_session->pause();
+            m_mediaStatus = QMediaPlayer::LoadingMedia;
         }
+        m_seekToStartPending = false;
+    }
+
+    bool ok = false;
+    if (newState == QMediaPlayer::PlayingState)
+        ok = m_session->play();
+    else
+        ok = m_session->pause();
+
+    if (!ok)
+        return;
+
+    m_state = newState;
+
+    if (m_mediaStatus == QMediaPlayer::EndOfMedia || m_mediaStatus == QMediaPlayer::LoadedMedia) {
+        if (m_bufferProgress == -1 || m_bufferProgress == 100)
+            m_mediaStatus = QMediaPlayer::BufferedMedia;
+        else
+            m_mediaStatus = QMediaPlayer::BufferingMedia;
+    }
+
+    if (m_state != oldState)
+        emit stateChanged(m_state);
+    if (m_mediaStatus != oldMediaStatus)
+        emit mediaStatusChanged(m_mediaStatus);
+
+}
+
+void QGstreamerPlayerControl::stop()
+{
+    if (m_state != QMediaPlayer::StoppedState) {
+        m_state = QMediaPlayer::StoppedState;
+        m_session->pause();
+        m_seekToStartPending = true;
+        updateState(m_session->state());
         emit positionChanged(0);
-        if (m_state != QMediaPlayer::StoppedState)
-            emit stateChanged(m_state = QMediaPlayer::StoppedState);
+        emit stateChanged(m_state);
     }
 }
 
@@ -244,6 +285,7 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
 
     m_currentResource = content;
     m_stream = stream;
+    m_seekToStartPending = false;
 
     QUrl url;
 
@@ -255,7 +297,7 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
         url = content.canonicalUrl();
     }
 
-    m_session->load(url);
+    m_session->load(url);    
 
     if (m_fifoFd[1] >= 0) {
         m_fifoCanWrite = true;
@@ -296,24 +338,34 @@ bool QGstreamerPlayerControl::isVideoAvailable() const
 void QGstreamerPlayerControl::updateState(QMediaPlayer::State state)
 {
     QMediaPlayer::MediaStatus oldStatus = m_mediaStatus;
+    QMediaPlayer::State oldState = m_state;
 
     switch (state) {
     case QMediaPlayer::StoppedState:
-        if (m_state != QMediaPlayer::StoppedState)
-            emit stateChanged(m_state = QMediaPlayer::StoppedState);
+        m_state = QMediaPlayer::StoppedState;
+        if (m_currentResource.isNull())
+            m_mediaStatus = QMediaPlayer::NoMedia;
+        else
+            m_mediaStatus = QMediaPlayer::LoadingMedia;
         break;
 
     case QMediaPlayer::PlayingState:
     case QMediaPlayer::PausedState:
-        if (m_state == QMediaPlayer::StoppedState)
+        if (m_state == QMediaPlayer::StoppedState) {
             m_mediaStatus = QMediaPlayer::LoadedMedia;
-        else {            
-            if (m_bufferProgress == -1)
+        } else {
+            if (m_bufferProgress == -1 || m_bufferProgress == 100)
                 m_mediaStatus = QMediaPlayer::BufferedMedia;
         }
         break;
     }
 
+    //EndOfMedia status should be kept, until reset by pause, play or setMedia
+    if (oldStatus == QMediaPlayer::EndOfMedia)
+        m_mediaStatus = QMediaPlayer::EndOfMedia;
+
+    if (m_state != oldState)
+        emit stateChanged(m_state);
     if (m_mediaStatus != oldStatus)
         emit mediaStatusChanged(m_mediaStatus);
 }
@@ -321,9 +373,7 @@ void QGstreamerPlayerControl::updateState(QMediaPlayer::State state)
 void QGstreamerPlayerControl::processEOS()
 {
     m_mediaStatus = QMediaPlayer::EndOfMedia;
-    m_state = QMediaPlayer::StoppedState;
-
-    emit stateChanged(m_state);
+    stop();
     emit mediaStatusChanged(m_mediaStatus);
 }
 
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
index 0c53945..1764eb0 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
@@ -114,11 +114,13 @@ private Q_SLOTS:
 private:
     bool openFifo();
     void closeFifo();
+    void playOrPause(QMediaPlayer::State state);
 
     QGstreamerPlayerSession *m_session;
     QMediaPlayer::State m_state;
     QMediaPlayer::MediaStatus m_mediaStatus;
     int m_bufferProgress;
+    bool m_seekToStartPending;
     QMediaContent m_currentResource;
     QIODevice *m_stream;
     QSocketNotifier *m_fifoNotifier;
-- 
cgit v0.12


From e85223d233c0e1d6beca748332b8fbaba3ebbf2d Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Thu, 15 Apr 2010 19:08:00 +1000
Subject: Create Mediaservices lib, separate from Multimedia.

---
 bin/syncqt                                         |    3 +-
 configure                                          |   55 +-
 demos/multimedia/player/player.cpp                 |   12 +-
 demos/multimedia/player/player.pro                 |    2 +-
 demos/multimedia/player/playercontrols.h           |    2 +-
 demos/multimedia/player/videowidget.h              |    2 +-
 mkspecs/features/qt.prf                            |    3 +-
 src/3rdparty/webkit/WebCore/WebCore.pro            |    4 +-
 src/imports/multimedia/multimedia.cpp              |    2 +-
 src/imports/multimedia/multimedia.pro              |    2 +-
 src/imports/multimedia/qdeclarativeaudio.cpp       |    2 +-
 src/imports/multimedia/qdeclarativemediabase.cpp   |    8 +-
 src/imports/multimedia/qdeclarativemediabase_p.h   |    2 +-
 src/imports/multimedia/qdeclarativevideo.cpp       |  152 +-
 src/imports/multimedia/qdeclarativevideo_p.h       |    2 +-
 .../multimedia/qmetadatacontrolmetaobject.cpp      |  152 +-
 .../multimedia/qmetadatacontrolmetaobject_p.h      |    2 +-
 src/multimedia/audio/audio.pri                     |   73 -
 src/multimedia/audio/qaudio.cpp                    |  104 --
 src/multimedia/audio/qaudio.h                      |   71 -
 src/multimedia/audio/qaudio_mac.cpp                |  142 --
 src/multimedia/audio/qaudio_mac_p.h                |  144 --
 src/multimedia/audio/qaudio_symbian_p.cpp          |  395 -----
 src/multimedia/audio/qaudio_symbian_p.h            |  156 --
 src/multimedia/audio/qaudiodevicefactory.cpp       |  257 ----
 src/multimedia/audio/qaudiodevicefactory_p.h       |   97 --
 src/multimedia/audio/qaudiodeviceinfo.cpp          |  400 -----
 src/multimedia/audio/qaudiodeviceinfo.h            |  114 --
 src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp   |  486 ------
 src/multimedia/audio/qaudiodeviceinfo_alsa_p.h     |  117 --
 src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp    |  357 -----
 src/multimedia/audio/qaudiodeviceinfo_mac_p.h      |   97 --
 .../audio/qaudiodeviceinfo_symbian_p.cpp           |  200 ---
 src/multimedia/audio/qaudiodeviceinfo_symbian_p.h  |  107 --
 src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp  |  433 ------
 src/multimedia/audio/qaudiodeviceinfo_win32_p.h    |  112 --
 src/multimedia/audio/qaudioengine.cpp              |  343 -----
 src/multimedia/audio/qaudioengine.h                |  131 --
 src/multimedia/audio/qaudioengineplugin.cpp        |   54 -
 src/multimedia/audio/qaudioengineplugin.h          |   93 --
 src/multimedia/audio/qaudioformat.cpp              |  407 -----
 src/multimedia/audio/qaudioformat.h                |  107 --
 src/multimedia/audio/qaudioinput.cpp               |  432 ------
 src/multimedia/audio/qaudioinput.h                 |  111 --
 src/multimedia/audio/qaudioinput_alsa_p.cpp        |  706 ---------
 src/multimedia/audio/qaudioinput_alsa_p.h          |  158 --
 src/multimedia/audio/qaudioinput_mac_p.cpp         |  956 ------------
 src/multimedia/audio/qaudioinput_mac_p.h           |  169 ---
 src/multimedia/audio/qaudioinput_symbian_p.cpp     |  594 --------
 src/multimedia/audio/qaudioinput_symbian_p.h       |  188 ---
 src/multimedia/audio/qaudioinput_win32_p.cpp       |  613 --------
 src/multimedia/audio/qaudioinput_win32_p.h         |  159 --
 src/multimedia/audio/qaudiooutput.cpp              |  411 -----
 src/multimedia/audio/qaudiooutput.h                |  111 --
 src/multimedia/audio/qaudiooutput_alsa_p.cpp       |  780 ----------
 src/multimedia/audio/qaudiooutput_alsa_p.h         |  166 ---
 src/multimedia/audio/qaudiooutput_mac_p.cpp        |  712 ---------
 src/multimedia/audio/qaudiooutput_mac_p.h          |  167 ---
 src/multimedia/audio/qaudiooutput_symbian_p.cpp    |  697 ---------
 src/multimedia/audio/qaudiooutput_symbian_p.h      |  210 ---
 src/multimedia/audio/qaudiooutput_win32_p.cpp      |  606 --------
 src/multimedia/audio/qaudiooutput_win32_p.h        |  156 --
 src/multimedia/base/base.pri                       |   69 -
 src/multimedia/base/qgraphicsvideoitem.cpp         |  437 ------
 src/multimedia/base/qgraphicsvideoitem.h           |  112 --
 .../base/qlocalmediaplaylistprovider.cpp           |  196 ---
 src/multimedia/base/qlocalmediaplaylistprovider.h  |   87 --
 src/multimedia/base/qmediacontent.cpp              |  242 ---
 src/multimedia/base/qmediacontent.h                |   93 --
 src/multimedia/base/qmediacontrol.cpp              |  140 --
 src/multimedia/base/qmediacontrol.h                |   82 -
 src/multimedia/base/qmediacontrol_p.h              |   74 -
 src/multimedia/base/qmediaobject.cpp               |  419 ------
 src/multimedia/base/qmediaobject.h                 |  121 --
 src/multimedia/base/qmediaobject_p.h               |   95 --
 src/multimedia/base/qmediaplaylist.cpp             |  724 ---------
 src/multimedia/base/qmediaplaylist.h               |  147 --
 src/multimedia/base/qmediaplaylist_p.h             |  172 ---
 src/multimedia/base/qmediaplaylistcontrol.cpp      |  204 ---
 src/multimedia/base/qmediaplaylistcontrol.h        |   97 --
 src/multimedia/base/qmediaplaylistioplugin.cpp     |  192 ---
 src/multimedia/base/qmediaplaylistioplugin.h       |  126 --
 src/multimedia/base/qmediaplaylistnavigator.cpp    |  545 -------
 src/multimedia/base/qmediaplaylistnavigator.h      |  116 --
 src/multimedia/base/qmediaplaylistprovider.cpp     |  308 ----
 src/multimedia/base/qmediaplaylistprovider.h       |  114 --
 src/multimedia/base/qmediaplaylistprovider_p.h     |   75 -
 src/multimedia/base/qmediapluginloader.cpp         |  135 --
 src/multimedia/base/qmediapluginloader_p.h         |   92 --
 src/multimedia/base/qmediaresource.cpp             |  399 -----
 src/multimedia/base/qmediaresource.h               |  134 --
 src/multimedia/base/qmediaservice.cpp              |  140 --
 src/multimedia/base/qmediaservice.h                |   90 --
 src/multimedia/base/qmediaservice_p.h              |   75 -
 src/multimedia/base/qmediaserviceprovider.cpp      |  738 ---------
 src/multimedia/base/qmediaserviceprovider.h        |  174 ---
 src/multimedia/base/qmediaserviceproviderplugin.h  |  125 --
 src/multimedia/base/qmediatimerange.cpp            |  708 ---------
 src/multimedia/base/qmediatimerange.h              |  135 --
 src/multimedia/base/qmetadatacontrol.cpp           |  185 ---
 src/multimedia/base/qmetadatacontrol.h             |   92 --
 src/multimedia/base/qpaintervideosurface.cpp       | 1565 --------------------
 src/multimedia/base/qpaintervideosurface_mac.mm    |  283 ----
 src/multimedia/base/qpaintervideosurface_mac_p.h   |  100 --
 src/multimedia/base/qpaintervideosurface_p.h       |  178 ---
 src/multimedia/base/qtmedianamespace.h             |  194 ---
 src/multimedia/base/qtmedianamespace.qdoc          |  214 ---
 src/multimedia/base/qvideodevicecontrol.cpp        |  155 --
 src/multimedia/base/qvideodevicecontrol.h          |   90 --
 src/multimedia/base/qvideooutputcontrol.cpp        |  135 --
 src/multimedia/base/qvideooutputcontrol.h          |   91 --
 src/multimedia/base/qvideorenderercontrol.cpp      |  124 --
 src/multimedia/base/qvideorenderercontrol.h        |   77 -
 src/multimedia/base/qvideowidget.cpp               |  944 ------------
 src/multimedia/base/qvideowidget.h                 |  131 --
 src/multimedia/base/qvideowidget_p.h               |  271 ----
 src/multimedia/base/qvideowidgetcontrol.cpp        |  235 ---
 src/multimedia/base/qvideowidgetcontrol.h          |  105 --
 src/multimedia/base/qvideowindowcontrol.cpp        |  275 ----
 src/multimedia/base/qvideowindowcontrol.h          |  111 --
 src/multimedia/effects/effects.pri                 |   26 -
 src/multimedia/effects/qsoundeffect.cpp            |  207 ---
 src/multimedia/effects/qsoundeffect_p.h            |  109 --
 src/multimedia/effects/qsoundeffect_pulse_p.cpp    |  499 -------
 src/multimedia/effects/qsoundeffect_pulse_p.h      |  137 --
 src/multimedia/effects/qsoundeffect_qmedia_p.cpp   |  132 --
 src/multimedia/effects/qsoundeffect_qmedia_p.h     |  103 --
 src/multimedia/effects/qsoundeffect_qsound_p.cpp   |  131 --
 src/multimedia/effects/qsoundeffect_qsound_p.h     |  102 --
 src/multimedia/effects/wavedecoder_p.cpp           |  151 --
 src/multimedia/effects/wavedecoder_p.h             |  133 --
 src/multimedia/mediaservices/base/base.pri         |   69 +
 .../mediaservices/base/qgraphicsvideoitem.cpp      |  437 ++++++
 .../mediaservices/base/qgraphicsvideoitem.h        |  112 ++
 .../base/qlocalmediaplaylistprovider.cpp           |  196 +++
 .../base/qlocalmediaplaylistprovider.h             |   87 ++
 .../mediaservices/base/qmediacontent.cpp           |  242 +++
 src/multimedia/mediaservices/base/qmediacontent.h  |   93 ++
 .../mediaservices/base/qmediacontrol.cpp           |  140 ++
 src/multimedia/mediaservices/base/qmediacontrol.h  |   82 +
 .../mediaservices/base/qmediacontrol_p.h           |   74 +
 src/multimedia/mediaservices/base/qmediaobject.cpp |  419 ++++++
 src/multimedia/mediaservices/base/qmediaobject.h   |  121 ++
 src/multimedia/mediaservices/base/qmediaobject_p.h |   95 ++
 .../mediaservices/base/qmediaplaylist.cpp          |  724 +++++++++
 src/multimedia/mediaservices/base/qmediaplaylist.h |  147 ++
 .../mediaservices/base/qmediaplaylist_p.h          |  172 +++
 .../mediaservices/base/qmediaplaylistcontrol.cpp   |  204 +++
 .../mediaservices/base/qmediaplaylistcontrol.h     |   97 ++
 .../mediaservices/base/qmediaplaylistioplugin.cpp  |  192 +++
 .../mediaservices/base/qmediaplaylistioplugin.h    |  126 ++
 .../mediaservices/base/qmediaplaylistnavigator.cpp |  545 +++++++
 .../mediaservices/base/qmediaplaylistnavigator.h   |  116 ++
 .../mediaservices/base/qmediaplaylistprovider.cpp  |  308 ++++
 .../mediaservices/base/qmediaplaylistprovider.h    |  114 ++
 .../mediaservices/base/qmediaplaylistprovider_p.h  |   75 +
 .../mediaservices/base/qmediapluginloader.cpp      |  135 ++
 .../mediaservices/base/qmediapluginloader_p.h      |   92 ++
 .../mediaservices/base/qmediaresource.cpp          |  399 +++++
 src/multimedia/mediaservices/base/qmediaresource.h |  134 ++
 .../mediaservices/base/qmediaservice.cpp           |  140 ++
 src/multimedia/mediaservices/base/qmediaservice.h  |   90 ++
 .../mediaservices/base/qmediaservice_p.h           |   75 +
 .../mediaservices/base/qmediaserviceprovider.cpp   |  738 +++++++++
 .../mediaservices/base/qmediaserviceprovider.h     |  174 +++
 .../base/qmediaserviceproviderplugin.h             |  125 ++
 .../mediaservices/base/qmediatimerange.cpp         |  708 +++++++++
 .../mediaservices/base/qmediatimerange.h           |  135 ++
 .../mediaservices/base/qmetadatacontrol.cpp        |  185 +++
 .../mediaservices/base/qmetadatacontrol.h          |   92 ++
 .../mediaservices/base/qpaintervideosurface.cpp    | 1565 ++++++++++++++++++++
 .../mediaservices/base/qpaintervideosurface_mac.mm |  283 ++++
 .../base/qpaintervideosurface_mac_p.h              |  100 ++
 .../mediaservices/base/qpaintervideosurface_p.h    |  178 +++
 .../mediaservices/base/qtmedianamespace.h          |  194 +++
 .../mediaservices/base/qtmedianamespace.qdoc       |  214 +++
 .../mediaservices/base/qvideodevicecontrol.cpp     |  155 ++
 .../mediaservices/base/qvideodevicecontrol.h       |   90 ++
 .../mediaservices/base/qvideooutputcontrol.cpp     |  135 ++
 .../mediaservices/base/qvideooutputcontrol.h       |   91 ++
 .../mediaservices/base/qvideorenderercontrol.cpp   |  124 ++
 .../mediaservices/base/qvideorenderercontrol.h     |   77 +
 src/multimedia/mediaservices/base/qvideowidget.cpp |  944 ++++++++++++
 src/multimedia/mediaservices/base/qvideowidget.h   |  131 ++
 src/multimedia/mediaservices/base/qvideowidget_p.h |  271 ++++
 .../mediaservices/base/qvideowidgetcontrol.cpp     |  235 +++
 .../mediaservices/base/qvideowidgetcontrol.h       |  105 ++
 .../mediaservices/base/qvideowindowcontrol.cpp     |  275 ++++
 .../mediaservices/base/qvideowindowcontrol.h       |  111 ++
 src/multimedia/mediaservices/effects/effects.pri   |   26 +
 .../mediaservices/effects/qsoundeffect.cpp         |  207 +++
 .../mediaservices/effects/qsoundeffect_p.h         |  109 ++
 .../mediaservices/effects/qsoundeffect_pulse_p.cpp |  499 +++++++
 .../mediaservices/effects/qsoundeffect_pulse_p.h   |  137 ++
 .../effects/qsoundeffect_qmedia_p.cpp              |  132 ++
 .../mediaservices/effects/qsoundeffect_qmedia_p.h  |  103 ++
 .../effects/qsoundeffect_qsound_p.cpp              |  131 ++
 .../mediaservices/effects/qsoundeffect_qsound_p.h  |  102 ++
 .../mediaservices/effects/wavedecoder_p.cpp        |  151 ++
 .../mediaservices/effects/wavedecoder_p.h          |  133 ++
 src/multimedia/mediaservices/mediaservices.pro     |   16 +
 src/multimedia/mediaservices/playback/playback.pri |   11 +
 .../mediaservices/playback/qmediaplayer.cpp        |  982 ++++++++++++
 .../mediaservices/playback/qmediaplayer.h          |  203 +++
 .../mediaservices/playback/qmediaplayercontrol.cpp |  378 +++++
 .../mediaservices/playback/qmediaplayercontrol.h   |  131 ++
 src/multimedia/multimedia.pro                      |   19 +-
 src/multimedia/multimedia/audio/audio.pri          |   73 +
 src/multimedia/multimedia/audio/qaudio.cpp         |  104 ++
 src/multimedia/multimedia/audio/qaudio.h           |   71 +
 src/multimedia/multimedia/audio/qaudio_mac.cpp     |  142 ++
 src/multimedia/multimedia/audio/qaudio_mac_p.h     |  144 ++
 .../multimedia/audio/qaudio_symbian_p.cpp          |  395 +++++
 src/multimedia/multimedia/audio/qaudio_symbian_p.h |  156 ++
 .../multimedia/audio/qaudiodevicefactory.cpp       |  257 ++++
 .../multimedia/audio/qaudiodevicefactory_p.h       |   97 ++
 .../multimedia/audio/qaudiodeviceinfo.cpp          |  400 +++++
 src/multimedia/multimedia/audio/qaudiodeviceinfo.h |  114 ++
 .../multimedia/audio/qaudiodeviceinfo_alsa_p.cpp   |  486 ++++++
 .../multimedia/audio/qaudiodeviceinfo_alsa_p.h     |  117 ++
 .../multimedia/audio/qaudiodeviceinfo_mac_p.cpp    |  357 +++++
 .../multimedia/audio/qaudiodeviceinfo_mac_p.h      |   97 ++
 .../audio/qaudiodeviceinfo_symbian_p.cpp           |  200 +++
 .../multimedia/audio/qaudiodeviceinfo_symbian_p.h  |  107 ++
 .../multimedia/audio/qaudiodeviceinfo_win32_p.cpp  |  433 ++++++
 .../multimedia/audio/qaudiodeviceinfo_win32_p.h    |  112 ++
 src/multimedia/multimedia/audio/qaudioengine.cpp   |  343 +++++
 src/multimedia/multimedia/audio/qaudioengine.h     |  131 ++
 .../multimedia/audio/qaudioengineplugin.cpp        |   54 +
 .../multimedia/audio/qaudioengineplugin.h          |   93 ++
 src/multimedia/multimedia/audio/qaudioformat.cpp   |  407 +++++
 src/multimedia/multimedia/audio/qaudioformat.h     |  107 ++
 src/multimedia/multimedia/audio/qaudioinput.cpp    |  432 ++++++
 src/multimedia/multimedia/audio/qaudioinput.h      |  111 ++
 .../multimedia/audio/qaudioinput_alsa_p.cpp        |  706 +++++++++
 .../multimedia/audio/qaudioinput_alsa_p.h          |  158 ++
 .../multimedia/audio/qaudioinput_mac_p.cpp         |  956 ++++++++++++
 .../multimedia/audio/qaudioinput_mac_p.h           |  169 +++
 .../multimedia/audio/qaudioinput_symbian_p.cpp     |  594 ++++++++
 .../multimedia/audio/qaudioinput_symbian_p.h       |  188 +++
 .../multimedia/audio/qaudioinput_win32_p.cpp       |  613 ++++++++
 .../multimedia/audio/qaudioinput_win32_p.h         |  159 ++
 src/multimedia/multimedia/audio/qaudiooutput.cpp   |  411 +++++
 src/multimedia/multimedia/audio/qaudiooutput.h     |  111 ++
 .../multimedia/audio/qaudiooutput_alsa_p.cpp       |  780 ++++++++++
 .../multimedia/audio/qaudiooutput_alsa_p.h         |  166 +++
 .../multimedia/audio/qaudiooutput_mac_p.cpp        |  712 +++++++++
 .../multimedia/audio/qaudiooutput_mac_p.h          |  167 +++
 .../multimedia/audio/qaudiooutput_symbian_p.cpp    |  697 +++++++++
 .../multimedia/audio/qaudiooutput_symbian_p.h      |  210 +++
 .../multimedia/audio/qaudiooutput_win32_p.cpp      |  606 ++++++++
 .../multimedia/audio/qaudiooutput_win32_p.h        |  156 ++
 src/multimedia/multimedia/multimedia.pro           |   14 +
 .../multimedia/video/qabstractvideobuffer.cpp      |  200 +++
 .../multimedia/video/qabstractvideobuffer.h        |  106 ++
 .../multimedia/video/qabstractvideobuffer_p.h      |   73 +
 .../multimedia/video/qabstractvideosurface.cpp     |  283 ++++
 .../multimedia/video/qabstractvideosurface.h       |  110 ++
 .../multimedia/video/qabstractvideosurface_p.h     |   78 +
 .../multimedia/video/qimagevideobuffer.cpp         |  106 ++
 .../multimedia/video/qimagevideobuffer_p.h         |   79 +
 .../multimedia/video/qmemoryvideobuffer.cpp        |  129 ++
 .../multimedia/video/qmemoryvideobuffer_p.h        |   83 ++
 src/multimedia/multimedia/video/qvideoframe.cpp    |  741 +++++++++
 src/multimedia/multimedia/video/qvideoframe.h      |  169 +++
 .../multimedia/video/qvideosurfaceformat.cpp       |  704 +++++++++
 .../multimedia/video/qvideosurfaceformat.h         |  147 ++
 src/multimedia/multimedia/video/video.pri          |   21 +
 src/multimedia/playback/playback.pri               |   11 -
 src/multimedia/playback/qmediaplayer.cpp           |  982 ------------
 src/multimedia/playback/qmediaplayer.h             |  203 ---
 src/multimedia/playback/qmediaplayercontrol.cpp    |  378 -----
 src/multimedia/playback/qmediaplayercontrol.h      |  131 --
 src/multimedia/video/qabstractvideobuffer.cpp      |  200 ---
 src/multimedia/video/qabstractvideobuffer.h        |  106 --
 src/multimedia/video/qabstractvideobuffer_p.h      |   73 -
 src/multimedia/video/qabstractvideosurface.cpp     |  283 ----
 src/multimedia/video/qabstractvideosurface.h       |  110 --
 src/multimedia/video/qabstractvideosurface_p.h     |   78 -
 src/multimedia/video/qimagevideobuffer.cpp         |  106 --
 src/multimedia/video/qimagevideobuffer_p.h         |   79 -
 src/multimedia/video/qmemoryvideobuffer.cpp        |  129 --
 src/multimedia/video/qmemoryvideobuffer_p.h        |   83 --
 src/multimedia/video/qvideoframe.cpp               |  741 ---------
 src/multimedia/video/qvideoframe.h                 |  169 ---
 src/multimedia/video/qvideosurfaceformat.cpp       |  704 ---------
 src/multimedia/video/qvideosurfaceformat.h         |  147 --
 src/multimedia/video/video.pri                     |   21 -
 .../mediaservices/directshow/directshow.pro        |    4 +-
 .../mediaplayer/directshowaudioendpointcontrol.h   |    2 +-
 .../mediaplayer/directshowmetadatacontrol.cpp      |  116 +-
 .../mediaplayer/directshowmetadatacontrol.h        |    8 +-
 .../directshow/mediaplayer/directshowpinenum.cpp   |    2 +-
 .../mediaplayer/directshowplayercontrol.h          |    4 +-
 .../mediaplayer/directshowplayerservice.cpp        |    2 +-
 .../mediaplayer/directshowplayerservice.h          |    8 +-
 .../mediaplayer/directshowvideooutputcontrol.h     |    2 +-
 .../mediaplayer/directshowvideorenderercontrol.h   |    2 +-
 .../mediaplayer/mediasamplevideobuffer.h           |    2 +-
 .../mediaplayer/vmr9videowindowcontrol.h           |    2 +-
 src/plugins/mediaservices/gstreamer/gstreamer.pro  |    4 +-
 .../mediaplayer/qgstreamermetadataprovider.cpp     |  108 +-
 .../mediaplayer/qgstreamermetadataprovider.h       |    8 +-
 .../mediaplayer/qgstreamerplayercontrol.h          |    4 +-
 .../mediaplayer/qgstreamerplayersession.cpp        |    8 +-
 .../mediaplayer/qgstreamerplayersession.h          |    6 +-
 .../gstreamer/qgstreamerserviceplugin.cpp          |    2 +-
 .../gstreamer/qgstreamerserviceplugin.h            |    2 +-
 .../gstreamer/qgstreamervideoinputdevicecontrol.h  |    2 +-
 .../gstreamer/qgstreamervideooutputcontrol.h       |    2 +-
 .../gstreamer/qgstreamervideooverlay.h             |    2 +-
 .../gstreamer/qgstreamervideorenderer.h            |    2 +-
 .../gstreamer/qgstreamervideowidget.h              |    2 +-
 src/plugins/mediaservices/mediaservices.pro        |    2 +-
 .../qt7/mediaplayer/qt7playercontrol.h             |    4 +-
 .../qt7/mediaplayer/qt7playercontrol.mm            |    2 +-
 .../qt7/mediaplayer/qt7playermetadata.h            |   10 +-
 .../qt7/mediaplayer/qt7playermetadata.mm           |   20 +-
 .../qt7/mediaplayer/qt7playerservice.h             |    2 +-
 .../qt7/mediaplayer/qt7playerservice.mm            |    4 +-
 .../qt7/mediaplayer/qt7playersession.h             |    4 +-
 .../qt7/mediaplayer/qt7playersession.mm            |    2 +-
 src/plugins/mediaservices/qt7/qt7.pro              |    4 +-
 src/plugins/mediaservices/qt7/qt7movieviewoutput.h |    4 +-
 .../mediaservices/qt7/qt7movieviewrenderer.h       |    4 +-
 src/plugins/mediaservices/qt7/qt7serviceplugin.h   |    2 +-
 src/plugins/mediaservices/qt7/qt7serviceplugin.mm  |    2 +-
 .../mediaservices/qt7/qt7videooutputcontrol.h      |   10 +-
 src/src.pro                                        |    8 +-
 tests/auto/auto.pro                                |    1 +
 tests/auto/mediaservices.pro                       |   19 +
 tests/auto/multimedia.pro                          |   16 +-
 tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro |    2 +-
 tests/auto/qdeclarativevideo/qdeclarativevideo.pro |    2 +-
 .../auto/qgraphicsvideoitem/qgraphicsvideoitem.pro |    4 +-
 tests/auto/qmediacontent/qmediacontent.pro         |    2 +-
 tests/auto/qmediaobject/qmediaobject.pro           |    2 +-
 tests/auto/qmediaplayer/qmediaplayer.pro           |    2 +-
 tests/auto/qmediaplaylist/qmediaplaylist.pro       |    2 +-
 .../qmediaplaylistnavigator.pro                    |    2 +-
 .../auto/qmediapluginloader/qmediapluginloader.pro |    2 +-
 tests/auto/qmediaresource/qmediaresource.pro       |    2 +-
 tests/auto/qmediaservice/qmediaservice.pro         |    2 +-
 .../qmediaserviceprovider.pro                      |    2 +-
 tests/auto/qmediatimerange/qmediatimerange.pro     |    2 +-
 tests/auto/qsoundeffect/qsoundeffect.pro           |    2 +-
 tests/auto/qvideowidget/qvideowidget.pro           |    2 +-
 tools/configure/configureapp.cpp                   |   42 +-
 348 files changed, 33560 insertions(+), 33496 deletions(-)
 delete mode 100644 src/multimedia/audio/audio.pri
 delete mode 100644 src/multimedia/audio/qaudio.cpp
 delete mode 100644 src/multimedia/audio/qaudio.h
 delete mode 100644 src/multimedia/audio/qaudio_mac.cpp
 delete mode 100644 src/multimedia/audio/qaudio_mac_p.h
 delete mode 100644 src/multimedia/audio/qaudio_symbian_p.cpp
 delete mode 100644 src/multimedia/audio/qaudio_symbian_p.h
 delete mode 100644 src/multimedia/audio/qaudiodevicefactory.cpp
 delete mode 100644 src/multimedia/audio/qaudiodevicefactory_p.h
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo.cpp
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo.h
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_alsa_p.h
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_mac_p.h
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_symbian_p.h
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiodeviceinfo_win32_p.h
 delete mode 100644 src/multimedia/audio/qaudioengine.cpp
 delete mode 100644 src/multimedia/audio/qaudioengine.h
 delete mode 100644 src/multimedia/audio/qaudioengineplugin.cpp
 delete mode 100644 src/multimedia/audio/qaudioengineplugin.h
 delete mode 100644 src/multimedia/audio/qaudioformat.cpp
 delete mode 100644 src/multimedia/audio/qaudioformat.h
 delete mode 100644 src/multimedia/audio/qaudioinput.cpp
 delete mode 100644 src/multimedia/audio/qaudioinput.h
 delete mode 100644 src/multimedia/audio/qaudioinput_alsa_p.cpp
 delete mode 100644 src/multimedia/audio/qaudioinput_alsa_p.h
 delete mode 100644 src/multimedia/audio/qaudioinput_mac_p.cpp
 delete mode 100644 src/multimedia/audio/qaudioinput_mac_p.h
 delete mode 100644 src/multimedia/audio/qaudioinput_symbian_p.cpp
 delete mode 100644 src/multimedia/audio/qaudioinput_symbian_p.h
 delete mode 100644 src/multimedia/audio/qaudioinput_win32_p.cpp
 delete mode 100644 src/multimedia/audio/qaudioinput_win32_p.h
 delete mode 100644 src/multimedia/audio/qaudiooutput.cpp
 delete mode 100644 src/multimedia/audio/qaudiooutput.h
 delete mode 100644 src/multimedia/audio/qaudiooutput_alsa_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiooutput_alsa_p.h
 delete mode 100644 src/multimedia/audio/qaudiooutput_mac_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiooutput_mac_p.h
 delete mode 100644 src/multimedia/audio/qaudiooutput_symbian_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiooutput_symbian_p.h
 delete mode 100644 src/multimedia/audio/qaudiooutput_win32_p.cpp
 delete mode 100644 src/multimedia/audio/qaudiooutput_win32_p.h
 delete mode 100644 src/multimedia/base/base.pri
 delete mode 100644 src/multimedia/base/qgraphicsvideoitem.cpp
 delete mode 100644 src/multimedia/base/qgraphicsvideoitem.h
 delete mode 100644 src/multimedia/base/qlocalmediaplaylistprovider.cpp
 delete mode 100644 src/multimedia/base/qlocalmediaplaylistprovider.h
 delete mode 100644 src/multimedia/base/qmediacontent.cpp
 delete mode 100644 src/multimedia/base/qmediacontent.h
 delete mode 100644 src/multimedia/base/qmediacontrol.cpp
 delete mode 100644 src/multimedia/base/qmediacontrol.h
 delete mode 100644 src/multimedia/base/qmediacontrol_p.h
 delete mode 100644 src/multimedia/base/qmediaobject.cpp
 delete mode 100644 src/multimedia/base/qmediaobject.h
 delete mode 100644 src/multimedia/base/qmediaobject_p.h
 delete mode 100644 src/multimedia/base/qmediaplaylist.cpp
 delete mode 100644 src/multimedia/base/qmediaplaylist.h
 delete mode 100644 src/multimedia/base/qmediaplaylist_p.h
 delete mode 100644 src/multimedia/base/qmediaplaylistcontrol.cpp
 delete mode 100644 src/multimedia/base/qmediaplaylistcontrol.h
 delete mode 100644 src/multimedia/base/qmediaplaylistioplugin.cpp
 delete mode 100644 src/multimedia/base/qmediaplaylistioplugin.h
 delete mode 100644 src/multimedia/base/qmediaplaylistnavigator.cpp
 delete mode 100644 src/multimedia/base/qmediaplaylistnavigator.h
 delete mode 100644 src/multimedia/base/qmediaplaylistprovider.cpp
 delete mode 100644 src/multimedia/base/qmediaplaylistprovider.h
 delete mode 100644 src/multimedia/base/qmediaplaylistprovider_p.h
 delete mode 100644 src/multimedia/base/qmediapluginloader.cpp
 delete mode 100644 src/multimedia/base/qmediapluginloader_p.h
 delete mode 100644 src/multimedia/base/qmediaresource.cpp
 delete mode 100644 src/multimedia/base/qmediaresource.h
 delete mode 100644 src/multimedia/base/qmediaservice.cpp
 delete mode 100644 src/multimedia/base/qmediaservice.h
 delete mode 100644 src/multimedia/base/qmediaservice_p.h
 delete mode 100644 src/multimedia/base/qmediaserviceprovider.cpp
 delete mode 100644 src/multimedia/base/qmediaserviceprovider.h
 delete mode 100644 src/multimedia/base/qmediaserviceproviderplugin.h
 delete mode 100644 src/multimedia/base/qmediatimerange.cpp
 delete mode 100644 src/multimedia/base/qmediatimerange.h
 delete mode 100644 src/multimedia/base/qmetadatacontrol.cpp
 delete mode 100644 src/multimedia/base/qmetadatacontrol.h
 delete mode 100644 src/multimedia/base/qpaintervideosurface.cpp
 delete mode 100644 src/multimedia/base/qpaintervideosurface_mac.mm
 delete mode 100644 src/multimedia/base/qpaintervideosurface_mac_p.h
 delete mode 100644 src/multimedia/base/qpaintervideosurface_p.h
 delete mode 100644 src/multimedia/base/qtmedianamespace.h
 delete mode 100644 src/multimedia/base/qtmedianamespace.qdoc
 delete mode 100644 src/multimedia/base/qvideodevicecontrol.cpp
 delete mode 100644 src/multimedia/base/qvideodevicecontrol.h
 delete mode 100644 src/multimedia/base/qvideooutputcontrol.cpp
 delete mode 100644 src/multimedia/base/qvideooutputcontrol.h
 delete mode 100644 src/multimedia/base/qvideorenderercontrol.cpp
 delete mode 100644 src/multimedia/base/qvideorenderercontrol.h
 delete mode 100644 src/multimedia/base/qvideowidget.cpp
 delete mode 100644 src/multimedia/base/qvideowidget.h
 delete mode 100644 src/multimedia/base/qvideowidget_p.h
 delete mode 100644 src/multimedia/base/qvideowidgetcontrol.cpp
 delete mode 100644 src/multimedia/base/qvideowidgetcontrol.h
 delete mode 100644 src/multimedia/base/qvideowindowcontrol.cpp
 delete mode 100644 src/multimedia/base/qvideowindowcontrol.h
 delete mode 100644 src/multimedia/effects/effects.pri
 delete mode 100644 src/multimedia/effects/qsoundeffect.cpp
 delete mode 100644 src/multimedia/effects/qsoundeffect_p.h
 delete mode 100644 src/multimedia/effects/qsoundeffect_pulse_p.cpp
 delete mode 100644 src/multimedia/effects/qsoundeffect_pulse_p.h
 delete mode 100644 src/multimedia/effects/qsoundeffect_qmedia_p.cpp
 delete mode 100644 src/multimedia/effects/qsoundeffect_qmedia_p.h
 delete mode 100644 src/multimedia/effects/qsoundeffect_qsound_p.cpp
 delete mode 100644 src/multimedia/effects/qsoundeffect_qsound_p.h
 delete mode 100644 src/multimedia/effects/wavedecoder_p.cpp
 delete mode 100644 src/multimedia/effects/wavedecoder_p.h
 create mode 100644 src/multimedia/mediaservices/base/base.pri
 create mode 100644 src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp
 create mode 100644 src/multimedia/mediaservices/base/qgraphicsvideoitem.h
 create mode 100644 src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp
 create mode 100644 src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
 create mode 100644 src/multimedia/mediaservices/base/qmediacontent.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediacontent.h
 create mode 100644 src/multimedia/mediaservices/base/qmediacontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediacontrol.h
 create mode 100644 src/multimedia/mediaservices/base/qmediacontrol_p.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaobject.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaobject.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaobject_p.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylist.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylist.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylist_p.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistprovider.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h
 create mode 100644 src/multimedia/mediaservices/base/qmediapluginloader.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediapluginloader_p.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaresource.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaresource.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaservice.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaservice.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaservice_p.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaserviceprovider.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediaserviceprovider.h
 create mode 100644 src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
 create mode 100644 src/multimedia/mediaservices/base/qmediatimerange.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmediatimerange.h
 create mode 100644 src/multimedia/mediaservices/base/qmetadatacontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qmetadatacontrol.h
 create mode 100644 src/multimedia/mediaservices/base/qpaintervideosurface.cpp
 create mode 100644 src/multimedia/mediaservices/base/qpaintervideosurface_mac.mm
 create mode 100644 src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h
 create mode 100644 src/multimedia/mediaservices/base/qpaintervideosurface_p.h
 create mode 100644 src/multimedia/mediaservices/base/qtmedianamespace.h
 create mode 100644 src/multimedia/mediaservices/base/qtmedianamespace.qdoc
 create mode 100644 src/multimedia/mediaservices/base/qvideodevicecontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qvideodevicecontrol.h
 create mode 100644 src/multimedia/mediaservices/base/qvideooutputcontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qvideooutputcontrol.h
 create mode 100644 src/multimedia/mediaservices/base/qvideorenderercontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qvideorenderercontrol.h
 create mode 100644 src/multimedia/mediaservices/base/qvideowidget.cpp
 create mode 100644 src/multimedia/mediaservices/base/qvideowidget.h
 create mode 100644 src/multimedia/mediaservices/base/qvideowidget_p.h
 create mode 100644 src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qvideowidgetcontrol.h
 create mode 100644 src/multimedia/mediaservices/base/qvideowindowcontrol.cpp
 create mode 100644 src/multimedia/mediaservices/base/qvideowindowcontrol.h
 create mode 100644 src/multimedia/mediaservices/effects/effects.pri
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect.cpp
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect_p.h
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp
 create mode 100644 src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h
 create mode 100644 src/multimedia/mediaservices/effects/wavedecoder_p.cpp
 create mode 100644 src/multimedia/mediaservices/effects/wavedecoder_p.h
 create mode 100644 src/multimedia/mediaservices/mediaservices.pro
 create mode 100644 src/multimedia/mediaservices/playback/playback.pri
 create mode 100644 src/multimedia/mediaservices/playback/qmediaplayer.cpp
 create mode 100644 src/multimedia/mediaservices/playback/qmediaplayer.h
 create mode 100644 src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp
 create mode 100644 src/multimedia/mediaservices/playback/qmediaplayercontrol.h
 create mode 100644 src/multimedia/multimedia/audio/audio.pri
 create mode 100644 src/multimedia/multimedia/audio/qaudio.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudio.h
 create mode 100644 src/multimedia/multimedia/audio/qaudio_mac.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudio_mac_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudio_symbian_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudio_symbian_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiodevicefactory_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioengine.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioengine.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioengineplugin.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioengineplugin.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioformat.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioformat.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_alsa_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_mac_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_mac_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_symbian_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_symbian_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudioinput_win32_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_alsa_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_mac_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_mac_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_symbian_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_symbian_p.h
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp
 create mode 100644 src/multimedia/multimedia/audio/qaudiooutput_win32_p.h
 create mode 100644 src/multimedia/multimedia/multimedia.pro
 create mode 100644 src/multimedia/multimedia/video/qabstractvideobuffer.cpp
 create mode 100644 src/multimedia/multimedia/video/qabstractvideobuffer.h
 create mode 100644 src/multimedia/multimedia/video/qabstractvideobuffer_p.h
 create mode 100644 src/multimedia/multimedia/video/qabstractvideosurface.cpp
 create mode 100644 src/multimedia/multimedia/video/qabstractvideosurface.h
 create mode 100644 src/multimedia/multimedia/video/qabstractvideosurface_p.h
 create mode 100644 src/multimedia/multimedia/video/qimagevideobuffer.cpp
 create mode 100644 src/multimedia/multimedia/video/qimagevideobuffer_p.h
 create mode 100644 src/multimedia/multimedia/video/qmemoryvideobuffer.cpp
 create mode 100644 src/multimedia/multimedia/video/qmemoryvideobuffer_p.h
 create mode 100644 src/multimedia/multimedia/video/qvideoframe.cpp
 create mode 100644 src/multimedia/multimedia/video/qvideoframe.h
 create mode 100644 src/multimedia/multimedia/video/qvideosurfaceformat.cpp
 create mode 100644 src/multimedia/multimedia/video/qvideosurfaceformat.h
 create mode 100644 src/multimedia/multimedia/video/video.pri
 delete mode 100644 src/multimedia/playback/playback.pri
 delete mode 100644 src/multimedia/playback/qmediaplayer.cpp
 delete mode 100644 src/multimedia/playback/qmediaplayer.h
 delete mode 100644 src/multimedia/playback/qmediaplayercontrol.cpp
 delete mode 100644 src/multimedia/playback/qmediaplayercontrol.h
 delete mode 100644 src/multimedia/video/qabstractvideobuffer.cpp
 delete mode 100644 src/multimedia/video/qabstractvideobuffer.h
 delete mode 100644 src/multimedia/video/qabstractvideobuffer_p.h
 delete mode 100644 src/multimedia/video/qabstractvideosurface.cpp
 delete mode 100644 src/multimedia/video/qabstractvideosurface.h
 delete mode 100644 src/multimedia/video/qabstractvideosurface_p.h
 delete mode 100644 src/multimedia/video/qimagevideobuffer.cpp
 delete mode 100644 src/multimedia/video/qimagevideobuffer_p.h
 delete mode 100644 src/multimedia/video/qmemoryvideobuffer.cpp
 delete mode 100644 src/multimedia/video/qmemoryvideobuffer_p.h
 delete mode 100644 src/multimedia/video/qvideoframe.cpp
 delete mode 100644 src/multimedia/video/qvideoframe.h
 delete mode 100644 src/multimedia/video/qvideosurfaceformat.cpp
 delete mode 100644 src/multimedia/video/qvideosurfaceformat.h
 delete mode 100644 src/multimedia/video/video.pri
 create mode 100644 tests/auto/mediaservices.pro

diff --git a/bin/syncqt b/bin/syncqt
index 71f2eab..9fe0009 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -50,7 +50,8 @@ my %modules = ( # path to module name map
         "QtDBus" => "$basedir/src/dbus",
         "QtWebKit" => "$basedir/src/3rdparty/webkit/WebCore",
         "phonon" => "$basedir/src/phonon",
-        "QtMultimedia" => "$basedir/src/multimedia",
+        "QtMultimedia" => "$basedir/src/multimedia/multimedia",
+        "QtMediaservices" => "$basedir/src/multimedia/mediaservices",
 );
 my %moduleheaders = ( # restrict the module headers to those found in relative path
         "QtWebKit" => "../WebKit/qt/Api",
diff --git a/configure b/configure
index 5478d06..11b33f6 100755
--- a/configure
+++ b/configure
@@ -682,7 +682,8 @@ CFG_RELEASE_QMAKE=no
 CFG_PHONON=auto
 CFG_PHONON_BACKEND=yes
 CFG_MULTIMEDIA=auto
-CFG_MEDIASERVICE=auto
+CFG_MEDIASERVICES=auto
+CFG_MEDIA_BACKEND=auto
 CFG_AUDIO_BACKEND=auto
 CFG_SVG=auto
 CFG_DECLARATIVE=auto
@@ -937,7 +938,7 @@ while [ "$#" -gt 0 ]; do
         VAL=no
         ;;
     #Qt style yes options
-        -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-mediaservice|-audio-backend|-svg|-declarative|-webkit|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
+        -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-mediaservices|-media-backend|-audio-backend|-svg|-declarative|-webkit|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
         VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
         VAL=yes
         ;;
@@ -2153,9 +2154,16 @@ while [ "$#" -gt 0 ]; do
             UNKNOWN_OPT=yes
         fi
         ;;
-    mediaservice)
+    mediaservices)
         if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
-            CFG_MEDIASERVICE="$VAL"
+            CFG_MEDIASERVICES="$VAL"
+        else
+            UNKNOWN_OPT=yes
+        fi
+        ;;
+    media-backend)
+        if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
+            CFG_MEDIA_BACKEND="$VAL"
         else
             UNKNOWN_OPT=yes
         fi
@@ -3390,8 +3398,9 @@ Usage:  $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
         [-no-separate-debug-info] [-no-mmx] [-no-3dnow] [-no-sse] [-no-sse2]
         [-qtnamespace <namespace>] [-qtlibinfix <infix>] [-separate-debug-info] [-armfpa]
         [-no-optimized-qmake] [-optimized-qmake] [-no-xmlpatterns] [-xmlpatterns]
-        [-no-multimedia] [-multimedia] [-no-phonon] [-phonon] [-no-phonon-backend] [-phonon-backend]
-        [-no-mediaservice] [-mediaservice] [-no-audio-backend] [-audio-backend] 
+        [-no-multimedia] [-multimedia] [-no-mediaservices] [-mediaservices]
+        [-no-phonon] [-phonon] [-no-phonon-backend] [-phonon-backend]
+        [-no-media-backend] [-medias-backend] [-no-audio-backend] [-audio-backend] 
         [-no-openssl] [-openssl] [-openssl-linked]
         [-no-gtkstyle] [-gtkstyle] [-no-svg] [-svg] [-no-webkit] [-webkit] [-no-javascript-jit] [-javascript-jit]
         [-no-script] [-script] [-no-scripttools] [-scripttools] [-no-declarative] [-declarative]
@@ -3532,12 +3541,15 @@ fi
     -no-multimedia ..... Do not build the QtMultimedia module.
  +  -multimedia ........ Build the QtMultimedia module.
 
-    -no-mediaservice.... Do not build platform mediaservice plugin.
- +  -mediaservice ...... Build the platform mediaservice plugin.
-
     -no-audio-backend .. Do not build the platform audio backend into QtMultimedia.
  +  -audio-backend ..... Build the platform audio backend into QtMultimedia if available.
 
+    -no-mediaservices... Do not build the QtMediaservices module.
+ +  -mediaservices...... Build the QtMediaservices module.
+
+    -no-media-backend... Do not build platform mediaservices plugin.
+ +  -media-backend..... Build the platform mediaservices plugin.
+
     -no-phonon ......... Do not build the Phonon module.
  +  -phonon ............ Build the Phonon module.
                          Phonon is built if a decent C++ compiler is used.
@@ -5176,16 +5188,16 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
     fi
 
     if [ "$CFG_GUI" = "no" ]; then
-        if [ "$CFG_MEDIASERVICE" = "auto" ]; then
-            CFG_MEDIASERVICE=no
+        if [ "$CFG_MEDIA_BACKEND" = "auto" ]; then
+            CFG_MEDIA_BACKEND=no
         fi
-        if [ "$CFG_MEDIASERVICE" != "no" ]; then
-            echo "Mediaservice enabled, but GUI disabled."
-            echo " You might need to either enable the GUI or disable Mediaservice"
+        if [ "$CFG_MEDIA_BACKEND" != "no" ]; then
+            echo "Medias backend enabled, but GUI disabled."
+            echo " You might need to either enable the GUI or disable the media backend"
             exit 1
         fi
-    elif [ "$CFG_MEDIASERVICE" = "auto" ]; then
-        CFG_MEDIASERVICE=yes
+    elif [ "$CFG_MEDIA_BACKEND" = "auto" ]; then
+        CFG_MEDIA_BACKEND=yes
     fi
 
     # Auto-detect GStreamer support (needed for both Phonon & QtMultimedia)
@@ -6820,8 +6832,14 @@ if [ "$CFG_MULTIMEDIA" = "no" ]; then
     QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_MULTIMEDIA"
 else
     QT_CONFIG="$QT_CONFIG multimedia"
-    if [ "$CFG_MEDIASERVICE" = "yes" ]; then
-        QT_CONFIG="$QT_CONFIG mediaservice"
+fi
+
+if [ "$CFG_MEDIASERVICES" = "no" ]; then
+    QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_MEDIASERVICES"
+else
+    QT_CONFIG="$QT_CONFIG mediaservices"
+    if [ "$CFG_MEDIA_BACKEND" = "yes" ]; then
+        QT_CONFIG="$QT_CONFIG media-backend"
     fi
 fi
 
@@ -7782,6 +7800,7 @@ echo "QtScriptTools module ... $CFG_SCRIPTTOOLS"
 echo "QtXmlPatterns module ... $CFG_XMLPATTERNS"
 echo "Phonon module .......... $CFG_PHONON"
 echo "Multimedia module ...... $CFG_MULTIMEDIA"
+echo "Mediaservices module ... $CFG_MEDIASERVICES"
 echo "SVG module ............. $CFG_SVG"
 echo "WebKit module .......... $CFG_WEBKIT"
 if [ "$CFG_WEBKIT" = "yes" ]; then 
diff --git a/demos/multimedia/player/player.cpp b/demos/multimedia/player/player.cpp
index af30a97..20341bc 100644
--- a/demos/multimedia/player/player.cpp
+++ b/demos/multimedia/player/player.cpp
@@ -45,8 +45,8 @@
 #include "playlistmodel.h"
 #include "videowidget.h"
 
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaplaylist.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qmediaplaylist.h>
 
 #include <QtGui>
 
@@ -204,14 +204,14 @@ void Player::positionChanged(qint64 progress)
 
 void Player::metaDataChanged()
 {
-    //qDebug() << "update metadata" << player->metaData(QtMultimedia::Title).toString();
+    //qDebug() << "update metadata" << player->metaData(QtMediaservices::Title).toString();
     if (player->isMetaDataAvailable()) {
         setTrackInfo(QString("%1 - %2")
-                .arg(player->metaData(QtMultimedia::AlbumArtist).toString())
-                .arg(player->metaData(QtMultimedia::Title).toString()));
+                .arg(player->metaData(QtMediaservices::AlbumArtist).toString())
+                .arg(player->metaData(QtMediaservices::Title).toString()));
 
         if (coverLabel) {
-            QUrl url = player->metaData(QtMultimedia::CoverArtUrlLarge).value<QUrl>();
+            QUrl url = player->metaData(QtMediaservices::CoverArtUrlLarge).value<QUrl>();
 
             coverLabel->setPixmap(!url.isEmpty()
                     ? QPixmap(url.toString())
diff --git a/demos/multimedia/player/player.pro b/demos/multimedia/player/player.pro
index dc731e4..fb93416 100644
--- a/demos/multimedia/player/player.pro
+++ b/demos/multimedia/player/player.pro
@@ -1,7 +1,7 @@
 TEMPLATE = app
 TARGET = player
 
-QT += gui multimedia
+QT += gui mediaservices
 
 
 HEADERS = \
diff --git a/demos/multimedia/player/playercontrols.h b/demos/multimedia/player/playercontrols.h
index 99894ff..0b0b0e6 100644
--- a/demos/multimedia/player/playercontrols.h
+++ b/demos/multimedia/player/playercontrols.h
@@ -42,7 +42,7 @@
 #ifndef PLAYERCONTROLS_H
 #define PLAYERCONTROLS_H
 
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 #include <QtGui/qwidget.h>
 
diff --git a/demos/multimedia/player/videowidget.h b/demos/multimedia/player/videowidget.h
index 543e1e0..0251bfe 100644
--- a/demos/multimedia/player/videowidget.h
+++ b/demos/multimedia/player/videowidget.h
@@ -41,7 +41,7 @@
 #ifndef VIDEOWIDGET_H
 #define VIDEOWIDGET_H
 
-#include <QtMultimedia/qvideowidget.h>
+#include <QtMediaservices/qvideowidget.h>
 
 
 QT_BEGIN_HEADER
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index 62cce62..ff4e986 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -36,7 +36,7 @@ INCLUDEPATH = $$QMAKE_INCDIR_QT $$INCLUDEPATH #prepending prevents us from picki
 win32:INCLUDEPATH += $$QMAKE_INCDIR_QT/ActiveQt
 
 # As order does matter for static libs, we reorder the QT variable here
-TMPLIBS = declarative webkit phonon multimedia dbus testlib script scripttools svg qt3support sql xmlpatterns xml egl opengl openvg gui network core
+TMPLIBS = declarative webkit phonon mediaservices multimedia dbus testlib script scripttools svg qt3support sql xmlpatterns xml egl opengl openvg gui network core
 for(QTLIB, $$list($$TMPLIBS)) {
    contains(QT, $$QTLIB): QT_ORDERED += $$QTLIB
 }
@@ -175,6 +175,7 @@ for(QTLIB, $$list($$lower($$unique(QT)))) {
        }
    } else:isEqual(QTLIB, declarative):qlib = QtDeclarative
    else:isEqual(QTLIB, multimedia):qlib = QtMultimedia
+   else:isEqual(QTLIB, mediaservices):qlib = QtMediaservices
    else:message("Unknown QT: $$QTLIB"):qlib =
    !isEmpty(qlib) {
       target_qt:isEqual(TARGET, qlib) {
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index bdb3f83..22c39b6 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -142,7 +142,7 @@ addJavaScriptCoreLib(../JavaScriptCore)
         DEFINES -= ENABLE_VIDEO=0
         DEFINES += ENABLE_VIDEO=1
     }
-    !lessThan(QT_MINOR_VERSION, 7):contains(QT_CONFIG, multimedia) {
+    !lessThan(QT_MINOR_VERSION, 7):contains(QT_CONFIG, mediaservices) {
         DEFINES -= ENABLE_VIDEO=0
         DEFINES += ENABLE_VIDEO=1
     }
@@ -2370,7 +2370,7 @@ contains(DEFINES, ENABLE_VIDEO=1) {
             HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h
             SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp
 
-            tobe|!tobe: QT += multimedia
+            tobe|!tobe: QT += mediaservices
         } else {
             HEADERS += \
                 platform/graphics/qt/MediaPlayerPrivatePhonon.h
diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp
index a2e74f4..46ceb34 100644
--- a/src/imports/multimedia/multimedia.cpp
+++ b/src/imports/multimedia/multimedia.cpp
@@ -41,7 +41,7 @@
 
 #include <QtDeclarative/qdeclarativeextensionplugin.h>
 #include <QtDeclarative/qdeclarative.h>
-#include <QtMultimedia/private/qsoundeffect_p.h>
+#include <QtMediaservices/private/qsoundeffect_p.h>
 
 #include "qdeclarativevideo_p.h"
 #include "qdeclarativeaudio_p.h"
diff --git a/src/imports/multimedia/multimedia.pro b/src/imports/multimedia/multimedia.pro
index 92f7ec4..c1933a3 100644
--- a/src/imports/multimedia/multimedia.pro
+++ b/src/imports/multimedia/multimedia.pro
@@ -2,7 +2,7 @@ TARGET  = multimedia
 TARGETPATH = Qt/multimedia
 include(../qimportbase.pri)
 
-QT += multimedia declarative
+QT += mediaservices declarative
 
 HEADERS += \
         qdeclarativeaudio_p.h \
diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp
index 8d2dc61..4e75099 100644
--- a/src/imports/multimedia/qdeclarativeaudio.cpp
+++ b/src/imports/multimedia/qdeclarativeaudio.cpp
@@ -41,7 +41,7 @@
 
 #include "qdeclarativeaudio_p.h"
 
-#include <QtMultimedia/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/imports/multimedia/qdeclarativemediabase.cpp b/src/imports/multimedia/qdeclarativemediabase.cpp
index bbd5901..5ed602a 100644
--- a/src/imports/multimedia/qdeclarativemediabase.cpp
+++ b/src/imports/multimedia/qdeclarativemediabase.cpp
@@ -44,10 +44,10 @@
 #include <QtCore/qcoreevent.h>
 #include <QtCore/qurl.h>
 
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaserviceprovider.h>
-#include <QtMultimedia/qmetadatacontrol.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qmediaserviceprovider.h>
+#include <QtMediaservices/qmetadatacontrol.h>
 #include "qmetadatacontrolmetaobject_p.h"
 
 
diff --git a/src/imports/multimedia/qdeclarativemediabase_p.h b/src/imports/multimedia/qdeclarativemediabase_p.h
index 7d262e0..e5115de 100644
--- a/src/imports/multimedia/qdeclarativemediabase_p.h
+++ b/src/imports/multimedia/qdeclarativemediabase_p.h
@@ -54,7 +54,7 @@
 //
 
 #include <QtCore/qbasictimer.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/imports/multimedia/qdeclarativevideo.cpp b/src/imports/multimedia/qdeclarativevideo.cpp
index bf112be..734bd96 100644
--- a/src/imports/multimedia/qdeclarativevideo.cpp
+++ b/src/imports/multimedia/qdeclarativevideo.cpp
@@ -41,11 +41,11 @@
 
 #include "qdeclarativevideo_p.h"
 
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/private/qpaintervideosurface_p.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/private/qpaintervideosurface_p.h>
+#include <QtMediaservices/qvideooutputcontrol.h>
+#include <QtMediaservices/qvideorenderercontrol.h>
 
 
 QT_BEGIN_NAMESPACE
@@ -435,7 +435,7 @@ QT_END_NAMESPACE
 
     This property holds the tile of the media.
 
-    \sa {QtMultimedia::Title}
+    \sa {QtMediaservices::Title}
 */
 
 /*!
@@ -443,7 +443,7 @@ QT_END_NAMESPACE
 
     This property holds the sub-title of the media.
 
-    \sa {QtMultimedia::SubTitle}
+    \sa {QtMediaservices::SubTitle}
 */
 
 /*!
@@ -451,7 +451,7 @@ QT_END_NAMESPACE
 
     This property holds the author of the media.
 
-    \sa {QtMultimedia::Author}
+    \sa {QtMediaservices::Author}
 */
 
 /*!
@@ -459,7 +459,7 @@ QT_END_NAMESPACE
 
     This property holds a user comment about the media.
 
-    \sa {QtMultimedia::Comment}
+    \sa {QtMediaservices::Comment}
 */
 
 /*!
@@ -467,7 +467,7 @@ QT_END_NAMESPACE
 
     This property holds a description of the media.
 
-    \sa {QtMultimedia::Description}
+    \sa {QtMediaservices::Description}
 */
 
 /*!
@@ -475,7 +475,7 @@ QT_END_NAMESPACE
 
     This property holds the category of the media
 
-    \sa {QtMultimedia::Category}
+    \sa {QtMediaservices::Category}
 */
 
 /*!
@@ -483,7 +483,7 @@ QT_END_NAMESPACE
 
     This property holds the genre of the media.
 
-    \sa {QtMultimedia::Genre}
+    \sa {QtMediaservices::Genre}
 */
 
 /*!
@@ -491,7 +491,7 @@ QT_END_NAMESPACE
 
     This property holds the year of release of the media.
 
-    \sa {QtMultimedia::Year}
+    \sa {QtMediaservices::Year}
 */
 
 /*!
@@ -499,7 +499,7 @@ QT_END_NAMESPACE
 
     This property holds the date of the media.
 
-    \sa {QtMultimedia::Date}
+    \sa {QtMediaservices::Date}
 */
 
 /*!
@@ -507,7 +507,7 @@ QT_END_NAMESPACE
 
     This property holds a user rating of the media in the range of 0 to 100.
 
-    \sa {QtMultimedia::UserRating}
+    \sa {QtMediaservices::UserRating}
 */
 
 /*!
@@ -515,7 +515,7 @@ QT_END_NAMESPACE
 
     This property holds a list of keywords describing the media.
 
-    \sa {QtMultimedia::Keywords}
+    \sa {QtMediaservices::Keywords}
 */
 
 /*!
@@ -523,7 +523,7 @@ QT_END_NAMESPACE
 
     This property holds the language of the media, as an ISO 639-2 code.
 
-    \sa {QtMultimedia::Language}
+    \sa {QtMediaservices::Language}
 */
 
 /*!
@@ -531,7 +531,7 @@ QT_END_NAMESPACE
 
     This property holds the publisher of the media.
 
-    \sa {QtMultimedia::Publisher}
+    \sa {QtMediaservices::Publisher}
 */
 
 /*!
@@ -539,7 +539,7 @@ QT_END_NAMESPACE
 
     This property holds the media's copyright notice.
 
-    \sa {QtMultimedia::Copyright}
+    \sa {QtMediaservices::Copyright}
 */
 
 /*!
@@ -547,7 +547,7 @@ QT_END_NAMESPACE
 
     This property holds the parental rating of the media.
 
-    \sa {QtMultimedia::ParentalRating}
+    \sa {QtMediaservices::ParentalRating}
 */
 
 /*!
@@ -556,7 +556,7 @@ QT_END_NAMESPACE
     This property holds the name of the rating organisation responsible for the
     parental rating of the media.
 
-    \sa {QtMultimedia::RatingOrganisation}
+    \sa {QtMediaservices::RatingOrganisation}
 */
 
 /*!
@@ -564,7 +564,7 @@ QT_END_NAMESPACE
 
     This property property holds the size of the media in bytes.
 
-    \sa {QtMultimedia::Size}
+    \sa {QtMediaservices::Size}
 */
 
 /*!
@@ -572,7 +572,7 @@ QT_END_NAMESPACE
 
     This property holds the type of the media.
 
-    \sa {QtMultimedia::MediaType}
+    \sa {QtMediaservices::MediaType}
 */
 
 /*!
@@ -581,7 +581,7 @@ QT_END_NAMESPACE
     This property holds the bit rate of the media's audio stream ni bits per
     second.
 
-    \sa {QtMultimedia::AudioBitRate}
+    \sa {QtMediaservices::AudioBitRate}
 */
 
 /*!
@@ -589,7 +589,7 @@ QT_END_NAMESPACE
 
     This property holds the encoding of the media audio stream.
 
-    \sa {QtMultimedia::AudioCodec}
+    \sa {QtMediaservices::AudioCodec}
 */
 
 /*!
@@ -597,7 +597,7 @@ QT_END_NAMESPACE
 
     This property holds the average volume level of the media.
 
-    \sa {QtMultimedia::AverageLevel}
+    \sa {QtMediaservices::AverageLevel}
 */
 
 /*!
@@ -605,7 +605,7 @@ QT_END_NAMESPACE
 
     This property holds the number of channels in the media's audio stream.
 
-    \sa {QtMultimedia::ChannelCount}
+    \sa {QtMediaservices::ChannelCount}
 */
 
 /*!
@@ -613,7 +613,7 @@ QT_END_NAMESPACE
 
     This property holds the peak volume of media's audio stream.
 
-    \sa {QtMultimedia::PeakValue}
+    \sa {QtMediaservices::PeakValue}
 */
 
 /*!
@@ -621,7 +621,7 @@ QT_END_NAMESPACE
 
     This property holds the sample rate of the media's audio stream in hertz.
 
-    \sa {QtMultimedia::SampleRate}
+    \sa {QtMediaservices::SampleRate}
 */
 
 /*!
@@ -629,7 +629,7 @@ QT_END_NAMESPACE
 
     This property holds the title of the album the media belongs to.
 
-    \sa {QtMultimedia::AlbumTitle}
+    \sa {QtMediaservices::AlbumTitle}
 */
 
 /*!
@@ -638,7 +638,7 @@ QT_END_NAMESPACE
     This property holds the name of the principal artist of the album the media
     belongs to.
 
-    \sa {QtMultimedia::AlbumArtist}
+    \sa {QtMediaservices::AlbumArtist}
 */
 
 /*!
@@ -646,7 +646,7 @@ QT_END_NAMESPACE
 
     This property holds the names of artists contributing to the media.
 
-    \sa {QtMultimedia::ContributingArtist}
+    \sa {QtMediaservices::ContributingArtist}
 */
 
 /*!
@@ -654,7 +654,7 @@ QT_END_NAMESPACE
 
     This property holds the composer of the media.
 
-    \sa {QtMultimedia::Composer}
+    \sa {QtMediaservices::Composer}
 */
 
 /*!
@@ -662,7 +662,7 @@ QT_END_NAMESPACE
 
     This property holds the conductor of the media.
 
-    \sa {QtMultimedia::Conductor}
+    \sa {QtMediaservices::Conductor}
 */
 
 /*!
@@ -670,7 +670,7 @@ QT_END_NAMESPACE
 
     This property holds the lyrics to the media.
 
-    \sa {QtMultimedia::Lyrics}
+    \sa {QtMediaservices::Lyrics}
 */
 
 /*!
@@ -678,7 +678,7 @@ QT_END_NAMESPACE
 
     This property holds the mood of the media.
 
-    \sa {QtMultimedia::Mood}
+    \sa {QtMediaservices::Mood}
 */
 
 /*!
@@ -686,7 +686,7 @@ QT_END_NAMESPACE
 
     This property holds the track number of the media.
 
-    \sa {QtMultimedia::TrackNumber}
+    \sa {QtMediaservices::TrackNumber}
 */
 
 /*!
@@ -694,7 +694,7 @@ QT_END_NAMESPACE
 
     This property holds the number of track on the album containing the media.
 
-    \sa {QtMultimedia::TrackNumber}
+    \sa {QtMediaservices::TrackNumber}
 */
 
 /*!
@@ -702,7 +702,7 @@ QT_END_NAMESPACE
 
     This property holds the URL of a small cover art image.
 
-    \sa {QtMultimedia::CoverArtUrlSmall}
+    \sa {QtMediaservices::CoverArtUrlSmall}
 */
 
 /*!
@@ -710,7 +710,7 @@ QT_END_NAMESPACE
 
     This property holds the URL of a large cover art image.
 
-    \sa {QtMultimedia::CoverArtUrlLarge}
+    \sa {QtMediaservices::CoverArtUrlLarge}
 */
 
 /*!
@@ -718,7 +718,7 @@ QT_END_NAMESPACE
 
     This property holds the dimension of an image or video.
 
-    \sa {QtMultimedia::Resolution}
+    \sa {QtMediaservices::Resolution}
 */
 
 /*!
@@ -726,7 +726,7 @@ QT_END_NAMESPACE
 
     This property holds the pixel aspect ratio of an image or video.
 
-    \sa {QtMultimedia::PixelAspectRatio}
+    \sa {QtMediaservices::PixelAspectRatio}
 */
 
 /*!
@@ -734,7 +734,7 @@ QT_END_NAMESPACE
 
     This property holds the frame rate of the media's video stream.
 
-    \sa {QtMultimedia::VideoFrameRate}
+    \sa {QtMediaservices::VideoFrameRate}
 */
 
 /*!
@@ -743,7 +743,7 @@ QT_END_NAMESPACE
     This property holds the bit rate of the media's video stream in bits per
     second.
 
-    \sa {QtMultimedia::VideoBitRate}
+    \sa {QtMediaservices::VideoBitRate}
 */
 
 /*!
@@ -751,7 +751,7 @@ QT_END_NAMESPACE
 
     This property holds the encoding of the media's video stream.
 
-    \sa {QtMultimedia::VideoCodec}
+    \sa {QtMediaservices::VideoCodec}
 */
 
 /*!
@@ -759,7 +759,7 @@ QT_END_NAMESPACE
 
     This property holds the URL of a poster image.
 
-    \sa {QtMultimedia::PosterUrl}
+    \sa {QtMediaservices::PosterUrl}
 */
 
 /*!
@@ -767,7 +767,7 @@ QT_END_NAMESPACE
 
     This property holds the chapter number of the media.
 
-    \sa {QtMultimedia::ChapterNumber}
+    \sa {QtMediaservices::ChapterNumber}
 */
 
 /*!
@@ -775,7 +775,7 @@ QT_END_NAMESPACE
 
     This property holds the director of the media.
 
-    \sa {QtMultimedia::Director}
+    \sa {QtMediaservices::Director}
 */
 
 /*!
@@ -783,7 +783,7 @@ QT_END_NAMESPACE
 
     This property holds the lead performer in the media.
 
-    \sa {QtMultimedia::LeadPerformer}
+    \sa {QtMediaservices::LeadPerformer}
 */
 
 /*!
@@ -791,7 +791,7 @@ QT_END_NAMESPACE
 
     This property holds the writer of the media.
 
-    \sa {QtMultimedia::Writer}
+    \sa {QtMediaservices::Writer}
 */
 
 // The remaining properties are related to photos, and are technically
@@ -801,157 +801,157 @@ QT_END_NAMESPACE
 /*!
     \qmlproperty variant Video::cameraManufacturer
 
-    \sa {QtMultimedia::CameraManufacturer}
+    \sa {QtMediaservices::CameraManufacturer}
 */
 
 /*!
     \qmlproperty variant Video::cameraModel
 
-    \sa {QtMultimedia::CameraModel}
+    \sa {QtMediaservices::CameraModel}
 */
 
 /*!
     \qmlproperty variant Video::event
 
-    \sa {QtMultimedia::Event}
+    \sa {QtMediaservices::Event}
 */
 
 /*!
     \qmlproperty variant Video::subject
 
-    \sa {QtMultimedia::Subject}
+    \sa {QtMediaservices::Subject}
 */
 
 /*!
     \qmlproperty variant Video::orientation
 
-    \sa {QtMultimedia::Orientation}
+    \sa {QtMediaservices::Orientation}
 */
 
 /*!
     \qmlproperty variant Video::exposureTime
 
-    \sa {QtMultimedia::ExposureTime}
+    \sa {QtMediaservices::ExposureTime}
 */
 
 /*!
     \qmlproperty variant Video::fNumber
 
-    \sa {QtMultimedia::FNumber}
+    \sa {QtMediaservices::FNumber}
 */
 
 /*!
     \qmlproperty variant Video::exposureProgram
 
-    \sa {QtMultimedia::ExposureProgram}
+    \sa {QtMediaservices::ExposureProgram}
 */
 
 /*!
     \qmlproperty variant Video::isoSpeedRatings
 
-    \sa {QtMultimedia::ISOSpeedRatings}
+    \sa {QtMediaservices::ISOSpeedRatings}
 */
 
 /*!
     \qmlproperty variant Video::exposureBiasValue
 
-    \sa {QtMultimedia::ExposureBiasValue}
+    \sa {QtMediaservices::ExposureBiasValue}
 */
 
 /*!
     \qmlproperty variant Video::dateTimeDigitized
 
-    \sa {QtMultimedia::DateTimeDigitized}
+    \sa {QtMediaservices::DateTimeDigitized}
 */
 
 /*!
     \qmlproperty variant Video::subjectDistance
 
-    \sa {QtMultimedia::SubjectDistance}
+    \sa {QtMediaservices::SubjectDistance}
 */
 
 /*!
     \qmlproperty variant Video::meteringMode
 
-    \sa {QtMultimedia::MeteringMode}
+    \sa {QtMediaservices::MeteringMode}
 */
 
 /*!
     \qmlproperty variant Video::lightSource
 
-    \sa {QtMultimedia::LightSource}
+    \sa {QtMediaservices::LightSource}
 */
 
 /*!
     \qmlproperty variant Video::flash
 
-    \sa {QtMultimedia::Flash}
+    \sa {QtMediaservices::Flash}
 */
 
 /*!
     \qmlproperty variant Video::focalLength
 
-    \sa {QtMultimedia::FocalLength}
+    \sa {QtMediaservices::FocalLength}
 */
 
 /*!
     \qmlproperty variant Video::exposureMode
 
-    \sa {QtMultimedia::ExposureMode}
+    \sa {QtMediaservices::ExposureMode}
 */
 
 /*!
     \qmlproperty variant Video::whiteBalance
 
-    \sa {QtMultimedia::WhiteBalance}
+    \sa {QtMediaservices::WhiteBalance}
 */
 
 /*!
     \qmlproperty variant Video::DigitalZoomRatio
 
-    \sa {QtMultimedia::DigitalZoomRatio}
+    \sa {QtMediaservices::DigitalZoomRatio}
 */
 
 /*!
     \qmlproperty variant Video::focalLengthIn35mmFilm
 
-    \sa {QtMultimedia::FocalLengthIn35mmFile}
+    \sa {QtMediaservices::FocalLengthIn35mmFile}
 */
 
 /*!
     \qmlproperty variant Video::sceneCaptureType
 
-    \sa {QtMultimedia::SceneCaptureType}
+    \sa {QtMediaservices::SceneCaptureType}
 */
 
 /*!
     \qmlproperty variant Video::gainControl
 
-    \sa {QtMultimedia::GainControl}
+    \sa {QtMediaservices::GainControl}
 */
 
 /*!
     \qmlproperty variant Video::contrast
 
-    \sa {QtMultimedia::contrast}
+    \sa {QtMediaservices::contrast}
 */
 
 /*!
     \qmlproperty variant Video::saturation
 
-    \sa {QtMultimedia::Saturation}
+    \sa {QtMediaservices::Saturation}
 */
 
 /*!
     \qmlproperty variant Video::sharpness
 
-    \sa {QtMultimedia::Sharpness}
+    \sa {QtMediaservices::Sharpness}
 */
 
 /*!
     \qmlproperty variant Video::deviceSettingDescription
 
-    \sa {QtMultimedia::DeviceSettingDescription}
+    \sa {QtMediaservices::DeviceSettingDescription}
 */
 
 #endif
diff --git a/src/imports/multimedia/qdeclarativevideo_p.h b/src/imports/multimedia/qdeclarativevideo_p.h
index 29e1090..99882ac 100644
--- a/src/imports/multimedia/qdeclarativevideo_p.h
+++ b/src/imports/multimedia/qdeclarativevideo_p.h
@@ -55,7 +55,7 @@
 
 #include "qdeclarativemediabase_p.h"
 
-#include <QtMultimedia/qgraphicsvideoitem.h>
+#include <QtMediaservices/qgraphicsvideoitem.h>
 
 #include <QtCore/qbasictimer.h>
 #include <QtDeclarative/qdeclarativeitem.h>
diff --git a/src/imports/multimedia/qmetadatacontrolmetaobject.cpp b/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
index e90cbd6..2f45b50 100644
--- a/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
+++ b/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
@@ -40,7 +40,7 @@
 ****************************************************************************/
 
 #include "qmetadatacontrolmetaobject_p.h"
-#include <QtMultimedia/qmetadatacontrol.h>
+#include <QtMediaservices/qmetadatacontrol.h>
 
 
 QT_BEGIN_NAMESPACE
@@ -106,101 +106,101 @@ namespace
 {
     struct MetaDataKey
     {
-        QtMultimedia::MetaData key;
+        QtMediaservices::MetaData key;
         const char *name;
     };
 
     const MetaDataKey qt_metaDataKeys[] =
     {
-        { QtMultimedia::Title, "title" },
-        { QtMultimedia::SubTitle, "subTitle" },
-        { QtMultimedia::Author, "author" },
-        { QtMultimedia::Comment, "comment" },
-        { QtMultimedia::Description, "description" },
-        { QtMultimedia::Category, "category" },
-        { QtMultimedia::Genre, "genre" },
-        { QtMultimedia::Year, "year" },
-        { QtMultimedia::Date, "date" },
-        { QtMultimedia::UserRating, "userRating" },
-        { QtMultimedia::Keywords, "keywords" },
-        { QtMultimedia::Language, "language" },
-        { QtMultimedia::Publisher, "publisher" },
-        { QtMultimedia::Copyright, "copyright" },
-        { QtMultimedia::ParentalRating, "parentalRating" },
-        { QtMultimedia::RatingOrganisation, "ratingOrganisation" },
+        { QtMediaservices::Title, "title" },
+        { QtMediaservices::SubTitle, "subTitle" },
+        { QtMediaservices::Author, "author" },
+        { QtMediaservices::Comment, "comment" },
+        { QtMediaservices::Description, "description" },
+        { QtMediaservices::Category, "category" },
+        { QtMediaservices::Genre, "genre" },
+        { QtMediaservices::Year, "year" },
+        { QtMediaservices::Date, "date" },
+        { QtMediaservices::UserRating, "userRating" },
+        { QtMediaservices::Keywords, "keywords" },
+        { QtMediaservices::Language, "language" },
+        { QtMediaservices::Publisher, "publisher" },
+        { QtMediaservices::Copyright, "copyright" },
+        { QtMediaservices::ParentalRating, "parentalRating" },
+        { QtMediaservices::RatingOrganisation, "ratingOrganisation" },
 
         // Media
-        { QtMultimedia::Size, "size" },
-        { QtMultimedia::MediaType, "mediaType" },
-//        { QtMultimedia::Duration, "duration" },
+        { QtMediaservices::Size, "size" },
+        { QtMediaservices::MediaType, "mediaType" },
+//        { QtMediaservices::Duration, "duration" },
 
         // Audio
-        { QtMultimedia::AudioBitRate, "audioBitRate" },
-        { QtMultimedia::AudioCodec, "audioCodec" },
-        { QtMultimedia::AverageLevel, "averageLevel" },
-        { QtMultimedia::ChannelCount, "channelCount" },
-        { QtMultimedia::PeakValue, "peakValue" },
-        { QtMultimedia::SampleRate, "sampleRate" },
+        { QtMediaservices::AudioBitRate, "audioBitRate" },
+        { QtMediaservices::AudioCodec, "audioCodec" },
+        { QtMediaservices::AverageLevel, "averageLevel" },
+        { QtMediaservices::ChannelCount, "channelCount" },
+        { QtMediaservices::PeakValue, "peakValue" },
+        { QtMediaservices::SampleRate, "sampleRate" },
 
         // Music
-        { QtMultimedia::AlbumTitle, "albumTitle" },
-        { QtMultimedia::AlbumArtist, "albumArtist" },
-        { QtMultimedia::ContributingArtist, "contributingArtist" },
-        { QtMultimedia::Composer, "composer" },
-        { QtMultimedia::Conductor, "conductor" },
-        { QtMultimedia::Lyrics, "lyrics" },
-        { QtMultimedia::Mood, "mood" },
-        { QtMultimedia::TrackNumber, "trackNumber" },
-        { QtMultimedia::TrackCount, "trackCount" },
-
-        { QtMultimedia::CoverArtUrlSmall, "coverArtUrlSmall" },
-        { QtMultimedia::CoverArtUrlLarge, "coverArtUrlLarge" },
+        { QtMediaservices::AlbumTitle, "albumTitle" },
+        { QtMediaservices::AlbumArtist, "albumArtist" },
+        { QtMediaservices::ContributingArtist, "contributingArtist" },
+        { QtMediaservices::Composer, "composer" },
+        { QtMediaservices::Conductor, "conductor" },
+        { QtMediaservices::Lyrics, "lyrics" },
+        { QtMediaservices::Mood, "mood" },
+        { QtMediaservices::TrackNumber, "trackNumber" },
+        { QtMediaservices::TrackCount, "trackCount" },
+
+        { QtMediaservices::CoverArtUrlSmall, "coverArtUrlSmall" },
+        { QtMediaservices::CoverArtUrlLarge, "coverArtUrlLarge" },
 
         // Image/Video
-        { QtMultimedia::Resolution, "resolution" },
-        { QtMultimedia::PixelAspectRatio, "pixelAspectRatio" },
+        { QtMediaservices::Resolution, "resolution" },
+        { QtMediaservices::PixelAspectRatio, "pixelAspectRatio" },
 
         // Video
-        { QtMultimedia::VideoFrameRate, "videoFrameRate" },
-        { QtMultimedia::VideoBitRate, "videoBitRate" },
-        { QtMultimedia::VideoCodec, "videoCodec" },
+        { QtMediaservices::VideoFrameRate, "videoFrameRate" },
+        { QtMediaservices::VideoBitRate, "videoBitRate" },
+        { QtMediaservices::VideoCodec, "videoCodec" },
 
-        { QtMultimedia::PosterUrl, "posterUrl" },
+        { QtMediaservices::PosterUrl, "posterUrl" },
 
         // Movie
-        { QtMultimedia::ChapterNumber, "chapterNumber" },
-        { QtMultimedia::Director, "director" },
-        { QtMultimedia::LeadPerformer, "leadPerformer" },
-        { QtMultimedia::Writer, "writer" },
+        { QtMediaservices::ChapterNumber, "chapterNumber" },
+        { QtMediaservices::Director, "director" },
+        { QtMediaservices::LeadPerformer, "leadPerformer" },
+        { QtMediaservices::Writer, "writer" },
 
         // Photos
-        { QtMultimedia::CameraManufacturer, "cameraManufacturer" },
-        { QtMultimedia::CameraModel, "cameraModel" },
-        { QtMultimedia::Event, "event" },
-        { QtMultimedia::Subject, "subject" },
-        { QtMultimedia::Orientation, "orientation" },
-        { QtMultimedia::ExposureTime, "exposureTime" },
-        { QtMultimedia::FNumber, "fNumber" },
-        { QtMultimedia::ExposureProgram, "exposureProgram" },
-        { QtMultimedia::ISOSpeedRatings, "isoSpeedRatings" },
-        { QtMultimedia::ExposureBiasValue, "exposureBiasValue" },
-        { QtMultimedia::DateTimeOriginal, "dateTimeOriginal" },
-        { QtMultimedia::DateTimeDigitized, "dateTimeDigitized" },
-        { QtMultimedia::SubjectDistance, "subjectDistance" },
-        { QtMultimedia::MeteringMode, "meteringMode" },
-        { QtMultimedia::LightSource, "lightSource" },
-        { QtMultimedia::Flash, "flash" },
-        { QtMultimedia::FocalLength, "focalLength" },
-        { QtMultimedia::ExposureMode, "exposureMode" },
-        { QtMultimedia::WhiteBalance, "whiteBalance" },
-        { QtMultimedia::DigitalZoomRatio, "digitalZoomRatio" },
-        { QtMultimedia::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
-        { QtMultimedia::SceneCaptureType, "sceneCaptureType" },
-        { QtMultimedia::GainControl, "gainControl" },
-        { QtMultimedia::Contrast, "contrast" },
-        { QtMultimedia::Saturation, "saturation" },
-        { QtMultimedia::Sharpness, "sharpness" },
-        { QtMultimedia::DeviceSettingDescription, "deviceSettingDescription" }
+        { QtMediaservices::CameraManufacturer, "cameraManufacturer" },
+        { QtMediaservices::CameraModel, "cameraModel" },
+        { QtMediaservices::Event, "event" },
+        { QtMediaservices::Subject, "subject" },
+        { QtMediaservices::Orientation, "orientation" },
+        { QtMediaservices::ExposureTime, "exposureTime" },
+        { QtMediaservices::FNumber, "fNumber" },
+        { QtMediaservices::ExposureProgram, "exposureProgram" },
+        { QtMediaservices::ISOSpeedRatings, "isoSpeedRatings" },
+        { QtMediaservices::ExposureBiasValue, "exposureBiasValue" },
+        { QtMediaservices::DateTimeOriginal, "dateTimeOriginal" },
+        { QtMediaservices::DateTimeDigitized, "dateTimeDigitized" },
+        { QtMediaservices::SubjectDistance, "subjectDistance" },
+        { QtMediaservices::MeteringMode, "meteringMode" },
+        { QtMediaservices::LightSource, "lightSource" },
+        { QtMediaservices::Flash, "flash" },
+        { QtMediaservices::FocalLength, "focalLength" },
+        { QtMediaservices::ExposureMode, "exposureMode" },
+        { QtMediaservices::WhiteBalance, "whiteBalance" },
+        { QtMediaservices::DigitalZoomRatio, "digitalZoomRatio" },
+        { QtMediaservices::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
+        { QtMediaservices::SceneCaptureType, "sceneCaptureType" },
+        { QtMediaservices::GainControl, "gainControl" },
+        { QtMediaservices::Contrast, "contrast" },
+        { QtMediaservices::Saturation, "saturation" },
+        { QtMediaservices::Sharpness, "sharpness" },
+        { QtMediaservices::DeviceSettingDescription, "deviceSettingDescription" }
     };
 
     class QMetaDataControlObject : public QObject
diff --git a/src/imports/multimedia/qmetadatacontrolmetaobject_p.h b/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
index c381f2d..128eaa4 100644
--- a/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
+++ b/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
@@ -54,7 +54,7 @@
 //
 
 #include <QtCore/qmetaobject.h>
-#include <QtMultimedia/qtmedianamespace.h>
+#include <QtMediaservices/qtmedianamespace.h>
 
 #include <QtCore/private/qobject_p.h>
 
diff --git a/src/multimedia/audio/audio.pri b/src/multimedia/audio/audio.pri
deleted file mode 100644
index ae28a26..0000000
--- a/src/multimedia/audio/audio.pri
+++ /dev/null
@@ -1,73 +0,0 @@
-HEADERS += $$PWD/qaudio.h \
-           $$PWD/qaudioformat.h \
-           $$PWD/qaudioinput.h \
-           $$PWD/qaudiooutput.h \
-           $$PWD/qaudiodeviceinfo.h \
-           $$PWD/qaudioengineplugin.h \
-           $$PWD/qaudioengine.h \
-           $$PWD/qaudiodevicefactory_p.h
-
-
-SOURCES += $$PWD/qaudio.cpp \
-           $$PWD/qaudioformat.cpp  \
-           $$PWD/qaudiodeviceinfo.cpp \
-           $$PWD/qaudiooutput.cpp \
-           $$PWD/qaudioinput.cpp \
-           $$PWD/qaudioengineplugin.cpp \
-           $$PWD/qaudioengine.cpp \
-           $$PWD/qaudiodevicefactory.cpp
-
-contains(QT_CONFIG, audio-backend) {
-
-mac {
-    HEADERS +=  $$PWD/qaudioinput_mac_p.h \
-                $$PWD/qaudiooutput_mac_p.h \
-                $$PWD/qaudiodeviceinfo_mac_p.h \
-                $$PWD/qaudio_mac_p.h
-
-    SOURCES += $$PWD/qaudiodeviceinfo_mac_p.cpp \
-               $$PWD/qaudiooutput_mac_p.cpp \
-               $$PWD/qaudioinput_mac_p.cpp \
-               $$PWD/qaudio_mac.cpp
-
-    LIBS += -framework ApplicationServices -framework CoreAudio -framework AudioUnit -framework AudioToolbox
-
-} else:win32 {
-
-    HEADERS += $$PWD/qaudioinput_win32_p.h $$PWD/qaudiooutput_win32_p.h $$PWD/qaudiodeviceinfo_win32_p.h
-    SOURCES += $$PWD/qaudiodeviceinfo_win32_p.cpp \
-               $$PWD/qaudiooutput_win32_p.cpp \
-               $$PWD/qaudioinput_win32_p.cpp
-    !wince*:LIBS += -lwinmm
-    wince*:LIBS += -lcoredll
-
-} else:symbian {
-    INCLUDEPATH += /epoc32/include/mmf/common
-    INCLUDEPATH += /epoc32/include/mmf/server
-
-    HEADERS += $$PWD/qaudio_symbian_p.h \
-               $$PWD/qaudiodeviceinfo_symbian_p.h \
-               $$PWD/qaudioinput_symbian_p.h \
-               $$PWD/qaudiooutput_symbian_p.h
-
-    SOURCES += $$PWD/qaudio_symbian_p.cpp \
-               $$PWD/qaudiodeviceinfo_symbian_p.cpp \
-               $$PWD/qaudioinput_symbian_p.cpp \
-               $$PWD/qaudiooutput_symbian_p.cpp
-
-    LIBS += -lmmfdevsound
-} else:unix {
-    unix:contains(QT_CONFIG, alsa) {
-        linux-*|freebsd-*|openbsd-*:{
-            DEFINES += HAS_ALSA
-            HEADERS += $$PWD/qaudiooutput_alsa_p.h $$PWD/qaudioinput_alsa_p.h $$PWD/qaudiodeviceinfo_alsa_p.h
-            SOURCES += $$PWD/qaudiodeviceinfo_alsa_p.cpp \
-                   $$PWD/qaudiooutput_alsa_p.cpp \
-                   $$PWD/qaudioinput_alsa_p.cpp
-            LIBS_PRIVATE += -lasound
-        }
-    }
-}
-} else {
-    DEFINES += QT_NO_AUDIO_BACKEND
-}
diff --git a/src/multimedia/audio/qaudio.cpp b/src/multimedia/audio/qaudio.cpp
deleted file mode 100644
index e0f24ce..0000000
--- a/src/multimedia/audio/qaudio.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtMultimedia/qaudio.h>
-
-
-QT_BEGIN_NAMESPACE
-
-namespace QAudio
-{
-
-class RegisterMetaTypes
-{
-public:
-    RegisterMetaTypes()
-    {
-        qRegisterMetaType<QAudio::Error>();
-        qRegisterMetaType<QAudio::State>();
-        qRegisterMetaType<QAudio::Mode>();
-    }
-
-} _register;
-
-}
-
-/*!
-    \namespace QAudio
-    \brief The QAudio namespace contains enums used by the audio classes.
-    \inmodule QtMultimedia
-    \ingroup multimedia
-    \since 4.6
-*/
-
-/*!
-    \enum QAudio::Error
-
-    \value NoError         No errors have occurred
-    \value OpenError       An error opening the audio device
-    \value IOError         An error occurred during read/write of audio device
-    \value UnderrunError   Audio data is not being fed to the audio device at a fast enough rate
-    \value FatalError      A non-recoverable error has occurred, the audio device is not usable at this time.
-*/
-
-/*!
-    \enum QAudio::State
-
-    \value ActiveState     Audio data is being processed, this state is set after start() is called
-                           and while audio data is available to be processed.
-    \value SuspendedState  The audio device is in a suspended state, this state will only be entered
-                           after suspend() is called.
-    \value StoppedState    The audio device is closed, not processing any audio data
-    \value IdleState       The QIODevice passed in has no data and audio system's buffer is empty, this state
-                           is set after start() is called and while no audio data is available to be processed.
-*/
-
-/*!
-    \enum QAudio::Mode
-
-    \value AudioOutput   audio output device
-    \value AudioInput    audio input device
-*/
-
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/audio/qaudio.h b/src/multimedia/audio/qaudio.h
deleted file mode 100644
index 9ca1dff..0000000
--- a/src/multimedia/audio/qaudio.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QAUDIO_H
-#define QAUDIO_H
-
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qmetatype.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-namespace QAudio
-{
-    enum Error { NoError, OpenError, IOError, UnderrunError, FatalError };
-    enum State { ActiveState, SuspendedState, StoppedState, IdleState };
-    enum Mode { AudioInput, AudioOutput };
-}
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-Q_DECLARE_METATYPE(QAudio::Error)
-Q_DECLARE_METATYPE(QAudio::State)
-Q_DECLARE_METATYPE(QAudio::Mode)
-
-#endif // QAUDIO_H
diff --git a/src/multimedia/audio/qaudio_mac.cpp b/src/multimedia/audio/qaudio_mac.cpp
deleted file mode 100644
index 14fee8b..0000000
--- a/src/multimedia/audio/qaudio_mac.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include "qaudio_mac_p.h"
-
-QT_BEGIN_NAMESPACE
-
-// Debugging
-QDebug operator<<(QDebug dbg, const QAudioFormat& audioFormat)
-{
-    dbg.nospace() << "QAudioFormat(" <<
-            audioFormat.frequency() << "," <<
-            audioFormat.channels() << "," <<
-            audioFormat.sampleSize()<< "," <<
-            audioFormat.codec() << "," <<
-            audioFormat.byteOrder() << "," <<
-            audioFormat.sampleType() << ")";
-
-    return dbg.space();
-}
-
-
-// Conversion
-QAudioFormat toQAudioFormat(AudioStreamBasicDescription const& sf)
-{
-    QAudioFormat    audioFormat;
-
-    audioFormat.setFrequency(sf.mSampleRate);
-    audioFormat.setChannels(sf.mChannelsPerFrame);
-    audioFormat.setSampleSize(sf.mBitsPerChannel);
-    audioFormat.setCodec(QString::fromLatin1("audio/pcm"));
-    audioFormat.setByteOrder(sf.mFormatFlags & kLinearPCMFormatFlagIsBigEndian != 0 ? QAudioFormat::BigEndian : QAudioFormat::LittleEndian);
-    QAudioFormat::SampleType type = QAudioFormat::UnSignedInt;
-    if ((sf.mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) != 0)
-        type = QAudioFormat::SignedInt;
-    else if ((sf.mFormatFlags & kLinearPCMFormatFlagIsFloat) != 0)
-        type = QAudioFormat::Float;
-    audioFormat.setSampleType(type);
-
-    return audioFormat;
-}
-
-AudioStreamBasicDescription toAudioStreamBasicDescription(QAudioFormat const& audioFormat)
-{
-    AudioStreamBasicDescription sf;
-
-    sf.mFormatFlags         = kAudioFormatFlagIsPacked;
-    sf.mSampleRate          = audioFormat.frequency();
-    sf.mFramesPerPacket     = 1;
-    sf.mChannelsPerFrame    = audioFormat.channels();
-    sf.mBitsPerChannel      = audioFormat.sampleSize();
-    sf.mBytesPerFrame       = sf.mChannelsPerFrame * (sf.mBitsPerChannel / 8);
-    sf.mBytesPerPacket      = sf.mFramesPerPacket * sf.mBytesPerFrame;
-    sf.mFormatID            = kAudioFormatLinearPCM;
-
-    switch (audioFormat.sampleType()) {
-    case QAudioFormat::SignedInt: sf.mFormatFlags |= kAudioFormatFlagIsSignedInteger; break;
-    case QAudioFormat::UnSignedInt: /* default */ break;
-    case QAudioFormat::Float: sf.mFormatFlags |= kAudioFormatFlagIsFloat; break;
-    case QAudioFormat::Unknown:  default: break;
-    }
-
-    return sf;
-}
-
-// QAudioRingBuffer
-QAudioRingBuffer::QAudioRingBuffer(int bufferSize):
-    m_bufferSize(bufferSize)
-{
-    m_buffer = new char[m_bufferSize];
-    reset();
-}
-
-QAudioRingBuffer::~QAudioRingBuffer()
-{
-    delete m_buffer;
-}
-
-int QAudioRingBuffer::used() const
-{
-    return m_bufferUsed;
-}
-
-int QAudioRingBuffer::free() const
-{
-    return m_bufferSize - m_bufferUsed;
-}
-
-int QAudioRingBuffer::size() const
-{
-    return m_bufferSize;
-}
-
-void QAudioRingBuffer::reset()
-{
-    m_readPos = 0;
-    m_writePos = 0;
-    m_bufferUsed = 0;
-}
-
-QT_END_NAMESPACE
-
-
diff --git a/src/multimedia/audio/qaudio_mac_p.h b/src/multimedia/audio/qaudio_mac_p.h
deleted file mode 100644
index 4e7d688..0000000
--- a/src/multimedia/audio/qaudio_mac_p.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#ifndef QAUDIO_MAC_P_H
-#define QAUDIO_MAC_P_H
-
-#include <CoreAudio/CoreAudio.h>
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qatomic.h>
-
-#include <QtMultimedia/qaudioformat.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-extern QDebug operator<<(QDebug dbg, const QAudioFormat& audioFormat);
-
-extern QAudioFormat toQAudioFormat(const AudioStreamBasicDescription& streamFormat);
-extern AudioStreamBasicDescription toAudioStreamBasicDescription(QAudioFormat const& audioFormat);
-
-class QAudioRingBuffer
-{
-public:
-    typedef QPair<char*, int> Region;
-
-    QAudioRingBuffer(int bufferSize);
-    ~QAudioRingBuffer();
-
-    Region acquireReadRegion(int size)
-    {
-        const int used = m_bufferUsed.fetchAndAddAcquire(0);
-
-        if (used > 0) {
-            const int readSize = qMin(size, qMin(m_bufferSize - m_readPos, used));
-
-            return readSize > 0 ? Region(m_buffer + m_readPos, readSize) : Region(0, 0);
-        }
-
-        return Region(0, 0);
-    }
-
-    void releaseReadRegion(Region const& region)
-    {
-        m_readPos = (m_readPos + region.second) % m_bufferSize;
-
-        m_bufferUsed.fetchAndAddRelease(-region.second);
-    }
-
-    Region acquireWriteRegion(int size)
-    {
-        const int free = m_bufferSize - m_bufferUsed.fetchAndAddAcquire(0);
-
-        if (free > 0) {
-            const int writeSize = qMin(size, qMin(m_bufferSize - m_writePos, free));
-
-            return writeSize > 0 ? Region(m_buffer + m_writePos, writeSize) : Region(0, 0);
-        }
-
-        return Region(0, 0);
-    }
-
-    void releaseWriteRegion(Region const& region)
-    {
-        m_writePos = (m_writePos + region.second) % m_bufferSize;
-
-        m_bufferUsed.fetchAndAddRelease(region.second);
-    }
-
-    int used() const;
-    int free() const;
-    int size() const;
-
-    void reset();
-
-private:
-    int     m_bufferSize;
-    int     m_readPos;
-    int     m_writePos;
-    char*   m_buffer;
-    QAtomicInt  m_bufferUsed;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QAUDIO_MAC_P_H
-
-
diff --git a/src/multimedia/audio/qaudio_symbian_p.cpp b/src/multimedia/audio/qaudio_symbian_p.cpp
deleted file mode 100644
index 58e3745..0000000
--- a/src/multimedia/audio/qaudio_symbian_p.cpp
+++ /dev/null
@@ -1,395 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qaudio_symbian_p.h"
-#include <mmffourcc.h>
-
-QT_BEGIN_NAMESPACE
-
-namespace SymbianAudio {
-
-DevSoundCapabilities::DevSoundCapabilities(CMMFDevSound &devsound,
-                                           QAudio::Mode mode)
-{
-    QT_TRAP_THROWING(constructL(devsound, mode));
-}
-
-DevSoundCapabilities::~DevSoundCapabilities()
-{
-    m_fourCC.Close();
-}
-
-void DevSoundCapabilities::constructL(CMMFDevSound &devsound,
-                                      QAudio::Mode mode)
-{
-    m_caps = devsound.Capabilities();
-
-    TMMFPrioritySettings settings;
-
-    switch (mode) {
-    case QAudio::AudioOutput:
-        settings.iState = EMMFStatePlaying;
-        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
-        break;
-
-    case QAudio::AudioInput:
-        settings.iState = EMMFStateRecording;
-        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
-        break;
-
-    default:
-        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
-    }
-}
-
-namespace Utils {
-
-//-----------------------------------------------------------------------------
-// Static data
-//-----------------------------------------------------------------------------
-
-// Sample rate / frequency
-
-typedef TMMFSampleRate SampleRateNative;
-typedef int SampleRateQt;
-
-const int SampleRateCount = 12;
-
-const SampleRateNative SampleRateListNative[SampleRateCount] = {
-        EMMFSampleRate8000Hz
-    ,   EMMFSampleRate11025Hz
-    ,   EMMFSampleRate12000Hz
-    ,   EMMFSampleRate16000Hz
-    ,   EMMFSampleRate22050Hz
-    ,   EMMFSampleRate24000Hz
-    ,   EMMFSampleRate32000Hz
-    ,   EMMFSampleRate44100Hz
-    ,   EMMFSampleRate48000Hz
-    ,   EMMFSampleRate64000Hz
-    ,   EMMFSampleRate88200Hz
-    ,   EMMFSampleRate96000Hz
-};
-
-const SampleRateQt SampleRateListQt[SampleRateCount] = {
-        8000
-    ,   11025
-    ,   12000
-    ,   16000
-    ,   22050
-    ,   24000
-    ,   32000
-    ,   44100
-    ,   48000
-    ,   64000
-    ,   88200
-    ,   96000
-};
-
-// Channels
-
-typedef TMMFMonoStereo ChannelsNative;
-typedef int ChannelsQt;
-
-const int ChannelsCount = 2;
-
-const ChannelsNative ChannelsListNative[ChannelsCount] = {
-        EMMFMono
-    ,   EMMFStereo
-};
-
-const ChannelsQt ChannelsListQt[ChannelsCount] = {
-        1
-    ,   2
-};
-
-// Encoding
-
-const int EncodingCount = 6;
-
-const TUint32 EncodingFourCC[EncodingCount] = {
-        KMMFFourCCCodePCM8              // 0
-    ,   KMMFFourCCCodePCMU8             // 1
-    ,   KMMFFourCCCodePCM16             // 2
-    ,   KMMFFourCCCodePCMU16            // 3
-    ,   KMMFFourCCCodePCM16B            // 4
-    ,   KMMFFourCCCodePCMU16B           // 5
-};
-
-// The characterised DevSound API specification states that the iEncoding
-// field in TMMFCapabilities is ignored, and that the FourCC should be used
-// to specify the PCM encoding.
-// See "SGL.GT0287.102 Multimedia DevSound Baseline Compatibility.doc" in the
-// mm_info/mm_docs repository.
-const TMMFSoundEncoding EncodingNative[EncodingCount] = {
-        EMMFSoundEncoding16BitPCM       // 0
-    ,   EMMFSoundEncoding16BitPCM       // 1
-    ,   EMMFSoundEncoding16BitPCM       // 2
-    ,   EMMFSoundEncoding16BitPCM       // 3
-    ,   EMMFSoundEncoding16BitPCM       // 4
-    ,   EMMFSoundEncoding16BitPCM       // 5
-};
-
-
-const int EncodingSampleSize[EncodingCount] = {
-        8                               // 0
-    ,   8                               // 1
-    ,   16                              // 2
-    ,   16                              // 3
-    ,   16                              // 4
-    ,   16                              // 5
-};
-
-const QAudioFormat::Endian EncodingByteOrder[EncodingCount] = {
-        QAudioFormat::LittleEndian      // 0
-    ,   QAudioFormat::LittleEndian      // 1
-    ,   QAudioFormat::LittleEndian      // 2
-    ,   QAudioFormat::LittleEndian      // 3
-    ,   QAudioFormat::BigEndian         // 4
-    ,   QAudioFormat::BigEndian         // 5
-};
-
-const QAudioFormat::SampleType EncodingSampleType[EncodingCount] = {
-        QAudioFormat::SignedInt         // 0
-    ,   QAudioFormat::UnSignedInt       // 1
-    ,   QAudioFormat::SignedInt         // 2
-    ,   QAudioFormat::UnSignedInt       // 3
-    ,   QAudioFormat::SignedInt         // 4
-    ,   QAudioFormat::UnSignedInt       // 5
-};
-
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-// Helper functions for implementing parameter conversions
-
-template<typename Input>
-bool findValue(const Input *inputArray, int length, Input input, int &index) {
-    bool result = false;
-    for (int i=0; !result && i<length; ++i)
-        if (inputArray[i] == input) {
-            index = i;
-            result = true;
-        }
-    return result;
-}
-
-template<typename Input, typename Output>
-bool convertValue(const Input *inputArray, const Output *outputArray,
-    int length, Input input, Output &output) {
-    int index;
-    const bool result = findValue<Input>(inputArray, length, input, index);
-    if (result)
-        output = outputArray[index];
-    return result;
-}
-
-/**
- * Macro which is used to generate the implementation of the conversion
- * functions.  The implementation is just a wrapper around the templated
- * convertValue function, e.g.
- *
- * CONVERSION_FUNCTION_IMPL(SampleRate, Qt, Native)
- *
- * expands to
- *
- * bool SampleRateQtToNative(int input, TMMFSampleRate &output) {
- *      return convertValue<SampleRateQt, SampleRateNative>
- *          (SampleRateListQt, SampleRateListNative, SampleRateCount,
- *          input, output);
- * }
- */
-#define CONVERSION_FUNCTION_IMPL(FieldLc, Field, Input, Output)               \
-bool FieldLc##Input##To##Output(Field##Input input, Field##Output &output) {  \
-    return convertValue<Field##Input, Field##Output>(Field##List##Input,      \
-        Field##List##Output, Field##Count, input, output);                    \
-}
-
-//-----------------------------------------------------------------------------
-// Local helper functions
-//-----------------------------------------------------------------------------
-
-CONVERSION_FUNCTION_IMPL(sampleRate, SampleRate, Qt, Native)
-CONVERSION_FUNCTION_IMPL(sampleRate, SampleRate, Native, Qt)
-CONVERSION_FUNCTION_IMPL(channels, Channels, Qt, Native)
-CONVERSION_FUNCTION_IMPL(channels, Channels, Native, Qt)
-
-bool sampleInfoQtToNative(int inputSampleSize,
-                          QAudioFormat::Endian inputByteOrder,
-                          QAudioFormat::SampleType inputSampleType,
-                          TUint32 &outputFourCC,
-                          TMMFSoundEncoding &outputEncoding) {
-
-    bool found = false;
-
-    for (int i=0; i<EncodingCount && !found; ++i) {
-        if (    EncodingSampleSize[i] == inputSampleSize
-            &&  EncodingByteOrder[i] == inputByteOrder
-            &&  EncodingSampleType[i] == inputSampleType) {
-            outputFourCC = EncodingFourCC[i];
-            outputEncoding = EncodingNative[i]; // EMMFSoundEncoding16BitPCM
-            found = true;
-        }
-    }
-
-    return found;
-}
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
-                            QList<int> &frequencies,
-                            QList<int> &channels,
-                            QList<int> &sampleSizes,
-                            QList<QAudioFormat::Endian> &byteOrders,
-                            QList<QAudioFormat::SampleType> &sampleTypes) {
-
-    frequencies.clear();
-    sampleSizes.clear();
-    byteOrders.clear();
-    sampleTypes.clear();
-    channels.clear();
-
-    for (int i=0; i<SampleRateCount; ++i)
-        if (caps.caps().iRate & SampleRateListNative[i])
-            frequencies += SampleRateListQt[i];
-
-    for (int i=0; i<ChannelsCount; ++i)
-        if (caps.caps().iChannels & ChannelsListNative[i])
-            channels += ChannelsListQt[i];
-
-    for (int i=0; i<EncodingCount; ++i) {
-        if (caps.fourCC().Find(EncodingFourCC[i]) != KErrNotFound) {
-            sampleSizes += EncodingSampleSize[i];
-            byteOrders += EncodingByteOrder[i];
-            sampleTypes += EncodingSampleType[i];
-        }
-    }
-
-}
-
-bool isFormatSupported(const QAudioFormat &formatQt,
-                       const DevSoundCapabilities &caps) {
-    TMMFCapabilities formatNative;
-    TUint32 fourCC;
-
-    bool result = false;
-    if (formatQt.codec() == "audio/pcm" &&
-        formatQtToNative(formatQt, fourCC, formatNative)) {
-        result =
-                (formatNative.iRate & caps.caps().iRate)
-            &&  (formatNative.iChannels & caps.caps().iChannels)
-            &&  (caps.fourCC().Find(fourCC) != KErrNotFound);
-    }
-    return result;
-}
-
-bool formatQtToNative(const QAudioFormat &inputFormat,
-                      TUint32 &outputFourCC,
-                      TMMFCapabilities &outputFormat) {
-
-    bool result = false;
-
-    // Need to use temporary variables because TMMFCapabilities fields are all
-    // TInt, rather than MMF enumerated types.
-    TMMFSampleRate outputSampleRate;
-    TMMFMonoStereo outputChannels;
-    TMMFSoundEncoding outputEncoding;
-
-    if (inputFormat.codec() == "audio/pcm") {
-        result =
-                sampleRateQtToNative(inputFormat.frequency(), outputSampleRate)
-            &&  channelsQtToNative(inputFormat.channels(), outputChannels)
-            &&  sampleInfoQtToNative(inputFormat.sampleSize(),
-                                     inputFormat.byteOrder(),
-                                     inputFormat.sampleType(),
-                                     outputFourCC,
-                                     outputEncoding);
-    }
-
-    if (result) {
-        outputFormat.iRate = outputSampleRate;
-        outputFormat.iChannels = outputChannels;
-        outputFormat.iEncoding = outputEncoding;
-    }
-
-    return result;
-}
-
-QAudio::State stateNativeToQt(State nativeState,
-                              QAudio::State initializingState)
-{
-    switch (nativeState) {
-    case ClosedState:
-        return QAudio::StoppedState;
-    case InitializingState:
-        return initializingState;
-    case ActiveState:
-        return QAudio::ActiveState;
-    case IdleState:
-        return QAudio::IdleState;
-    case SuspendedState:
-        return QAudio::SuspendedState;
-    default:
-        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid state");
-        return QAudio::StoppedState; // suppress compiler warning
-    }
-}
-
-qint64 bytesToSamples(const QAudioFormat &format, qint64 length)
-{
-    return length / ((format.sampleSize() / 8) * format.channels());
-}
-
-qint64 samplesToBytes(const QAudioFormat &format, qint64 samples)
-{
-    return samples * (format.sampleSize() / 8) * format.channels();
-}
-
-} // namespace Utils
-} // namespace SymbianAudio
-
-QT_END_NAMESPACE
-
-
diff --git a/src/multimedia/audio/qaudio_symbian_p.h b/src/multimedia/audio/qaudio_symbian_p.h
deleted file mode 100644
index d5238b4..0000000
--- a/src/multimedia/audio/qaudio_symbian_p.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIO_SYMBIAN_P_H
-#define QAUDIO_SYMBIAN_P_H
-
-#include <QtCore/qnamespace.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudio.h>
-#include <sounddevice.h>
-
-QT_BEGIN_NAMESPACE
-
-namespace SymbianAudio {
-
-/**
- * Default values used by audio input and output classes, when underlying
- * DevSound instance has not yet been created.
- */
-
-const int DefaultBufferSize = 4096; // bytes
-const int DefaultNotifyInterval = 1000; // ms
-
-/**
- * Enumeration used to track state of internal DevSound instances.
- * Values are translated to the corresponding QAudio::State values by
- * SymbianAudio::Utils::stateNativeToQt.
- */
-enum State {
-        ClosedState
-    ,   InitializingState
-    ,   ActiveState
-    ,   IdleState
-    ,   SuspendedState
-};
-
-/*
- * Helper class for querying DevSound codec / format support
- */
-class DevSoundCapabilities {
-public:
-    DevSoundCapabilities(CMMFDevSound &devsound, QAudio::Mode mode);
-    ~DevSoundCapabilities();
-
-    const RArray<TFourCC>& fourCC() const   { return m_fourCC; }
-    const TMMFCapabilities& caps() const    { return m_caps; }
-
-private:
-    void constructL(CMMFDevSound &devsound, QAudio::Mode mode);
-
-private:
-    RArray<TFourCC> m_fourCC;
-    TMMFCapabilities m_caps;
-};
-
-namespace Utils {
-
-/**
- * Convert native audio capabilities to QAudio lists.
- */
-void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
-                            QList<int> &frequencies,
-                            QList<int> &channels,
-                            QList<int> &sampleSizes,
-                            QList<QAudioFormat::Endian> &byteOrders,
-                            QList<QAudioFormat::SampleType> &sampleTypes);
-
-/**
- * Check whether format is supported.
- */
-bool isFormatSupported(const QAudioFormat &format,
-                       const DevSoundCapabilities &caps);
-
-/**
- * Convert QAudioFormat to native format types.
- *
- * Note that, despite the name, DevSound uses TMMFCapabilities to specify
- * single formats as well as capabilities.
- *
- * Note that this function does not modify outputFormat.iBufferSize.
- */
-bool formatQtToNative(const QAudioFormat &inputFormat,
-                      TUint32 &outputFourCC,
-                      TMMFCapabilities &outputFormat);
-
-/**
- * Convert internal states to QAudio states.
- */
-QAudio::State stateNativeToQt(State nativeState,
-                              QAudio::State initializingState);
-
-/**
- * Convert data length to number of samples.
- */
-qint64 bytesToSamples(const QAudioFormat &format, qint64 length);
-
-/**
- * Convert number of samples to data length.
- */
-qint64 samplesToBytes(const QAudioFormat &format, qint64 samples);
-
-} // namespace Utils
-} // namespace SymbianAudio
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/audio/qaudiodevicefactory.cpp
deleted file mode 100644
index 4f45110..0000000
--- a/src/multimedia/audio/qaudiodevicefactory.cpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qdebug.h>
-#include <QtMultimedia/qaudioengine.h>
-#include <QtMultimedia/qaudioengineplugin.h>
-#include <private/qfactoryloader_p.h>
-#include "qaudiodevicefactory_p.h"
-
-#ifndef QT_NO_AUDIO_BACKEND
-#if defined(Q_OS_WIN)
-#include "qaudiodeviceinfo_win32_p.h"
-#include "qaudiooutput_win32_p.h"
-#include "qaudioinput_win32_p.h"
-#elif defined(Q_OS_MAC)
-#include "qaudiodeviceinfo_mac_p.h"
-#include "qaudiooutput_mac_p.h"
-#include "qaudioinput_mac_p.h"
-#elif defined(HAS_ALSA)
-#include "qaudiodeviceinfo_alsa_p.h"
-#include "qaudiooutput_alsa_p.h"
-#include "qaudioinput_alsa_p.h"
-#elif defined(Q_OS_SYMBIAN)
-#include "qaudiodeviceinfo_symbian_p.h"
-#include "qaudiooutput_symbian_p.h"
-#include "qaudioinput_symbian_p.h"
-#endif
-#endif
-
-QT_BEGIN_NAMESPACE
-
-Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
-        (QAudioEngineFactoryInterface_iid, QLatin1String("/audio"), Qt::CaseInsensitive))
-
-
-class QNullDeviceInfo : public QAbstractAudioDeviceInfo
-{
-public:
-    QAudioFormat preferredFormat() const { qWarning()<<"using null deviceinfo, none available"; return QAudioFormat(); }
-    bool isFormatSupported(const QAudioFormat& ) const { return false; }
-    QAudioFormat nearestFormat(const QAudioFormat& ) const { return QAudioFormat(); }
-    QString deviceName() const { return QString(); }
-    QStringList codecList() { return QStringList(); }
-    QList<int> frequencyList()  { return QList<int>(); }
-    QList<int> channelsList() { return QList<int>(); }
-    QList<int> sampleSizeList() { return QList<int>(); }
-    QList<QAudioFormat::Endian> byteOrderList() { return QList<QAudioFormat::Endian>(); }
-    QList<QAudioFormat::SampleType> sampleTypeList() { return QList<QAudioFormat::SampleType>(); }
-};
-
-class QNullInputDevice : public QAbstractAudioInput
-{
-public:
-    QIODevice* start(QIODevice* ) { qWarning()<<"using null input device, none available"; return 0; }
-    void stop() {}
-    void reset() {}
-    void suspend() {}
-    void resume() {}
-    int bytesReady() const { return 0; }
-    int periodSize() const { return 0; }
-    void setBufferSize(int ) {}
-    int bufferSize() const  { return 0; }
-    void setNotifyInterval(int ) {}
-    int notifyInterval() const { return 0; }
-    qint64 processedUSecs() const { return 0; }
-    qint64 elapsedUSecs() const { return 0; }
-    QAudio::Error error() const { return QAudio::OpenError; }
-    QAudio::State state() const { return QAudio::StoppedState; }
-    QAudioFormat format() const { return QAudioFormat(); }
-};
-
-class QNullOutputDevice : public QAbstractAudioOutput
-{
-public:
-    QIODevice* start(QIODevice* ) { qWarning()<<"using null output device, none available"; return 0; }
-    void stop() {}
-    void reset() {}
-    void suspend() {}
-    void resume() {}
-    int bytesFree() const { return 0; }
-    int periodSize() const { return 0; }
-    void setBufferSize(int ) {}
-    int bufferSize() const  { return 0; }
-    void setNotifyInterval(int ) {}
-    int notifyInterval() const { return 0; }
-    qint64 processedUSecs() const { return 0; }
-    qint64 elapsedUSecs() const { return 0; }
-    QAudio::Error error() const { return QAudio::OpenError; }
-    QAudio::State state() const { return QAudio::StoppedState; }
-    QAudioFormat format() const { return QAudioFormat(); }
-};
-
-QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
-{
-    QList<QAudioDeviceInfo> devices;
-#ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
-    foreach (const QByteArray &handle, QAudioDeviceInfoInternal::availableDevices(mode))
-        devices << QAudioDeviceInfo(QLatin1String("builtin"), handle, mode);
-#endif
-#endif
-    QFactoryLoader* l = loader();
-
-    foreach (QString const& key, l->keys()) {
-        QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(l->instance(key));
-        if (plugin) {
-            foreach (QByteArray const& handle, plugin->availableDevices(mode))
-                devices << QAudioDeviceInfo(key, handle, mode);
-        }
-
-        delete plugin;
-    }
-
-    return devices;
-}
-
-QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
-{
-    QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
-
-    if (plugin) {
-        QList<QByteArray> list = plugin->availableDevices(QAudio::AudioInput);
-        if (list.size() > 0)
-            return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioInput);
-    }
-#ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
-    return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultInputDevice(), QAudio::AudioInput);
-#endif
-#endif
-    return QAudioDeviceInfo();
-}
-
-QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
-{
-    QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
-
-    if (plugin) {
-        QList<QByteArray> list = plugin->availableDevices(QAudio::AudioOutput);
-        if (list.size() > 0)
-            return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioOutput);
-    }
-#ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
-    return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultOutputDevice(), QAudio::AudioOutput);
-#endif
-#endif
-    return QAudioDeviceInfo();
-}
-
-QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode)
-{
-    QAbstractAudioDeviceInfo *rc = 0;
-
-#ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
-    if (realm == QLatin1String("builtin"))
-        return new QAudioDeviceInfoInternal(handle, mode);
-#endif
-#endif
-    QAudioEngineFactoryInterface* plugin =
-        qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(realm));
-
-    if (plugin)
-        rc = plugin->createDeviceInfo(handle, mode);
-
-    return rc == 0 ? new QNullDeviceInfo() : rc;
-}
-
-QAbstractAudioInput* QAudioDeviceFactory::createDefaultInputDevice(QAudioFormat const &format)
-{
-    return createInputDevice(defaultInputDevice(), format);
-}
-
-QAbstractAudioOutput* QAudioDeviceFactory::createDefaultOutputDevice(QAudioFormat const &format)
-{
-    return createOutputDevice(defaultOutputDevice(), format);
-}
-
-QAbstractAudioInput* QAudioDeviceFactory::createInputDevice(QAudioDeviceInfo const& deviceInfo, QAudioFormat const &format)
-{
-    if (deviceInfo.isNull())
-        return new QNullInputDevice();
-#ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
-    if (deviceInfo.realm() == QLatin1String("builtin"))
-        return new QAudioInputPrivate(deviceInfo.handle(), format);
-#endif
-#endif
-    QAudioEngineFactoryInterface* plugin =
-        qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
-
-    if (plugin)
-        return plugin->createInput(deviceInfo.handle(), format);
-
-    return new QNullInputDevice();
-}
-
-QAbstractAudioOutput* QAudioDeviceFactory::createOutputDevice(QAudioDeviceInfo const& deviceInfo, QAudioFormat const &format)
-{
-    if (deviceInfo.isNull())
-        return new QNullOutputDevice();
-#ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
-    if (deviceInfo.realm() == QLatin1String("builtin"))
-        return new QAudioOutputPrivate(deviceInfo.handle(), format);
-#endif
-#endif
-    QAudioEngineFactoryInterface* plugin =
-        qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
-
-    if (plugin)
-        return plugin->createOutput(deviceInfo.handle(), format);
-
-    return new QNullOutputDevice();
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/audio/qaudiodevicefactory_p.h b/src/multimedia/audio/qaudiodevicefactory_p.h
deleted file mode 100644
index 8ee8b05..0000000
--- a/src/multimedia/audio/qaudiodevicefactory_p.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIODEVICEFACTORY_P_H
-#define QAUDIODEVICEFACTORY_P_H
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qbytearray.h>
-#include <QtCore/qlist.h>
-
-#include <QtMultimedia/qaudiodeviceinfo.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QAbstractAudioInput;
-class QAbstractAudioOutput;
-class QAbstractAudioDeviceInfo;
-
-class QAudioDeviceFactory
-{
-public:
-    static QList<QAudioDeviceInfo> availableDevices(QAudio::Mode mode);
-
-    static QAudioDeviceInfo defaultInputDevice();
-    static QAudioDeviceInfo defaultOutputDevice();
-
-    static QAbstractAudioDeviceInfo* audioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
-
-    static QAbstractAudioInput* createDefaultInputDevice(QAudioFormat const &format);
-    static QAbstractAudioOutput* createDefaultOutputDevice(QAudioFormat const &format);
-
-    static QAbstractAudioInput* createInputDevice(QAudioDeviceInfo const &device, QAudioFormat const &format);
-    static QAbstractAudioOutput* createOutputDevice(QAudioDeviceInfo const &device, QAudioFormat const &format);
-
-    static QAbstractAudioInput* createNullInput();
-    static QAbstractAudioOutput* createNullOutput();
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QAUDIODEVICEFACTORY_P_H
-
diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp
deleted file mode 100644
index ff04b4e..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qaudiodevicefactory_p.h"
-#include <QtMultimedia/qaudioengine.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-
-
-QT_BEGIN_NAMESPACE
-
-class QAudioDeviceInfoPrivate : public QSharedData
-{
-public:
-    QAudioDeviceInfoPrivate():info(0) {}
-    QAudioDeviceInfoPrivate(const QString &r, const QByteArray &h, QAudio::Mode m):
-        realm(r), handle(h), mode(m)
-    {
-        info = QAudioDeviceFactory::audioDeviceInfo(realm, handle, mode);
-    }
-
-    QAudioDeviceInfoPrivate(const QAudioDeviceInfoPrivate &other):
-        QSharedData(other),
-        realm(other.realm), handle(other.handle), mode(other.mode)
-    {
-        info = QAudioDeviceFactory::audioDeviceInfo(realm, handle, mode);
-    }
-
-    QAudioDeviceInfoPrivate& operator=(const QAudioDeviceInfoPrivate &other)
-    {
-        delete info;
-
-        realm = other.realm;
-        handle = other.handle;
-        mode = other.mode;
-        info = QAudioDeviceFactory::audioDeviceInfo(realm, handle, mode);
-        return *this;
-    }
-
-    ~QAudioDeviceInfoPrivate()
-    {
-        delete info;
-    }
-
-    QString     realm;
-    QByteArray  handle;
-    QAudio::Mode mode;
-    QAbstractAudioDeviceInfo*   info;
-};
-
-
-/*!
-    \class QAudioDeviceInfo
-    \brief The QAudioDeviceInfo class provides an interface to query audio devices and their functionality.
-    \inmodule QtMultimedia
-    \ingroup multimedia
-
-    \since 4.6
-
-    QAudioDeviceInfo lets you query for audio devices--such as sound
-    cards and USB headsets--that are currently available on the system.
-    The audio devices available are dependent on the platform or audio plugins installed.
-
-    You can also query each device for the formats it supports. A
-    format in this context is a set consisting of a specific byte
-    order, channel, codec, frequency, sample rate, and sample type.  A
-    format is represented by the QAudioFormat class.
-
-    The values supported by the the device for each of these
-    parameters can be fetched with
-    supportedByteOrders(), supportedChannelCounts(), supportedCodecs(),
-    supportedSampleRates(), supportedSampleSizes(), and
-    supportedSampleTypes(). The combinations supported are dependent on the platform,
-    audio plugins installed and the audio device capabilities. If you need a specific format, you can check if
-    the device supports it with isFormatSupported(), or fetch a
-    supported format that is as close as possible to the format with
-    nearestFormat(). For instance:
-
-    \snippet doc/src/snippets/audio/main.cpp 1
-    \dots 8
-    \snippet doc/src/snippets/audio/main.cpp 2
-
-    A QAudioDeviceInfo is used by Qt to construct
-    classes that communicate with the device--such as
-    QAudioInput, and QAudioOutput. The static
-    functions defaultInputDevice(), defaultOutputDevice(), and
-    availableDevices() let you get a list of all available
-    devices. Devices are fetch according to the value of mode
-    this is specified by the QAudio::Mode enum.
-    The QAudioDeviceInfo returned are only valid for the QAudio::Mode.
-
-    For instance:
-
-    \code
-    foreach(const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
-        qDebug() << "Device name: " << deviceInfo.deviceName();
-    \endcode
-
-    In this code sample, we loop through all devices that are able to output
-    sound, i.e., play an audio stream in a supported format. For each device we
-    find, we simply print the deviceName().
-
-    \sa QAudioOutput, QAudioInput
-*/
-
-/*!
-    Constructs an empty QAudioDeviceInfo object.
-*/
-
-QAudioDeviceInfo::QAudioDeviceInfo():
-    d(new QAudioDeviceInfoPrivate)
-{
-}
-
-/*!
-    Constructs a copy of \a other.
-*/
-
-QAudioDeviceInfo::QAudioDeviceInfo(const QAudioDeviceInfo& other):
-    d(other.d)
-{
-}
-
-/*!
-    Destroy this audio device info.
-*/
-
-QAudioDeviceInfo::~QAudioDeviceInfo()
-{
-}
-
-/*!
-    Sets the QAudioDeviceInfo object to be equal to \a other.
-*/
-
-QAudioDeviceInfo& QAudioDeviceInfo::operator=(const QAudioDeviceInfo &other)
-{
-    d = other.d;
-    return *this;
-}
-
-/*!
-    Returns whether this QAudioDeviceInfo object holds a device definition.
-*/
-
-bool QAudioDeviceInfo::isNull() const
-{
-    return d->info == 0;
-}
-
-/*!
-    Returns human readable name of audio device.
-
-    Device names vary depending on platform/audio plugin being used.
-
-    They are a unique string identifiers for the audio device.
-
-    eg. default, Intel, U0x46d0x9a4
-*/
-
-QString QAudioDeviceInfo::deviceName() const
-{
-    return isNull() ? QString() : d->info->deviceName();
-}
-
-/*!
-    Returns true if \a settings are supported by the audio device of this QAudioDeviceInfo.
-*/
-
-bool QAudioDeviceInfo::isFormatSupported(const QAudioFormat &settings) const
-{
-    return isNull() ? false : d->info->isFormatSupported(settings);
-}
-
-/*!
-    Returns QAudioFormat of default settings.
-
-    These settings are provided by the platform/audio plugin being used.
-
-    They also are dependent on the QAudio::Mode being used.
-
-    A typical audio system would provide something like:
-    \list
-    \o Input settings: 8000Hz mono 8 bit.
-    \o Output settings: 44100Hz stereo 16 bit little endian.
-    \endlist
-*/
-
-QAudioFormat QAudioDeviceInfo::preferredFormat() const
-{
-    return isNull() ? QAudioFormat() : d->info->preferredFormat();
-}
-
-/*!
-    Returns closest QAudioFormat to \a settings that system audio supports.
-
-    These settings are provided by the platform/audio plugin being used.
-
-    They also are dependent on the QAudio::Mode being used.
-*/
-
-QAudioFormat QAudioDeviceInfo::nearestFormat(const QAudioFormat &settings) const
-{
-    return isNull() ? QAudioFormat() : d->info->nearestFormat(settings);
-}
-
-/*!
-    Returns a list of supported codecs.
-
-    All platform and plugin implementations should provide support for:
-
-    "audio/pcm" - Linear PCM
-
-    For writing plugins to support additional codecs refer to:
-
-    http://www.iana.org/assignments/media-types/audio/
-*/
-
-QStringList QAudioDeviceInfo::supportedCodecs() const
-{
-    return isNull() ? QStringList() : d->info->codecList();
-}
-
-/*!
-    Returns a list of supported sample rates.
-
-    \since 4.7
-*/
-
-QList<int> QAudioDeviceInfo::supportedSampleRates() const
-{
-    return supportedFrequencies();
-}
-
-/*!
-    \obsolete
-
-    Use supportedSampleRates() instead.
-*/
-
-QList<int> QAudioDeviceInfo::supportedFrequencies() const
-{
-    return isNull() ? QList<int>() : d->info->frequencyList();
-}
-
-/*!
-    Returns a list of supported channel counts.
-
-    \since 4.7
-*/
-
-QList<int> QAudioDeviceInfo::supportedChannelCounts() const
-{
-    return supportedChannels();
-}
-
-/*!
-    \obsolete
-
-    Use supportedChannelCount() instead.
-*/
-
-QList<int> QAudioDeviceInfo::supportedChannels() const
-{
-    return isNull() ? QList<int>() : d->info->channelsList();
-}
-
-/*!
-    Returns a list of supported sample sizes.
-*/
-
-QList<int> QAudioDeviceInfo::supportedSampleSizes() const
-{
-    return isNull() ? QList<int>() : d->info->sampleSizeList();
-}
-
-/*!
-    Returns a list of supported byte orders.
-*/
-
-QList<QAudioFormat::Endian> QAudioDeviceInfo::supportedByteOrders() const
-{
-    return isNull() ? QList<QAudioFormat::Endian>() : d->info->byteOrderList();
-}
-
-/*!
-    Returns a list of supported sample types.
-*/
-
-QList<QAudioFormat::SampleType> QAudioDeviceInfo::supportedSampleTypes() const
-{
-    return isNull() ? QList<QAudioFormat::SampleType>() : d->info->sampleTypeList();
-}
-
-/*!
-    Returns the name of the default input audio device.
-    All platform and audio plugin implementations provide a default audio device to use.
-*/
-
-QAudioDeviceInfo QAudioDeviceInfo::defaultInputDevice()
-{
-    return QAudioDeviceFactory::defaultInputDevice();
-}
-
-/*!
-    Returns the name of the default output audio device.
-    All platform and audio plugin implementations provide a default audio device to use.
-*/
-
-QAudioDeviceInfo QAudioDeviceInfo::defaultOutputDevice()
-{
-    return QAudioDeviceFactory::defaultOutputDevice();
-}
-
-/*!
-    Returns a list of audio devices that support \a mode.
-*/
-
-QList<QAudioDeviceInfo> QAudioDeviceInfo::availableDevices(QAudio::Mode mode)
-{
-    return QAudioDeviceFactory::availableDevices(mode);
-}
-
-
-/*!
-    \internal
-*/
-
-QAudioDeviceInfo::QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode):
-    d(new QAudioDeviceInfoPrivate(realm, handle, mode))
-{
-}
-
-/*!
-    \internal
-*/
-
-QString QAudioDeviceInfo::realm() const
-{
-    return d->realm;
-}
-
-/*!
-    \internal
-*/
-
-QByteArray QAudioDeviceInfo::handle() const
-{
-    return d->handle;
-}
-
-
-/*!
-    \internal
-*/
-
-QAudio::Mode QAudioDeviceInfo::mode() const
-{
-    return d->mode;
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/audio/qaudiodeviceinfo.h b/src/multimedia/audio/qaudiodeviceinfo.h
deleted file mode 100644
index 1cc0731..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QAUDIODEVICEINFO_H
-#define QAUDIODEVICEINFO_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qglobal.h>
-#include <QtCore/qbytearray.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qlist.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudioformat.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QAudioDeviceFactory;
-
-class QAudioDeviceInfoPrivate;
-class Q_MULTIMEDIA_EXPORT QAudioDeviceInfo
-{
-    friend class QAudioDeviceFactory;
-
-public:
-    QAudioDeviceInfo();
-    QAudioDeviceInfo(const QAudioDeviceInfo& other);
-    ~QAudioDeviceInfo();
-
-    QAudioDeviceInfo& operator=(const QAudioDeviceInfo& other);
-
-    bool isNull() const;
-
-    QString deviceName() const;
-
-    bool isFormatSupported(const QAudioFormat &format) const;
-    QAudioFormat preferredFormat() const;
-    QAudioFormat nearestFormat(const QAudioFormat &format) const;
-
-    QStringList supportedCodecs() const;
-    QList<int> supportedFrequencies() const;
-    QList<int> supportedSampleRates() const;
-    QList<int> supportedChannels() const;
-    QList<int> supportedChannelCounts() const;
-    QList<int> supportedSampleSizes() const;
-    QList<QAudioFormat::Endian> supportedByteOrders() const;
-    QList<QAudioFormat::SampleType> supportedSampleTypes() const;
-
-    static QAudioDeviceInfo defaultInputDevice();
-    static QAudioDeviceInfo defaultOutputDevice();
-
-    static QList<QAudioDeviceInfo> availableDevices(QAudio::Mode mode);
-
-private:
-    QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
-    QString realm() const;
-    QByteArray handle() const;
-    QAudio::Mode mode() const;
-
-    QSharedDataPointer<QAudioDeviceInfoPrivate> d;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-Q_DECLARE_METATYPE(QAudioDeviceInfo)
-
-#endif // QAUDIODEVICEINFO_H
diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
deleted file mode 100644
index 36270a7..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
+++ /dev/null
@@ -1,486 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qaudiodeviceinfo_alsa_p.h"
-
-#include <alsa/version.h>
-
-QT_BEGIN_NAMESPACE
-
-QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode)
-{
-    handle = 0;
-
-    device = QLatin1String(dev);
-    this->mode = mode;
-}
-
-QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
-{
-    close();
-}
-
-bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
-{
-    return testSettings(format);
-}
-
-QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
-{
-    QAudioFormat nearest;
-    if(mode == QAudio::AudioOutput) {
-        nearest.setFrequency(44100);
-        nearest.setChannels(2);
-        nearest.setByteOrder(QAudioFormat::LittleEndian);
-        nearest.setSampleType(QAudioFormat::SignedInt);
-        nearest.setSampleSize(16);
-        nearest.setCodec(QLatin1String("audio/pcm"));
-    } else {
-        nearest.setFrequency(8000);
-        nearest.setChannels(1);
-        nearest.setSampleType(QAudioFormat::UnSignedInt);
-        nearest.setSampleSize(8);
-        nearest.setCodec(QLatin1String("audio/pcm"));
-        if(!testSettings(nearest)) {
-            nearest.setChannels(2);
-            nearest.setSampleSize(16);
-            nearest.setSampleType(QAudioFormat::SignedInt);
-        }
-    }
-    return nearest;
-}
-
-QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) const
-{
-    if(testSettings(format))
-        return format;
-    else
-        return preferredFormat();
-}
-
-QString QAudioDeviceInfoInternal::deviceName() const
-{
-    return device;
-}
-
-QStringList QAudioDeviceInfoInternal::codecList()
-{
-    updateLists();
-    return codecz;
-}
-
-QList<int> QAudioDeviceInfoInternal::frequencyList()
-{
-    updateLists();
-    return freqz;
-}
-
-QList<int> QAudioDeviceInfoInternal::channelsList()
-{
-    updateLists();
-    return channelz;
-}
-
-QList<int> QAudioDeviceInfoInternal::sampleSizeList()
-{
-    updateLists();
-    return sizez;
-}
-
-QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
-{
-    updateLists();
-    return byteOrderz;
-}
-
-QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
-{
-    updateLists();
-    return typez;
-}
-
-bool QAudioDeviceInfoInternal::open()
-{
-    int err = 0;
-    QString dev = device;
-    QList<QByteArray> devices = availableDevices(mode);
-
-    if(dev.compare(QLatin1String("default")) == 0) {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = QLatin1String(devices.first().constData());
-#else
-        dev = QLatin1String("hw:0,0");
-#endif
-    } else {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = device;
-#else
-        int idx = 0;
-        char *name;
-
-        QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1);
-
-	while(snd_card_get_name(idx,&name) == 0) {
-            if(dev.contains(QLatin1String(name)))
-                break;
-            idx++;
-	}
-        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
-#endif
-    }
-    if(mode == QAudio::AudioOutput) {
-        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
-    } else {
-        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);
-    }
-    if(err < 0) {
-        handle = 0;
-        return false;
-    }
-    return true;
-}
-
-void QAudioDeviceInfoInternal::close()
-{
-    if(handle)
-        snd_pcm_close(handle);
-    handle = 0;
-}
-
-bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
-{
-    // Set nearest to closest settings that do work.
-    // See if what is in settings will work (return value).
-    int err = 0;
-    snd_pcm_t* handle;
-    snd_pcm_hw_params_t *params;
-    QString dev = device;
-
-    QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
-
-    if(dev.compare(QLatin1String("default")) == 0) {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = QLatin1String(devices.first().constData());
-#else
-        dev = QLatin1String("hw:0,0");
-#endif
-    } else {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = device;
-#else
-        int idx = 0;
-        char *name;
-
-        QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1);
-
-        while(snd_card_get_name(idx,&name) == 0) {
-            if(shortName.compare(QLatin1String(name)) == 0)
-                break;
-            idx++;
-        }
-        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
-#endif
-    }
-    if(mode == QAudio::AudioOutput) {
-        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
-    } else {
-        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);
-    }
-    if(err < 0) {
-        handle = 0;
-        return false;
-    }
-
-    bool testChannel = false;
-    bool testCodec = false;
-    bool testFreq = false;
-    bool testType = false;
-    bool testSize = false;
-
-    int  dir = 0;
-
-    snd_pcm_nonblock( handle, 0 );
-    snd_pcm_hw_params_alloca( &params );
-    snd_pcm_hw_params_any( handle, params );
-
-    // set the values!
-    snd_pcm_hw_params_set_channels(handle,params,format.channels());
-    snd_pcm_hw_params_set_rate(handle,params,format.frequency(),dir);
-    switch(format.sampleSize()) {
-        case 8:
-            if(format.sampleType() == QAudioFormat::SignedInt)
-                snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S8);
-            else if(format.sampleType() == QAudioFormat::UnSignedInt)
-                snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U8);
-            break;
-        case 16:
-            if(format.sampleType() == QAudioFormat::SignedInt) {
-                if(format.byteOrder() == QAudioFormat::LittleEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_LE);
-                else if(format.byteOrder() == QAudioFormat::BigEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_BE);
-            } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
-                if(format.byteOrder() == QAudioFormat::LittleEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_LE);
-                else if(format.byteOrder() == QAudioFormat::BigEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_BE);
-            }
-            break;
-        case 32:
-            if(format.sampleType() == QAudioFormat::SignedInt) {
-                if(format.byteOrder() == QAudioFormat::LittleEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_LE);
-                else if(format.byteOrder() == QAudioFormat::BigEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_BE);
-            } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
-                if(format.byteOrder() == QAudioFormat::LittleEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_LE);
-                else if(format.byteOrder() == QAudioFormat::BigEndian)
-                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_BE);
-            }
-    }
-
-    // For now, just accept only audio/pcm codec
-    if(!format.codec().startsWith(QLatin1String("audio/pcm"))) {
-        err=-1;
-    } else
-        testCodec = true;
-
-    if(err>=0 && format.channels() != -1) {
-        err = snd_pcm_hw_params_test_channels(handle,params,format.channels());
-        if(err>=0)
-            err = snd_pcm_hw_params_set_channels(handle,params,format.channels());
-        if(err>=0)
-            testChannel = true;
-    }
-
-    if(err>=0 && format.frequency() != -1) {
-        err = snd_pcm_hw_params_test_rate(handle,params,format.frequency(),0);
-        if(err>=0)
-            err = snd_pcm_hw_params_set_rate(handle,params,format.frequency(),dir);
-        if(err>=0)
-            testFreq = true;
-    }
-
-    if((err>=0 && format.sampleSize() != -1) &&
-            (format.sampleType() != QAudioFormat::Unknown)) {
-        switch(format.sampleSize()) {
-            case 8:
-                if(format.sampleType() == QAudioFormat::SignedInt)
-                    err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S8);
-                else if(format.sampleType() == QAudioFormat::UnSignedInt)
-                    err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U8);
-                break;
-            case 16:
-                if(format.sampleType() == QAudioFormat::SignedInt) {
-                    if(format.byteOrder() == QAudioFormat::LittleEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_LE);
-                    else if(format.byteOrder() == QAudioFormat::BigEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_BE);
-                } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
-                    if(format.byteOrder() == QAudioFormat::LittleEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_LE);
-                    else if(format.byteOrder() == QAudioFormat::BigEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_BE);
-                }
-                break;
-            case 32:
-                if(format.sampleType() == QAudioFormat::SignedInt) {
-                    if(format.byteOrder() == QAudioFormat::LittleEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_LE);
-                    else if(format.byteOrder() == QAudioFormat::BigEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_BE);
-                } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
-                    if(format.byteOrder() == QAudioFormat::LittleEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_LE);
-                    else if(format.byteOrder() == QAudioFormat::BigEndian)
-                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_BE);
-                }
-        }
-        if(err>=0) {
-            testSize = true;
-            testType = true;
-        }
-    }
-    if(err>=0)
-        err = snd_pcm_hw_params(handle, params);
-
-    if(err == 0) {
-        // settings work
-        // close()
-        if(handle)
-            snd_pcm_close(handle);
-        return true;
-    }
-    if(handle)
-        snd_pcm_close(handle);
-
-    return false;
-}
-
-void QAudioDeviceInfoInternal::updateLists()
-{
-    // redo all lists based on current settings
-    freqz.clear();
-    channelz.clear();
-    sizez.clear();
-    byteOrderz.clear();
-    typez.clear();
-    codecz.clear();
-
-    if(!handle)
-        open();
-
-    if(!handle)
-        return;
-
-    for(int i=0; i<(int)MAX_SAMPLE_RATES; i++) {
-        //if(snd_pcm_hw_params_test_rate(handle, params, SAMPLE_RATES[i], dir) == 0)
-        freqz.append(SAMPLE_RATES[i]);
-    }
-    channelz.append(1);
-    channelz.append(2);
-    sizez.append(8);
-    sizez.append(16);
-    sizez.append(32);
-    byteOrderz.append(QAudioFormat::LittleEndian);
-    byteOrderz.append(QAudioFormat::BigEndian);
-    typez.append(QAudioFormat::SignedInt);
-    typez.append(QAudioFormat::UnSignedInt);
-    typez.append(QAudioFormat::Float);
-    codecz.append(QLatin1String("audio/pcm"));
-    close();
-}
-
-QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
-{
-    QList<QByteArray> allDevices;
-    QList<QByteArray> devices;
-    QByteArray filter;
-
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-    // Create a list of all current audio devices that support mode
-    void **hints, **n;
-    char *name, *descr, *io;
-
-    if(snd_device_name_hint(-1, "pcm", &hints) < 0) {
-        qWarning() << "no alsa devices available";
-        return devices;
-    }
-    n = hints;
-
-    if(mode == QAudio::AudioInput) {
-        filter = "Input";
-    } else {
-        filter = "Output";
-    }
-
-    while (*n != NULL) {
-        name = snd_device_name_get_hint(*n, "NAME");
-        descr = snd_device_name_get_hint(*n, "DESC");
-        io = snd_device_name_get_hint(*n, "IOID");
-        if((name != NULL) && (descr != NULL) && ((io == NULL) || (io == filter))) {
-            QString deviceName = QLatin1String(name);
-            QString deviceDescription = QLatin1String(descr);
-            allDevices.append(deviceName.toLocal8Bit().constData());
-            if(deviceDescription.contains(QLatin1String("Default Audio Device")))
-                devices.append(deviceName.toLocal8Bit().constData());
-        }
-        if(name != NULL)
-            free(name);
-        if(descr != NULL)
-            free(descr);
-        if(io != NULL)
-            free(io);
-        ++n;
-    }
-    snd_device_name_free_hint(hints);
-
-    if(devices.size() > 0) {
-        devices.append("default");
-    }
-#else
-    int idx = 0;
-    char* name;
-
-    while(snd_card_get_name(idx,&name) == 0) {
-        devices.append(name);
-        idx++;
-    }
-    if (idx > 0)
-        devices.append("default");
-#endif
-    if (devices.size() == 0 && allDevices.size() > 0)
-        return allDevices;
-
-    return devices;
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
-{
-    QList<QByteArray> devices = availableDevices(QAudio::AudioInput);
-    if(devices.size() == 0)
-        return QByteArray();
-
-    return devices.first();
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
-{
-    QList<QByteArray> devices = availableDevices(QAudio::AudioOutput);
-    if(devices.size() == 0)
-        return QByteArray();
-
-    return devices.first();
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h
deleted file mode 100644
index 6f9a459..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#ifndef QAUDIODEVICEINFOALSA_H
-#define QAUDIODEVICEINFOALSA_H
-
-#include <alsa/asoundlib.h>
-
-#include <QtCore/qbytearray.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qdebug.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-
-QT_BEGIN_NAMESPACE
-
-const unsigned int MAX_SAMPLE_RATES = 5;
-const unsigned int SAMPLE_RATES[] =
-    { 8000, 11025, 22050, 44100, 48000 };
-
-class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
-{
-    Q_OBJECT
-public:
-    QAudioDeviceInfoInternal(QByteArray dev,QAudio::Mode mode);
-    ~QAudioDeviceInfoInternal();
-
-    bool testSettings(const QAudioFormat& format) const;
-    void updateLists();
-    QAudioFormat preferredFormat() const;
-    bool isFormatSupported(const QAudioFormat& format) const;
-    QAudioFormat nearestFormat(const QAudioFormat& format) const;
-    QString deviceName() const;
-    QStringList codecList();
-    QList<int> frequencyList();
-    QList<int> channelsList();
-    QList<int> sampleSizeList();
-    QList<QAudioFormat::Endian> byteOrderList();
-    QList<QAudioFormat::SampleType> sampleTypeList();
-    static QByteArray defaultInputDevice();
-    static QByteArray defaultOutputDevice();
-    static QList<QByteArray> availableDevices(QAudio::Mode);
-
-private:
-    bool open();
-    void close();
-
-    QString device;
-    QAudio::Mode mode;
-    QAudioFormat nearest;
-    QList<int> freqz;
-    QList<int> channelz;
-    QList<int> sizez;
-    QList<QAudioFormat::Endian> byteOrderz;
-    QStringList codecz;
-    QList<QAudioFormat::SampleType> typez;
-    snd_pcm_t* handle;
-    snd_pcm_hw_params_t *params;
-};
-
-QT_END_NAMESPACE
-
-#endif
-
diff --git a/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
deleted file mode 100644
index ecd03e5..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qstringlist.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qbytearray.h>
-#include <QtCore/qdatastream.h>
-#include <QtCore/qdebug.h>
-#include <private/qcore_mac_p.h>
-
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include "qaudio_mac_p.h"
-#include "qaudiodeviceinfo_mac_p.h"
-
-
-
-QT_BEGIN_NAMESPACE
-
-
-QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray const& handle, QAudio::Mode)
-{
-    QDataStream ds(handle);
-    quint32 did, tm;
-
-    ds >> did >> tm >> name;
-    deviceId = AudioDeviceID(did);
-    mode = QAudio::Mode(tm);
-}
-
-bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
-{
-    return format.codec() == QString::fromLatin1("audio/pcm");
-}
-
-QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
-{
-    QAudioFormat    rc;
-
-    UInt32  propSize = 0;
-
-    if (AudioDeviceGetPropertyInfo(deviceId,
-                                    0,
-                                    mode == QAudio::AudioInput,
-                                    kAudioDevicePropertyStreams,
-                                    &propSize,
-                                    0) == noErr) {
-
-        const int sc = propSize / sizeof(AudioStreamID);
-
-        if (sc > 0) {
-            AudioStreamID*  streams = new AudioStreamID[sc];
-
-            if (AudioDeviceGetProperty(deviceId,
-                                        0,
-                                        mode == QAudio::AudioInput,
-                                        kAudioDevicePropertyStreams,
-                                        &propSize,
-                                        streams) == noErr) {
-
-                for (int i = 0; i < sc; ++i) {
-                    if (AudioStreamGetPropertyInfo(streams[i],
-                                                    0,
-                                                    kAudioStreamPropertyPhysicalFormat,
-                                                    &propSize,
-                                                    0) == noErr) {
-
-                        AudioStreamBasicDescription sf;
-
-                        if (AudioStreamGetProperty(streams[i],
-                                                    0,
-                                                    kAudioStreamPropertyPhysicalFormat,
-                                                    &propSize,
-                                                    &sf) == noErr) {
-                            rc = toQAudioFormat(sf);
-                            break;
-                        }
-                    }
-                }
-            }
-
-            delete streams;
-        }
-    }
-
-    return rc;
-}
-
-QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) const
-{
-    QAudioFormat    rc(format);
-    QAudioFormat    target = preferredFormat();
-
-    if (!format.codec().isEmpty() && format.codec() != QString::fromLatin1("audio/pcm"))
-        return QAudioFormat();
-
-    rc.setCodec(QString::fromLatin1("audio/pcm"));
-
-    if (rc.frequency() != target.frequency())
-        rc.setFrequency(target.frequency());
-    if (rc.channels() != target.channels())
-        rc.setChannels(target.channels());
-    if (rc.sampleSize() != target.sampleSize())
-        rc.setSampleSize(target.sampleSize());
-    if (rc.byteOrder() != target.byteOrder())
-        rc.setByteOrder(target.byteOrder());
-    if (rc.sampleType() != target.sampleType())
-        rc.setSampleType(target.sampleType());
-
-    return rc;
-}
-
-QString QAudioDeviceInfoInternal::deviceName() const
-{
-    return name;
-}
-
-QStringList QAudioDeviceInfoInternal::codecList()
-{
-    return QStringList() << QString::fromLatin1("audio/pcm");
-}
-
-QList<int> QAudioDeviceInfoInternal::frequencyList()
-{
-    QSet<int>  rc;
-
-    // Add some common frequencies
-    rc << 8000 << 11025 << 22050 << 44100;
-
-    //
-    UInt32  propSize = 0;
-
-    if (AudioDeviceGetPropertyInfo(deviceId,
-                                    0,
-                                    mode == QAudio::AudioInput,
-                                    kAudioDevicePropertyAvailableNominalSampleRates,
-                                    &propSize,
-                                    0) == noErr) {
-
-        const int pc = propSize / sizeof(AudioValueRange);
-
-        if (pc > 0) {
-            AudioValueRange*    vr = new AudioValueRange[pc];
-
-            if (AudioDeviceGetProperty(deviceId,
-                                        0,
-                                        mode == QAudio::AudioInput,
-                                        kAudioDevicePropertyAvailableNominalSampleRates,
-                                        &propSize,
-                                        vr) == noErr) {
-
-                for (int i = 0; i < pc; ++i)
-                    rc << vr[i].mMaximum;
-            }
-
-            delete vr;
-        }
-    }
-
-    return rc.toList();
-}
-
-QList<int> QAudioDeviceInfoInternal::channelsList()
-{
-    QList<int>  rc;
-
-    // Can mix down to 1 channel
-    rc << 1;
-
-    UInt32  propSize = 0;
-    int     channels = 0;
-
-    if (AudioDeviceGetPropertyInfo(deviceId, 
-                                    0,
-                                    mode == QAudio::AudioInput,
-                                    kAudioDevicePropertyStreamConfiguration,
-                                    &propSize, 
-                                    0) == noErr) {
-
-        AudioBufferList* audioBufferList = static_cast<AudioBufferList*>(qMalloc(propSize));
-
-        if (audioBufferList != 0) {
-            if (AudioDeviceGetProperty(deviceId, 
-                                        0,
-                                        mode == QAudio::AudioInput,
-                                        kAudioDevicePropertyStreamConfiguration,
-                                        &propSize,
-                                        audioBufferList) == noErr) {
-
-                for (int i = 0; i < int(audioBufferList->mNumberBuffers); ++i) {
-                    channels += audioBufferList->mBuffers[i].mNumberChannels;
-                    rc << channels;
-                }
-            }
-
-            qFree(audioBufferList);
-        }
-    }
-
-    return rc;
-}
-
-QList<int> QAudioDeviceInfoInternal::sampleSizeList()
-{
-    return QList<int>() << 8 << 16 << 24 << 32 << 64;
-}
-
-QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
-{
-    return QList<QAudioFormat::Endian>() << QAudioFormat::LittleEndian << QAudioFormat::BigEndian;
-}
-
-QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
-{
-    return QList<QAudioFormat::SampleType>() << QAudioFormat::SignedInt << QAudioFormat::UnSignedInt << QAudioFormat::Float;
-}
-
-static QByteArray get_device_info(AudioDeviceID audioDevice, QAudio::Mode mode)
-{
-    UInt32      size;
-    QByteArray  device;
-    QDataStream ds(&device, QIODevice::WriteOnly);
-    AudioStreamBasicDescription     sf;
-    CFStringRef name;
-    Boolean     isInput = mode == QAudio::AudioInput;
-
-    // Id
-    ds << quint32(audioDevice);
-
-    // Mode
-    size = sizeof(AudioStreamBasicDescription);
-    if (AudioDeviceGetProperty(audioDevice, 0, isInput, kAudioDevicePropertyStreamFormat,
-                                &size, &sf) != noErr) {
-        return QByteArray();
-    }
-    ds << quint32(mode);
-
-    // Name
-    size = sizeof(CFStringRef);
-    if (AudioDeviceGetProperty(audioDevice, 0, isInput, kAudioObjectPropertyName,
-                                &size, &name) != noErr) {
-        qWarning() << "QAudioDeviceInfo: Unable to find device name";
-    }
-    ds << QCFString::toQString(name);
-
-    CFRelease(name);
-
-    return device;
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
-{
-    AudioDeviceID   audioDevice;
-    UInt32          size = sizeof(audioDevice);
-
-    if (AudioHardwareGetProperty(kAudioHardwarePropertyDefaultInputDevice, &size,
-                                    &audioDevice) != noErr) {
-        qWarning() << "QAudioDeviceInfo: Unable to find default input device";
-        return QByteArray();
-    }
-
-    return get_device_info(audioDevice, QAudio::AudioInput);
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
-{
-    AudioDeviceID audioDevice;
-    UInt32        size = sizeof(audioDevice);
-
-    if (AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size,
-                                    &audioDevice) != noErr) {
-        qWarning() << "QAudioDeviceInfo: Unable to find default output device";
-        return QByteArray();
-    }
-
-    return get_device_info(audioDevice, QAudio::AudioOutput);
-}
-
-QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
-{
-    QList<QByteArray>   devices;
-
-    UInt32  propSize = 0;
-
-    if (AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propSize, 0) == noErr) {
-
-        const int dc = propSize / sizeof(AudioDeviceID);
-
-        if (dc > 0) {
-            AudioDeviceID*  audioDevices = new AudioDeviceID[dc];
-
-            if (AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propSize, audioDevices) == noErr) {
-                for (int i = 0; i < dc; ++i) {
-                    QByteArray info = get_device_info(audioDevices[i], mode);
-                    if (!info.isNull())
-                        devices << info;
-                }
-            }
-
-            delete audioDevices;
-        }
-    }
-
-    return devices;
-}
-
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/audio/qaudiodeviceinfo_mac_p.h b/src/multimedia/audio/qaudiodeviceinfo_mac_p.h
deleted file mode 100644
index e234384..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_mac_p.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#ifndef QDEVICEINFO_MAC_P_H
-#define QDEVICEINFO_MAC_P_H
-
-#include <CoreAudio/CoreAudio.h>
-
-#include <QtMultimedia/qaudioengine.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
-{
-public:
-    AudioDeviceID   deviceId;
-    QString         name;
-    QAudio::Mode   mode;
-
-    QAudioDeviceInfoInternal(QByteArray const& handle, QAudio::Mode mode);
-
-    bool isFormatSupported(const QAudioFormat& format) const;
-    QAudioFormat preferredFormat() const;
-    QAudioFormat nearestFormat(const QAudioFormat& format) const;
-
-    QString deviceName() const;
-
-    QStringList codecList();
-    QList<int> frequencyList();
-    QList<int> channelsList();
-    QList<int> sampleSizeList();
-    QList<QAudioFormat::Endian> byteOrderList();
-    QList<QAudioFormat::SampleType> sampleTypeList();
-
-    static QByteArray defaultInputDevice();
-    static QByteArray defaultOutputDevice();
-
-    static QList<QByteArray> availableDevices(QAudio::Mode mode);
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QDEVICEINFO_MAC_P_H
diff --git a/src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
deleted file mode 100644
index 36284d3..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qaudiodeviceinfo_symbian_p.h"
-#include "qaudio_symbian_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray device,
-                                               QAudio::Mode mode)
-    :   m_deviceName(QLatin1String(device))
-    ,   m_mode(mode)
-    ,   m_updated(false)
-{
-    QT_TRAP_THROWING(m_devsound.reset(CMMFDevSound::NewL()));
-}
-
-QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
-{
-
-}
-
-QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
-{
-    QAudioFormat format;
-    switch (m_mode) {
-    case QAudio::AudioOutput:
-        format.setFrequency(44100);
-        format.setChannels(2);
-        format.setSampleSize(16);
-        format.setByteOrder(QAudioFormat::LittleEndian);
-        format.setSampleType(QAudioFormat::SignedInt);
-        format.setCodec(QLatin1String("audio/pcm"));
-        break;
-
-    case QAudio::AudioInput:
-        format.setFrequency(8000);
-        format.setChannels(1);
-        format.setSampleSize(16);
-        format.setByteOrder(QAudioFormat::LittleEndian);
-        format.setSampleType(QAudioFormat::SignedInt);
-        format.setCodec(QLatin1String("audio/pcm"));
-        break;
-
-    default:
-        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
-    }
-
-    if (!isFormatSupported(format)) {
-        if (m_frequencies.size())
-            format.setFrequency(m_frequencies[0]);
-        if (m_channels.size())
-            format.setChannels(m_channels[0]);
-        if (m_sampleSizes.size())
-            format.setSampleSize(m_sampleSizes[0]);
-        if (m_byteOrders.size())
-            format.setByteOrder(m_byteOrders[0]);
-        if (m_sampleTypes.size())
-            format.setSampleType(m_sampleTypes[0]);
-    }
-
-    return format;
-}
-
-bool QAudioDeviceInfoInternal::isFormatSupported(
-                                 const QAudioFormat &format) const
-{
-    getSupportedFormats();
-    const bool supported =
-            m_codecs.contains(format.codec())
-        &&  m_frequencies.contains(format.frequency())
-        &&  m_channels.contains(format.channels())
-        &&  m_sampleSizes.contains(format.sampleSize())
-        &&  m_byteOrders.contains(format.byteOrder())
-        &&  m_sampleTypes.contains(format.sampleType());
-
-    return supported;
-}
-
-QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat &format) const
-{
-    if (isFormatSupported(format))
-        return format;
-    else
-        return preferredFormat();
-}
-
-QString QAudioDeviceInfoInternal::deviceName() const
-{
-    return m_deviceName;
-}
-
-QStringList QAudioDeviceInfoInternal::codecList()
-{
-    getSupportedFormats();
-    return m_codecs;
-}
-
-QList<int> QAudioDeviceInfoInternal::frequencyList()
-{
-    getSupportedFormats();
-    return m_frequencies;
-}
-
-QList<int> QAudioDeviceInfoInternal::channelsList()
-{
-    getSupportedFormats();
-    return m_channels;
-}
-
-QList<int> QAudioDeviceInfoInternal::sampleSizeList()
-{
-    getSupportedFormats();
-    return m_sampleSizes;
-}
-
-QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
-{
-    getSupportedFormats();
-    return m_byteOrders;
-}
-
-QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
-{
-    getSupportedFormats();
-    return m_sampleTypes;
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
-{
-    return QByteArray("default");
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
-{
-    return QByteArray("default");
-}
-
-QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode)
-{
-    QList<QByteArray> result;
-    result += QByteArray("default");
-    return result;
-}
-
-void QAudioDeviceInfoInternal::getSupportedFormats() const
-{
-    if (!m_updated) {
-        QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
-            new SymbianAudio::DevSoundCapabilities(*m_devsound, m_mode));
-
-        SymbianAudio::Utils::capabilitiesNativeToQt(*caps,
-            m_frequencies, m_channels, m_sampleSizes,
-            m_byteOrders, m_sampleTypes);
-
-        m_codecs.append(QLatin1String("audio/pcm"));
-
-        m_updated = true;
-    }
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiodeviceinfo_symbian_p.h b/src/multimedia/audio/qaudiodeviceinfo_symbian_p.h
deleted file mode 100644
index 89e539f..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_symbian_p.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIODEVICEINFO_SYMBIAN_P_H
-#define QAUDIODEVICEINFO_SYMBIAN_P_H
-
-#include <QtMultimedia/qaudioengine.h>
-#include <sounddevice.h>
-
-QT_BEGIN_NAMESPACE
-
-class QAudioDeviceInfoInternal
-    :   public QAbstractAudioDeviceInfo
-{
-    Q_OBJECT
-
-public:
-    QAudioDeviceInfoInternal(QByteArray device, QAudio::Mode mode);
-    ~QAudioDeviceInfoInternal();
-
-    // QAbstractAudioDeviceInfo
-    QAudioFormat preferredFormat() const;
-    bool isFormatSupported(const QAudioFormat &format) const;
-    QAudioFormat nearestFormat(const QAudioFormat &format) const;
-    QString deviceName() const;
-    QStringList codecList();
-    QList<int> frequencyList();
-    QList<int> channelsList();
-    QList<int> sampleSizeList();
-    QList<QAudioFormat::Endian> byteOrderList();
-    QList<QAudioFormat::SampleType> sampleTypeList();
-    static QByteArray defaultInputDevice();
-    static QByteArray defaultOutputDevice();
-    static QList<QByteArray> availableDevices(QAudio::Mode);
-
-private:
-    void getSupportedFormats() const;
-
-private:
-    QScopedPointer<CMMFDevSound> m_devsound;
-
-    QString m_deviceName;
-    QAudio::Mode m_mode;
-
-    // Mutable to allow lazy initialization when called from const-qualified
-    // public functions (isFormatSupported, nearestFormat)
-    mutable bool m_updated;
-    mutable QStringList m_codecs;
-    mutable QList<int> m_frequencies;
-    mutable QList<int> m_channels;
-    mutable QList<int> m_sampleSizes;
-    mutable QList<QAudioFormat::Endian> m_byteOrders;
-    mutable QList<QAudioFormat::SampleType> m_sampleTypes;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
deleted file mode 100644
index aee0807..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
+++ /dev/null
@@ -1,433 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include <windows.h>
-#include <mmsystem.h>
-#include "qaudiodeviceinfo_win32_p.h"
-
-QT_BEGIN_NAMESPACE
-
-// For mingw toolchain mmsystem.h only defines half the defines, so add if needed.
-#ifndef WAVE_FORMAT_44M08
-#define WAVE_FORMAT_44M08 0x00000100
-#define WAVE_FORMAT_44S08 0x00000200
-#define WAVE_FORMAT_44M16 0x00000400
-#define WAVE_FORMAT_44S16 0x00000800
-#define WAVE_FORMAT_48M08 0x00001000
-#define WAVE_FORMAT_48S08 0x00002000
-#define WAVE_FORMAT_48M16 0x00004000
-#define WAVE_FORMAT_48S16 0x00008000
-#define WAVE_FORMAT_96M08 0x00010000
-#define WAVE_FORMAT_96S08 0x00020000
-#define WAVE_FORMAT_96M16 0x00040000
-#define WAVE_FORMAT_96S16 0x00080000
-#endif
-
-
-QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode)
-{
-    device = QLatin1String(dev);
-    this->mode = mode;
-
-    updateLists();
-}
-
-QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
-{
-    close();
-}
-
-bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
-{
-    return testSettings(format);
-}
-
-QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
-{
-    QAudioFormat nearest;
-    if(mode == QAudio::AudioOutput) {
-        nearest.setFrequency(44100);
-        nearest.setChannelCount(2);
-        nearest.setByteOrder(QAudioFormat::LittleEndian);
-        nearest.setSampleType(QAudioFormat::SignedInt);
-        nearest.setSampleSize(16);
-        nearest.setCodec(QLatin1String("audio/pcm"));
-    } else {
-        nearest.setFrequency(11025);
-        nearest.setChannelCount(1);
-        nearest.setByteOrder(QAudioFormat::LittleEndian);
-        nearest.setSampleType(QAudioFormat::SignedInt);
-        nearest.setSampleSize(8);
-        nearest.setCodec(QLatin1String("audio/pcm"));
-    }
-    return nearest;
-}
-
-QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) const
-{
-    if(testSettings(format))
-        return format;
-    else
-        return preferredFormat();
-}
-
-QString QAudioDeviceInfoInternal::deviceName() const
-{
-    return device;
-}
-
-QStringList QAudioDeviceInfoInternal::codecList()
-{
-    updateLists();
-    return codecz;
-}
-
-QList<int> QAudioDeviceInfoInternal::frequencyList()
-{
-    updateLists();
-    return freqz;
-}
-
-QList<int> QAudioDeviceInfoInternal::channelsList()
-{
-    updateLists();
-    return channelz;
-}
-
-QList<int> QAudioDeviceInfoInternal::sampleSizeList()
-{
-    updateLists();
-    return sizez;
-}
-
-QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
-{
-    updateLists();
-    return byteOrderz;
-}
-
-QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
-{
-    updateLists();
-    return typez;
-}
-
-
-bool QAudioDeviceInfoInternal::open()
-{
-    return true;
-}
-
-void QAudioDeviceInfoInternal::close()
-{
-}
-
-bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
-{
-    // Set nearest to closest settings that do work.
-    // See if what is in settings will work (return value).
-
-    bool failed = false;
-    bool match = false;
-
-    // check codec
-    for( int i = 0; i < codecz.count(); i++) {
-        if (format.codec() == codecz.at(i))
-            match = true;
-    }
-    if (!match) failed = true;
-
-    // check channel
-    match = false;
-    if (!failed) {
-        for( int i = 0; i < channelz.count(); i++) {
-            if (format.channels() == channelz.at(i)) {
-                match = true;
-                break;
-            }
-        }
-    }
-    if (!match) failed = true;
-
-    // check frequency
-    match = false;
-    if (!failed) {
-        for( int i = 0; i < freqz.count(); i++) {
-            if (format.frequency() == freqz.at(i)) {
-                match = true;
-                break;
-            }
-        }
-    }
-
-    // check sample size
-    match = false;
-    if (!failed) {
-        for( int i = 0; i < sizez.count(); i++) {
-            if (format.sampleSize() == sizez.at(i)) {
-                match = true;
-                break;
-            }
-        }
-    }
-
-    // check byte order
-    match = false;
-    if (!failed) {
-        for( int i = 0; i < byteOrderz.count(); i++) {
-            if (format.byteOrder() == byteOrderz.at(i)) {
-                match = true;
-                break;
-            }
-        }
-    }
-
-    // check sample type
-    match = false;
-    if (!failed) {
-        for( int i = 0; i < typez.count(); i++) {
-            if (format.sampleType() == typez.at(i)) {
-                match = true;
-                break;
-            }
-        }
-    }
-
-    if(!failed) {
-        // settings work
-        return true;
-    }
-    return false;
-}
-
-void QAudioDeviceInfoInternal::updateLists()
-{
-    // redo all lists based on current settings
-    bool base = false;
-    bool match = false;
-    DWORD fmt = NULL;
-    QString tmp;
-
-    if(device.compare(QLatin1String("default")) == 0)
-        base = true;
-
-    if(mode == QAudio::AudioOutput) {
-        WAVEOUTCAPS woc;
-	unsigned long iNumDevs,i;
-	iNumDevs = waveOutGetNumDevs();
-	for(i=0;i<iNumDevs;i++) {
-	    if(waveOutGetDevCaps(i, &woc, sizeof(WAVEOUTCAPS))
-	        == MMSYSERR_NOERROR) {
-		tmp = QString((const QChar *)woc.szPname);
-		if(tmp.compare(device) == 0) {
-		    match = true;
-		    fmt = woc.dwFormats;
-		    break;
-		}
-		if(base) {
-		    match = true;
-		    fmt = woc.dwFormats;
-		    break;
-		}
-	    }
-	}
-    } else {
-        WAVEINCAPS woc;
-	unsigned long iNumDevs,i;
-	iNumDevs = waveInGetNumDevs();
-	for(i=0;i<iNumDevs;i++) {
-	    if(waveInGetDevCaps(i, &woc, sizeof(WAVEINCAPS))
-	        == MMSYSERR_NOERROR) {
-		tmp = QString((const QChar *)woc.szPname);
-		if(tmp.compare(device) == 0) {
-		    match = true;
-		    fmt = woc.dwFormats;
-		    break;
-		}
-		if(base) {
-		    match = true;
-		    fmt = woc.dwFormats;
-		    break;
-		}
-	    }
-	}
-    }
-    sizez.clear();
-    freqz.clear();
-    channelz.clear();
-    byteOrderz.clear();
-    typez.clear();
-    codecz.clear();
-
-    if(match) {
-        if((fmt && WAVE_FORMAT_1M08)
-           || (fmt && WAVE_FORMAT_1S08)
-	   || (fmt && WAVE_FORMAT_2M08)
-	   || (fmt && WAVE_FORMAT_2S08)
-	   || (fmt && WAVE_FORMAT_4M08)
-	   || (fmt && WAVE_FORMAT_4S08)
-#ifndef Q_OS_WINCE
-	   || (fmt && WAVE_FORMAT_48M08)
-	   || (fmt && WAVE_FORMAT_48S08)
-	   || (fmt && WAVE_FORMAT_96M08)
-	   || (fmt && WAVE_FORMAT_96S08)
-#endif
-       ) {
-            sizez.append(8);
-	}
-        if((fmt && WAVE_FORMAT_1M16)
-           || (fmt && WAVE_FORMAT_1S16)
-	   || (fmt && WAVE_FORMAT_2M16)
-	   || (fmt && WAVE_FORMAT_2S16)
-	   || (fmt && WAVE_FORMAT_4M16)
-	   || (fmt && WAVE_FORMAT_4S16)
-#ifndef Q_OS_WINCE
-	   || (fmt && WAVE_FORMAT_48M16)
-	   || (fmt && WAVE_FORMAT_48S16)
-	   || (fmt && WAVE_FORMAT_96M16)
-	   || (fmt && WAVE_FORMAT_96S16)
-#endif
-       ) {
-            sizez.append(16);
-	}
-        if((fmt && WAVE_FORMAT_1M08)
-           || (fmt && WAVE_FORMAT_1S08)
-	   || (fmt && WAVE_FORMAT_1M16)
-	   || (fmt && WAVE_FORMAT_1S16)) {
-            freqz.append(11025);
-	}
-        if((fmt && WAVE_FORMAT_2M08)
-           || (fmt && WAVE_FORMAT_2S08)
-	   || (fmt && WAVE_FORMAT_2M16)
-	   || (fmt && WAVE_FORMAT_2S16)) {
-            freqz.append(22050);
-	}
-        if((fmt && WAVE_FORMAT_4M08)
-           || (fmt && WAVE_FORMAT_4S08)
-	   || (fmt && WAVE_FORMAT_4M16)
-	   || (fmt && WAVE_FORMAT_4S16)) {
-            freqz.append(44100);
-	}
-#ifndef Q_OS_WINCE
-        if((fmt && WAVE_FORMAT_48M08)
-           || (fmt && WAVE_FORMAT_48S08)
-	   || (fmt && WAVE_FORMAT_48M16)
-	   || (fmt && WAVE_FORMAT_48S16)) {
-            freqz.append(48000);
-	}
-        if((fmt && WAVE_FORMAT_96M08)
-           || (fmt && WAVE_FORMAT_96S08)
-	   || (fmt && WAVE_FORMAT_96M16)
-	   || (fmt && WAVE_FORMAT_96S16)) {
-            freqz.append(96000);
-        }
-#endif
-	channelz.append(1);
-	channelz.append(2);
-
-	byteOrderz.append(QAudioFormat::LittleEndian);
-
-	typez.append(QAudioFormat::SignedInt);
-	typez.append(QAudioFormat::UnSignedInt);
-
-	codecz.append(QLatin1String("audio/pcm"));
-    }
-    if (freqz.count() > 0)
-        freqz.prepend(8000);
-}
-
-QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
-{
-    Q_UNUSED(mode)
-
-    QList<QByteArray> devices;
-
-    if(mode == QAudio::AudioOutput) {
-        WAVEOUTCAPS woc;
-	unsigned long iNumDevs,i;
-	iNumDevs = waveOutGetNumDevs();
-	for(i=0;i<iNumDevs;i++) {
-	    if(waveOutGetDevCaps(i, &woc, sizeof(WAVEOUTCAPS))
-	        == MMSYSERR_NOERROR) {
-	        devices.append(QString((const QChar *)woc.szPname).toLocal8Bit().constData());
-	    }
-	}
-    } else {
-        WAVEINCAPS woc;
-	unsigned long iNumDevs,i;
-	iNumDevs = waveInGetNumDevs();
-	for(i=0;i<iNumDevs;i++) {
-	    if(waveInGetDevCaps(i, &woc, sizeof(WAVEINCAPS))
-	        == MMSYSERR_NOERROR) {
-	        devices.append(QString((const QChar *)woc.szPname).toLocal8Bit().constData());
-	    }
-	}
-
-    }
-    if(devices.count() > 0)
-        devices.append("default");
-
-    return devices;
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
-{
-    return QByteArray("default");
-}
-
-QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
-{
-    return QByteArray("default");
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.h b/src/multimedia/audio/qaudiodeviceinfo_win32_p.h
deleted file mode 100644
index cb6dd91..0000000
--- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#ifndef QAUDIODEVICEINFOWIN_H
-#define QAUDIODEVICEINFOWIN_H
-
-#include <QtCore/qbytearray.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qdebug.h>
-
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-
-
-QT_BEGIN_NAMESPACE
-
-const unsigned int MAX_SAMPLE_RATES = 5;
-const unsigned int SAMPLE_RATES[] = { 8000, 11025, 22050, 44100, 48000 };
-
-class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
-{
-    Q_OBJECT
-
-public:
-    QAudioDeviceInfoInternal(QByteArray dev,QAudio::Mode mode);
-    ~QAudioDeviceInfoInternal();
-
-    bool open();
-    void close();
-
-    bool testSettings(const QAudioFormat& format) const;
-    void updateLists();
-    QAudioFormat preferredFormat() const;
-    bool isFormatSupported(const QAudioFormat& format) const;
-    QAudioFormat nearestFormat(const QAudioFormat& format) const;
-    QString deviceName() const;
-    QStringList codecList();
-    QList<int> frequencyList();
-    QList<int> channelsList();
-    QList<int> sampleSizeList();
-    QList<QAudioFormat::Endian> byteOrderList();
-    QList<QAudioFormat::SampleType> sampleTypeList();
-    static QByteArray defaultInputDevice();
-    static QByteArray defaultOutputDevice();
-    static QList<QByteArray> availableDevices(QAudio::Mode);
-
-private:
-    QAudio::Mode mode;
-    QString device;
-    QAudioFormat nearest;
-    QList<int> freqz;
-    QList<int> channelz;
-    QList<int> sizez;
-    QList<QAudioFormat::Endian> byteOrderz;
-    QStringList codecz;
-    QList<QAudioFormat::SampleType> typez;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudioengine.cpp b/src/multimedia/audio/qaudioengine.cpp
deleted file mode 100644
index 7f1f5d3..0000000
--- a/src/multimedia/audio/qaudioengine.cpp
+++ /dev/null
@@ -1,343 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qaudioengine.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QAbstractAudioDeviceInfo
-    \brief The QAbstractAudioDeviceInfo class provides access for QAudioDeviceInfo to access the audio
-    device provided by the plugin.
-    \internal
-
-    \ingroup multimedia
-
-    This class implements the audio functionality for
-    QAudioDeviceInfo, i.e., QAudioDeviceInfo keeps a
-    QAbstractAudioDeviceInfo and routes function calls to it. For a
-    description of the functionality that QAbstractAudioDeviceInfo
-    implements, you can read the class and functions documentation of
-    QAudioDeviceInfo.
-
-    \sa QAudioDeviceInfo
-*/
-
-/*!
-    \fn virtual QAudioFormat QAbstractAudioDeviceInfo::preferredFormat() const
-    Returns the nearest settings.
-*/
-
-/*!
-    \fn virtual bool QAbstractAudioDeviceInfo::isFormatSupported(const QAudioFormat& format) const
-    Returns true if \a format is available from audio device.
-*/
-
-/*!
-    \fn virtual QAudioFormat QAbstractAudioDeviceInfo::nearestFormat(const QAudioFormat& format) const
-    Returns the nearest settings \a format.
-*/
-
-/*!
-    \fn virtual QString QAbstractAudioDeviceInfo::deviceName() const
-    Returns the audio device name.
-*/
-
-/*!
-    \fn virtual QStringList QAbstractAudioDeviceInfo::codecList()
-    Returns the list of currently available codecs.
-*/
-
-/*!
-    \fn virtual QList<int> QAbstractAudioDeviceInfo::frequencyList()
-    Returns the list of currently available frequencies.
-*/
-
-/*!
-    \fn virtual QList<int> QAbstractAudioDeviceInfo::channelsList()
-    Returns the list of currently available channels.
-*/
-
-/*!
-    \fn virtual QList<int> QAbstractAudioDeviceInfo::sampleSizeList()
-    Returns the list of currently available sample sizes.
-*/
-
-/*!
-    \fn virtual QList<QAudioFormat::Endian> QAbstractAudioDeviceInfo::byteOrderList()
-    Returns the list of currently available byte orders.
-*/
-
-/*!
-    \fn virtual QList<QAudioFormat::SampleType> QAbstractAudioDeviceInfo::sampleTypeList()
-    Returns the list of currently available sample types.
-*/
-
-/*!
-    \class QAbstractAudioOutput
-    \brief The QAbstractAudioOutput class provides access for QAudioOutput to access the audio
-    device provided by the plugin.
-    \internal
-
-    \ingroup multimedia
-
-    QAbstractAudioOutput implements audio functionality for
-    QAudioOutput, i.e., QAudioOutput routes function calls to
-    QAbstractAudioOutput. For a description of the functionality that
-    is implemented, see the QAudioOutput class and function
-    descriptions.
-
-    \sa QAudioOutput
-*/
-
-/*!
-    \fn virtual QIODevice* QAbstractAudioOutput::start(QIODevice* device)
-    Uses the \a device as the QIODevice to transfer data. If \a device is null then the class
-    creates an internal QIODevice. Returns a pointer to the QIODevice being used to handle
-    the data transfer. This QIODevice can be used to write() audio data directly. Passing a
-    QIODevice allows the data to be transfered without any extra code.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioOutput::stop()
-    Stops the audio output.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioOutput::reset()
-    Drops all audio data in the buffers, resets buffers to zero.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioOutput::suspend()
-    Stops processing audio data, preserving buffered audio data.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioOutput::resume()
-    Resumes processing audio data after a suspend()
-*/
-
-/*!
-    \fn virtual int QAbstractAudioOutput::bytesFree() const
-    Returns the free space available in bytes in the audio buffer.
-*/
-
-/*!
-    \fn virtual int QAbstractAudioOutput::periodSize() const
-    Returns the period size in bytes.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioOutput::setBufferSize(int value)
-    Sets the audio buffer size to \a value in bytes.
-*/
-
-/*!
-    \fn virtual int QAbstractAudioOutput::bufferSize() const
-    Returns the audio buffer size in bytes.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioOutput::setNotifyInterval(int ms)
-    Sets the interval for notify() signal to be emitted. This is based on the \a ms
-    of audio data processed not on actual real-time. The resolution of the timer
-    is platform specific.
-*/
-
-/*!
-    \fn virtual int QAbstractAudioOutput::notifyInterval() const
-    Returns the notify interval in milliseconds.
-*/
-
-/*!
-    \fn virtual qint64 QAbstractAudioOutput::processedUSecs() const
-    Returns the amount of audio data processed since start() was called in milliseconds.
-*/
-
-/*!
-    \fn virtual qint64 QAbstractAudioOutput::elapsedUSecs() const
-    Returns the milliseconds since start() was called, including time in Idle and suspend states.
-*/
-
-/*!
-    \fn virtual QAudio::Error QAbstractAudioOutput::error() const
-    Returns the error state.
-*/
-
-/*!
-    \fn virtual QAudio::State QAbstractAudioOutput::state() const
-    Returns the state of audio processing.
-*/
-
-/*!
-    \fn virtual QAudioFormat QAbstractAudioOutput::format() const
-    Returns the QAudioFormat being used.
-*/
-
-/*!
-    \fn QAbstractAudioOutput::stateChanged(QAudio::State state)
-    This signal is emitted when the device \a state has changed.
-*/
-
-/*!
-    \fn QAbstractAudioOutput::notify()
-    This signal is emitted when x ms of audio data has been processed
-    the interval set by setNotifyInterval(x).
-*/
-
-
-/*!
-    \class QAbstractAudioInput
-    \brief The QAbstractAudioInput class provides access for QAudioInput to access the audio
-    device provided by the plugin.
-    \internal
-
-    \ingroup multimedia
-
-    QAudioDeviceInput keeps an instance of QAbstractAudioInput and
-    routes calls to functions of the same name to QAbstractAudioInput.
-    This means that it is QAbstractAudioInput that implements the
-    audio functionality. For a description of the functionality, see
-    the QAudioInput class description.
-
-    \sa QAudioInput
-*/
-
-/*!
-    \fn virtual QIODevice* QAbstractAudioInput::start(QIODevice* device)
-    Uses the \a device as the QIODevice to transfer data. If \a device is null
-    then the class creates an internal QIODevice. Returns a pointer to the
-    QIODevice being used to handle the data transfer. This QIODevice can be used to
-    read() audio data directly. Passing a QIODevice allows the data to be transfered
-    without any extra code.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioInput::stop()
-    Stops the audio input.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioInput::reset()
-    Drops all audio data in the buffers, resets buffers to zero.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioInput::suspend()
-    Stops processing audio data, preserving buffered audio data.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioInput::resume()
-    Resumes processing audio data after a suspend().
-*/
-
-/*!
-    \fn virtual int QAbstractAudioInput::bytesReady() const
-    Returns the amount of audio data available to read in bytes.
-*/
-
-/*!
-    \fn virtual int QAbstractAudioInput::periodSize() const
-    Returns the period size in bytes.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioInput::setBufferSize(int value)
-    Sets the audio buffer size to \a value in milliseconds.
-*/
-
-/*!
-    \fn virtual int QAbstractAudioInput::bufferSize() const
-    Returns the audio buffer size in milliseconds.
-*/
-
-/*!
-    \fn virtual void QAbstractAudioInput::setNotifyInterval(int ms)
-    Sets the interval for notify() signal to be emitted. This is based
-    on the \a ms of audio data processed not on actual real-time.
-    The resolution of the timer is platform specific.
-*/
-
-/*!
-    \fn virtual int QAbstractAudioInput::notifyInterval() const
-    Returns the notify interval in milliseconds.
-*/
-
-/*!
-    \fn virtual qint64 QAbstractAudioInput::processedUSecs() const
-    Returns the amount of audio data processed since start() was called in milliseconds.
-*/
-
-/*!
-    \fn virtual qint64 QAbstractAudioInput::elapsedUSecs() const
-    Returns the milliseconds since start() was called, including time in Idle and suspend states.
-*/
-
-/*!
-    \fn virtual QAudio::Error QAbstractAudioInput::error() const
-    Returns the error state.
-*/
-
-/*!
-    \fn virtual QAudio::State QAbstractAudioInput::state() const
-    Returns the state of audio processing.
-*/
-
-/*!
-    \fn virtual QAudioFormat QAbstractAudioInput::format() const
-    Returns the QAudioFormat being used
-*/
-
-/*!
-    \fn QAbstractAudioInput::stateChanged(QAudio::State state)
-    This signal is emitted when the device \a state has changed.
-*/
-
-/*!
-    \fn QAbstractAudioInput::notify()
-    This signal is emitted when x ms of audio data has been processed
-    the interval set by setNotifyInterval(x).
-*/
-
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudioengine.h b/src/multimedia/audio/qaudioengine.h
deleted file mode 100644
index df9d09d..0000000
--- a/src/multimedia/audio/qaudioengine.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QAUDIOENGINE_H
-#define QAUDIOENGINE_H
-
-#include <QtCore/qglobal.h>
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class Q_MULTIMEDIA_EXPORT QAbstractAudioDeviceInfo : public QObject
-{
-    Q_OBJECT
-
-public:
-    virtual QAudioFormat preferredFormat() const = 0;
-    virtual bool isFormatSupported(const QAudioFormat &format) const = 0;
-    virtual QAudioFormat nearestFormat(const QAudioFormat &format) const = 0;
-    virtual QString deviceName() const = 0;
-    virtual QStringList codecList() = 0;
-    virtual QList<int> frequencyList() = 0;
-    virtual QList<int> channelsList() = 0;
-    virtual QList<int> sampleSizeList() = 0;
-    virtual QList<QAudioFormat::Endian> byteOrderList() = 0;
-    virtual QList<QAudioFormat::SampleType> sampleTypeList() = 0;
-};
-
-class Q_MULTIMEDIA_EXPORT QAbstractAudioOutput : public QObject
-{
-    Q_OBJECT
-
-public:
-    virtual QIODevice* start(QIODevice* device) = 0;
-    virtual void stop() = 0;
-    virtual void reset() = 0;
-    virtual void suspend() = 0;
-    virtual void resume() = 0;
-    virtual int bytesFree() const = 0;
-    virtual int periodSize() const = 0;
-    virtual void setBufferSize(int value) = 0;
-    virtual int bufferSize() const = 0;
-    virtual void setNotifyInterval(int milliSeconds) = 0;
-    virtual int notifyInterval() const = 0;
-    virtual qint64 processedUSecs() const = 0;
-    virtual qint64 elapsedUSecs() const = 0;
-    virtual QAudio::Error error() const = 0;
-    virtual QAudio::State state() const = 0;
-    virtual QAudioFormat format() const = 0;
-
-Q_SIGNALS:
-    void stateChanged(QAudio::State);
-    void notify();
-};
-
-class Q_MULTIMEDIA_EXPORT QAbstractAudioInput : public QObject
-{
-    Q_OBJECT
-
-public:
-    virtual QIODevice* start(QIODevice* device) = 0;
-    virtual void stop() = 0;
-    virtual void reset() = 0;
-    virtual void suspend()  = 0;
-    virtual void resume() = 0;
-    virtual int bytesReady() const = 0;
-    virtual int periodSize() const = 0;
-    virtual void setBufferSize(int value) = 0;
-    virtual int bufferSize() const = 0;
-    virtual void setNotifyInterval(int milliSeconds) = 0;
-    virtual int notifyInterval() const = 0;
-    virtual qint64 processedUSecs() const = 0;
-    virtual qint64 elapsedUSecs() const = 0;
-    virtual QAudio::Error error() const = 0;
-    virtual QAudio::State state() const = 0;
-    virtual QAudioFormat format() const = 0;
-
-Q_SIGNALS:
-    void stateChanged(QAudio::State);
-    void notify();
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QAUDIOENGINE_H
diff --git a/src/multimedia/audio/qaudioengineplugin.cpp b/src/multimedia/audio/qaudioengineplugin.cpp
deleted file mode 100644
index 82324b5..0000000
--- a/src/multimedia/audio/qaudioengineplugin.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtMultimedia/qaudioengineplugin.h>
-
-QT_BEGIN_NAMESPACE
-
-QAudioEnginePlugin::QAudioEnginePlugin(QObject* parent) :
-    QObject(parent)
-{}
-
-QAudioEnginePlugin::~QAudioEnginePlugin()
-{}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudioengineplugin.h b/src/multimedia/audio/qaudioengineplugin.h
deleted file mode 100644
index 2322d2a..0000000
--- a/src/multimedia/audio/qaudioengineplugin.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QAUDIOENGINEPLUGIN_H
-#define QAUDIOENGINEPLUGIN_H
-
-#include <QtCore/qstring.h>
-#include <QtCore/qplugin.h>
-#include <QtCore/qfactoryinterface.h>
-
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-struct Q_MULTIMEDIA_EXPORT QAudioEngineFactoryInterface : public QFactoryInterface
-{
-    virtual QList<QByteArray> availableDevices(QAudio::Mode) const = 0;
-    virtual QAbstractAudioInput* createInput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
-    virtual QAbstractAudioOutput* createOutput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
-    virtual QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) = 0;
-};
-
-#define QAudioEngineFactoryInterface_iid \
-    "com.nokia.qt.QAudioEngineFactoryInterface"
-Q_DECLARE_INTERFACE(QAudioEngineFactoryInterface, QAudioEngineFactoryInterface_iid)
-
-class Q_MULTIMEDIA_EXPORT QAudioEnginePlugin : public QObject, public QAudioEngineFactoryInterface
-{
-    Q_OBJECT
-    Q_INTERFACES(QAudioEngineFactoryInterface:QFactoryInterface)
-
-public:
-    QAudioEnginePlugin(QObject *parent = 0);
-    ~QAudioEnginePlugin();
-
-    virtual QStringList keys() const = 0;
-    virtual QList<QByteArray> availableDevices(QAudio::Mode) const = 0;
-    virtual QAbstractAudioInput* createInput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
-    virtual QAbstractAudioOutput* createOutput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
-    virtual QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) = 0;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QAUDIOENGINEPLUGIN_H
diff --git a/src/multimedia/audio/qaudioformat.cpp b/src/multimedia/audio/qaudioformat.cpp
deleted file mode 100644
index 86d72f6..0000000
--- a/src/multimedia/audio/qaudioformat.cpp
+++ /dev/null
@@ -1,407 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QDebug>
-#include <QtMultimedia/qaudioformat.h>
-
-
-QT_BEGIN_NAMESPACE
-
-
-class QAudioFormatPrivate : public QSharedData
-{
-public:
-    QAudioFormatPrivate()
-    {
-        frequency = -1;
-        channels = -1;
-        sampleSize = -1;
-        byteOrder = QAudioFormat::Endian(QSysInfo::ByteOrder);
-        sampleType = QAudioFormat::Unknown;
-    }
-
-    QAudioFormatPrivate(const QAudioFormatPrivate &other):
-        QSharedData(other),
-        codec(other.codec),
-        byteOrder(other.byteOrder),
-        sampleType(other.sampleType),
-        frequency(other.frequency),
-        channels(other.channels),
-        sampleSize(other.sampleSize)
-    {
-    }
-
-    QAudioFormatPrivate& operator=(const QAudioFormatPrivate &other)
-    {
-        codec = other.codec;
-        byteOrder = other.byteOrder;
-        sampleType = other.sampleType;
-        frequency = other.frequency;
-        channels = other.channels;
-        sampleSize = other.sampleSize;
-
-        return *this;
-    }
-
-    QString codec;
-    QAudioFormat::Endian byteOrder;
-    QAudioFormat::SampleType sampleType;
-    int frequency;
-    int channels;
-    int sampleSize;
-};
-
-/*!
-    \class QAudioFormat
-    \brief The QAudioFormat class stores audio parameter information.
-
-    \inmodule QtMultimedia
-    \ingroup  multimedia
-    \since 4.6
-
-    An audio format specifies how data in an audio stream is arranged,
-    i.e, how the stream is to be interpreted. The encoding itself is
-    specified by the codec() used for the stream.
-
-    In addition to the encoding, QAudioFormat contains other
-    parameters that further specify how the audio data is arranged.
-    These are the frequency, the number of channels, the sample size,
-    the sample type, and the byte order. The following table describes
-    these in more detail.
-
-    \table
-        \header
-            \o Parameter
-            \o Description
-        \row
-            \o Sample Rate
-            \o Samples per second of audio data in Hertz.
-        \row
-            \o Number of channels
-            \o The number of audio channels (typically one for mono
-               or two for stereo)
-        \row
-            \o Sample size
-            \o How much data is stored in each sample (typically 8
-               or 16 bits)
-        \row
-            \o Sample type
-            \o Numerical representation of sample (typically signed integer,
-               unsigned integer or float)
-        \row
-            \o Byte order
-            \o Byte ordering of sample (typically little endian, big endian)
-    \endtable
-
-    You can obtain audio formats compatible with the audio device used
-    through functions in QAudioDeviceInfo. This class also lets you
-    query available parameter values for a device, so that you can set
-    the parameters yourself. See the QAudioDeviceInfo class
-    description for details. You need to know the format of the audio
-    streams you wish to play. Qt does not set up formats for you.
-*/
-
-/*!
-    Construct a new audio format.
-
-    Values are initialized as follows:
-    \list
-    \o sampleRate()  = -1
-    \o channelCount() = -1
-    \o sampleSize() = -1
-    \o byteOrder()  = QAudioFormat::Endian(QSysInfo::ByteOrder)
-    \o sampleType() = QAudioFormat::Unknown
-    \c codec()      = ""
-    \endlist
-*/
-
-QAudioFormat::QAudioFormat():
-    d(new QAudioFormatPrivate)
-{
-}
-
-/*!
-    Construct a new audio format using \a other.
-*/
-
-QAudioFormat::QAudioFormat(const QAudioFormat &other):
-    d(other.d)
-{
-}
-
-/*!
-    Destroy this audio format.
-*/
-
-QAudioFormat::~QAudioFormat()
-{
-}
-
-/*!
-    Assigns \a other to this QAudioFormat implementation.
-*/
-
-QAudioFormat& QAudioFormat::operator=(const QAudioFormat &other)
-{
-    d = other.d;
-    return *this;
-}
-
-/*!
-  Returns true if this QAudioFormat is equal to the \a other
-  QAudioFormat; otherwise returns false.
-
-  All elements of QAudioFormat are used for the comparison.
-*/
-
-bool QAudioFormat::operator==(const QAudioFormat &other) const
-{
-    return d->frequency == other.d->frequency &&
-            d->channels == other.d->channels &&
-            d->sampleSize == other.d->sampleSize &&
-            d->byteOrder == other.d->byteOrder &&
-            d->codec == other.d->codec &&
-            d->sampleType == other.d->sampleType;
-}
-
-/*!
-  Returns true if this QAudioFormat is not equal to the \a other
-  QAudioFormat; otherwise returns false.
-
-  All elements of QAudioFormat are used for the comparison.
-*/
-
-bool QAudioFormat::operator!=(const QAudioFormat& other) const
-{
-    return !(*this == other);
-}
-
-/*!
-    Returns true if all of the parameters are valid.
-*/
-
-bool QAudioFormat::isValid() const
-{
-    return d->frequency != -1 && d->channels != -1 && d->sampleSize != -1 &&
-            d->sampleType != QAudioFormat::Unknown && !d->codec.isEmpty();
-}
-
-/*!
-   Sets the sample rate to \a samplerate Hertz.
-
-   \since 4.7
-*/
-
-void QAudioFormat::setSampleRate(int samplerate)
-{
-    d->frequency = samplerate;
-}
-
-/*!
-   \obsolete
-
-   Use setSampleRate() instead.
-*/
-
-void QAudioFormat::setFrequency(int frequency)
-{
-    d->frequency = frequency;
-}
-
-/*!
-    Returns the current sample rate in Hertz.
-
-    \since 4.7
-*/
-
-int QAudioFormat::sampleRate() const
-{
-    return d->frequency;
-}
-
-/*!
-   \obsolete
-
-   Use sampleRate() instead.
-*/
-
-int QAudioFormat::frequency() const
-{
-    return d->frequency;
-}
-
-/*!
-   Sets the channel count to \a channels.
-
-   \since 4.7
-*/
-
-void QAudioFormat::setChannelCount(int channels)
-{
-    d->channels = channels;
-}
-
-/*!
-   \obsolete
-
-   Use setChannelCount() instead.
-*/
-
-void QAudioFormat::setChannels(int channels)
-{
-    d->channels = channels;
-}
-
-/*!
-    Returns the current channel count value.
-
-    \since 4.7
-*/
-
-int QAudioFormat::channelCount() const
-{
-    return d->channels;
-}
-
-/*!
-    \obsolete
-
-    Use channelCount() instead.
-*/
-
-int QAudioFormat::channels() const
-{
-    return d->channels;
-}
-
-/*!
-   Sets the sample size to the \a sampleSize specified.
-*/
-
-void QAudioFormat::setSampleSize(int sampleSize)
-{
-    d->sampleSize = sampleSize;
-}
-
-/*!
-    Returns the current sample size value.
-*/
-
-int QAudioFormat::sampleSize() const
-{
-    return d->sampleSize;
-}
-
-/*!
-   Sets the codec to \a codec.
-
-   \sa QAudioDeviceInfo::supportedCodecs()
-*/
-
-void QAudioFormat::setCodec(const QString &codec)
-{
-    d->codec = codec;
-}
-
-/*!
-    Returns the current codec value.
-
-   \sa QAudioDeviceInfo::supportedCodecs()
-*/
-
-QString QAudioFormat::codec() const
-{
-    return d->codec;
-}
-
-/*!
-   Sets the byteOrder to \a byteOrder.
-*/
-
-void QAudioFormat::setByteOrder(QAudioFormat::Endian byteOrder)
-{
-    d->byteOrder = byteOrder;
-}
-
-/*!
-    Returns the current byteOrder value.
-*/
-
-QAudioFormat::Endian QAudioFormat::byteOrder() const
-{
-    return d->byteOrder;
-}
-
-/*!
-   Sets the sampleType to \a sampleType.
-*/
-
-void QAudioFormat::setSampleType(QAudioFormat::SampleType sampleType)
-{
-    d->sampleType = sampleType;
-}
-
-/*!
-    Returns the current SampleType value.
-*/
-
-QAudioFormat::SampleType QAudioFormat::sampleType() const
-{
-    return d->sampleType;
-}
-
-/*!
-    \enum QAudioFormat::SampleType
-
-    \value Unknown       Not Set
-    \value SignedInt     samples are signed integers
-    \value UnSignedInt   samples are unsigned intergers
-    \value Float         samples are floats
-*/
-
-/*!
-    \enum QAudioFormat::Endian
-
-    \value BigEndian     samples are big endian byte order
-    \value LittleEndian  samples are little endian byte order
-*/
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/audio/qaudioformat.h b/src/multimedia/audio/qaudioformat.h
deleted file mode 100644
index 6c835b7..0000000
--- a/src/multimedia/audio/qaudioformat.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QAUDIOFORMAT_H
-#define QAUDIOFORMAT_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qglobal.h>
-#include <QtCore/qshareddata.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QAudioFormatPrivate;
-
-class Q_MULTIMEDIA_EXPORT QAudioFormat
-{
-public:
-    enum SampleType { Unknown, SignedInt, UnSignedInt, Float };
-    enum Endian { BigEndian = QSysInfo::BigEndian, LittleEndian = QSysInfo::LittleEndian };
-
-    QAudioFormat();
-    QAudioFormat(const QAudioFormat &other);
-    ~QAudioFormat();
-
-    QAudioFormat& operator=(const QAudioFormat &other);
-    bool operator==(const QAudioFormat &other) const;
-    bool operator!=(const QAudioFormat &other) const;
-
-    bool isValid() const;
-
-    void setFrequency(int frequency);
-    int frequency() const;
-    void setSampleRate(int sampleRate);
-    int sampleRate() const;
-
-    void setChannels(int channels);
-    int channels() const;
-    void setChannelCount(int channelCount);
-    int channelCount() const;
-
-    void setSampleSize(int sampleSize);
-    int sampleSize() const;
-
-    void setCodec(const QString &codec);
-    QString codec() const;
-
-    void setByteOrder(QAudioFormat::Endian byteOrder);
-    QAudioFormat::Endian byteOrder() const;
-
-    void setSampleType(QAudioFormat::SampleType sampleType);
-    QAudioFormat::SampleType sampleType() const;
-
-private:
-    QSharedDataPointer<QAudioFormatPrivate> d;
-};
-
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QAUDIOFORMAT_H
diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp
deleted file mode 100644
index c99e870..0000000
--- a/src/multimedia/audio/qaudioinput.cpp
+++ /dev/null
@@ -1,432 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-#include <QtMultimedia/qaudioinput.h>
-
-#include "qaudiodevicefactory_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QAudioInput
-    \brief The QAudioInput class provides an interface for receiving audio data from an audio input device.
-
-    \inmodule QtMultimedia
-    \ingroup  multimedia
-    \since 4.6
-
-    You can construct an audio input with the system's
-    \l{QAudioDeviceInfo::defaultInputDevice()}{default audio input
-    device}. It is also possible to create QAudioInput with a
-    specific QAudioDeviceInfo. When you create the audio input, you
-    should also send in the QAudioFormat to be used for the recording
-    (see the QAudioFormat class description for details).
-
-    To record to a file:
-
-    QAudioInput lets you record audio with an audio input device. The
-    default constructor of this class will use the systems default
-    audio device, but you can also specify a QAudioDeviceInfo for a
-    specific device. You also need to pass in the QAudioFormat in
-    which you wish to record.
-
-    Starting up the QAudioInput is simply a matter of calling start()
-    with a QIODevice opened for writing. For instance, to record to a
-    file, you can:
-
-    \code
-      QFile outputFile;   // class member.
-      QAudioInput* audio; // class member.
-    \endcode
-
-    \code
-    {
-      outputFile.setFileName("/tmp/test.raw");
-      outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate );
-
-      QAudioFormat format;
-      // set up the format you want, eg.
-      format.setFrequency(8000);
-      format.setChannels(1);
-      format.setSampleSize(8);
-      format.setCodec("audio/pcm");
-      format.setByteOrder(QAudioFormat::LittleEndian);
-      format.setSampleType(QAudioFormat::UnSignedInt);
-
-      QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
-      if (!info.isFormatSupported(format)) {
-          qWarning()<<"default format not supported try to use nearest";
-          format = info.nearestFormat(format);
-      }
-
-      audio = new QAudioInput(format, this);
-      QTimer::singleShot(3000, this, SLOT(stopRecording()));
-      audio->start(&outputFile);
-      // Records audio for 3000ms
-    }
-    \endcode
-
-    This will start recording if the format specified is supported by
-    the input device (you can check this with
-    QAudioDeviceInfo::isFormatSupported(). In case there are any
-    snags, use the error() function to check what went wrong. We stop
-    recording in the \c stopRecording() slot.
-
-    \code
-    void stopRecording()
-    {
-      audio->stop();
-      outputFile->close();
-      delete audio;
-    }
-    \endcode
-
-    At any point in time, QAudioInput will be in one of four states:
-    active, suspended, stopped, or idle. These states are specified by
-    the QAudio::State enum. You can request a state change directly through
-    suspend(), resume(), stop(), reset(), and start(). The current
-    state is reported by state(). QAudioOutput will also signal you
-    when the state changes (stateChanged()).
-
-    QAudioInput provides several ways of measuring the time that has
-    passed since the start() of the recording. The \c processedUSecs()
-    function returns the length of the stream in microseconds written,
-    i.e., it leaves out the times the audio input was suspended or idle.
-    The elapsedUSecs() function returns the time elapsed since start() was called regardless of
-    which states the QAudioInput has been in.
-
-    If an error should occur, you can fetch its reason with error().
-    The possible error reasons are described by the QAudio::Error
-    enum. The QAudioInput will enter the \l{QAudio::}{StoppedState} when
-    an error is encountered.  Connect to the stateChanged() signal to
-    handle the error:
-
-    \snippet doc/src/snippets/audio/main.cpp 0
-
-    \sa QAudioOutput, QAudioDeviceInfo
-
-    \section1 Symbian Platform Security Requirements
-
-    On Symbian, processes which use this class must have the
-    \c UserEnvironment platform security capability.  If the client
-    process lacks this capability, calls to either overload of start()
-    will fail.
-    This failure is indicated by the QAudioInput object setting
-    its error() value to \l{QAudio::OpenError} and then emitting a
-    \l{stateChanged()}{stateChanged}(\l{QAudio::StoppedState}) signal.
-
-    Platform security capabilities are added via the
-    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
-    qmake variable.
-*/
-
-/*!
-    Construct a new audio input and attach it to \a parent.
-    The default audio input device is used with the output
-    \a format parameters.
-*/
-
-QAudioInput::QAudioInput(const QAudioFormat &format, QObject *parent):
-    QObject(parent)
-{
-    d = QAudioDeviceFactory::createDefaultInputDevice(format);
-    connect(d, SIGNAL(notify()), SIGNAL(notify()));
-    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
-}
-
-/*!
-    Construct a new audio input and attach it to \a parent.
-    The device referenced by \a audioDevice is used with the input
-    \a format parameters.
-*/
-
-QAudioInput::QAudioInput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format, QObject *parent):
-    QObject(parent)
-{
-    d = QAudioDeviceFactory::createInputDevice(audioDevice, format);
-    connect(d, SIGNAL(notify()), SIGNAL(notify()));
-    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
-}
-
-/*!
-    Destroy this audio input.
-*/
-
-QAudioInput::~QAudioInput()
-{
-    delete d;
-}
-
-/*!
-     Uses the \a device as the QIODevice to transfer data.
-     Passing a QIODevice allows the data to be transfered without any extra code.
-     All that is required is to open the QIODevice.
-
-     If able to successfully get audio data from the systems audio device the
-     state() is set to either QAudio::ActiveState or QAudio::IdleState,
-     error() is set to QAudio::NoError and the stateChanged() signal is emitted.
-
-     If a problem occurs during this process the error() is set to QAudio::OpenError,
-     state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
-
-     \sa {Symbian Platform Security Requirements}
-
-     \sa QIODevice
-*/
-
-void QAudioInput::start(QIODevice* device)
-{
-    d->start(device);
-}
-
-/*!
-    Returns a pointer to the QIODevice being used to handle the data
-    transfer. This QIODevice can be used to read() audio data
-    directly.
-
-    If able to access the systems audio device the state() is set to
-    QAudio::IdleState, error() is set to QAudio::NoError
-    and the stateChanged() signal is emitted.
-
-    If a problem occurs during this process the error() is set to QAudio::OpenError,
-    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
-
-    \sa {Symbian Platform Security Requirements}
-
-    \sa QIODevice
-*/
-
-QIODevice* QAudioInput::start()
-{
-    return d->start(0);
-}
-
-/*!
-    Returns the QAudioFormat being used.
-*/
-
-QAudioFormat QAudioInput::format() const
-{
-    return d->format();
-}
-
-/*!
-    Stops the audio input, detaching from the system resource.
-
-    Sets error() to QAudio::NoError, state() to QAudio::StoppedState and
-    emit stateChanged() signal.
-*/
-
-void QAudioInput::stop()
-{
-    d->stop();
-}
-
-/*!
-    Drops all audio data in the buffers, resets buffers to zero.
-*/
-
-void QAudioInput::reset()
-{
-    d->reset();
-}
-
-/*!
-    Stops processing audio data, preserving buffered audio data.
-
-    Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and
-    emit stateChanged() signal.
-*/
-
-void QAudioInput::suspend()
-{
-    d->suspend();
-}
-
-/*!
-    Resumes processing audio data after a suspend().
-
-    Sets error() to QAudio::NoError.
-    Sets state() to QAudio::ActiveState if you previously called start(QIODevice*).
-    Sets state() to QAudio::IdleState if you previously called start().
-    emits stateChanged() signal.
-*/
-
-void QAudioInput::resume()
-{
-     d->resume();
-}
-
-/*!
-    Sets the audio buffer size to \a value milliseconds.
-
-    Note: This function can be called anytime before start(), calls to this
-    are ignored after start(). It should not be assumed that the buffer size
-    set is the actual buffer size used, calling bufferSize() anytime after start()
-    will return the actual buffer size being used.
-
-*/
-
-void QAudioInput::setBufferSize(int value)
-{
-    d->setBufferSize(value);
-}
-
-/*!
-    Returns the audio buffer size in milliseconds.
-
-    If called before start(), returns platform default value.
-    If called before start() but setBufferSize() was called prior, returns value set by setBufferSize().
-    If called after start(), returns the actual buffer size being used. This may not be what was set previously
-    by setBufferSize().
-
-*/
-
-int QAudioInput::bufferSize() const
-{
-    return d->bufferSize();
-}
-
-/*!
-    Returns the amount of audio data available to read in bytes.
-
-    NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState
-    state, otherwise returns zero.
-*/
-
-int QAudioInput::bytesReady() const
-{
-    /*
-    -If not ActiveState|IdleState, return 0
-    -return amount of audio data available to read
-    */
-    return d->bytesReady();
-}
-
-/*!
-    Returns the period size in bytes.
-
-    Note: This is the recommended read size in bytes.
-*/
-
-int QAudioInput::periodSize() const
-{
-    return d->periodSize();
-}
-
-/*!
-    Sets the interval for notify() signal to be emitted.
-    This is based on the \a ms of audio data processed
-    not on actual real-time.
-    The minimum resolution of the timer is platform specific and values
-    should be checked with notifyInterval() to confirm actual value
-    being used.
-*/
-
-void QAudioInput::setNotifyInterval(int ms)
-{
-    d->setNotifyInterval(ms);
-}
-
-/*!
-    Returns the notify interval in milliseconds.
-*/
-
-int QAudioInput::notifyInterval() const
-{
-    return d->notifyInterval();
-}
-
-/*!
-    Returns the amount of audio data processed since start()
-    was called in microseconds.
-*/
-
-qint64 QAudioInput::processedUSecs() const
-{
-    return d->processedUSecs();
-}
-
-/*!
-    Returns the microseconds since start() was called, including time in Idle and
-    Suspend states.
-*/
-
-qint64 QAudioInput::elapsedUSecs() const
-{
-    return d->elapsedUSecs();
-}
-
-/*!
-    Returns the error state.
-*/
-
-QAudio::Error QAudioInput::error() const
-{
-    return d->error();
-}
-
-/*!
-    Returns the state of audio processing.
-*/
-
-QAudio::State QAudioInput::state() const
-{
-    return d->state();
-}
-
-/*!
-    \fn QAudioInput::stateChanged(QAudio::State state)
-    This signal is emitted when the device \a state has changed.
-*/
-
-/*!
-    \fn QAudioInput::notify()
-    This signal is emitted when x ms of audio data has been processed
-    the interval set by setNotifyInterval(x).
-*/
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/audio/qaudioinput.h b/src/multimedia/audio/qaudioinput.h
deleted file mode 100644
index 5be9b5a..0000000
--- a/src/multimedia/audio/qaudioinput.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QAUDIOINPUT_H
-#define QAUDIOINPUT_H
-
-#include <QtCore/qiodevice.h>
-#include <QtCore/qglobal.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QAbstractAudioInput;
-
-class Q_MULTIMEDIA_EXPORT QAudioInput : public QObject
-{
-    Q_OBJECT
-
-public:
-    explicit QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
-    explicit QAudioInput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
-    ~QAudioInput();
-
-    QAudioFormat format() const;
-
-    void start(QIODevice *device);
-    QIODevice* start();
-
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-
-    void setBufferSize(int bytes);
-    int bufferSize() const;
-
-    int bytesReady() const;
-    int periodSize() const;
-
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-
-    QAudio::Error error() const;
-    QAudio::State state() const;
-
-Q_SIGNALS:
-    void stateChanged(QAudio::State);
-    void notify();
-
-private:
-    Q_DISABLE_COPY(QAudioInput)
-
-    QAbstractAudioInput* d;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QAUDIOINPUT_H
diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp
deleted file mode 100644
index 6b15008..0000000
--- a/src/multimedia/audio/qaudioinput_alsa_p.cpp
+++ /dev/null
@@ -1,706 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qcoreapplication.h>
-#include "qaudioinput_alsa_p.h"
-#include "qaudiodeviceinfo_alsa_p.h"
-
-QT_BEGIN_NAMESPACE
-
-//#define DEBUG_AUDIO 1
-
-static const int minimumIntervalTime = 50;
-
-QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
-    settings(audioFormat)
-{
-    bytesAvailable = 0;
-    handle = 0;
-    ahandler = 0;
-    access = SND_PCM_ACCESS_RW_INTERLEAVED;
-    pcmformat = SND_PCM_FORMAT_S16;
-    buffer_size = 0;
-    period_size = 0;
-    buffer_time = 100000;
-    period_time = 20000;
-    totalTimeValue = 0;
-    intervalTime = 1000;
-    audioBuffer = 0;
-    errorState = QAudio::NoError;
-    deviceState = QAudio::StoppedState;
-    audioSource = 0;
-    pullMode = true;
-    resuming = false;
-
-    m_device = device;
-
-    timer = new QTimer(this);
-    connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
-}
-
-QAudioInputPrivate::~QAudioInputPrivate()
-{
-    close();
-    disconnect(timer, SIGNAL(timeout()));
-    QCoreApplication::processEvents();
-    delete timer;
-}
-
-QAudio::Error QAudioInputPrivate::error() const
-{
-    return errorState;
-}
-
-QAudio::State QAudioInputPrivate::state() const
-{
-    return deviceState;
-}
-
-
-QAudioFormat QAudioInputPrivate::format() const
-{
-    return settings;
-}
-
-int QAudioInputPrivate::xrun_recovery(int err)
-{
-    int  count = 0;
-    bool reset = false;
-
-    if(err == -EPIPE) {
-        errorState = QAudio::UnderrunError;
-        err = snd_pcm_prepare(handle);
-        if(err < 0)
-            reset = true;
-        else {
-            bytesAvailable = bytesReady();
-            if (bytesAvailable <= 0)
-                reset = true;
-        }
-
-    } else if((err == -ESTRPIPE)||(err == -EIO)) {
-        errorState = QAudio::IOError;
-        while((err = snd_pcm_resume(handle)) == -EAGAIN){
-            usleep(100);
-            count++;
-            if(count > 5) {
-                reset = true;
-                break;
-            }
-        }
-        if(err < 0) {
-            err = snd_pcm_prepare(handle);
-            if(err < 0)
-                reset = true;
-        }
-    }
-    if(reset) {
-        close();
-        open();
-        snd_pcm_prepare(handle);
-        return 0;
-    }
-    return err;
-}
-
-int QAudioInputPrivate::setFormat()
-{
-    snd_pcm_format_t format = SND_PCM_FORMAT_S16;
-
-    if(settings.sampleSize() == 8) {
-        format = SND_PCM_FORMAT_U8;
-    } else if(settings.sampleSize() == 16) {
-        if(settings.sampleType() == QAudioFormat::SignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                format = SND_PCM_FORMAT_S16_LE;
-            else
-                format = SND_PCM_FORMAT_S16_BE;
-        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                format = SND_PCM_FORMAT_U16_LE;
-            else
-                format = SND_PCM_FORMAT_U16_BE;
-        }
-    } else if(settings.sampleSize() == 24) {
-        if(settings.sampleType() == QAudioFormat::SignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                format = SND_PCM_FORMAT_S24_LE;
-            else
-                format = SND_PCM_FORMAT_S24_BE;
-        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                format = SND_PCM_FORMAT_U24_LE;
-            else
-                format = SND_PCM_FORMAT_U24_BE;
-        }
-    } else if(settings.sampleSize() == 32) {
-        if(settings.sampleType() == QAudioFormat::SignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                format = SND_PCM_FORMAT_S32_LE;
-            else
-                format = SND_PCM_FORMAT_S32_BE;
-        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                format = SND_PCM_FORMAT_U32_LE;
-            else
-                format = SND_PCM_FORMAT_U32_BE;
-        } else if(settings.sampleType() == QAudioFormat::Float) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                format = SND_PCM_FORMAT_FLOAT_LE;
-            else
-                format = SND_PCM_FORMAT_FLOAT_BE;
-        }
-    } else if(settings.sampleSize() == 64) {
-        if(settings.byteOrder() == QAudioFormat::LittleEndian)
-            format = SND_PCM_FORMAT_FLOAT64_LE;
-        else
-            format = SND_PCM_FORMAT_FLOAT64_BE;
-    }
-
-    return snd_pcm_hw_params_set_format( handle, hwparams, format);
-}
-
-QIODevice* QAudioInputPrivate::start(QIODevice* device)
-{
-    if(deviceState != QAudio::StoppedState)
-        close();
-
-    if(!pullMode && audioSource) {
-        delete audioSource;
-    }
-
-    if(device) {
-        //set to pull mode
-        pullMode = true;
-        audioSource = device;
-        deviceState = QAudio::ActiveState;
-    } else {
-        //set to push mode
-        pullMode = false;
-        deviceState = QAudio::IdleState;
-        audioSource = new InputPrivate(this);
-        audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
-    }
-
-    if( !open() )
-        return 0;
-
-    emit stateChanged(deviceState);
-
-    return audioSource;
-}
-
-void QAudioInputPrivate::stop()
-{
-    if(deviceState == QAudio::StoppedState)
-        return;
-
-    deviceState = QAudio::StoppedState;
-
-    close();
-    emit stateChanged(deviceState);
-}
-
-bool QAudioInputPrivate::open()
-{
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
-#endif
-    clockStamp.restart();
-    timeStamp.restart();
-    elapsedTimeOffset = 0;
-
-    int dir;
-    int err=-1;
-    int count=0;
-    unsigned int freakuency=settings.frequency();
-
-    QString dev = QString(QLatin1String(m_device.constData()));
-    QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioInput);
-    if(dev.compare(QLatin1String("default")) == 0) {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = QLatin1String(devices.first());
-#else
-        dev = QLatin1String("hw:0,0");
-#endif
-    } else {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = QLatin1String(m_device);
-#else
-        int idx = 0;
-        char *name;
-
-        QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData());
-
-        while(snd_card_get_name(idx,&name) == 0) {
-            if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0)
-                break;
-            idx++;
-        }
-        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
-#endif
-    }
-
-    // Step 1: try and open the device
-    while((count < 5) && (err < 0)) {
-        err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);
-        if(err < 0)
-            count++;
-    }
-    if (( err < 0)||(handle == 0)) {
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-        return false;
-    }
-    snd_pcm_nonblock( handle, 0 );
-
-    // Step 2: Set the desired HW parameters.
-    snd_pcm_hw_params_alloca( &hwparams );
-
-    bool fatal = false;
-    QString errMessage;
-    unsigned int chunks = 8;
-
-    err = snd_pcm_hw_params_any( handle, hwparams );
-    if ( err < 0 ) {
-        fatal = true;
-        errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_any: err = %1").arg(err);
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_rate_resample( handle, hwparams, 1 );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_rate_resample: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_access( handle, hwparams, access );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_access: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = setFormat();
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_format: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_channels: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_rate_near( handle, hwparams, &freakuency, 0 );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_rate_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_period_time_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_periods_near(handle, hwparams, &chunks, &dir);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_periods_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params(handle, hwparams);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params: err = %1").arg(err);
-        }
-    }
-    if( err < 0) {
-        qWarning()<<errMessage;
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-        return false;
-    }
-    snd_pcm_hw_params_get_buffer_size(hwparams,&buffer_frames);
-    buffer_size = snd_pcm_frames_to_bytes(handle,buffer_frames);
-    snd_pcm_hw_params_get_period_size(hwparams,&period_frames, &dir);
-    period_size = snd_pcm_frames_to_bytes(handle,period_frames);
-    snd_pcm_hw_params_get_buffer_time(hwparams,&buffer_time, &dir);
-    snd_pcm_hw_params_get_period_time(hwparams,&period_time, &dir);
-
-    // Step 3: Set the desired SW parameters.
-    snd_pcm_sw_params_t *swparams;
-    snd_pcm_sw_params_alloca(&swparams);
-    snd_pcm_sw_params_current(handle, swparams);
-    snd_pcm_sw_params_set_start_threshold(handle,swparams,period_frames);
-    snd_pcm_sw_params_set_stop_threshold(handle,swparams,buffer_frames);
-    snd_pcm_sw_params_set_avail_min(handle, swparams,period_frames);
-    snd_pcm_sw_params(handle, swparams);
-
-    // Step 4: Prepare audio
-    if(audioBuffer == 0)
-        audioBuffer = new char[buffer_size];
-    snd_pcm_prepare( handle );
-    snd_pcm_start(handle);
-
-    // Step 5: Setup timer
-    bytesAvailable = bytesReady();
-
-    if(pullMode)
-        connect(audioSource,SIGNAL(readyRead()),this,SLOT(userFeed()));
-
-    // Step 6: Start audio processing
-    chunks = buffer_size/period_size;
-    timer->start(period_time*chunks/2000);
-
-    errorState  = QAudio::NoError;
-
-    totalTimeValue = 0;
-
-    return true;
-}
-
-void QAudioInputPrivate::close()
-{
-    timer->stop();
-
-    if ( handle ) {
-        snd_pcm_drop( handle );
-        snd_pcm_close( handle );
-        handle = 0;
-        delete [] audioBuffer;
-        audioBuffer=0;
-    }
-}
-
-int QAudioInputPrivate::bytesReady() const
-{
-    if(resuming)
-        return period_size;
-
-    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
-        return 0;
-    int frames = snd_pcm_avail_update(handle);
-    if (frames < 0) return frames;
-    if((int)frames > (int)buffer_frames)
-        frames = buffer_frames;
-
-    return snd_pcm_frames_to_bytes(handle, frames);
-}
-
-qint64 QAudioInputPrivate::read(char* data, qint64 len)
-{
-    Q_UNUSED(len)
-
-    // Read in some audio data and write it to QIODevice, pull mode
-    if ( !handle )
-        return 0;
-
-    bytesAvailable = bytesReady();
-
-    if (bytesAvailable < 0) {
-        // bytesAvailable as negative is error code, try to recover from it.
-        xrun_recovery(bytesAvailable);
-        bytesAvailable = bytesReady();
-        if (bytesAvailable < 0) {
-            // recovery failed must stop and set error.
-            close();
-            errorState = QAudio::IOError;
-            deviceState = QAudio::StoppedState;
-            emit stateChanged(deviceState);
-            return 0;
-        }
-    }
-
-    int count=0, err = 0;
-    while(count < 5) {
-        int chunks = bytesAvailable/period_size;
-        int frames = chunks*period_frames;
-        if(frames > (int)buffer_frames)
-            frames = buffer_frames;
-        int readFrames = snd_pcm_readi(handle, audioBuffer, frames);
-        if (readFrames >= 0) {
-            err = snd_pcm_frames_to_bytes(handle, readFrames);
-#ifdef DEBUG_AUDIO
-            qDebug()<<QString::fromLatin1("read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData();
-#endif
-            break;
-        } else if((readFrames == -EAGAIN) || (readFrames == -EINTR)) {
-            errorState = QAudio::IOError;
-            err = 0;
-            break;
-        } else {
-            if(readFrames == -EPIPE) {
-                errorState = QAudio::UnderrunError;
-                err = snd_pcm_prepare(handle);
-            } else if(readFrames == -ESTRPIPE) {
-                err = snd_pcm_prepare(handle);
-            }
-            if(err != 0) break;
-        }
-        count++;
-    }
-    if(err > 0) {
-        // got some send it onward
-#ifdef DEBUG_AUDIO
-        qDebug()<<"frames to write to QIODevice = "<<
-            snd_pcm_bytes_to_frames( handle, (int)err )<<" ("<<err<<") bytes";
-#endif
-        if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
-            return 0;
-        if (pullMode) {
-            qint64 l = audioSource->write(audioBuffer,err);
-            if(l < 0) {
-                close();
-                errorState = QAudio::IOError;
-                deviceState = QAudio::StoppedState;
-                emit stateChanged(deviceState);
-            } else if(l == 0) {
-                if (deviceState != QAudio::IdleState) {
-                    errorState = QAudio::NoError;
-                    deviceState = QAudio::IdleState;
-                    emit stateChanged(deviceState);
-                }
-            } else {
-                totalTimeValue += err;
-                resuming = false;
-                if (deviceState != QAudio::ActiveState) {
-                    errorState = QAudio::NoError;
-                    deviceState = QAudio::ActiveState;
-                    emit stateChanged(deviceState);
-                }
-            }
-            return l;
-
-        } else {
-            memcpy(data,audioBuffer,err);
-            totalTimeValue += err;
-            resuming = false;
-            if (deviceState != QAudio::ActiveState) {
-                errorState = QAudio::NoError;
-                deviceState = QAudio::ActiveState;
-                emit stateChanged(deviceState);
-            }
-            return err;
-        }
-    }
-    return 0;
-}
-
-void QAudioInputPrivate::resume()
-{
-    if(deviceState == QAudio::SuspendedState) {
-        int err = 0;
-
-        if(handle) {
-            err = snd_pcm_prepare( handle );
-            if(err < 0)
-                xrun_recovery(err);
-
-            err = snd_pcm_start(handle);
-            if(err < 0)
-                xrun_recovery(err);
-
-            bytesAvailable = buffer_size;
-        }
-        resuming = true;
-        deviceState = QAudio::ActiveState;
-        int chunks = buffer_size/period_size;
-        timer->start(period_time*chunks/2000);
-        emit stateChanged(deviceState);
-    }
-}
-
-void QAudioInputPrivate::setBufferSize(int value)
-{
-    buffer_size = value;
-}
-
-int QAudioInputPrivate::bufferSize() const
-{
-    return buffer_size;
-}
-
-int QAudioInputPrivate::periodSize() const
-{
-    return period_size;
-}
-
-void QAudioInputPrivate::setNotifyInterval(int ms)
-{
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
-}
-
-int QAudioInputPrivate::notifyInterval() const
-{
-    return intervalTime;
-}
-
-qint64 QAudioInputPrivate::processedUSecs() const
-{
-    qint64 result = qint64(1000000) * totalTimeValue /
-        (settings.channels()*(settings.sampleSize()/8)) /
-        settings.frequency();
-
-    return result;
-}
-
-void QAudioInputPrivate::suspend()
-{
-    if(deviceState == QAudio::ActiveState||resuming) {
-        timer->stop();
-        deviceState = QAudio::SuspendedState;
-        emit stateChanged(deviceState);
-    }
-}
-
-void QAudioInputPrivate::userFeed()
-{
-    if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
-        return;
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :userFeed() IN";
-#endif
-    deviceReady();
-}
-
-bool QAudioInputPrivate::deviceReady()
-{
-    if(pullMode) {
-        // reads some audio data and writes it to QIODevice
-        read(0,0);
-    } else {
-        // emits readyRead() so user will call read() on QIODevice to get some audio data
-        InputPrivate* a = qobject_cast<InputPrivate*>(audioSource);
-        a->trigger();
-    }
-    bytesAvailable = bytesReady();
-
-    if(deviceState != QAudio::ActiveState)
-        return true;
-
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
-        emit notify();
-        elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
-        timeStamp.restart();
-    }
-    return true;
-}
-
-qint64 QAudioInputPrivate::elapsedUSecs() const
-{
-    if (deviceState == QAudio::StoppedState)
-        return 0;
-
-    return clockStamp.elapsed()*1000;
-}
-
-void QAudioInputPrivate::reset()
-{
-    if(handle)
-        snd_pcm_reset(handle);
-}
-
-void QAudioInputPrivate::drain()
-{
-    if(handle)
-        snd_pcm_drain(handle);
-}
-
-InputPrivate::InputPrivate(QAudioInputPrivate* audio)
-{
-    audioDevice = qobject_cast<QAudioInputPrivate*>(audio);
-}
-
-InputPrivate::~InputPrivate()
-{
-}
-
-qint64 InputPrivate::readData( char* data, qint64 len)
-{
-    return audioDevice->read(data,len);
-}
-
-qint64 InputPrivate::writeData(const char* data, qint64 len)
-{
-    Q_UNUSED(data)
-    Q_UNUSED(len)
-    return 0;
-}
-
-void InputPrivate::trigger()
-{
-    emit readyRead();
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudioinput_alsa_p.h b/src/multimedia/audio/qaudioinput_alsa_p.h
deleted file mode 100644
index c907019..0000000
--- a/src/multimedia/audio/qaudioinput_alsa_p.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#ifndef QAUDIOINPUTALSA_H
-#define QAUDIOINPUTALSA_H
-
-#include <alsa/asoundlib.h>
-
-#include <QtCore/qfile.h>
-#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qelapsedtimer.h>
-#include <QtCore/qdatetime.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-
-QT_BEGIN_NAMESPACE
-
-class InputPrivate;
-
-class QAudioInputPrivate : public QAbstractAudioInput
-{
-    Q_OBJECT
-public:
-    QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
-    ~QAudioInputPrivate();
-
-    qint64 read(char* data, qint64 len);
-
-    QIODevice* start(QIODevice* device = 0);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-    int bytesReady() const;
-    int periodSize() const;
-    void setBufferSize(int value);
-    int bufferSize() const;
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-    QAudio::Error error() const;
-    QAudio::State state() const;
-    QAudioFormat format() const;
-    bool resuming;
-    snd_pcm_t* handle;
-    qint64 totalTimeValue;
-    QIODevice* audioSource;
-    QAudioFormat settings;
-    QAudio::Error errorState;
-    QAudio::State deviceState;
-
-private slots:
-    void userFeed();
-    bool deviceReady();
-
-private:
-    int xrun_recovery(int err);
-    int setFormat();
-    bool open();
-    void close();
-    void drain();
-
-    QTimer* timer;
-    QElapsedTimer timeStamp;
-    QElapsedTimer clockStamp;
-    qint64 elapsedTimeOffset;
-    int intervalTime;
-    char* audioBuffer;
-    int bytesAvailable;
-    QByteArray m_device;
-    bool pullMode;
-    int buffer_size;
-    int period_size;
-    unsigned int buffer_time;
-    unsigned int period_time;
-    snd_pcm_uframes_t buffer_frames;
-    snd_pcm_uframes_t period_frames;
-    snd_async_handler_t* ahandler;
-    snd_pcm_access_t access;
-    snd_pcm_format_t pcmformat;
-    snd_timestamp_t* timestamp;
-    snd_pcm_hw_params_t *hwparams;
-};
-
-class InputPrivate : public QIODevice
-{
-    Q_OBJECT
-public:
-    InputPrivate(QAudioInputPrivate* audio);
-    ~InputPrivate();
-
-    qint64 readData( char* data, qint64 len);
-    qint64 writeData(const char* data, qint64 len);
-
-    void trigger();
-private:
-    QAudioInputPrivate *audioDevice;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudioinput_mac_p.cpp b/src/multimedia/audio/qaudioinput_mac_p.cpp
deleted file mode 100644
index cb65f6e..0000000
--- a/src/multimedia/audio/qaudioinput_mac_p.cpp
+++ /dev/null
@@ -1,956 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qendian.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qdebug.h>
-
-#include <QtMultimedia/qaudioinput.h>
-
-#include "qaudio_mac_p.h"
-#include "qaudioinput_mac_p.h"
-#include "qaudiodeviceinfo_mac_p.h"
-
-QT_BEGIN_NAMESPACE
-
-
-namespace QtMultimediaInternal
-{
-
-static const int default_buffer_size = 4 * 1024;
-
-class QAudioBufferList
-{
-public:
-    QAudioBufferList(AudioStreamBasicDescription const& streamFormat):
-        owner(false),
-        sf(streamFormat)
-    {
-        const bool isInterleaved = (sf.mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0;
-        const int numberOfBuffers = isInterleaved ? 1 : sf.mChannelsPerFrame;
-
-        dataSize = 0;
-
-        bfs = reinterpret_cast<AudioBufferList*>(qMalloc(sizeof(AudioBufferList) +
-                                                                (sizeof(AudioBuffer) * numberOfBuffers)));
-
-        bfs->mNumberBuffers = numberOfBuffers;
-        for (int i = 0; i < numberOfBuffers; ++i) {
-            bfs->mBuffers[i].mNumberChannels = isInterleaved ? numberOfBuffers : 1;
-            bfs->mBuffers[i].mDataByteSize = 0;
-            bfs->mBuffers[i].mData = 0;
-        }
-    }
-
-    QAudioBufferList(AudioStreamBasicDescription const& streamFormat, char* buffer, int bufferSize):
-        owner(false),
-        sf(streamFormat),
-        bfs(0)
-    {
-        dataSize = bufferSize;
-
-        bfs = reinterpret_cast<AudioBufferList*>(qMalloc(sizeof(AudioBufferList) + sizeof(AudioBuffer)));
-
-        bfs->mNumberBuffers = 1;
-        bfs->mBuffers[0].mNumberChannels = 1;
-        bfs->mBuffers[0].mDataByteSize = dataSize;
-        bfs->mBuffers[0].mData = buffer;
-    }
-
-    QAudioBufferList(AudioStreamBasicDescription const& streamFormat, int framesToBuffer):
-        owner(true),
-        sf(streamFormat),
-        bfs(0)
-    {
-        const bool isInterleaved = (sf.mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0;
-        const int numberOfBuffers = isInterleaved ? 1 : sf.mChannelsPerFrame;
-
-        dataSize = framesToBuffer * sf.mBytesPerFrame;
-
-        bfs = reinterpret_cast<AudioBufferList*>(qMalloc(sizeof(AudioBufferList) +
-                                                                (sizeof(AudioBuffer) * numberOfBuffers)));
-        bfs->mNumberBuffers = numberOfBuffers;
-        for (int i = 0; i < numberOfBuffers; ++i) {
-            bfs->mBuffers[i].mNumberChannels = isInterleaved ? numberOfBuffers : 1;
-            bfs->mBuffers[i].mDataByteSize = dataSize;
-            bfs->mBuffers[i].mData = qMalloc(dataSize);
-        }
-    }
-
-    ~QAudioBufferList()
-    {
-        if (owner) {
-            for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i)
-                qFree(bfs->mBuffers[i].mData);
-        }
-
-        qFree(bfs);
-    }
-
-    AudioBufferList* audioBufferList() const
-    {
-        return bfs;
-    }
-
-    char* data(int buffer = 0) const
-    {
-        return static_cast<char*>(bfs->mBuffers[buffer].mData);
-    }
-
-    qint64 bufferSize(int buffer = 0) const
-    {
-        return bfs->mBuffers[buffer].mDataByteSize;
-    }
-
-    int frameCount(int buffer = 0) const
-    {
-        return bfs->mBuffers[buffer].mDataByteSize / sf.mBytesPerFrame;
-    }
-
-    int packetCount(int buffer = 0) const
-    {
-        return bfs->mBuffers[buffer].mDataByteSize / sf.mBytesPerPacket;
-    }
-
-    int packetSize() const
-    {
-        return sf.mBytesPerPacket;
-    }
-
-    void reset()
-    {
-        for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i) {
-            bfs->mBuffers[i].mDataByteSize = dataSize;
-            bfs->mBuffers[i].mData = 0;
-        }
-    }
-
-private:
-    bool    owner;
-    int     dataSize;
-    AudioStreamBasicDescription sf;
-    AudioBufferList* bfs;
-};
-
-class QAudioPacketFeeder
-{
-public:
-    QAudioPacketFeeder(QAudioBufferList* abl):
-        audioBufferList(abl)
-    {
-        totalPackets = audioBufferList->packetCount();
-        position = 0;
-    }
-
-    bool feed(AudioBufferList& dst, UInt32& packetCount)
-    {
-        if (position == totalPackets) {
-            dst.mBuffers[0].mDataByteSize = 0;
-            packetCount = 0;
-            return false;
-        }
-
-        if (totalPackets - position < packetCount)
-            packetCount = totalPackets - position;
-
-        dst.mBuffers[0].mDataByteSize = packetCount * audioBufferList->packetSize();
-        dst.mBuffers[0].mData = audioBufferList->data() + (position * audioBufferList->packetSize());
-
-        position += packetCount;
-
-        return true;
-    }
-
-private:
-    UInt32 totalPackets;
-    UInt32 position;
-    QAudioBufferList*   audioBufferList;
-};
-
-class QAudioInputBuffer : public QObject
-{
-    Q_OBJECT
-
-public:
-    QAudioInputBuffer(int bufferSize,
-                        int maxPeriodSize,
-                        AudioStreamBasicDescription const& inputFormat,
-                        AudioStreamBasicDescription const& outputFormat,
-                        QObject* parent):
-        QObject(parent),
-        m_deviceError(false),
-        m_audioConverter(0),
-        m_inputFormat(inputFormat),
-        m_outputFormat(outputFormat)
-    {
-        m_maxPeriodSize = maxPeriodSize;
-        m_periodTime = m_maxPeriodSize / m_outputFormat.mBytesPerFrame * 1000 / m_outputFormat.mSampleRate;
-        m_buffer = new QAudioRingBuffer(bufferSize + (bufferSize % maxPeriodSize == 0 ? 0 : maxPeriodSize - (bufferSize % maxPeriodSize)));
-        m_inputBufferList = new QAudioBufferList(m_inputFormat);
-
-        m_flushTimer = new QTimer(this);
-        connect(m_flushTimer, SIGNAL(timeout()), SLOT(flushBuffer()));
-
-        if (toQAudioFormat(inputFormat) != toQAudioFormat(outputFormat)) {
-            if (AudioConverterNew(&m_inputFormat, &m_outputFormat, &m_audioConverter) != noErr) {
-                qWarning() << "QAudioInput: Unable to create an Audio Converter";
-                m_audioConverter = 0;
-            }
-        }
-    }
-
-    ~QAudioInputBuffer()
-    {
-        delete m_buffer;
-    }
-
-    qint64 renderFromDevice(AudioUnit audioUnit,
-                             AudioUnitRenderActionFlags* ioActionFlags,
-                             const AudioTimeStamp* inTimeStamp,
-                             UInt32 inBusNumber,
-                             UInt32 inNumberFrames)
-    {
-        const bool  wasEmpty = m_buffer->used() == 0;
-
-        OSStatus    err;
-        qint64      framesRendered = 0;
-
-        m_inputBufferList->reset();
-        err = AudioUnitRender(audioUnit,
-                                ioActionFlags,
-                                inTimeStamp,
-                                inBusNumber,
-                                inNumberFrames,
-                                m_inputBufferList->audioBufferList());
-
-        if (m_audioConverter != 0) {
-            QAudioPacketFeeder  feeder(m_inputBufferList);
-
-            bool    wecan = true;
-            int     copied = 0;
-
-            const int available = m_buffer->free();
-
-            while (err == noErr && wecan) {
-                QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(available);
-
-                if (region.second > 0) {
-                    AudioBufferList     output;
-                    output.mNumberBuffers = 1;
-                    output.mBuffers[0].mNumberChannels = 1;
-                    output.mBuffers[0].mDataByteSize = region.second;
-                    output.mBuffers[0].mData = region.first;
-
-                    UInt32  packetSize = region.second / m_outputFormat.mBytesPerPacket;
-                    err = AudioConverterFillComplexBuffer(m_audioConverter,
-                                                          converterCallback,
-                                                          &feeder,
-                                                          &packetSize,
-                                                          &output,
-                                                          0);
-
-                    region.second = output.mBuffers[0].mDataByteSize;
-                    copied += region.second;
-
-                    m_buffer->releaseWriteRegion(region);
-                }
-                else
-                    wecan = false;
-            }
-
-            framesRendered += copied / m_outputFormat.mBytesPerFrame;
-        }
-        else {
-            const int available = m_inputBufferList->bufferSize();
-            bool    wecan = true;
-            int     copied = 0;
-
-            while (wecan && copied < available) {
-                QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(available - copied);
-
-                if (region.second > 0) {
-                    memcpy(region.first, m_inputBufferList->data() + copied, region.second);
-                    copied += region.second;
-                }
-                else
-                    wecan = false;
-
-                m_buffer->releaseWriteRegion(region);
-            }
-
-            framesRendered = copied / m_outputFormat.mBytesPerFrame;
-        }
-
-        if (wasEmpty && framesRendered > 0)
-            emit readyRead();
-
-        return framesRendered;
-    }
-
-    qint64 readBytes(char* data, qint64 len)
-    {
-        bool    wecan = true;
-        qint64  bytesCopied = 0;
-
-        len -= len % m_maxPeriodSize;
-        while (wecan && bytesCopied < len) {
-            QAudioRingBuffer::Region region = m_buffer->acquireReadRegion(len - bytesCopied);
-
-            if (region.second > 0) {
-                memcpy(data + bytesCopied, region.first, region.second);
-                bytesCopied += region.second;
-            }
-            else
-                wecan = false;
-
-            m_buffer->releaseReadRegion(region);
-        }
-
-        return bytesCopied;
-    }
-
-    void setFlushDevice(QIODevice* device)
-    {
-        if (m_device != device)
-            m_device = device;
-    }
-
-    void startFlushTimer()
-    {
-        if (m_device != 0) {
-            m_flushTimer->start((m_buffer->size() - (m_maxPeriodSize * 2)) / m_maxPeriodSize * m_periodTime);
-        }
-    }
-
-    void stopFlushTimer()
-    {
-        m_flushTimer->stop();
-    }
-
-    void flush(bool all = false)
-    {
-        if (m_device == 0)
-            return;
-
-        const int used = m_buffer->used();
-        const int readSize = all ? used : used - (used % m_maxPeriodSize);
-
-        if (readSize > 0) {
-            bool    wecan = true;
-            int     flushed = 0;
-
-            while (!m_deviceError && wecan && flushed < readSize) {
-                QAudioRingBuffer::Region region = m_buffer->acquireReadRegion(readSize - flushed);
-
-                if (region.second > 0) {
-                    int bytesWritten = m_device->write(region.first, region.second);
-                    if (bytesWritten < 0) {
-                        stopFlushTimer();
-                        m_deviceError = true;
-                    }
-                    else {
-                        region.second = bytesWritten;
-                        flushed += bytesWritten;
-                        wecan = bytesWritten != 0;
-                    }
-                }
-                else
-                    wecan = false;
-
-                m_buffer->releaseReadRegion(region);
-            }
-        }
-    }
-
-    void reset()
-    {
-        m_buffer->reset();
-        m_deviceError = false;
-    }
-
-    int available() const
-    {
-        return m_buffer->free();
-    }
-
-    int used() const
-    {
-        return m_buffer->used();
-    }
-
-signals:
-    void readyRead();
-
-private slots:
-    void flushBuffer()
-    {
-        flush();
-    }
-
-private:
-    bool        m_deviceError;
-    int         m_maxPeriodSize;
-    int         m_periodTime;
-    QIODevice*  m_device;
-    QTimer*     m_flushTimer;
-    QAudioRingBuffer*   m_buffer;
-    QAudioBufferList*   m_inputBufferList;
-    AudioConverterRef   m_audioConverter;
-    AudioStreamBasicDescription m_inputFormat;
-    AudioStreamBasicDescription m_outputFormat;
-
-    const static OSStatus as_empty = 'qtem';
-
-    // Converter callback
-    static OSStatus converterCallback(AudioConverterRef inAudioConverter,
-                                UInt32* ioNumberDataPackets,
-                                AudioBufferList* ioData,
-                                AudioStreamPacketDescription** outDataPacketDescription,
-                                void* inUserData)
-    {
-        Q_UNUSED(inAudioConverter);
-        Q_UNUSED(outDataPacketDescription);
-
-        QAudioPacketFeeder* feeder = static_cast<QAudioPacketFeeder*>(inUserData);
-
-        if (!feeder->feed(*ioData, *ioNumberDataPackets))
-            return as_empty;
-
-        return noErr;
-    }
-};
-
-
-class MacInputDevice : public QIODevice
-{
-    Q_OBJECT
-
-public:
-    MacInputDevice(QAudioInputBuffer* audioBuffer, QObject* parent):
-        QIODevice(parent),
-        m_audioBuffer(audioBuffer)
-    {
-        open(QIODevice::ReadOnly | QIODevice::Unbuffered);
-        connect(m_audioBuffer, SIGNAL(readyRead()), SIGNAL(readyRead()));
-    }
-
-    qint64 readData(char* data, qint64 len)
-    {
-        return m_audioBuffer->readBytes(data, len);
-    }
-
-    qint64 writeData(const char* data, qint64 len)
-    {
-        Q_UNUSED(data);
-        Q_UNUSED(len);
-
-        return 0;
-    }
-
-    bool isSequential() const
-    {
-        return true;
-    }
-
-private:
-    QAudioInputBuffer*   m_audioBuffer;
-};
-
-}
-
-
-QAudioInputPrivate::QAudioInputPrivate(const QByteArray& device, QAudioFormat const& format):
-    audioFormat(format)
-{
-    QDataStream ds(device);
-    quint32 did, mode;
-
-    ds >> did >> mode;
-
-    if (QAudio::Mode(mode) == QAudio::AudioOutput)
-        errorCode = QAudio::OpenError;
-    else {
-        audioDeviceInfo = new QAudioDeviceInfoInternal(device, QAudio::AudioInput);
-        isOpen = false;
-        audioDeviceId = AudioDeviceID(did);
-        audioUnit = 0;
-        startTime = 0;
-        totalFrames = 0;
-        audioBuffer = 0;
-        internalBufferSize = QtMultimediaInternal::default_buffer_size;
-        clockFrequency = AudioGetHostClockFrequency() / 1000;
-        errorCode = QAudio::NoError;
-        stateCode = QAudio::StoppedState;
-
-        intervalTimer = new QTimer(this);
-        intervalTimer->setInterval(1000);
-        connect(intervalTimer, SIGNAL(timeout()), SIGNAL(notify()));
-    }
-}
-
-QAudioInputPrivate::~QAudioInputPrivate()
-{
-    close();
-    delete audioDeviceInfo;
-}
-
-bool QAudioInputPrivate::open()
-{
-    UInt32  size = 0;
-
-    if (isOpen)
-        return true;
-
-    ComponentDescription    cd;
-    cd.componentType = kAudioUnitType_Output;
-    cd.componentSubType = kAudioUnitSubType_HALOutput;
-    cd.componentManufacturer = kAudioUnitManufacturer_Apple;
-    cd.componentFlags = 0;
-    cd.componentFlagsMask = 0;
-
-    // Open
-    Component cp = FindNextComponent(NULL, &cd);
-    if (cp == 0) {
-        qWarning() << "QAudioInput: Failed to find HAL Output component";
-        return false;
-    }
-
-    if (OpenAComponent(cp, &audioUnit) != noErr) {
-        qWarning() << "QAudioInput: Unable to Open Output Component";
-        return false;
-    }
-
-    // Set mode
-    // switch to input mode
-    UInt32 enable = 1;
-    if (AudioUnitSetProperty(audioUnit,
-                               kAudioOutputUnitProperty_EnableIO,
-                               kAudioUnitScope_Input,
-                               1,
-                               &enable,
-                               sizeof(enable)) != noErr) {
-        qWarning() << "QAudioInput: Unable to switch to input mode (Enable Input)";
-        return false;
-    }
-
-    enable = 0;
-    if (AudioUnitSetProperty(audioUnit,
-                            kAudioOutputUnitProperty_EnableIO,
-                            kAudioUnitScope_Output,
-                            0,
-                            &enable,
-                            sizeof(enable)) != noErr) {
-        qWarning() << "QAudioInput: Unable to switch to input mode (Disable output)";
-        return false;
-    }
-
-    // register callback
-    AURenderCallbackStruct cb;
-    cb.inputProc = inputCallback;
-    cb.inputProcRefCon = this;
-
-    if (AudioUnitSetProperty(audioUnit,
-                               kAudioOutputUnitProperty_SetInputCallback,
-                               kAudioUnitScope_Global,
-                               0,
-                               &cb,
-                               sizeof(cb)) != noErr) {
-        qWarning() << "QAudioInput: Failed to set AudioUnit callback";
-        return false;
-    }
-
-    // Set Audio Device
-    if (AudioUnitSetProperty(audioUnit,
-                                kAudioOutputUnitProperty_CurrentDevice,
-                                kAudioUnitScope_Global,
-                                0,
-                                &audioDeviceId,
-                                sizeof(audioDeviceId)) != noErr) {
-        qWarning() << "QAudioInput: Unable to use configured device";
-        return false;
-    }
-
-    // Set format
-    // Wanted
-    streamFormat = toAudioStreamBasicDescription(audioFormat);
-
-    // Required on unit
-    if (audioFormat == audioDeviceInfo->preferredFormat()) {
-        deviceFormat = streamFormat;
-        AudioUnitSetProperty(audioUnit,
-                               kAudioUnitProperty_StreamFormat,
-                               kAudioUnitScope_Output,
-                               1,
-                               &deviceFormat,
-                               sizeof(deviceFormat));
-    }
-    else {
-        size = sizeof(deviceFormat);
-        if (AudioUnitGetProperty(audioUnit,
-                                    kAudioUnitProperty_StreamFormat,
-                                    kAudioUnitScope_Input,
-                                    1,
-                                    &deviceFormat,
-                                    &size) != noErr) {
-            qWarning() << "QAudioInput: Unable to retrieve device format";
-            return false;
-        }
-
-        if (AudioUnitSetProperty(audioUnit,
-                                   kAudioUnitProperty_StreamFormat,
-                                   kAudioUnitScope_Output,
-                                   1,
-                                   &deviceFormat,
-                                   sizeof(deviceFormat)) != noErr) {
-            qWarning() << "QAudioInput: Unable to set device format";
-            return false;
-        }
-    }
-
-    // Setup buffers
-    UInt32 numberOfFrames;
-    size = sizeof(UInt32);
-    if (AudioUnitGetProperty(audioUnit,
-                                kAudioDevicePropertyBufferFrameSize,
-                                kAudioUnitScope_Global,
-                                0,
-                                &numberOfFrames,
-                                &size) != noErr) {
-        qWarning() << "QAudioInput: Failed to get audio period size";
-        return false;
-    }
-
-    // Allocate buffer
-    periodSizeBytes = numberOfFrames * streamFormat.mBytesPerFrame;
-
-    if (internalBufferSize < periodSizeBytes * 2)
-        internalBufferSize = periodSizeBytes * 2;
-    else
-        internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
-
-    audioBuffer = new QtMultimediaInternal::QAudioInputBuffer(internalBufferSize,
-                                        periodSizeBytes,
-                                        deviceFormat,
-                                        streamFormat,
-                                        this);
-
-    audioIO = new QtMultimediaInternal::MacInputDevice(audioBuffer, this);
-
-    // Init
-    if (AudioUnitInitialize(audioUnit) != noErr) {
-        qWarning() << "QAudioInput: Failed to initialize AudioUnit";
-        return false;
-    }
-
-    isOpen = true;
-
-    return isOpen;
-}
-
-void QAudioInputPrivate::close()
-{
-    if (audioUnit != 0) {
-        AudioOutputUnitStop(audioUnit);
-        AudioUnitUninitialize(audioUnit);
-        CloseComponent(audioUnit);
-    }
-
-    delete audioBuffer;
-}
-
-QAudioFormat QAudioInputPrivate::format() const
-{
-    return audioFormat;
-}
-
-QIODevice* QAudioInputPrivate::start(QIODevice* device)
-{
-    QIODevice*  op = device;
-
-    if (!audioFormat.isValid() || !open()) {
-        stateCode = QAudio::StoppedState;
-        errorCode = QAudio::OpenError;
-        return audioIO;
-    }
-
-    reset();
-    audioBuffer->reset();
-    audioBuffer->setFlushDevice(op);
-
-    if (op == 0)
-        op = audioIO;
-
-    // Start
-    startTime = AudioGetCurrentHostTime();
-    totalFrames = 0;
-
-    audioThreadStart();
-
-    stateCode = QAudio::ActiveState;
-    errorCode = QAudio::NoError;
-    emit stateChanged(stateCode);
-
-    return op;
-}
-
-void QAudioInputPrivate::stop()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode != QAudio::StoppedState) {
-        audioThreadStop();
-        audioBuffer->flush(true);
-
-        errorCode = QAudio::NoError;
-        stateCode = QAudio::StoppedState;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-void QAudioInputPrivate::reset()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode != QAudio::StoppedState) {
-        audioThreadStop();
-
-        errorCode = QAudio::NoError;
-        stateCode = QAudio::StoppedState;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-void QAudioInputPrivate::suspend()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::ActiveState || stateCode == QAudio::IdleState) {
-        audioThreadStop();
-
-        errorCode = QAudio::NoError;
-        stateCode = QAudio::SuspendedState;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-void QAudioInputPrivate::resume()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::SuspendedState) {
-        audioThreadStart();
-
-        errorCode = QAudio::NoError;
-        stateCode = QAudio::ActiveState;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-int QAudioInputPrivate::bytesReady() const
-{
-    return audioBuffer->used();
-}
-
-int QAudioInputPrivate::periodSize() const
-{
-    return periodSizeBytes;
-}
-
-void QAudioInputPrivate::setBufferSize(int bs)
-{
-    internalBufferSize = bs;
-}
-
-int QAudioInputPrivate::bufferSize() const
-{
-    return internalBufferSize;
-}
-
-void QAudioInputPrivate::setNotifyInterval(int milliSeconds)
-{
-    if (intervalTimer->interval() == milliSeconds)
-        return;
-
-    if (milliSeconds <= 0)
-        milliSeconds = 0;
-
-    intervalTimer->setInterval(milliSeconds);
-}
-
-int QAudioInputPrivate::notifyInterval() const
-{
-    return intervalTimer->interval();
-}
-
-qint64 QAudioInputPrivate::processedUSecs() const
-{
-    return totalFrames * 1000000 / audioFormat.frequency();
-}
-
-qint64 QAudioInputPrivate::elapsedUSecs() const
-{
-    if (stateCode == QAudio::StoppedState)
-        return 0;
-
-    return (AudioGetCurrentHostTime() - startTime) / (clockFrequency / 1000);
-}
-
-QAudio::Error QAudioInputPrivate::error() const
-{
-    return errorCode;
-}
-
-QAudio::State QAudioInputPrivate::state() const
-{
-    return stateCode;
-}
-
-void QAudioInputPrivate::audioThreadStop()
-{
-    stopTimers();
-    if (audioThreadState.testAndSetAcquire(Running, Stopped))
-        threadFinished.wait(&mutex);
-}
-
-void QAudioInputPrivate::audioThreadStart()
-{
-    startTimers();
-    audioThreadState = Running;
-    AudioOutputUnitStart(audioUnit);
-}
-
-void QAudioInputPrivate::audioDeviceStop()
-{
-    AudioOutputUnitStop(audioUnit);
-    audioThreadState = Stopped;
-    threadFinished.wakeOne();
-}
-
-void QAudioInputPrivate::audioDeviceFull()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::ActiveState) {
-        audioDeviceStop();
-
-        errorCode = QAudio::UnderrunError;
-        stateCode = QAudio::IdleState;
-        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
-    }
-}
-
-void QAudioInputPrivate::audioDeviceError()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::ActiveState) {
-        audioDeviceStop();
-
-        errorCode = QAudio::IOError;
-        stateCode = QAudio::StoppedState;
-        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
-    }
-}
-
-void QAudioInputPrivate::startTimers()
-{
-    audioBuffer->startFlushTimer();
-    if (intervalTimer->interval() > 0)
-        intervalTimer->start();
-}
-
-void QAudioInputPrivate::stopTimers()
-{
-    audioBuffer->stopFlushTimer();
-    intervalTimer->stop();
-}
-
-void QAudioInputPrivate::deviceStopped()
-{
-    stopTimers();
-    emit stateChanged(stateCode);
-}
-
-// Input callback
-OSStatus QAudioInputPrivate::inputCallback(void* inRefCon,
-                                AudioUnitRenderActionFlags* ioActionFlags,
-                                const AudioTimeStamp* inTimeStamp,
-                                UInt32 inBusNumber,
-                                UInt32 inNumberFrames,
-                                AudioBufferList* ioData)
-{
-    Q_UNUSED(ioData);
-
-    QAudioInputPrivate* d = static_cast<QAudioInputPrivate*>(inRefCon);
-
-    const int threadState = d->audioThreadState.fetchAndAddAcquire(0);
-    if (threadState == Stopped)
-        d->audioDeviceStop();
-    else {
-        qint64      framesWritten;
-
-        framesWritten = d->audioBuffer->renderFromDevice(d->audioUnit,
-                                                         ioActionFlags,
-                                                         inTimeStamp,
-                                                         inBusNumber,
-                                                         inNumberFrames);
-
-        if (framesWritten > 0)
-            d->totalFrames += framesWritten;
-        else if (framesWritten == 0)
-            d->audioDeviceFull();
-        else if (framesWritten < 0)
-            d->audioDeviceError();
-    }
-
-    return noErr;
-}
-
-
-QT_END_NAMESPACE
-
-#include "qaudioinput_mac_p.moc"
-
diff --git a/src/multimedia/audio/qaudioinput_mac_p.h b/src/multimedia/audio/qaudioinput_mac_p.h
deleted file mode 100644
index 7aa4168..0000000
--- a/src/multimedia/audio/qaudioinput_mac_p.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#ifndef QAUDIOINPUT_MAC_P_H
-#define QAUDIOINPUT_MAC_P_H
-
-#include <CoreServices/CoreServices.h>
-#include <CoreAudio/CoreAudio.h>
-#include <AudioUnit/AudioUnit.h>
-#include <AudioToolbox/AudioToolbox.h>
-
-#include <QtCore/qobject.h>
-#include <QtCore/qmutex.h>
-#include <QtCore/qwaitcondition.h>
-#include <QtCore/qatomic.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudioengine.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QTimer;
-class QIODevice;
-class QAbstractAudioDeviceInfo;
-
-namespace QtMultimediaInternal
-{
-class QAudioInputBuffer;
-}
-
-class QAudioInputPrivate : public QAbstractAudioInput
-{
-    Q_OBJECT
-
-public:
-    bool            isOpen;
-    int             periodSizeBytes;
-    int             internalBufferSize;
-    qint64          totalFrames;
-    QAudioFormat    audioFormat;
-    QIODevice*      audioIO;
-    AudioUnit       audioUnit;
-    AudioDeviceID   audioDeviceId;
-    Float64         clockFrequency;
-    UInt64          startTime;
-    QAudio::Error   errorCode;
-    QAudio::State   stateCode;
-    QtMultimediaInternal::QAudioInputBuffer*   audioBuffer;
-    QMutex          mutex;
-    QWaitCondition  threadFinished;
-    QAtomicInt      audioThreadState;
-    QTimer*         intervalTimer;
-    AudioStreamBasicDescription streamFormat;
-    AudioStreamBasicDescription deviceFormat;
-    QAbstractAudioDeviceInfo *audioDeviceInfo;
-
-    QAudioInputPrivate(const QByteArray& device, QAudioFormat const& format);
-    ~QAudioInputPrivate();
-
-    bool open();
-    void close();
-
-    QAudioFormat format() const;
-
-    QIODevice* start(QIODevice* device);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-    void idle();
-
-    int bytesReady() const;
-    int periodSize() const;
-
-    void setBufferSize(int value);
-    int bufferSize() const;
-
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-
-    QAudio::Error error() const;
-    QAudio::State state() const;
-
-    void audioThreadStart();
-    void audioThreadStop();
-
-    void audioDeviceStop();
-    void audioDeviceFull();
-    void audioDeviceError();
-
-    void startTimers();
-    void stopTimers();
-
-private slots:
-    void deviceStopped();
-
-private:
-    enum { Running, Stopped };
-
-    // Input callback
-    static OSStatus inputCallback(void* inRefCon,
-                                    AudioUnitRenderActionFlags* ioActionFlags,
-                                    const AudioTimeStamp* inTimeStamp,
-                                    UInt32 inBusNumber,
-                                    UInt32 inNumberFrames,
-                                    AudioBufferList* ioData);
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QAUDIOINPUT_MAC_P_H
diff --git a/src/multimedia/audio/qaudioinput_symbian_p.cpp b/src/multimedia/audio/qaudioinput_symbian_p.cpp
deleted file mode 100644
index 52daa88..0000000
--- a/src/multimedia/audio/qaudioinput_symbian_p.cpp
+++ /dev/null
@@ -1,594 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qaudioinput_symbian_p.h"
-
-QT_BEGIN_NAMESPACE
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-const int PushInterval = 50; // ms
-
-
-//-----------------------------------------------------------------------------
-// Private class
-//-----------------------------------------------------------------------------
-
-SymbianAudioInputPrivate::SymbianAudioInputPrivate(
-                              QAudioInputPrivate *audioDevice)
-    :   m_audioDevice(audioDevice)
-{
-
-}
-
-SymbianAudioInputPrivate::~SymbianAudioInputPrivate()
-{
-
-}
-
-qint64 SymbianAudioInputPrivate::readData(char *data, qint64 len)
-{
-    qint64 totalRead = 0;
-
-    if (m_audioDevice->state() == QAudio::ActiveState ||
-        m_audioDevice->state() == QAudio::IdleState) {
-
-        while (totalRead < len) {
-            const qint64 read = m_audioDevice->read(data + totalRead,
-                                                    len - totalRead);
-            if (read > 0)
-                totalRead += read;
-            else
-                break;
-        }
-    }
-
-    return totalRead;
-}
-
-qint64 SymbianAudioInputPrivate::writeData(const char *data, qint64 len)
-{
-    Q_UNUSED(data)
-    Q_UNUSED(len)
-    return 0;
-}
-
-void SymbianAudioInputPrivate::dataReady()
-{
-    emit readyRead();
-}
-
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device,
-                                     const QAudioFormat &format)
-    :   m_device(device)
-    ,   m_format(format)
-    ,   m_clientBufferSize(SymbianAudio::DefaultBufferSize)
-    ,   m_notifyInterval(SymbianAudio::DefaultNotifyInterval)
-    ,   m_notifyTimer(new QTimer(this))
-    ,   m_error(QAudio::NoError)
-    ,   m_internalState(SymbianAudio::ClosedState)
-    ,   m_externalState(QAudio::StoppedState)
-    ,   m_pullMode(false)
-    ,   m_sink(0)
-    ,   m_pullTimer(new QTimer(this))
-    ,   m_devSoundBuffer(0)
-    ,   m_devSoundBufferSize(0)
-    ,   m_totalBytesReady(0)
-    ,   m_devSoundBufferPos(0)
-    ,   m_totalSamplesRecorded(0)
-{
-    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
-
-    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
-                                          m_nativeFormat);
-
-    m_pullTimer->setInterval(PushInterval);
-    connect(m_pullTimer.data(), SIGNAL(timeout()), this, SLOT(pullData()));
-}
-
-QAudioInputPrivate::~QAudioInputPrivate()
-{
-    close();
-}
-
-QIODevice* QAudioInputPrivate::start(QIODevice *device)
-{
-    stop();
-
-    open();
-    if (SymbianAudio::ClosedState != m_internalState) {
-        if (device) {
-            m_pullMode = true;
-            m_sink = device;
-        } else {
-            m_sink = new SymbianAudioInputPrivate(this);
-            m_sink->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
-        }
-
-        m_elapsed.restart();
-    }
-
-    return m_sink;
-}
-
-void QAudioInputPrivate::stop()
-{
-    close();
-}
-
-void QAudioInputPrivate::reset()
-{
-    m_totalSamplesRecorded += getSamplesRecorded();
-    m_devSound->Stop();
-    startRecording();
-}
-
-void QAudioInputPrivate::suspend()
-{
-    if (SymbianAudio::ActiveState == m_internalState
-        || SymbianAudio::IdleState == m_internalState) {
-        m_notifyTimer->stop();
-        m_pullTimer->stop();
-        m_devSound->Pause();
-        const qint64 samplesRecorded = getSamplesRecorded();
-        m_totalSamplesRecorded += samplesRecorded;
-
-        if (m_devSoundBuffer) {
-            m_devSoundBufferQ.append(m_devSoundBuffer);
-            m_devSoundBuffer = 0;
-        }
-
-        setState(SymbianAudio::SuspendedState);
-    }
-}
-
-void QAudioInputPrivate::resume()
-{
-    if (SymbianAudio::SuspendedState == m_internalState)
-        startDataTransfer();
-}
-
-int QAudioInputPrivate::bytesReady() const
-{
-    Q_ASSERT(m_devSoundBufferPos <= m_totalBytesReady);
-    return m_totalBytesReady - m_devSoundBufferPos;
-}
-
-int QAudioInputPrivate::periodSize() const
-{
-    return bufferSize();
-}
-
-void QAudioInputPrivate::setBufferSize(int value)
-{
-    // Note that DevSound does not allow its client to specify the buffer size.
-    // This functionality is available via custom interfaces, but since these
-    // cannot be guaranteed to work across all DevSound implementations, we
-    // do not use them here.
-    // In order to comply with the expected bevahiour of QAudioInput, we store
-    // the value and return it from bufferSize(), but the underlying DevSound
-    // buffer size remains unchanged.
-    if (value > 0)
-        m_clientBufferSize = value;
-}
-
-int QAudioInputPrivate::bufferSize() const
-{
-    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
-}
-
-void QAudioInputPrivate::setNotifyInterval(int ms)
-{
-    if (ms > 0) {
-        const int oldNotifyInterval = m_notifyInterval;
-        m_notifyInterval = ms;
-        if (m_notifyTimer->isActive() && ms != oldNotifyInterval)
-            m_notifyTimer->start(m_notifyInterval);
-    }
-}
-
-int QAudioInputPrivate::notifyInterval() const
-{
-    return m_notifyInterval;
-}
-
-qint64 QAudioInputPrivate::processedUSecs() const
-{
-    int samplesPlayed = 0;
-    if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
-        samplesPlayed = getSamplesRecorded();
-
-    // Protect against division by zero
-    Q_ASSERT_X(m_format.frequency() > 0, Q_FUNC_INFO, "Invalid frequency");
-
-    const qint64 result = qint64(1000000) *
-                          (samplesPlayed + m_totalSamplesRecorded)
-                        / m_format.frequency();
-
-    return result;
-}
-
-qint64 QAudioInputPrivate::elapsedUSecs() const
-{
-    const qint64 result = (QAudio::StoppedState == state()) ?
-                              0 : m_elapsed.elapsed() * 1000;
-    return result;
-}
-
-QAudio::Error QAudioInputPrivate::error() const
-{
-    return m_error;
-}
-
-QAudio::State QAudioInputPrivate::state() const
-{
-    return m_externalState;
-}
-
-QAudioFormat QAudioInputPrivate::format() const
-{
-    return m_format;
-}
-
-//-----------------------------------------------------------------------------
-// MDevSoundObserver implementation
-//-----------------------------------------------------------------------------
-
-void QAudioInputPrivate::InitializeComplete(TInt aError)
-{
-    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
-        Q_FUNC_INFO, "Invalid state");
-
-    if (KErrNone == aError)
-        startRecording();
-}
-
-void QAudioInputPrivate::ToneFinished(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound's tone playback functions, so should
-    // never receive this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioInputPrivate::BufferToBeFilled(CMMFBuffer *aBuffer)
-{
-    Q_UNUSED(aBuffer)
-    // This class doesn't use DevSound in play mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioInputPrivate::PlayError(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound in play mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioInputPrivate::BufferToBeEmptied(CMMFBuffer *aBuffer)
-{
-    // Following receipt of this callback, DevSound should not provide another
-    // buffer until we have returned the current one.
-    Q_ASSERT_X(!m_devSoundBuffer, Q_FUNC_INFO, "Buffer already held");
-
-    CMMFDataBuffer *const buffer = static_cast<CMMFDataBuffer*>(aBuffer);
-
-    if (!m_devSoundBufferSize)
-        m_devSoundBufferSize = buffer->Data().MaxLength();
-
-    m_totalBytesReady += buffer->Data().Length();
-
-    if (SymbianAudio::SuspendedState == m_internalState) {
-        m_devSoundBufferQ.append(buffer);
-    } else {
-        // Will be returned to DevSound by bufferEmptied().
-        m_devSoundBuffer = buffer;
-        m_devSoundBufferPos = 0;
-
-        if (bytesReady() && !m_pullMode)
-            pushData();
-    }
-}
-
-void QAudioInputPrivate::RecordError(TInt aError)
-{
-    Q_UNUSED(aError)
-    setError(QAudio::IOError);
-}
-
-void QAudioInputPrivate::ConvertError(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound's format conversion functions, so
-    // should never receive this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioInputPrivate::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
-{
-    Q_UNUSED(aMessageType)
-    Q_UNUSED(aMsg)
-    // Ignore this callback.
-}
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-void QAudioInputPrivate::open()
-{
-    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
-        Q_FUNC_INFO, "DevSound already opened");
-
-    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
-
-    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
-        new SymbianAudio::DevSoundCapabilities(*m_devSound, QAudio::AudioInput));
-
-    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
-                  KErrNone : KErrNotSupported;
-
-    if (KErrNone == err) {
-        setState(SymbianAudio::InitializingState);
-        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
-                                          EMMFStateRecording));
-    }
-
-    if (KErrNone != err) {
-        setError(QAudio::OpenError);
-        m_devSound.reset();
-    }
-}
-
-void QAudioInputPrivate::startRecording()
-{
-    const int samplesRecorded = m_devSound->SamplesRecorded();
-    Q_ASSERT(samplesRecorded == 0);
-
-    TRAPD(err, startDevSoundL());
-    if (KErrNone == err) {
-        startDataTransfer();
-    } else {
-        setError(QAudio::OpenError);
-        close();
-    }
-}
-
-void QAudioInputPrivate::startDevSoundL()
-{
-    TMMFCapabilities nativeFormat = m_devSound->Config();
-    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
-    m_devSound->SetConfigL(m_nativeFormat);
-    m_devSound->RecordInitL();
-}
-
-void QAudioInputPrivate::startDataTransfer()
-{
-    m_notifyTimer->start(m_notifyInterval);
-
-    if (m_pullMode)
-        m_pullTimer->start();
-
-    if (bytesReady()) {
-        setState(SymbianAudio::ActiveState);
-        if (!m_pullMode)
-            pushData();
-    } else {
-        if (SymbianAudio::SuspendedState == m_internalState)
-            setState(SymbianAudio::ActiveState);
-        else
-            setState(SymbianAudio::IdleState);
-    }
-}
-
-CMMFDataBuffer* QAudioInputPrivate::currentBuffer() const
-{
-    CMMFDataBuffer *result = m_devSoundBuffer;
-    if (!result && !m_devSoundBufferQ.empty())
-        result = m_devSoundBufferQ.front();
-    return result;
-}
-
-void QAudioInputPrivate::pushData()
-{
-    Q_ASSERT_X(bytesReady(), Q_FUNC_INFO, "No data available");
-    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO, "pushData called when in pull mode");
-    qobject_cast<SymbianAudioInputPrivate *>(m_sink)->dataReady();
-}
-
-qint64 QAudioInputPrivate::read(char *data, qint64 len)
-{
-    // SymbianAudioInputPrivate is ready to read data
-
-    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO,
-        "read called when in pull mode");
-
-    qint64 bytesRead = 0;
-
-    CMMFDataBuffer *buffer = 0;
-    while ((buffer = currentBuffer()) && (bytesRead < len)) {
-        if (SymbianAudio::IdleState == m_internalState)
-            setState(SymbianAudio::ActiveState);
-
-        TDesC8 &inputBuffer = buffer->Data();
-
-        const qint64 inputBytes = bytesReady();
-        const qint64 outputBytes = len - bytesRead;
-        const qint64 copyBytes = outputBytes < inputBytes ?
-                                     outputBytes : inputBytes;
-
-        memcpy(data, inputBuffer.Ptr() + m_devSoundBufferPos, copyBytes);
-
-        m_devSoundBufferPos += copyBytes;
-        data += copyBytes;
-        bytesRead += copyBytes;
-
-        if (!bytesReady())
-            bufferEmptied();
-    }
-
-    return bytesRead;
-}
-
-void QAudioInputPrivate::pullData()
-{
-    Q_ASSERT_X(m_pullMode, Q_FUNC_INFO,
-        "pullData called when in push mode");
-
-    CMMFDataBuffer *buffer = 0;
-    while (buffer = currentBuffer()) {
-        if (SymbianAudio::IdleState == m_internalState)
-            setState(SymbianAudio::ActiveState);
-
-        TDesC8 &inputBuffer = buffer->Data();
-
-        const qint64 inputBytes = bytesReady();
-        const qint64 bytesPushed = m_sink->write(
-            (char*)inputBuffer.Ptr() + m_devSoundBufferPos, inputBytes);
-
-        m_devSoundBufferPos += bytesPushed;
-
-        if (!bytesReady())
-            bufferEmptied();
-
-        if (!bytesPushed)
-            break;
-    }
-}
-
-void QAudioInputPrivate::bufferEmptied()
-{
-    m_devSoundBufferPos = 0;
-
-    if (m_devSoundBuffer) {
-        m_totalBytesReady -= m_devSoundBuffer->Data().Length();
-        m_devSoundBuffer = 0;
-        m_devSound->RecordData();
-    } else {
-        Q_ASSERT(!m_devSoundBufferQ.empty());
-        m_totalBytesReady -= m_devSoundBufferQ.front()->Data().Length();
-        m_devSoundBufferQ.erase(m_devSoundBufferQ.begin());
-
-        // If the queue has been emptied, resume transfer from the hardware
-        if (m_devSoundBufferQ.empty())
-            m_devSound->RecordInitL();
-    }
-
-    Q_ASSERT(m_totalBytesReady >= 0);
-}
-
-void QAudioInputPrivate::close()
-{
-    m_notifyTimer->stop();
-    m_pullTimer->stop();
-
-    m_error = QAudio::NoError;
-
-    if (m_devSound)
-        m_devSound->Stop();
-    m_devSound.reset();
-    m_devSoundBuffer = 0;
-    m_devSoundBufferSize = 0;
-    m_totalBytesReady = 0;
-
-    if (!m_pullMode) // m_sink is owned
-        delete m_sink;
-    m_pullMode = false;
-    m_sink = 0;
-
-    m_devSoundBufferQ.clear();
-    m_devSoundBufferPos = 0;
-    m_totalSamplesRecorded = 0;
-
-    setState(SymbianAudio::ClosedState);
-}
-
-qint64 QAudioInputPrivate::getSamplesRecorded() const
-{
-    qint64 result = 0;
-    if (m_devSound)
-        result = qint64(m_devSound->SamplesRecorded());
-    return result;
-}
-
-void QAudioInputPrivate::setError(QAudio::Error error)
-{
-    m_error = error;
-
-    // Although no state transition actually occurs here, a stateChanged event
-    // must be emitted to inform the client that the call to start() was
-    // unsuccessful.
-    if (QAudio::OpenError == error)
-        emit stateChanged(QAudio::StoppedState);
-
-    // Close the DevSound instance.  This causes a transition to StoppedState.
-    // This must be done asynchronously in case the current function was called
-    // from a DevSound event handler, in which case deleting the DevSound
-    // instance may cause an exception.
-    QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection);
-}
-
-void QAudioInputPrivate::setState(SymbianAudio::State newInternalState)
-{
-    const QAudio::State oldExternalState = m_externalState;
-    m_internalState = newInternalState;
-    m_externalState = SymbianAudio::Utils::stateNativeToQt(
-                            m_internalState, initializingState());
-
-    if (m_externalState != oldExternalState)
-        emit stateChanged(m_externalState);
-}
-
-QAudio::State QAudioInputPrivate::initializingState() const
-{
-    return QAudio::IdleState;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudioinput_symbian_p.h b/src/multimedia/audio/qaudioinput_symbian_p.h
deleted file mode 100644
index ca3ccf7..0000000
--- a/src/multimedia/audio/qaudioinput_symbian_p.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIOINPUT_SYMBIAN_P_H
-#define QAUDIOINPUT_SYMBIAN_P_H
-
-#include <QtMultimedia/qaudioengine.h>
-#include <QTime>
-#include <QTimer>
-#include <sounddevice.h>
-#include "qaudio_symbian_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QAudioInputPrivate;
-
-class SymbianAudioInputPrivate : public QIODevice
-{
-    friend class QAudioInputPrivate;
-    Q_OBJECT
-public:
-    SymbianAudioInputPrivate(QAudioInputPrivate *audio);
-    ~SymbianAudioInputPrivate();
-
-    qint64 readData(char *data, qint64 len);
-    qint64 writeData(const char *data, qint64 len);
-
-    void dataReady();
-
-private:
-    QAudioInputPrivate *const m_audioDevice;
-};
-
-class QAudioInputPrivate
-    :   public QAbstractAudioInput
-    ,   public MDevSoundObserver
-{
-    friend class SymbianAudioInputPrivate;
-    Q_OBJECT
-public:
-    QAudioInputPrivate(const QByteArray &device,
-                      const QAudioFormat &audioFormat);
-    ~QAudioInputPrivate();
-
-    // QAbstractAudioInput
-    QIODevice* start(QIODevice *device = 0);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-    int bytesReady() const;
-    int periodSize() const;
-    void setBufferSize(int value);
-    int bufferSize() const;
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-    QAudio::Error error() const;
-    QAudio::State state() const;
-    QAudioFormat format() const;
-
-    // MDevSoundObserver
-    void InitializeComplete(TInt aError);
-    void ToneFinished(TInt aError);
-    void BufferToBeFilled(CMMFBuffer *aBuffer);
-    void PlayError(TInt aError);
-    void BufferToBeEmptied(CMMFBuffer *aBuffer);
-    void RecordError(TInt aError);
-    void ConvertError(TInt aError);
-    void DeviceMessage(TUid aMessageType, const TDesC8 &aMsg);
-
-private slots:
-    void pullData();
-
-private:
-   void open();
-   void startRecording();
-   void startDevSoundL();
-   void startDataTransfer();
-   CMMFDataBuffer* currentBuffer() const;
-   void pushData();
-   qint64 read(char *data, qint64 len);
-   void bufferEmptied();
-   Q_INVOKABLE void close();
-
-   qint64 getSamplesRecorded() const;
-
-   void setError(QAudio::Error error);
-   void setState(SymbianAudio::State state);
-
-   QAudio::State initializingState() const;
-
-private:
-    const QByteArray m_device;
-    const QAudioFormat m_format;
-
-    int m_clientBufferSize;
-    int m_notifyInterval;
-    QScopedPointer<QTimer> m_notifyTimer;
-    QTime m_elapsed;
-    QAudio::Error m_error;
-
-    SymbianAudio::State m_internalState;
-    QAudio::State m_externalState;
-
-    bool m_pullMode;
-    QIODevice *m_sink;
-
-    QScopedPointer<QTimer> m_pullTimer;
-
-    QScopedPointer<CMMFDevSound> m_devSound;
-    TUint32 m_nativeFourCC;
-    TMMFCapabilities m_nativeFormat;
-
-    // Latest buffer provided by DevSound, to be empied of data.
-    CMMFDataBuffer *m_devSoundBuffer;
-
-    int m_devSoundBufferSize;
-
-    // Total amount of data in buffers provided by DevSound
-    int m_totalBytesReady;
-
-    // Queue of buffers returned after call to CMMFDevSound::Pause().
-    QList<CMMFDataBuffer *> m_devSoundBufferQ;
-
-    // Current read position within m_devSoundBuffer
-    qint64 m_devSoundBufferPos;
-
-    // Samples recorded up to the last call to suspend().  It is necessary
-    // to cache this because suspend() is implemented using
-    // CMMFDevSound::Stop(), which resets DevSound's SamplesRecorded() counter.
-    quint32 m_totalSamplesRecorded;
-
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp
deleted file mode 100644
index b5d673e..0000000
--- a/src/multimedia/audio/qaudioinput_win32_p.cpp
+++ /dev/null
@@ -1,613 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include "qaudioinput_win32_p.h"
-
-QT_BEGIN_NAMESPACE
-
-//#define DEBUG_AUDIO 1
-
-static const int minimumIntervalTime = 50;
-
-QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
-    settings(audioFormat)
-{
-    bytesAvailable = 0;
-    buffer_size = 0;
-    period_size = 0;
-    m_device = device;
-    totalTimeValue = 0;
-    intervalTime = 1000;
-    errorState = QAudio::NoError;
-    deviceState = QAudio::StoppedState;
-    audioSource = 0;
-    pullMode = true;
-    resuming = false;
-    finished = false;
-
-    connect(this,SIGNAL(processMore()),SLOT(deviceReady()));
-
-    InitializeCriticalSection(&waveInCriticalSection);
-}
-
-QAudioInputPrivate::~QAudioInputPrivate()
-{
-    stop();
-    DeleteCriticalSection(&waveInCriticalSection);
-}
-
-void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
-        DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 )
-{
-    Q_UNUSED(dwParam1)
-    Q_UNUSED(dwParam2)
-    Q_UNUSED(hWaveIn)
-
-    QAudioInputPrivate* qAudio;
-    qAudio = (QAudioInputPrivate*)(dwInstance);
-    if(!qAudio)
-        return;
-
-    switch(uMsg) {
-        case WIM_OPEN:
-            break;
-        case WIM_DATA:
-            EnterCriticalSection(&qAudio->waveInCriticalSection);
-            if(qAudio->waveFreeBlockCount > 0)
-                qAudio->waveFreeBlockCount--;
-            qAudio->feedback();
-            LeaveCriticalSection(&qAudio->waveInCriticalSection);
-            break;
-        case WIM_CLOSE:
-            EnterCriticalSection(&qAudio->waveInCriticalSection);
-            qAudio->finished = true;
-            LeaveCriticalSection(&qAudio->waveInCriticalSection);
-            break;
-        default:
-            return;
-    }
-}
-
-WAVEHDR* QAudioInputPrivate::allocateBlocks(int size, int count)
-{
-    int i;
-    unsigned char* buffer;
-    WAVEHDR* blocks;
-    DWORD totalBufferSize = (size + sizeof(WAVEHDR))*count;
-
-    if((buffer=(unsigned char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
-                    totalBufferSize)) == 0) {
-        qWarning("QAudioInput: Memory allocation error");
-        return 0;
-    }
-    blocks = (WAVEHDR*)buffer;
-    buffer += sizeof(WAVEHDR)*count;
-    for(i = 0; i < count; i++) {
-        blocks[i].dwBufferLength = size;
-        blocks[i].lpData = (LPSTR)buffer;
-        blocks[i].dwBytesRecorded=0;
-        blocks[i].dwUser = 0L;
-        blocks[i].dwFlags = 0L;
-        blocks[i].dwLoops = 0L;
-        result = waveInPrepareHeader(hWaveIn,&blocks[i], sizeof(WAVEHDR));
-        if(result != MMSYSERR_NOERROR) {
-            qWarning("QAudioInput: Can't prepare block %d",i);
-            return 0;
-        }
-        buffer += size;
-    }
-    return blocks;
-}
-
-void QAudioInputPrivate::freeBlocks(WAVEHDR* blockArray)
-{
-    WAVEHDR* blocks = blockArray;
-
-    int count = buffer_size/period_size;
-
-    for(int i = 0; i < count; i++) {
-        waveInUnprepareHeader(hWaveIn,&blocks[i], sizeof(WAVEHDR));
-        blocks+=sizeof(WAVEHDR);
-    }
-    HeapFree(GetProcessHeap(), 0, blockArray);
-}
-
-QAudio::Error QAudioInputPrivate::error() const
-{
-    return errorState;
-}
-
-QAudio::State QAudioInputPrivate::state() const
-{
-    return deviceState;
-}
-
-QAudioFormat QAudioInputPrivate::format() const
-{
-    return settings;
-}
-
-QIODevice* QAudioInputPrivate::start(QIODevice* device)
-{
-    if(deviceState != QAudio::StoppedState)
-        close();
-
-    if(!pullMode && audioSource) {
-        delete audioSource;
-    }
-
-    if(device) {
-        //set to pull mode
-        pullMode = true;
-        audioSource = device;
-        deviceState = QAudio::ActiveState;
-    } else {
-        //set to push mode
-        pullMode = false;
-        deviceState = QAudio::IdleState;
-        audioSource = new InputPrivate(this);
-        audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
-    }
-
-    if( !open() )
-        return 0;
-
-    emit stateChanged(deviceState);
-
-    return audioSource;
-}
-
-void QAudioInputPrivate::stop()
-{
-    if(deviceState == QAudio::StoppedState)
-        return;
-
-    close();
-    emit stateChanged(deviceState);
-}
-
-bool QAudioInputPrivate::open()
-{
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
-#endif
-    header = 0;
-    if(buffer_size == 0) {
-        // Default buffer size, 200ms, default period size is 40ms
-        buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2;
-	period_size = buffer_size/5;
-    } else {
-        period_size = buffer_size/5;
-    }
-#ifdef Q_OS_WINCE
-    // For wince reduce size to 40ms for buffer size and 20ms period
-    buffer_size = settings.sampleRate()*settings.channelCount()*(settings.sampleSize()/8)*0.04;
-    period_size = buffer_size/2;
-#endif
-    timeStamp.restart();
-    elapsedTimeOffset = 0;
-    wfx.nSamplesPerSec = settings.frequency();
-    wfx.wBitsPerSample = settings.sampleSize();
-    wfx.nChannels = settings.channels();
-    wfx.cbSize = 0;
-
-    wfx.wFormatTag = WAVE_FORMAT_PCM;
-    wfx.nBlockAlign = (wfx.wBitsPerSample >> 3) * wfx.nChannels;
-    wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
-
-    UINT_PTR devId = WAVE_MAPPER;
-
-    WAVEINCAPS wic;
-    unsigned long iNumDevs,ii;
-    iNumDevs = waveInGetNumDevs();
-    for(ii=0;ii<iNumDevs;ii++) {
-        if(waveInGetDevCaps(ii, &wic, sizeof(WAVEINCAPS))
-	    == MMSYSERR_NOERROR) {
-	    QString tmp;
-	    tmp = QString((const QChar *)wic.szPname);
-	    if(tmp.compare(QLatin1String(m_device)) == 0) {
-	        devId = ii;
-		break;
-	    }
-	}
-    }
-
-    if(waveInOpen(&hWaveIn, devId, &wfx,
-                (DWORD_PTR)&waveInProc,
-                (DWORD_PTR) this,
-                CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-        qWarning("QAudioInput: failed to open audio device");
-        return false;
-    }
-    waveBlocks = allocateBlocks(period_size, buffer_size/period_size);
-
-    if(waveBlocks == 0) {
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-        qWarning("QAudioInput: failed to allocate blocks. open failed");
-        return false;
-    }
-
-    EnterCriticalSection(&waveInCriticalSection);
-    waveFreeBlockCount = buffer_size/period_size;
-    LeaveCriticalSection(&waveInCriticalSection);
-
-    waveCurrentBlock = 0;
-
-    for(int i=0; i<buffer_size/period_size; i++) {
-        result = waveInAddBuffer(hWaveIn, &waveBlocks[i], sizeof(WAVEHDR));
-        if(result != MMSYSERR_NOERROR) {
-            qWarning("QAudioInput: failed to setup block %d,err=%d",i,result);
-            errorState = QAudio::OpenError;
-            deviceState = QAudio::StoppedState;
-            emit stateChanged(deviceState);
-            return false;
-        }
-    }
-    result = waveInStart(hWaveIn);
-    if(result) {
-        qWarning("QAudioInput: failed to start audio input");
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-        return false;
-    }
-    timeStampOpened.restart();
-    elapsedTimeOffset = 0;
-    totalTimeValue = 0;
-    errorState  = QAudio::NoError;
-    return true;
-}
-
-void QAudioInputPrivate::close()
-{
-    if(deviceState == QAudio::StoppedState)
-        return;
-
-    deviceState = QAudio::StoppedState;
-    waveInReset(hWaveIn);
-    waveInClose(hWaveIn);
-
-    int count = 0;
-    while(!finished && count < 500) {
-        count++;
-        Sleep(10);
-    }
-
-    EnterCriticalSection(&waveInCriticalSection);
-    for(int i=0; i<waveFreeBlockCount; i++) {
-        if(waveBlocks[i].dwFlags & WHDR_PREPARED)
-            waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
-    }
-    LeaveCriticalSection(&waveInCriticalSection);
-    freeBlocks(waveBlocks);
-}
-
-int QAudioInputPrivate::bytesReady() const
-{
-    if(period_size == 0 || buffer_size == 0)
-        return 0;
-
-    int buf = ((buffer_size/period_size)-waveFreeBlockCount)*period_size;
-    if(buf < 0)
-        buf = 0;
-    return buf;
-}
-
-qint64 QAudioInputPrivate::read(char* data, qint64 len)
-{
-    bool done = false;
-
-    char*  p = data;
-    qint64 l = 0;
-    qint64 written = 0;
-    while(!done) {
-        // Read in some audio data
-        if(waveBlocks[header].dwBytesRecorded > 0 && waveBlocks[header].dwFlags & WHDR_DONE) {
-            if(pullMode) {
-                l = audioSource->write(waveBlocks[header].lpData,
-                        waveBlocks[header].dwBytesRecorded);
-#ifdef DEBUG_AUDIO
-                qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l;
-#endif
-                if(l < 0) {
-                    // error
-                    qWarning("QAudioInput: IOError");
-                    errorState = QAudio::IOError;
-
-                } else if(l == 0) {
-                    // cant write to IODevice
-                    qWarning("QAudioInput: IOError, can't write to QIODevice");
-                    errorState = QAudio::IOError;
-
-                } else {
-                    totalTimeValue += waveBlocks[header].dwBytesRecorded;
-                    errorState = QAudio::NoError;
-                    if (deviceState != QAudio::ActiveState) {
-                        deviceState = QAudio::ActiveState;
-                        emit stateChanged(deviceState);
-                    }
-		    resuming = false;
-                }
-            } else {
-                // push mode
-                memcpy(p,waveBlocks[header].lpData,waveBlocks[header].dwBytesRecorded);
-                l = waveBlocks[header].dwBytesRecorded;
-#ifdef DEBUG_AUDIO
-                qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l;
-#endif
-                totalTimeValue += waveBlocks[header].dwBytesRecorded;
-                errorState = QAudio::NoError;
-                if (deviceState != QAudio::ActiveState) {
-                    deviceState = QAudio::ActiveState;
-                    emit stateChanged(deviceState);
-                }
-		resuming = false;
-            }
-        } else {
-            //no data, not ready yet, next time
-            break;
-        }
-
-        waveInUnprepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
-
-        EnterCriticalSection(&waveInCriticalSection);
-        waveFreeBlockCount++;
-        LeaveCriticalSection(&waveInCriticalSection);
-        waveBlocks[header].dwBytesRecorded=0;
-        waveBlocks[header].dwFlags = 0L;
-        result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
-        if(result != MMSYSERR_NOERROR) {
-            result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
-            qWarning("QAudioInput: failed to prepare block %d,err=%d",header,result);
-            errorState = QAudio::IOError;
-            EnterCriticalSection(&waveInCriticalSection);
-            waveFreeBlockCount--;
-            LeaveCriticalSection(&waveInCriticalSection);
-            return 0;
-        }
-        result = waveInAddBuffer(hWaveIn, &waveBlocks[header], sizeof(WAVEHDR));
-        if(result != MMSYSERR_NOERROR) {
-            qWarning("QAudioInput: failed to setup block %d,err=%d",header,result);
-            errorState = QAudio::IOError;
-            EnterCriticalSection(&waveInCriticalSection);
-            waveFreeBlockCount--;
-            LeaveCriticalSection(&waveInCriticalSection);
-            return 0;
-        }
-        header++;
-        if(header >= buffer_size/period_size)
-            header = 0;
-        p+=l;
-
-        EnterCriticalSection(&waveInCriticalSection);
-        if(!pullMode) {
-	    if(l+period_size > len && waveFreeBlockCount == buffer_size/period_size)
-	        done = true;
-	} else {
-	    if(waveFreeBlockCount == buffer_size/period_size)
-	        done = true;
-	}
-        LeaveCriticalSection(&waveInCriticalSection);
-
-	written+=l;
-    }
-#ifdef DEBUG_AUDIO
-    qDebug()<<"read in len="<<written;
-#endif
-    return written;
-}
-
-void QAudioInputPrivate::resume()
-{
-    if(deviceState == QAudio::SuspendedState) {
-        deviceState = QAudio::ActiveState;
-        for(int i=0; i<buffer_size/period_size; i++) {
-            result = waveInAddBuffer(hWaveIn, &waveBlocks[i], sizeof(WAVEHDR));
-            if(result != MMSYSERR_NOERROR) {
-                qWarning("QAudioInput: failed to setup block %d,err=%d",i,result);
-                errorState = QAudio::OpenError;
-                deviceState = QAudio::StoppedState;
-                emit stateChanged(deviceState);
-                return;
-            }
-        }
-        EnterCriticalSection(&waveInCriticalSection);
-        waveFreeBlockCount = buffer_size/period_size;
-        LeaveCriticalSection(&waveInCriticalSection);
-
-        waveCurrentBlock = 0;
-        header = 0;
-	resuming = true;
-        waveInStart(hWaveIn);
-        QTimer::singleShot(20,this,SLOT(feedback()));
-        emit stateChanged(deviceState);
-    }
-}
-
-void QAudioInputPrivate::setBufferSize(int value)
-{
-    buffer_size = value;
-}
-
-int QAudioInputPrivate::bufferSize() const
-{
-    return buffer_size;
-}
-
-int QAudioInputPrivate::periodSize() const
-{
-    return period_size;
-}
-
-void QAudioInputPrivate::setNotifyInterval(int ms)
-{
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
-}
-
-int QAudioInputPrivate::notifyInterval() const
-{
-    return intervalTime;
-}
-
-qint64 QAudioInputPrivate::processedUSecs() const
-{
-    if (deviceState == QAudio::StoppedState)
-        return 0;
-    qint64 result = qint64(1000000) * totalTimeValue /
-        (settings.channels()*(settings.sampleSize()/8)) /
-        settings.frequency();
-
-    return result;
-}
-
-void QAudioInputPrivate::suspend()
-{
-    if(deviceState == QAudio::ActiveState) {
-        waveInReset(hWaveIn);
-        deviceState = QAudio::SuspendedState;
-        emit stateChanged(deviceState);
-    }
-}
-
-void QAudioInputPrivate::feedback()
-{
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :feedback() INPUT "<<this;
-#endif
-    bytesAvailable = bytesReady();
-
-    if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState))
-        emit processMore();
-}
-
-bool QAudioInputPrivate::deviceReady()
-{
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :deviceReady() INPUT";
-#endif
-    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
-        return true;
-
-    if(pullMode) {
-        // reads some audio data and writes it to QIODevice
-        read(0,0);
-    } else {
-        // emits readyRead() so user will call read() on QIODevice to get some audio data
-	InputPrivate* a = qobject_cast<InputPrivate*>(audioSource);
-	a->trigger();
-    }
-
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
-        emit notify();
-        elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
-        timeStamp.restart();
-    }
-    return true;
-}
-
-qint64 QAudioInputPrivate::elapsedUSecs() const
-{
-    if (deviceState == QAudio::StoppedState)
-        return 0;
-
-    return timeStampOpened.elapsed()*1000;
-}
-
-void QAudioInputPrivate::reset()
-{
-    close();
-}
-
-InputPrivate::InputPrivate(QAudioInputPrivate* audio)
-{
-    audioDevice = qobject_cast<QAudioInputPrivate*>(audio);
-}
-
-InputPrivate::~InputPrivate() {}
-
-qint64 InputPrivate::readData( char* data, qint64 len)
-{
-    // push mode, user read() called
-    if(audioDevice->deviceState != QAudio::ActiveState &&
-            audioDevice->deviceState != QAudio::IdleState)
-        return 0;
-    // Read in some audio data
-    return audioDevice->read(data,len);
-}
-
-qint64 InputPrivate::writeData(const char* data, qint64 len)
-{
-    Q_UNUSED(data)
-    Q_UNUSED(len)
-
-    emit readyRead();
-    return 0;
-}
-
-void InputPrivate::trigger()
-{
-    emit readyRead();
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/audio/qaudioinput_win32_p.h
deleted file mode 100644
index 66c2535..0000000
--- a/src/multimedia/audio/qaudioinput_win32_p.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIOINPUTWIN_H
-#define QAUDIOINPUTWIN_H
-
-#include <windows.h>
-#include <mmsystem.h>
-
-#include <QtCore/qfile.h>
-#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-
-
-QT_BEGIN_NAMESPACE
-
-class QAudioInputPrivate : public QAbstractAudioInput
-{
-    Q_OBJECT
-public:
-    QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
-    ~QAudioInputPrivate();
-
-    qint64 read(char* data, qint64 len);
-
-    QAudioFormat format() const;
-    QIODevice* start(QIODevice* device = 0);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-    int bytesReady() const;
-    int periodSize() const;
-    void setBufferSize(int value);
-    int bufferSize() const;
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-    QAudio::Error error() const;
-    QAudio::State state() const;
-
-    QIODevice* audioSource;
-    QAudioFormat settings;
-    QAudio::Error errorState;
-    QAudio::State deviceState;
-
-private:
-    qint32 buffer_size;
-    qint32 period_size;
-    qint32 header;
-    QByteArray m_device;
-    int bytesAvailable;
-    int intervalTime;
-    QTime timeStamp;
-    qint64 elapsedTimeOffset;
-    QTime timeStampOpened;
-    qint64 totalTimeValue;
-    bool pullMode;
-    bool resuming;
-    WAVEFORMATEX wfx;
-    HWAVEIN hWaveIn;
-    MMRESULT result;
-    WAVEHDR* waveBlocks;
-    volatile bool finished;
-    volatile int waveFreeBlockCount;
-    int waveCurrentBlock;
-
-    CRITICAL_SECTION waveInCriticalSection;
-    static void QT_WIN_CALLBACK waveInProc( HWAVEIN hWaveIn, UINT uMsg,
-            DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
-
-    WAVEHDR* allocateBlocks(int size, int count);
-    void freeBlocks(WAVEHDR* blockArray);
-    bool open();
-    void close();
-
-private slots:
-    void feedback();
-    bool deviceReady();
-
-signals:
-    void processMore();
-};
-
-class InputPrivate : public QIODevice
-{
-    Q_OBJECT
-public:
-    InputPrivate(QAudioInputPrivate* audio);
-    ~InputPrivate();
-
-    qint64 readData( char* data, qint64 len);
-    qint64 writeData(const char* data, qint64 len);
-
-    void trigger();
-private:
-    QAudioInputPrivate *audioDevice;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudiooutput.cpp b/src/multimedia/audio/qaudiooutput.cpp
deleted file mode 100644
index b0b5244..0000000
--- a/src/multimedia/audio/qaudiooutput.cpp
+++ /dev/null
@@ -1,411 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-#include <QtMultimedia/qaudiooutput.h>
-
-#include "qaudiodevicefactory_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QAudioOutput
-    \brief The QAudioOutput class provides an interface for sending audio data to an audio output device.
-
-    \inmodule QtMultimedia
-    \ingroup  multimedia
-    \since 4.6
-
-    You can construct an audio output with the system's
-    \l{QAudioDeviceInfo::defaultOutputDevice()}{default audio output
-    device}. It is also possible to create QAudioOutput with a
-    specific QAudioDeviceInfo. When you create the audio output, you
-    should also send in the QAudioFormat to be used for the playback
-    (see the QAudioFormat class description for details).
-
-    To play a file:
-
-    Starting to play an audio stream is simply a matter of calling
-    start() with a QIODevice. QAudioOutput will then fetch the data it
-    needs from the io device. So playing back an audio file is as
-    simple as:
-
-    \code
-      QFile inputFile;     // class member.
-      QAudioOutput* audio; // class member.
-    \endcode
-
-    \code
-      inputFile.setFileName("/tmp/test.raw");
-      inputFile.open(QIODevice::ReadOnly);
-
-      QAudioFormat format;
-      // Set up the format, eg.
-      format.setFrequency(8000);
-      format.setChannels(1);
-      format.setSampleSize(8);
-      format.setCodec("audio/pcm");
-      format.setByteOrder(QAudioFormat::LittleEndian);
-      format.setSampleType(QAudioFormat::UnSignedInt);
-
-      QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
-      if (!info.isFormatSupported(format)) {
-          qWarning()<<"raw audio format not supported by backend, cannot play audio.";
-          return;
-      }
-
-      audio = new QAudioOutput(format, this);
-      connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));
-      audio->start(&inputFile);
-
-    \endcode
-
-    The file will start playing assuming that the audio system and
-    output device support it. If you run out of luck, check what's
-    up with the error() function.
-
-    After the file has finished playing, we need to stop the device:
-
-    \code
-      void finishedPlaying(QAudio::State state)
-      {
-        if(state == QAudio::IdleState) {
-          audio->stop();
-          inputFile.close();
-          delete audio;
-        }
-      }
-    \endcode
-
-    At any given time, the QAudioOutput will be in one of four states:
-    active, suspended, stopped, or idle. These states are described
-    by the QAudio::State enum.
-    State changes are reported through the stateChanged() signal. You
-    can use this signal to, for instance, update the GUI of the
-    application; the mundane example here being changing the state of
-    a \c { play/pause } button. You request a state change directly
-    with suspend(), stop(), reset(), resume(), and start().
-
-    While the stream is playing, you can set a notify interval in
-    milliseconds with setNotifyInterval(). This interval specifies the
-    time between two emissions of the notify() signal. This is
-    relative to the position in the stream, i.e., if the QAudioOutput
-    is in the SuspendedState or the IdleState, the notify() signal is
-    not emitted. A typical use-case would be to update a
-    \l{QSlider}{slider} that allows seeking in the stream.
-    If you want the time since playback started regardless of which
-    states the audio output has been in, elapsedUSecs() is the function for you.
-
-    If an error occurs, you can fetch the \l{QAudio::Error}{error
-    type} with the error() function. Please see the QAudio::Error enum
-    for a description of the possible errors that are reported.  When
-    an error is encountered, the state changes to QAudio::StoppedState.
-    You can check for errors by connecting to the stateChanged()
-    signal:
-
-    \snippet doc/src/snippets/audio/main.cpp 3
-
-    \sa QAudioInput, QAudioDeviceInfo
-*/
-
-/*!
-    Construct a new audio output and attach it to \a parent.
-    The default audio output device is used with the output
-    \a format parameters.
-*/
-
-QAudioOutput::QAudioOutput(const QAudioFormat &format, QObject *parent):
-    QObject(parent)
-{
-    d = QAudioDeviceFactory::createDefaultOutputDevice(format);
-    connect(d, SIGNAL(notify()), SIGNAL(notify()));
-    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
-}
-
-/*!
-    Construct a new audio output and attach it to \a parent.
-    The device referenced by \a audioDevice is used with the output
-    \a format parameters.
-*/
-
-QAudioOutput::QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format, QObject *parent):
-    QObject(parent)
-{
-    d = QAudioDeviceFactory::createOutputDevice(audioDevice, format);
-    connect(d, SIGNAL(notify()), SIGNAL(notify()));
-    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
-}
-
-/*!
-    Destroys this audio output.
-*/
-
-QAudioOutput::~QAudioOutput()
-{
-    delete d;
-}
-
-/*!
-    Returns the QAudioFormat being used.
-
-*/
-
-QAudioFormat QAudioOutput::format() const
-{
-    return d->format();
-}
-
-/*!
-    Uses the \a device as the QIODevice to transfer data.
-    Passing a QIODevice allows the data to be transfered without any extra code.
-    All that is required is to open the QIODevice.
-
-    If able to successfully output audio data to the systems audio device the
-    state() is set to QAudio::ActiveState, error() is set to QAudio::NoError
-    and the stateChanged() signal is emitted.
-
-    If a problem occurs during this process the error() is set to QAudio::OpenError,
-    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
-
-    \sa QIODevice
-*/
-
-void QAudioOutput::start(QIODevice* device)
-{
-    d->start(device);
-}
-
-/*!
-    Returns a pointer to the QIODevice being used to handle the data
-    transfer. This QIODevice can be used to write() audio data directly.
-
-    If able to access the systems audio device the state() is set to
-    QAudio::IdleState, error() is set to QAudio::NoError
-    and the stateChanged() signal is emitted.
-
-    If a problem occurs during this process the error() is set to QAudio::OpenError,
-    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
-
-    \sa QIODevice
-*/
-
-QIODevice* QAudioOutput::start()
-{
-    return d->start(0);
-}
-
-/*!
-    Stops the audio output, detaching from the system resource.
-
-    Sets error() to QAudio::NoError, state() to QAudio::StoppedState and
-    emit stateChanged() signal.
-*/
-
-void QAudioOutput::stop()
-{
-    d->stop();
-}
-
-/*!
-    Drops all audio data in the buffers, resets buffers to zero.
-*/
-
-void QAudioOutput::reset()
-{
-    d->reset();
-}
-
-/*!
-    Stops processing audio data, preserving buffered audio data.
-
-    Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and
-    emit stateChanged() signal.
-*/
-
-void QAudioOutput::suspend()
-{
-    d->suspend();
-}
-
-/*!
-    Resumes processing audio data after a suspend().
-
-    Sets error() to QAudio::NoError.
-    Sets state() to QAudio::ActiveState if you previously called start(QIODevice*).
-    Sets state() to QAudio::IdleState if you previously called start().
-    emits stateChanged() signal.
-*/
-
-void QAudioOutput::resume()
-{
-     d->resume();
-}
-
-/*!
-    Returns the free space available in bytes in the audio buffer.
-
-    NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState
-    state, otherwise returns zero.
-*/
-
-int QAudioOutput::bytesFree() const
-{
-    return d->bytesFree();
-}
-
-/*!
-    Returns the period size in bytes.
-
-    Note: This is the recommended write size in bytes.
-*/
-
-int QAudioOutput::periodSize() const
-{
-    return d->periodSize();
-}
-
-/*!
-    Sets the audio buffer size to \a value in bytes.
-
-    Note: This function can be called anytime before start(), calls to this
-    are ignored after start(). It should not be assumed that the buffer size
-    set is the actual buffer size used, calling bufferSize() anytime after start()
-    will return the actual buffer size being used.
-*/
-
-void QAudioOutput::setBufferSize(int value)
-{
-    d->setBufferSize(value);
-}
-
-/*!
-    Returns the audio buffer size in bytes.
-
-    If called before start(), returns platform default value.
-    If called before start() but setBufferSize() was called prior, returns value set by setBufferSize().
-    If called after start(), returns the actual buffer size being used. This may not be what was set previously
-    by setBufferSize().
-
-*/
-
-int QAudioOutput::bufferSize() const
-{
-    return d->bufferSize();
-}
-
-/*!
-    Sets the interval for notify() signal to be emitted.
-    This is based on the \a ms of audio data processed
-    not on actual real-time.
-    The minimum resolution of the timer is platform specific and values
-    should be checked with notifyInterval() to confirm actual value
-    being used.
-*/
-
-void QAudioOutput::setNotifyInterval(int ms)
-{
-    d->setNotifyInterval(ms);
-}
-
-/*!
-    Returns the notify interval in milliseconds.
-*/
-
-int QAudioOutput::notifyInterval() const
-{
-    return d->notifyInterval();
-}
-
-/*!
-    Returns the amount of audio data processed since start()
-    was called in microseconds.
-*/
-
-qint64 QAudioOutput::processedUSecs() const
-{
-    return d->processedUSecs();
-}
-
-/*!
-    Returns the microseconds since start() was called, including time in Idle and
-    Suspend states.
-*/
-
-qint64 QAudioOutput::elapsedUSecs() const
-{
-    return d->elapsedUSecs();
-}
-
-/*!
-    Returns the error state.
-*/
-
-QAudio::Error QAudioOutput::error() const
-{
-    return d->error();
-}
-
-/*!
-    Returns the state of audio processing.
-*/
-
-QAudio::State QAudioOutput::state() const
-{
-    return d->state();
-}
-
-/*!
-    \fn QAudioOutput::stateChanged(QAudio::State state)
-    This signal is emitted when the device \a state has changed.
-    This is the current state of the audio output.
-*/
-
-/*!
-    \fn QAudioOutput::notify()
-    This signal is emitted when x ms of audio data has been processed
-    the interval set by setNotifyInterval(x).
-*/
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiooutput.h b/src/multimedia/audio/qaudiooutput.h
deleted file mode 100644
index 0f45b1b..0000000
--- a/src/multimedia/audio/qaudiooutput.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QAUDIOOUTPUT_H
-#define QAUDIOOUTPUT_H
-
-#include <QtCore/qiodevice.h>
-#include <QtCore/qglobal.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QAbstractAudioOutput;
-
-class Q_MULTIMEDIA_EXPORT QAudioOutput : public QObject
-{
-    Q_OBJECT
-
-public:
-    explicit QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
-    explicit QAudioOutput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
-    ~QAudioOutput();
-
-    QAudioFormat format() const;
-
-    void start(QIODevice *device);
-    QIODevice* start();
-
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-
-    void setBufferSize(int bytes);
-    int bufferSize() const;
-
-    int bytesFree() const;
-    int periodSize() const;
-
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-
-    QAudio::Error error() const;
-    QAudio::State state() const;
-
-Q_SIGNALS:
-    void stateChanged(QAudio::State);
-    void notify();
-
-private:
-    Q_DISABLE_COPY(QAudioOutput)
-
-    QAbstractAudioOutput* d;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QAUDIOOUTPUT_H
diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp
deleted file mode 100644
index cf3726b..0000000
--- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp
+++ /dev/null
@@ -1,780 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qcoreapplication.h>
-#include "qaudiooutput_alsa_p.h"
-#include "qaudiodeviceinfo_alsa_p.h"
-
-QT_BEGIN_NAMESPACE
-
-//#define DEBUG_AUDIO 1
-
-static const int minimumIntervalTime = 50;
-
-QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
-    settings(audioFormat)
-{
-    bytesAvailable = 0;
-    handle = 0;
-    ahandler = 0;
-    access = SND_PCM_ACCESS_RW_INTERLEAVED;
-    pcmformat = SND_PCM_FORMAT_S16;
-    buffer_frames = 0;
-    period_frames = 0;
-    buffer_size = 0;
-    period_size = 0;
-    buffer_time = 100000;
-    period_time = 20000;
-    totalTimeValue = 0;
-    intervalTime = 1000;
-    audioBuffer = 0;
-    errorState = QAudio::NoError;
-    deviceState = QAudio::StoppedState;
-    audioSource = 0;
-    pullMode = true;
-    resuming = false;
-    opened = false;
-
-    QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":"));
-    m_device = QByteArray(list1.at(0).toLocal8Bit().constData());
-
-    timer = new QTimer(this);
-    connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
-}
-
-QAudioOutputPrivate::~QAudioOutputPrivate()
-{
-    close();
-    disconnect(timer, SIGNAL(timeout()));
-    QCoreApplication::processEvents();
-    delete timer;
-}
-
-QAudio::Error QAudioOutputPrivate::error() const
-{
-    return errorState;
-}
-
-QAudio::State QAudioOutputPrivate::state() const
-{
-    return deviceState;
-}
-
-void QAudioOutputPrivate::async_callback(snd_async_handler_t *ahandler)
-{
-    QAudioOutputPrivate* audioOut;
-
-    audioOut = static_cast<QAudioOutputPrivate*>
-        (snd_async_handler_get_callback_private(ahandler));
-
-    if((audioOut->deviceState==QAudio::ActiveState)||(audioOut->resuming))
-        audioOut->feedback();
-}
-
-int QAudioOutputPrivate::xrun_recovery(int err)
-{
-    int  count = 0;
-    bool reset = false;
-
-    if(err == -EPIPE) {
-        errorState = QAudio::UnderrunError;
-        err = snd_pcm_prepare(handle);
-        if(err < 0)
-            reset = true;
-
-    } else if((err == -ESTRPIPE)||(err == -EIO)) {
-        errorState = QAudio::IOError;
-        while((err = snd_pcm_resume(handle)) == -EAGAIN){
-            usleep(100);
-            count++;
-            if(count > 5) {
-                reset = true;
-                break;
-            }
-        }
-        if(err < 0) {
-            err = snd_pcm_prepare(handle);
-            if(err < 0)
-                reset = true;
-        }
-    }
-    if(reset) {
-        close();
-        open();
-        snd_pcm_prepare(handle);
-        return 0;
-    }
-    return err;
-}
-
-int QAudioOutputPrivate::setFormat()
-{
-    snd_pcm_format_t pcmformat = SND_PCM_FORMAT_S16;
-
-    if(settings.sampleSize() == 8) {
-        pcmformat = SND_PCM_FORMAT_U8;
-
-    } else if(settings.sampleSize() == 16) {
-        if(settings.sampleType() == QAudioFormat::SignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                pcmformat = SND_PCM_FORMAT_S16_LE;
-            else
-                pcmformat = SND_PCM_FORMAT_S16_BE;
-        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                pcmformat = SND_PCM_FORMAT_U16_LE;
-            else
-                pcmformat = SND_PCM_FORMAT_U16_BE;
-        }
-    } else if(settings.sampleSize() == 24) {
-        if(settings.sampleType() == QAudioFormat::SignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                pcmformat = SND_PCM_FORMAT_S24_LE;
-            else
-                pcmformat = SND_PCM_FORMAT_S24_BE;
-        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                pcmformat = SND_PCM_FORMAT_U24_LE;
-            else
-                pcmformat = SND_PCM_FORMAT_U24_BE;
-        }
-    } else if(settings.sampleSize() == 32) {
-        if(settings.sampleType() == QAudioFormat::SignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                pcmformat = SND_PCM_FORMAT_S32_LE;
-            else
-                pcmformat = SND_PCM_FORMAT_S32_BE;
-        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                pcmformat = SND_PCM_FORMAT_U32_LE;
-            else
-                pcmformat = SND_PCM_FORMAT_U32_BE;
-        } else if(settings.sampleType() == QAudioFormat::Float) {
-            if(settings.byteOrder() == QAudioFormat::LittleEndian)
-                pcmformat = SND_PCM_FORMAT_FLOAT_LE;
-            else
-                pcmformat = SND_PCM_FORMAT_FLOAT_BE;
-        }
-    } else if(settings.sampleSize() == 64) {
-        if(settings.byteOrder() == QAudioFormat::LittleEndian)
-            pcmformat = SND_PCM_FORMAT_FLOAT64_LE;
-        else
-            pcmformat = SND_PCM_FORMAT_FLOAT64_BE;
-    }
-
-    return snd_pcm_hw_params_set_format( handle, hwparams, pcmformat);
-}
-
-QIODevice* QAudioOutputPrivate::start(QIODevice* device)
-{
-    if(deviceState != QAudio::StoppedState)
-        deviceState = QAudio::StoppedState;
-
-    errorState = QAudio::NoError;
-
-    // Handle change of mode
-    if(audioSource && pullMode && !device) {
-        // pull -> push
-        close();
-        audioSource = 0;
-    } else if(audioSource && !pullMode && device) {
-        // push -> pull
-        close();
-        delete audioSource;
-        audioSource = 0;
-    }
-
-    if(device) {
-        //set to pull mode
-        pullMode = true;
-        audioSource = device;
-        deviceState = QAudio::ActiveState;
-    } else {
-        //set to push mode
-        if(!audioSource) {
-            audioSource = new OutputPrivate(this);
-            audioSource->open(QIODevice::WriteOnly|QIODevice::Unbuffered);
-        }
-        pullMode = false;
-        deviceState = QAudio::IdleState;
-    }
-
-    open();
-
-    emit stateChanged(deviceState);
-
-    return audioSource;
-}
-
-void QAudioOutputPrivate::stop()
-{
-    if(deviceState == QAudio::StoppedState)
-        return;
-    errorState = QAudio::NoError;
-    deviceState = QAudio::StoppedState;
-    close();
-    emit stateChanged(deviceState);
-}
-
-bool QAudioOutputPrivate::open()
-{
-    if(opened)
-        return true;
-
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
-#endif
-    timeStamp.restart();
-    elapsedTimeOffset = 0;
-
-    int dir;
-    int err=-1;
-    int count=0;
-    unsigned int freakuency=settings.frequency();
-
-    QString dev = QLatin1String(m_device.constData());
-    QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
-    if(dev.compare(QLatin1String("default")) == 0) {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = QLatin1String(devices.first().constData());
-#else
-        dev = QLatin1String("hw:0,0");
-#endif
-    } else {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = QLatin1String(m_device);
-#else
-        int idx = 0;
-        char *name;
-
-        QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData());
-
-	while(snd_card_get_name(idx,&name) == 0) {
-            if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0)
-                break;
-            idx++;
-	}
-        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
-#endif
-    }
-
-    // Step 1: try and open the device
-    while((count < 5) && (err < 0)) {
-        err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
-        if(err < 0)
-            count++;
-    }
-    if (( err < 0)||(handle == 0)) {
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        return false;
-    }
-    snd_pcm_nonblock( handle, 0 );
-
-    // Step 2: Set the desired HW parameters.
-    snd_pcm_hw_params_alloca( &hwparams );
-
-    bool fatal = false;
-    QString errMessage;
-    unsigned int chunks = 8;
-
-    err = snd_pcm_hw_params_any( handle, hwparams );
-    if ( err < 0 ) {
-        fatal = true;
-        errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_any: err = %1").arg(err);
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_rate_resample( handle, hwparams, 1 );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_rate_resample: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_access( handle, hwparams, access );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_access: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = setFormat();
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_format: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_channels: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_rate_near( handle, hwparams, &freakuency, 0 );
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_rate_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        unsigned int maxBufferTime = 0;
-        unsigned int minBufferTime = 0;
-        unsigned int maxPeriodTime = 0;
-        unsigned int minPeriodTime = 0;
-
-        err = snd_pcm_hw_params_get_buffer_time_max(hwparams, &maxBufferTime, &dir);
-        if ( err >= 0)
-            err = snd_pcm_hw_params_get_buffer_time_min(hwparams, &minBufferTime, &dir);
-        if ( err >= 0)
-            err = snd_pcm_hw_params_get_period_time_max(hwparams, &maxPeriodTime, &dir);
-        if ( err >= 0)
-            err = snd_pcm_hw_params_get_period_time_min(hwparams, &minPeriodTime, &dir);
-
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: buffer/period min and max: err = %1").arg(err);
-        } else {
-            if (maxBufferTime < buffer_time || buffer_time < minBufferTime || maxPeriodTime < period_time || minPeriodTime > period_time) {
-#ifdef DEBUG_AUDIO
-                qDebug()<<"defaults out of range";
-                qDebug()<<"pmin="<<minPeriodTime<<", pmax="<<maxPeriodTime<<", bmin="<<minBufferTime<<", bmax="<<maxBufferTime;
-#endif
-                period_time = minPeriodTime;
-                if (period_time*4 <= maxBufferTime) {
-                    // Use 4 periods if possible
-                    buffer_time = period_time*4;
-                    chunks = 4;
-                } else if (period_time*2 <= maxBufferTime) {
-                    // Use 2 periods if possible
-                    buffer_time = period_time*2;
-                    chunks = 2;
-                } else {
-                    qWarning()<<"QAudioOutput: alsa only supports single period!";
-                    fatal = true;
-                }
-#ifdef DEBUG_AUDIO
-                qDebug()<<"used: buffer_time="<<buffer_time<<", period_time="<<period_time;
-#endif
-            }
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_period_time_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params_set_periods_near(handle, hwparams, &chunks, &dir);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_periods_near: err = %1").arg(err);
-        }
-    }
-    if ( !fatal ) {
-        err = snd_pcm_hw_params(handle, hwparams);
-        if ( err < 0 ) {
-            fatal = true;
-            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params: err = %1").arg(err);
-        }
-    }
-    if( err < 0) {
-        qWarning()<<errMessage;
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        return false;
-    }
-    snd_pcm_hw_params_get_buffer_size(hwparams,&buffer_frames);
-    buffer_size = snd_pcm_frames_to_bytes(handle,buffer_frames);
-    snd_pcm_hw_params_get_period_size(hwparams,&period_frames, &dir);
-    period_size = snd_pcm_frames_to_bytes(handle,period_frames);
-    snd_pcm_hw_params_get_buffer_time(hwparams,&buffer_time, &dir);
-    snd_pcm_hw_params_get_period_time(hwparams,&period_time, &dir);
-
-    // Step 3: Set the desired SW parameters.
-    snd_pcm_sw_params_t *swparams;
-    snd_pcm_sw_params_alloca(&swparams);
-    snd_pcm_sw_params_current(handle, swparams);
-    snd_pcm_sw_params_set_start_threshold(handle,swparams,period_frames);
-    snd_pcm_sw_params_set_stop_threshold(handle,swparams,buffer_frames);
-    snd_pcm_sw_params_set_avail_min(handle, swparams,period_frames);
-    snd_pcm_sw_params(handle, swparams);
-
-    // Step 4: Prepare audio
-    if(audioBuffer == 0)
-        audioBuffer = new char[snd_pcm_frames_to_bytes(handle,buffer_frames)];
-    snd_pcm_prepare( handle );
-    snd_pcm_start(handle);
-
-    // Step 5: Setup callback and timer fallback
-    snd_async_add_pcm_handler(&ahandler, handle, async_callback, this);
-    bytesAvailable = bytesFree();
-
-    // Step 6: Start audio processing
-    timer->start(period_time/1000);
-
-    clockStamp.restart();
-    timeStamp.restart();
-    elapsedTimeOffset = 0;
-    errorState  = QAudio::NoError;
-    totalTimeValue = 0;
-    opened = true;
-
-    return true;
-}
-
-void QAudioOutputPrivate::close()
-{
-    timer->stop();
-
-    if ( handle ) {
-        snd_pcm_drain( handle );
-        snd_pcm_close( handle );
-        handle = 0;
-        delete [] audioBuffer;
-        audioBuffer=0;
-    }
-    if(!pullMode && audioSource) {
-        delete audioSource;
-        audioSource = 0;
-    }
-    opened = false;
-}
-
-int QAudioOutputPrivate::bytesFree() const
-{
-    if(resuming)
-        return period_size;
-
-    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
-        return 0;
-    int frames = snd_pcm_avail_update(handle);
-    if((int)frames > (int)buffer_frames)
-        frames = buffer_frames;
-
-    return snd_pcm_frames_to_bytes(handle, frames);
-}
-
-qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
-{
-    // Write out some audio data
-    if ( !handle )
-        return 0;
-#ifdef DEBUG_AUDIO
-    qDebug()<<"frames to write out = "<<
-        snd_pcm_bytes_to_frames( handle, (int)len )<<" ("<<len<<") bytes";
-#endif
-    int frames, err;
-    int space = bytesFree();
-    if(len < space) {
-        // Just write it
-        frames = snd_pcm_bytes_to_frames( handle, (int)len );
-        err = snd_pcm_writei( handle, data, frames );
-    } else {
-        // Only write space worth
-        frames = snd_pcm_bytes_to_frames( handle, (int)space );
-        err = snd_pcm_writei( handle, data, frames );
-    }
-    if(err > 0) {
-        totalTimeValue += err;
-        resuming = false;
-        errorState = QAudio::NoError;
-        if (deviceState != QAudio::ActiveState) {
-            deviceState = QAudio::ActiveState;
-            emit stateChanged(deviceState);
-        }
-        return snd_pcm_frames_to_bytes( handle, err );
-    } else
-        err = xrun_recovery(err);
-
-    if(err < 0) {
-        close();
-        errorState = QAudio::FatalError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-    }
-    return 0;
-}
-
-int QAudioOutputPrivate::periodSize() const
-{
-    return period_size;
-}
-
-void QAudioOutputPrivate::setBufferSize(int value)
-{
-    if(deviceState == QAudio::StoppedState)
-        buffer_size = value;
-}
-
-int QAudioOutputPrivate::bufferSize() const
-{
-    return buffer_size;
-}
-
-void QAudioOutputPrivate::setNotifyInterval(int ms)
-{
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
-}
-
-int QAudioOutputPrivate::notifyInterval() const
-{
-    return intervalTime;
-}
-
-qint64 QAudioOutputPrivate::processedUSecs() const
-{
-    return qint64(1000000) * totalTimeValue / settings.frequency();
-}
-
-void QAudioOutputPrivate::resume()
-{
-    if(deviceState == QAudio::SuspendedState) {
-        int err = 0;
-
-        if(handle) {
-            err = snd_pcm_prepare( handle );
-            if(err < 0)
-                xrun_recovery(err);
-
-            err = snd_pcm_start(handle);
-            if(err < 0)
-                xrun_recovery(err);
-
-            bytesAvailable = (int)snd_pcm_frames_to_bytes(handle, buffer_frames);
-        }
-        resuming = true;
-
-        deviceState = QAudio::ActiveState;
-
-        errorState = QAudio::NoError;
-        timer->start(period_time/1000);
-        emit stateChanged(deviceState);
-    }
-}
-
-QAudioFormat QAudioOutputPrivate::format() const
-{
-    return settings;
-}
-
-void QAudioOutputPrivate::suspend()
-{
-    if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState || resuming) {
-        timer->stop();
-        deviceState = QAudio::SuspendedState;
-        errorState = QAudio::NoError;
-        emit stateChanged(deviceState);
-    }
-}
-
-void QAudioOutputPrivate::userFeed()
-{
-    if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
-        return;
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :userFeed() OUT";
-#endif
-    if(deviceState ==  QAudio::IdleState)
-        bytesAvailable = bytesFree();
-
-    deviceReady();
-}
-
-void QAudioOutputPrivate::feedback()
-{
-    updateAvailable();
-}
-
-
-void QAudioOutputPrivate::updateAvailable()
-{
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :updateAvailable()";
-#endif
-    bytesAvailable = bytesFree();
-}
-
-bool QAudioOutputPrivate::deviceReady()
-{
-    if(pullMode) {
-        int l = 0;
-        int chunks = bytesAvailable/period_size;
-        if(chunks==0) {
-            bytesAvailable = bytesFree();
-            return false;
-        }
-#ifdef DEBUG_AUDIO
-        qDebug()<<"deviceReady() avail="<<bytesAvailable<<" bytes, period size="<<period_size<<" bytes";
-        qDebug()<<"deviceReady() no. of chunks that can fit ="<<chunks<<", chunks in bytes ="<<period_size*chunks;
-#endif
-        int input = period_frames*chunks;
-        if(input > (int)buffer_frames)
-            input = buffer_frames;
-        l = audioSource->read(audioBuffer,snd_pcm_frames_to_bytes(handle, input));
-        if(l > 0) {
-            // Got some data to output
-            if(deviceState != QAudio::ActiveState)
-                return true;
-            qint64 bytesWritten = write(audioBuffer,l);
-            if (bytesWritten != l)
-                audioSource->seek(audioSource->pos()-(l-bytesWritten));
-            bytesAvailable = bytesFree();
-
-        } else if(l == 0) {
-            // Did not get any data to output
-            bytesAvailable = bytesFree();
-            if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) {
-                // Underrun
-                if (deviceState != QAudio::IdleState) {
-                    errorState = QAudio::UnderrunError;
-                    deviceState = QAudio::IdleState;
-                    emit stateChanged(deviceState);
-                }
-            }
-
-        } else if(l < 0) {
-            close();
-            deviceState = QAudio::StoppedState;
-            errorState = QAudio::IOError;
-            emit stateChanged(deviceState);
-        }
-    } else {
-        bytesAvailable = bytesFree();
-        if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) {
-            // Underrun
-            if (deviceState != QAudio::IdleState) {
-                errorState = QAudio::UnderrunError;
-                deviceState = QAudio::IdleState;
-                emit stateChanged(deviceState);
-            }
-        }
-    }
-
-    if(deviceState != QAudio::ActiveState)
-        return true;
-
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
-        emit notify();
-        elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
-        timeStamp.restart();
-    }
-    return true;
-}
-
-qint64 QAudioOutputPrivate::elapsedUSecs() const
-{
-    if (deviceState == QAudio::StoppedState)
-        return 0;
-
-    return clockStamp.elapsed()*1000;
-}
-
-void QAudioOutputPrivate::reset()
-{
-    if(handle)
-        snd_pcm_reset(handle);
-
-    stop();
-}
-
-OutputPrivate::OutputPrivate(QAudioOutputPrivate* audio)
-{
-    audioDevice = qobject_cast<QAudioOutputPrivate*>(audio);
-}
-
-OutputPrivate::~OutputPrivate() {}
-
-qint64 OutputPrivate::readData( char* data, qint64 len)
-{
-    Q_UNUSED(data)
-    Q_UNUSED(len)
-
-    return 0;
-}
-
-qint64 OutputPrivate::writeData(const char* data, qint64 len)
-{
-    int retry = 0;
-    qint64 written = 0;
-    if((audioDevice->deviceState == QAudio::ActiveState)
-            ||(audioDevice->deviceState == QAudio::IdleState)) {
-        while(written < len) {
-            int chunk = audioDevice->write(data+written,(len-written));
-            if(chunk <= 0)
-                retry++;
-            written+=chunk;
-            if(retry > 10)
-                return written;
-        }
-    }
-    return written;
-
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.h b/src/multimedia/audio/qaudiooutput_alsa_p.h
deleted file mode 100644
index e6ac231..0000000
--- a/src/multimedia/audio/qaudiooutput_alsa_p.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIOOUTPUTALSA_H
-#define QAUDIOOUTPUTALSA_H
-
-#include <alsa/asoundlib.h>
-
-#include <QtCore/qfile.h>
-#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qelapsedtimer.h>
-#include <QtCore/qdatetime.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-
-QT_BEGIN_NAMESPACE
-
-class OutputPrivate;
-
-class QAudioOutputPrivate : public QAbstractAudioOutput
-{
-    friend class OutputPrivate;
-    Q_OBJECT
-public:
-    QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
-    ~QAudioOutputPrivate();
-
-    qint64 write( const char *data, qint64 len );
-
-    QIODevice* start(QIODevice* device = 0);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-    int bytesFree() const;
-    int periodSize() const;
-    void setBufferSize(int value);
-    int bufferSize() const;
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-    QAudio::Error error() const;
-    QAudio::State state() const;
-    QAudioFormat format() const;
-
-    QIODevice* audioSource;
-    QAudioFormat settings;
-    QAudio::Error errorState;
-    QAudio::State deviceState;
-
-private slots:
-    void userFeed();
-    void feedback();
-    void updateAvailable();
-    bool deviceReady();
-
-signals:
-    void processMore();
-
-private:
-    bool opened;
-    bool pullMode;
-    bool resuming;
-    int buffer_size;
-    int period_size;
-    int intervalTime;
-    qint64 totalTimeValue;
-    unsigned int buffer_time;
-    unsigned int period_time;
-    snd_pcm_uframes_t buffer_frames;
-    snd_pcm_uframes_t period_frames;
-    static void async_callback(snd_async_handler_t *ahandler);
-    int xrun_recovery(int err);
-
-    int setFormat();
-    bool open();
-    void close();
-
-    QTimer* timer;
-    QByteArray m_device;
-    int bytesAvailable;
-    QElapsedTimer timeStamp;
-    QElapsedTimer clockStamp;
-    qint64 elapsedTimeOffset;
-    char* audioBuffer;
-    snd_pcm_t* handle;
-    snd_async_handler_t* ahandler;
-    snd_pcm_access_t access;
-    snd_pcm_format_t pcmformat;
-    snd_timestamp_t* timestamp;
-    snd_pcm_hw_params_t *hwparams;
-};
-
-class OutputPrivate : public QIODevice
-{
-    friend class QAudioOutputPrivate;
-    Q_OBJECT
-public:
-    OutputPrivate(QAudioOutputPrivate* audio);
-    ~OutputPrivate();
-
-    qint64 readData( char* data, qint64 len);
-    qint64 writeData(const char* data, qint64 len);
-
-private:
-    QAudioOutputPrivate *audioDevice;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudiooutput_mac_p.cpp b/src/multimedia/audio/qaudiooutput_mac_p.cpp
deleted file mode 100644
index 9689101..0000000
--- a/src/multimedia/audio/qaudiooutput_mac_p.cpp
+++ /dev/null
@@ -1,712 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <CoreServices/CoreServices.h>
-#include <CoreAudio/CoreAudio.h>
-#include <AudioUnit/AudioUnit.h>
-#include <AudioToolbox/AudioToolbox.h>
-
-#include <QtCore/qendian.h>
-#include <QtCore/qbuffer.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qdebug.h>
-
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudiooutput.h>
-
-#include "qaudio_mac_p.h"
-#include "qaudiooutput_mac_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-
-namespace QtMultimediaInternal
-{
-
-static const int default_buffer_size = 8 * 1024;
-
-
-class QAudioOutputBuffer : public QObject
-{
-    Q_OBJECT
-
-public:
-    QAudioOutputBuffer(int bufferSize, int maxPeriodSize, QAudioFormat const& audioFormat):
-        m_deviceError(false),
-        m_maxPeriodSize(maxPeriodSize),
-        m_device(0)
-    {
-        m_buffer = new QAudioRingBuffer(bufferSize + (bufferSize % maxPeriodSize == 0 ? 0 : maxPeriodSize - (bufferSize % maxPeriodSize)));
-        m_bytesPerFrame = (audioFormat.sampleSize() / 8) * audioFormat.channels();
-        m_periodTime = m_maxPeriodSize / m_bytesPerFrame * 1000 / audioFormat.frequency();
-
-        m_fillTimer = new QTimer(this);
-        connect(m_fillTimer, SIGNAL(timeout()), SLOT(fillBuffer()));
-    }
-
-    ~QAudioOutputBuffer()
-    {
-        delete m_buffer;
-    }
-
-    qint64 readFrames(char* data, qint64 maxFrames)
-    {
-        bool    wecan = true;
-        qint64  framesRead = 0;
-
-        while (wecan && framesRead < maxFrames) {
-            QAudioRingBuffer::Region region = m_buffer->acquireReadRegion((maxFrames - framesRead) * m_bytesPerFrame);
-
-            if (region.second > 0) {
-                region.second -= region.second % m_bytesPerFrame;
-                memcpy(data + (framesRead * m_bytesPerFrame), region.first, region.second);
-                framesRead += region.second / m_bytesPerFrame;
-            }
-            else
-                wecan = false;
-
-            m_buffer->releaseReadRegion(region);
-        }
-
-        if (framesRead == 0 && m_deviceError)
-            framesRead = -1;
-
-        return framesRead;
-    }
-
-    qint64 writeBytes(const char* data, qint64 maxSize)
-    {
-        bool    wecan = true;
-        qint64  bytesWritten = 0;
-
-        maxSize -= maxSize % m_bytesPerFrame;
-        while (wecan && bytesWritten < maxSize) {
-            QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(maxSize - bytesWritten);
-
-            if (region.second > 0) {
-                memcpy(region.first, data + bytesWritten, region.second);
-                bytesWritten += region.second;
-            }
-            else
-                wecan = false;
-
-            m_buffer->releaseWriteRegion(region);
-        }
-
-        if (bytesWritten > 0)
-            emit readyRead();
-
-        return bytesWritten;
-    }
-
-    int available() const
-    {
-        return m_buffer->free();
-    }
-
-    void reset()
-    {
-        m_buffer->reset();
-        m_deviceError = false;
-    }
-
-    void setPrefetchDevice(QIODevice* device)
-    {
-        if (m_device != device) {
-            m_device = device;
-            if (m_device != 0)
-                fillBuffer();
-        }
-    }
-
-    void startFillTimer()
-    {
-        if (m_device != 0)
-            m_fillTimer->start(m_buffer->size() / 2 / m_maxPeriodSize * m_periodTime);
-    }
-
-    void stopFillTimer()
-    {
-        m_fillTimer->stop();
-    }
-
-signals:
-    void readyRead();
-
-private slots:
-    void fillBuffer()
-    {
-        const int free = m_buffer->free();
-        const int writeSize = free - (free % m_maxPeriodSize);
-
-        if (writeSize > 0) {
-            bool    wecan = true;
-            int     filled = 0;
-
-            while (!m_deviceError && wecan && filled < writeSize) {
-                QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(writeSize - filled);
-
-                if (region.second > 0) {
-                    region.second = m_device->read(region.first, region.second);
-                    if (region.second > 0)
-                        filled += region.second;
-                    else if (region.second == 0)
-                        wecan = false;
-                    else if (region.second < 0) {
-                        m_fillTimer->stop();
-                        region.second = 0;
-                        m_deviceError = true;
-                    }
-                }
-                else
-                    wecan = false;
-
-                m_buffer->releaseWriteRegion(region);
-            }
-
-            if (filled > 0)
-                emit readyRead();
-        }
-    }
-
-private:
-    bool        m_deviceError;
-    int         m_maxPeriodSize;
-    int         m_bytesPerFrame;
-    int         m_periodTime;
-    QIODevice*  m_device;
-    QTimer*     m_fillTimer;
-    QAudioRingBuffer*  m_buffer;
-};
-
-
-}
-
-class MacOutputDevice : public QIODevice
-{
-    Q_OBJECT
-
-public:
-    MacOutputDevice(QtMultimediaInternal::QAudioOutputBuffer* audioBuffer, QObject* parent):
-        QIODevice(parent),
-        m_audioBuffer(audioBuffer)
-    {
-        open(QIODevice::WriteOnly | QIODevice::Unbuffered);
-    }
-
-    qint64 readData(char* data, qint64 len)
-    {
-        Q_UNUSED(data);
-        Q_UNUSED(len);
-
-        return 0;
-    }
-
-    qint64 writeData(const char* data, qint64 len)
-    {
-        return m_audioBuffer->writeBytes(data, len);
-    }
-
-    bool isSequential() const
-    {
-        return true;
-    }
-
-private:
-    QtMultimediaInternal::QAudioOutputBuffer*    m_audioBuffer;
-};
-
-
-QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray& device, const QAudioFormat& format):
-    audioFormat(format)
-{
-    QDataStream ds(device);
-    quint32 did, mode;
-
-    ds >> did >> mode;
-
-    if (QAudio::Mode(mode) == QAudio::AudioInput)
-        errorCode = QAudio::OpenError;
-    else {
-        isOpen = false;
-        audioDeviceId = AudioDeviceID(did);
-        audioUnit = 0;
-        audioIO = 0;
-        startTime = 0;
-        totalFrames = 0;
-        audioBuffer = 0;
-        internalBufferSize = QtMultimediaInternal::default_buffer_size;
-        clockFrequency = AudioGetHostClockFrequency() / 1000;
-        errorCode = QAudio::NoError;
-        stateCode = QAudio::StoppedState;
-        audioThreadState = Stopped;
-
-        intervalTimer = new QTimer(this);
-        intervalTimer->setInterval(1000);
-        connect(intervalTimer, SIGNAL(timeout()), SIGNAL(notify()));
-    }
-}
-
-QAudioOutputPrivate::~QAudioOutputPrivate()
-{
-    close();
-}
-
-bool QAudioOutputPrivate::open()
-{
-    if (errorCode != QAudio::NoError)
-        return false;
-
-    if (isOpen)
-        return true;
-
-    ComponentDescription    cd;
-    cd.componentType = kAudioUnitType_Output;
-    cd.componentSubType = kAudioUnitSubType_HALOutput;
-    cd.componentManufacturer = kAudioUnitManufacturer_Apple;
-    cd.componentFlags = 0;
-    cd.componentFlagsMask = 0;
-
-    // Open
-    Component cp = FindNextComponent(NULL, &cd);
-    if (cp == 0) {
-        qWarning() << "QAudioOutput: Failed to find HAL Output component";
-        return false;
-    }
-
-    if (OpenAComponent(cp, &audioUnit) != noErr) {
-        qWarning() << "QAudioOutput: Unable to Open Output Component";
-        return false;
-    }
-
-    // register callback
-    AURenderCallbackStruct  cb;
-    cb.inputProc = renderCallback;
-    cb.inputProcRefCon = this;
-
-    if (AudioUnitSetProperty(audioUnit,
-                               kAudioUnitProperty_SetRenderCallback,
-                               kAudioUnitScope_Global,
-                               0,
-                               &cb,
-                               sizeof(cb)) != noErr) {
-        qWarning() << "QAudioOutput: Failed to set AudioUnit callback";
-        return false;
-    }
-
-    // Set Audio Device
-    if (AudioUnitSetProperty(audioUnit,
-                                kAudioOutputUnitProperty_CurrentDevice,
-                                kAudioUnitScope_Global,
-                                0,
-                                &audioDeviceId,
-                                sizeof(audioDeviceId)) != noErr) {
-        qWarning() << "QAudioOutput: Unable to use configured device";
-        return false;
-    }
-
-    // Set stream format
-    streamFormat = toAudioStreamBasicDescription(audioFormat);
-
-    UInt32 size = sizeof(deviceFormat);
-    if (AudioUnitGetProperty(audioUnit,
-                                kAudioUnitProperty_StreamFormat,
-                                kAudioUnitScope_Input,
-                                0,
-                                &deviceFormat,
-                                &size) != noErr) {
-        qWarning() << "QAudioOutput: Unable to retrieve device format";
-        return false;
-    }
-
-    if (AudioUnitSetProperty(audioUnit,
-                                kAudioUnitProperty_StreamFormat,
-                                kAudioUnitScope_Input,
-                                0,
-                                &streamFormat,
-                                sizeof(streamFormat)) != noErr) {
-        qWarning() << "QAudioOutput: Unable to Set Stream information";
-        return false;
-    }
-
-    // Allocate buffer
-    UInt32 numberOfFrames = 0;
-    size = sizeof(UInt32);
-    if (AudioUnitGetProperty(audioUnit,
-                                kAudioDevicePropertyBufferFrameSize,
-                                kAudioUnitScope_Global,
-                                0,
-                                &numberOfFrames,
-                                &size) != noErr) {
-        qWarning() << "QAudioInput: Failed to get audio period size";
-        return false;
-    }
-
-    periodSizeBytes = (numberOfFrames * streamFormat.mSampleRate / deviceFormat.mSampleRate) * 
-                        streamFormat.mBytesPerFrame;
-    if (internalBufferSize < periodSizeBytes * 2)
-        internalBufferSize = periodSizeBytes * 2;
-    else
-        internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
-
-    audioBuffer = new QtMultimediaInternal::QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat);
-    connect(audioBuffer, SIGNAL(readyRead()), SLOT(inputReady()));  // Pull
-
-    audioIO = new MacOutputDevice(audioBuffer, this);
-
-    // Init
-    if (AudioUnitInitialize(audioUnit)) {
-        qWarning() << "QAudioOutput: Failed to initialize AudioUnit";
-        return false;
-    }
-
-    isOpen = true;
-
-    return true;
-}
-
-void QAudioOutputPrivate::close()
-{
-    if (audioUnit != 0) {
-        AudioOutputUnitStop(audioUnit);
-        AudioUnitUninitialize(audioUnit);
-        CloseComponent(audioUnit);
-    }
-
-    delete audioBuffer;
-}
-
-QAudioFormat QAudioOutputPrivate::format() const
-{
-    return audioFormat;
-}
-
-QIODevice* QAudioOutputPrivate::start(QIODevice* device)
-{
-    QIODevice*  op = device;
-
-    if (!audioFormat.isValid() || !open()) {
-        stateCode = QAudio::StoppedState;
-        errorCode = QAudio::OpenError;
-        return audioIO;
-    }
-
-    reset();
-    audioBuffer->reset();
-    audioBuffer->setPrefetchDevice(op);
-
-    if (op == 0) {
-        op = audioIO;
-        stateCode = QAudio::IdleState;
-    }
-    else
-        stateCode = QAudio::ActiveState;
-
-    // Start
-    errorCode = QAudio::NoError;
-    totalFrames = 0;
-    startTime = AudioGetCurrentHostTime();
-
-    if (stateCode == QAudio::ActiveState)
-        audioThreadStart();
-
-    emit stateChanged(stateCode);
-
-    return op;
-}
-
-void QAudioOutputPrivate::stop()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode != QAudio::StoppedState) {
-        audioThreadDrain();
-
-        stateCode = QAudio::StoppedState;
-        errorCode = QAudio::NoError;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-void QAudioOutputPrivate::reset()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode != QAudio::StoppedState) {
-        audioThreadStop();
-
-        stateCode = QAudio::StoppedState;
-        errorCode = QAudio::NoError;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-void QAudioOutputPrivate::suspend()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::ActiveState || stateCode == QAudio::IdleState) {
-        audioThreadStop();
-
-        stateCode = QAudio::SuspendedState;
-        errorCode = QAudio::NoError;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-void QAudioOutputPrivate::resume()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::SuspendedState) {
-        audioThreadStart();
-
-        stateCode = QAudio::ActiveState;
-        errorCode = QAudio::NoError;
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-int QAudioOutputPrivate::bytesFree() const
-{
-    return audioBuffer->available();
-}
-
-int QAudioOutputPrivate::periodSize() const
-{
-    return periodSizeBytes;
-}
-
-void QAudioOutputPrivate::setBufferSize(int bs)
-{
-    if (stateCode == QAudio::StoppedState)
-        internalBufferSize = bs;
-}
-
-int QAudioOutputPrivate::bufferSize() const
-{
-    return internalBufferSize;
-}
-
-void QAudioOutputPrivate::setNotifyInterval(int milliSeconds)
-{
-    if (intervalTimer->interval() == milliSeconds)
-        return;
-
-    if (milliSeconds <= 0)
-        milliSeconds = 0;
-
-    intervalTimer->setInterval(milliSeconds);
-}
-
-int QAudioOutputPrivate::notifyInterval() const
-{
-    return intervalTimer->interval();
-}
-
-qint64 QAudioOutputPrivate::processedUSecs() const
-{
-    return totalFrames * 1000000 / audioFormat.frequency();
-}
-
-qint64 QAudioOutputPrivate::elapsedUSecs() const
-{
-    if (stateCode == QAudio::StoppedState)
-        return 0;
-
-    return (AudioGetCurrentHostTime() - startTime) / (clockFrequency / 1000);
-}
-
-QAudio::Error QAudioOutputPrivate::error() const
-{
-    return errorCode;
-}
-
-QAudio::State QAudioOutputPrivate::state() const
-{
-    return stateCode;
-}
-
-void QAudioOutputPrivate::audioThreadStart()
-{
-    startTimers();
-    audioThreadState = Running;
-    AudioOutputUnitStart(audioUnit);
-}
-
-void QAudioOutputPrivate::audioThreadStop()
-{
-    stopTimers();
-    if (audioThreadState.testAndSetAcquire(Running, Stopped))
-        threadFinished.wait(&mutex);
-}
-
-void QAudioOutputPrivate::audioThreadDrain()
-{
-    stopTimers();
-    if (audioThreadState.testAndSetAcquire(Running, Draining))
-        threadFinished.wait(&mutex);
-}
-
-void QAudioOutputPrivate::audioDeviceStop()
-{
-    AudioOutputUnitStop(audioUnit);
-    audioThreadState = Stopped;
-    threadFinished.wakeOne();
-}
-
-void QAudioOutputPrivate::audioDeviceIdle()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::ActiveState) {
-        audioDeviceStop();
-
-        errorCode = QAudio::UnderrunError;
-        stateCode = QAudio::IdleState;
-        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
-    }
-}
-
-void QAudioOutputPrivate::audioDeviceError()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::ActiveState) {
-        audioDeviceStop();
-
-        errorCode = QAudio::IOError;
-        stateCode = QAudio::StoppedState;
-        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
-    }
-}
-
-void QAudioOutputPrivate::startTimers()
-{
-    audioBuffer->startFillTimer();
-    if (intervalTimer->interval() > 0)
-        intervalTimer->start();
-}
-
-void QAudioOutputPrivate::stopTimers()
-{
-    audioBuffer->stopFillTimer();
-    intervalTimer->stop();
-}
-
-
-void QAudioOutputPrivate::deviceStopped()
-{
-    intervalTimer->stop();
-    emit stateChanged(stateCode);
-}
-
-void QAudioOutputPrivate::inputReady()
-{
-    QMutexLocker    lock(&mutex);
-    if (stateCode == QAudio::IdleState) {
-        audioThreadStart();
-
-        stateCode = QAudio::ActiveState;
-        errorCode = QAudio::NoError;
-
-        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
-    }
-}
-
-
-OSStatus QAudioOutputPrivate::renderCallback(void* inRefCon,
-                                    AudioUnitRenderActionFlags* ioActionFlags,
-                                    const AudioTimeStamp* inTimeStamp,
-                                    UInt32 inBusNumber,
-                                    UInt32 inNumberFrames,
-                                    AudioBufferList* ioData)
-{
-    Q_UNUSED(ioActionFlags)
-    Q_UNUSED(inTimeStamp)
-    Q_UNUSED(inBusNumber)
-    Q_UNUSED(inNumberFrames)
-
-    QAudioOutputPrivate* d = static_cast<QAudioOutputPrivate*>(inRefCon);
-
-    const int threadState = d->audioThreadState.fetchAndAddAcquire(0);
-    if (threadState == Stopped) {
-        ioData->mBuffers[0].mDataByteSize = 0;
-        d->audioDeviceStop();
-    }
-    else {
-        const UInt32    bytesPerFrame = d->streamFormat.mBytesPerFrame;
-        qint64          framesRead;
-
-        framesRead = d->audioBuffer->readFrames((char*)ioData->mBuffers[0].mData,
-                                                 ioData->mBuffers[0].mDataByteSize / bytesPerFrame);
-
-        if (framesRead > 0) {
-            ioData->mBuffers[0].mDataByteSize = framesRead * bytesPerFrame;
-            d->totalFrames += framesRead;
-        }
-        else {
-            ioData->mBuffers[0].mDataByteSize = 0;
-            if (framesRead == 0) {
-                if (threadState == Draining)
-                    d->audioDeviceStop();
-                else
-                    d->audioDeviceIdle();
-            }
-            else
-                d->audioDeviceError();
-        }
-    }
-
-    return noErr;
-}
-
-
-QT_END_NAMESPACE
-
-#include "qaudiooutput_mac_p.moc"
-
diff --git a/src/multimedia/audio/qaudiooutput_mac_p.h b/src/multimedia/audio/qaudiooutput_mac_p.h
deleted file mode 100644
index 752905c..0000000
--- a/src/multimedia/audio/qaudiooutput_mac_p.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIOOUTPUT_MAC_P_H
-#define QAUDIOOUTPUT_MAC_P_H
-
-#include <CoreServices/CoreServices.h>
-#include <CoreAudio/CoreAudio.h>
-#include <AudioUnit/AudioUnit.h>
-#include <AudioToolbox/AudioToolbox.h>
-
-#include <QtCore/qobject.h>
-#include <QtCore/qmutex.h>
-#include <QtCore/qwaitcondition.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qatomic.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudioengine.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QIODevice;
-
-namespace QtMultimediaInternal
-{
-class QAudioOutputBuffer;
-}
-
-class QAudioOutputPrivate : public QAbstractAudioOutput
-{
-    Q_OBJECT
-
-public:
-    bool            isOpen;
-    int             internalBufferSize;
-    int             periodSizeBytes;
-    qint64          totalFrames;
-    QAudioFormat    audioFormat;
-    QIODevice*      audioIO;
-    AudioDeviceID   audioDeviceId;
-    AudioUnit       audioUnit;
-    Float64         clockFrequency;
-    UInt64          startTime;
-    AudioStreamBasicDescription deviceFormat;
-    AudioStreamBasicDescription streamFormat;
-    QtMultimediaInternal::QAudioOutputBuffer*   audioBuffer;
-    QAtomicInt      audioThreadState;
-    QWaitCondition  threadFinished;
-    QMutex          mutex;
-    QTimer*         intervalTimer;
-
-    QAudio::Error    errorCode;
-    QAudio::State    stateCode;
-
-    QAudioOutputPrivate(const QByteArray& device, const QAudioFormat& format);
-    ~QAudioOutputPrivate();
-
-    bool open();
-    void close();
-
-    QAudioFormat format() const;
-
-    QIODevice* start(QIODevice* device);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-
-    int bytesFree() const;
-    int periodSize() const;
-
-    void setBufferSize(int value);
-    int bufferSize() const;
-
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-
-    QAudio::Error error() const;
-    QAudio::State state() const;
-
-    void audioThreadStart();
-    void audioThreadStop();
-    void audioThreadDrain();
-
-    void audioDeviceStop();
-    void audioDeviceIdle();
-    void audioDeviceError();
-
-    void startTimers();
-    void stopTimers();
-
-private slots:
-    void deviceStopped();
-    void inputReady();
-
-private:
-    enum { Running, Draining, Stopped };
-
-    static OSStatus renderCallback(void* inRefCon,
-                                    AudioUnitRenderActionFlags* ioActionFlags,
-                                    const AudioTimeStamp* inTimeStamp,
-                                    UInt32 inBusNumber,
-                                    UInt32 inNumberFrames,
-                                    AudioBufferList* ioData);
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/audio/qaudiooutput_symbian_p.cpp b/src/multimedia/audio/qaudiooutput_symbian_p.cpp
deleted file mode 100644
index 3f8e933..0000000
--- a/src/multimedia/audio/qaudiooutput_symbian_p.cpp
+++ /dev/null
@@ -1,697 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qaudiooutput_symbian_p.h"
-
-QT_BEGIN_NAMESPACE
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-const int UnderflowTimerInterval = 50; // ms
-
-
-//-----------------------------------------------------------------------------
-// Private class
-//-----------------------------------------------------------------------------
-
-SymbianAudioOutputPrivate::SymbianAudioOutputPrivate(
-                               QAudioOutputPrivate *audioDevice)
-    :   m_audioDevice(audioDevice)
-{
-
-}
-
-SymbianAudioOutputPrivate::~SymbianAudioOutputPrivate()
-{
-
-}
-
-qint64 SymbianAudioOutputPrivate::readData(char *data, qint64 len)
-{
-    Q_UNUSED(data)
-    Q_UNUSED(len)
-    return 0;
-}
-
-qint64 SymbianAudioOutputPrivate::writeData(const char *data, qint64 len)
-{
-    qint64 totalWritten = 0;
-
-    if (m_audioDevice->state() == QAudio::ActiveState ||
-        m_audioDevice->state() == QAudio::IdleState) {
-
-        while (totalWritten < len) {
-            const qint64 written = m_audioDevice->pushData(data + totalWritten,
-                                                           len - totalWritten);
-            if (written > 0)
-                totalWritten += written;
-            else
-                break;
-        }
-    }
-
-    return totalWritten;
-}
-
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device,
-                                       const QAudioFormat &format)
-    :   m_device(device)
-    ,   m_format(format)
-    ,   m_clientBufferSize(SymbianAudio::DefaultBufferSize)
-    ,   m_notifyInterval(SymbianAudio::DefaultNotifyInterval)
-    ,   m_notifyTimer(new QTimer(this))
-    ,   m_error(QAudio::NoError)
-    ,   m_internalState(SymbianAudio::ClosedState)
-    ,   m_externalState(QAudio::StoppedState)
-    ,   m_pullMode(false)
-    ,   m_source(0)
-    ,   m_devSoundBuffer(0)
-    ,   m_devSoundBufferSize(0)
-    ,   m_bytesWritten(0)
-    ,   m_pushDataReady(false)
-    ,   m_bytesPadding(0)
-    ,   m_underflow(false)
-    ,   m_lastBuffer(false)
-    ,   m_underflowTimer(new QTimer(this))
-    ,   m_samplesPlayed(0)
-    ,   m_totalSamplesPlayed(0)
-{
-    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
-
-    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
-                                          m_nativeFormat);
-
-    m_underflowTimer->setInterval(UnderflowTimerInterval);
-    connect(m_underflowTimer.data(), SIGNAL(timeout()), this,
-            SLOT(underflowTimerExpired()));
-}
-
-QAudioOutputPrivate::~QAudioOutputPrivate()
-{
-    close();
-}
-
-QIODevice* QAudioOutputPrivate::start(QIODevice *device)
-{
-    stop();
-
-    // We have to set these before the call to open() because of the
-    // logic in initializingState()
-    if (device) {
-        m_pullMode = true;
-        m_source = device;
-    }
-
-    open();
-
-    if (SymbianAudio::ClosedState != m_internalState) {
-        if (device) {
-            connect(m_source, SIGNAL(readyRead()), this, SLOT(dataReady()));
-        } else {
-            m_source = new SymbianAudioOutputPrivate(this);
-            m_source->open(QIODevice::WriteOnly | QIODevice::Unbuffered);
-        }
-
-        m_elapsed.restart();
-    }
-
-    return m_source;
-}
-
-void QAudioOutputPrivate::stop()
-{
-    close();
-}
-
-void QAudioOutputPrivate::reset()
-{
-    m_totalSamplesPlayed += getSamplesPlayed();
-    m_devSound->Stop();
-    m_bytesPadding = 0;
-    startPlayback();
-}
-
-void QAudioOutputPrivate::suspend()
-{
-    if (SymbianAudio::ActiveState == m_internalState
-        || SymbianAudio::IdleState == m_internalState) {
-        m_notifyTimer->stop();
-        m_underflowTimer->stop();
-
-        const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
-                                          m_format, m_bytesWritten);
-
-        const qint64 samplesPlayed = getSamplesPlayed();
-
-        m_bytesWritten = 0;
-
-        // CMMFDevSound::Pause() is not guaranteed to work correctly in all
-        // implementations, for play-mode DevSound sessions.  We therefore
-        // have to implement suspend() by calling CMMFDevSound::Stop().
-        // Because this causes buffered data to be dropped, we replace the
-        // lost data with silence following a call to resume(), in order to
-        // ensure that processedUSecs() returns the correct value.
-        m_devSound->Stop();
-        m_totalSamplesPlayed += samplesPlayed;
-
-        // Calculate the amount of data dropped
-        const qint64 paddingSamples = samplesWritten - samplesPlayed;
-        m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format,
-                                                             paddingSamples);
-
-        setState(SymbianAudio::SuspendedState);
-    }
-}
-
-void QAudioOutputPrivate::resume()
-{
-    if (SymbianAudio::SuspendedState == m_internalState)
-        startPlayback();
-}
-
-int QAudioOutputPrivate::bytesFree() const
-{
-    int result = 0;
-    if (m_devSoundBuffer) {
-        const TDes8 &outputBuffer = m_devSoundBuffer->Data();
-        result = outputBuffer.MaxLength() - outputBuffer.Length();
-    }
-    return result;
-}
-
-int QAudioOutputPrivate::periodSize() const
-{
-    return bufferSize();
-}
-
-void QAudioOutputPrivate::setBufferSize(int value)
-{
-    // Note that DevSound does not allow its client to specify the buffer size.
-    // This functionality is available via custom interfaces, but since these
-    // cannot be guaranteed to work across all DevSound implementations, we
-    // do not use them here.
-    // In order to comply with the expected bevahiour of QAudioOutput, we store
-    // the value and return it from bufferSize(), but the underlying DevSound
-    // buffer size remains unchanged.
-    if (value > 0)
-        m_clientBufferSize = value;
-}
-
-int QAudioOutputPrivate::bufferSize() const
-{
-    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
-}
-
-void QAudioOutputPrivate::setNotifyInterval(int ms)
-{
-    if (ms > 0) {
-        const int oldNotifyInterval = m_notifyInterval;
-        m_notifyInterval = ms;
-        if (m_notifyTimer->isActive() && ms != oldNotifyInterval)
-            m_notifyTimer->start(m_notifyInterval);
-    }
-}
-
-int QAudioOutputPrivate::notifyInterval() const
-{
-    return m_notifyInterval;
-}
-
-qint64 QAudioOutputPrivate::processedUSecs() const
-{
-    int samplesPlayed = 0;
-    if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
-        samplesPlayed = getSamplesPlayed();
-
-    // Protect against division by zero
-    Q_ASSERT_X(m_format.frequency() > 0, Q_FUNC_INFO, "Invalid frequency");
-
-    const qint64 result = qint64(1000000) *
-                          (samplesPlayed + m_totalSamplesPlayed)
-                        / m_format.frequency();
-
-    return result;
-}
-
-qint64 QAudioOutputPrivate::elapsedUSecs() const
-{
-    const qint64 result = (QAudio::StoppedState == state()) ?
-                              0 : m_elapsed.elapsed() * 1000;
-    return result;
-}
-
-QAudio::Error QAudioOutputPrivate::error() const
-{
-    return m_error;
-}
-
-QAudio::State QAudioOutputPrivate::state() const
-{
-    return m_externalState;
-}
-
-QAudioFormat QAudioOutputPrivate::format() const
-{
-    return m_format;
-}
-
-//-----------------------------------------------------------------------------
-// MDevSoundObserver implementation
-//-----------------------------------------------------------------------------
-
-void QAudioOutputPrivate::InitializeComplete(TInt aError)
-{
-    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
-        Q_FUNC_INFO, "Invalid state");
-
-    if (KErrNone == aError)
-        startPlayback();
-}
-
-void QAudioOutputPrivate::ToneFinished(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound's tone playback functions, so should
-    // never receive this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioOutputPrivate::BufferToBeFilled(CMMFBuffer *aBuffer)
-{
-    // Following receipt of this callback, DevSound should not provide another
-    // buffer until we have returned the current one.
-    Q_ASSERT_X(!m_devSoundBuffer, Q_FUNC_INFO, "Buffer already held");
-
-    // Will be returned to DevSound by bufferFilled().
-    m_devSoundBuffer = static_cast<CMMFDataBuffer*>(aBuffer);
-
-    if (!m_devSoundBufferSize)
-        m_devSoundBufferSize = m_devSoundBuffer->Data().MaxLength();
-
-    writePaddingData();
-
-    if (m_pullMode && isDataReady() && !m_bytesPadding)
-        pullData();
-}
-
-void QAudioOutputPrivate::PlayError(TInt aError)
-{
-    switch (aError) {
-    case KErrUnderflow:
-        m_underflow = true;
-        if (m_pullMode && !m_lastBuffer)
-            setError(QAudio::UnderrunError);
-        else
-            setState(SymbianAudio::IdleState);
-        break;
-    default:
-        setError(QAudio::IOError);
-        break;
-    }
-}
-
-void QAudioOutputPrivate::BufferToBeEmptied(CMMFBuffer *aBuffer)
-{
-    Q_UNUSED(aBuffer)
-    // This class doesn't use DevSound in record mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioOutputPrivate::RecordError(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound in record mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioOutputPrivate::ConvertError(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound's format conversion functions, so
-    // should never receive this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void QAudioOutputPrivate::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
-{
-    Q_UNUSED(aMessageType)
-    Q_UNUSED(aMsg)
-    // Ignore this callback.
-}
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-void QAudioOutputPrivate::dataReady()
-{
-    // Client-provided QIODevice has data ready to read.
-
-    Q_ASSERT_X(m_source->bytesAvailable(), Q_FUNC_INFO,
-        "readyRead signal received, but no data available");
-
-    if (!m_bytesPadding)
-        pullData();
-}
-
-void QAudioOutputPrivate::underflowTimerExpired()
-{
-    const TInt samplesPlayed = getSamplesPlayed();
-    if (m_samplesPlayed && (samplesPlayed == m_samplesPlayed)) {
-        setError(QAudio::UnderrunError);
-    } else {
-        m_samplesPlayed = samplesPlayed;
-        m_underflowTimer->start();
-    }
-}
-
-void QAudioOutputPrivate::open()
-{
-    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
-        Q_FUNC_INFO, "DevSound already opened");
-
-    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
-
-    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
-        new SymbianAudio::DevSoundCapabilities(*m_devSound,
-                                               QAudio::AudioOutput));
-
-    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
-                  KErrNone : KErrNotSupported;
-
-    if (KErrNone == err) {
-        setState(SymbianAudio::InitializingState);
-        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
-                                          EMMFStatePlaying));
-    }
-
-    if (KErrNone != err) {
-        setError(QAudio::OpenError);
-        m_devSound.reset();
-    }
-}
-
-void QAudioOutputPrivate::startPlayback()
-{
-    TRAPD(err, startDevSoundL());
-    if (KErrNone == err) {
-        if (isDataReady())
-            setState(SymbianAudio::ActiveState);
-        else
-            setState(SymbianAudio::IdleState);
-
-        m_notifyTimer->start(m_notifyInterval);
-        m_underflow = false;
-
-        Q_ASSERT(m_devSound->SamplesPlayed() == 0);
-
-        writePaddingData();
-
-        if (m_pullMode && m_source->bytesAvailable() && !m_bytesPadding)
-            dataReady();
-    } else {
-        setError(QAudio::OpenError);
-        close();
-    }
-}
-
-void QAudioOutputPrivate::startDevSoundL()
-{
-    TMMFCapabilities nativeFormat = m_devSound->Config();
-    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
-    m_devSound->SetConfigL(m_nativeFormat);
-    m_devSound->PlayInitL();
-}
-
-void QAudioOutputPrivate::writePaddingData()
-{
-    // See comments in suspend()
-
-    while (m_devSoundBuffer && m_bytesPadding) {
-        if (SymbianAudio::IdleState == m_internalState)
-            setState(SymbianAudio::ActiveState);
-
-        TDes8 &outputBuffer = m_devSoundBuffer->Data();
-        const qint64 outputBytes = bytesFree();
-        const qint64 paddingBytes = outputBytes < m_bytesPadding ?
-                                        outputBytes : m_bytesPadding;
-        unsigned char *ptr = const_cast<unsigned char*>(outputBuffer.Ptr());
-        Mem::FillZ(ptr, paddingBytes);
-        outputBuffer.SetLength(outputBuffer.Length() + paddingBytes);
-        m_bytesPadding -= paddingBytes;
-
-        if (m_pullMode && m_source->atEnd())
-            lastBufferFilled();
-        if (paddingBytes == outputBytes)
-            bufferFilled();
-    }
-}
-
-qint64 QAudioOutputPrivate::pushData(const char *data, qint64 len)
-{
-    // Data has been written to SymbianAudioOutputPrivate
-
-    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO,
-        "pushData called when in pull mode");
-
-    const unsigned char *const inputPtr =
-        reinterpret_cast<const unsigned char*>(data);
-    qint64 bytesWritten = 0;
-
-    if (SymbianAudio::IdleState == m_internalState)
-        setState(SymbianAudio::ActiveState);
-
-    while (m_devSoundBuffer && (bytesWritten < len)) {
-        // writePaddingData() is called from BufferToBeFilled(), so we should
-        // never have any padding data left at this point.
-        Q_ASSERT_X(0 == m_bytesPadding, Q_FUNC_INFO,
-            "Padding bytes remaining in pushData");
-
-        TDes8 &outputBuffer = m_devSoundBuffer->Data();
-
-        const qint64 outputBytes = bytesFree();
-        const qint64 inputBytes = len - bytesWritten;
-        const qint64 copyBytes = outputBytes < inputBytes ?
-                                     outputBytes : inputBytes;
-
-        outputBuffer.Append(inputPtr + bytesWritten, copyBytes);
-        bytesWritten += copyBytes;
-
-        bufferFilled();
-    }
-
-    m_pushDataReady = (bytesWritten < len);
-
-    // If DevSound is still initializing (m_internalState == InitializingState),
-    // we cannot transition m_internalState to ActiveState, but we must emit
-    // an (external) state change from IdleState to ActiveState.  The following
-    // call triggers this signal.
-    setState(m_internalState);
-
-    return bytesWritten;
-}
-
-void QAudioOutputPrivate::pullData()
-{
-    Q_ASSERT_X(m_pullMode, Q_FUNC_INFO,
-        "pullData called when in push mode");
-
-    if (m_bytesPadding)
-        m_bytesPadding = 1;
-
-    // writePaddingData() is called by BufferToBeFilled() before pullData(),
-    // so we should never have any padding data left at this point.
-    Q_ASSERT_X(0 == m_bytesPadding, Q_FUNC_INFO,
-        "Padding bytes remaining in pullData");
-
-    qint64 inputBytes = m_source->bytesAvailable();
-    while (m_devSoundBuffer && inputBytes) {
-        if (SymbianAudio::IdleState == m_internalState)
-            setState(SymbianAudio::ActiveState);
-
-        TDes8 &outputBuffer = m_devSoundBuffer->Data();
-
-        const qint64 outputBytes = bytesFree();
-        const qint64 copyBytes = outputBytes < inputBytes ?
-                                     outputBytes : inputBytes;
-
-        char *outputPtr = (char*)(outputBuffer.Ptr() + outputBuffer.Length());
-        const qint64 bytesCopied = m_source->read(outputPtr, copyBytes);
-        Q_ASSERT(bytesCopied == copyBytes);
-        outputBuffer.SetLength(outputBuffer.Length() + bytesCopied);
-        inputBytes -= bytesCopied;
-
-        if (m_source->atEnd())
-            lastBufferFilled();
-        else if (copyBytes == outputBytes)
-            bufferFilled();
-    }
-}
-
-void QAudioOutputPrivate::bufferFilled()
-{
-    Q_ASSERT_X(m_devSoundBuffer, Q_FUNC_INFO, "No buffer to return");
-
-    const TDes8 &outputBuffer = m_devSoundBuffer->Data();
-    m_bytesWritten += outputBuffer.Length();
-
-    m_devSoundBuffer = 0;
-
-    m_samplesPlayed = getSamplesPlayed();
-    m_underflowTimer->start();
-
-    if (QAudio::UnderrunError == m_error)
-        m_error = QAudio::NoError;
-
-    m_devSound->PlayData();
-}
-
-void QAudioOutputPrivate::lastBufferFilled()
-{
-    Q_ASSERT_X(m_devSoundBuffer, Q_FUNC_INFO, "No buffer to fill");
-    Q_ASSERT_X(!m_lastBuffer, Q_FUNC_INFO, "Last buffer already sent");
-    m_lastBuffer = true;
-    m_devSoundBuffer->SetLastBuffer(ETrue);
-    bufferFilled();
-}
-
-void QAudioOutputPrivate::close()
-{
-    m_notifyTimer->stop();
-    m_underflowTimer->stop();
-
-    m_error = QAudio::NoError;
-
-    if (m_devSound)
-        m_devSound->Stop();
-    m_devSound.reset();
-    m_devSoundBuffer = 0;
-    m_devSoundBufferSize = 0;
-
-    if (!m_pullMode) // m_source is owned
-        delete m_source;
-    m_pullMode = false;
-    m_source = 0;
-
-    m_bytesWritten = 0;
-    m_pushDataReady = false;
-    m_bytesPadding = 0;
-    m_underflow = false;
-    m_lastBuffer = false;
-    m_samplesPlayed = 0;
-    m_totalSamplesPlayed = 0;
-
-    setState(SymbianAudio::ClosedState);
-}
-
-qint64 QAudioOutputPrivate::getSamplesPlayed() const
-{
-    qint64 result = 0;
-    if (m_devSound) {
-        const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
-                                          m_format, m_bytesWritten);
-
-        if (m_underflow) {
-            result = samplesWritten;
-        } else {
-            // This is necessary because some DevSound implementations report
-            // that they have played more data than has actually been provided to them
-            // by the client.
-            const qint64 devSoundSamplesPlayed(m_devSound->SamplesPlayed());
-            result = qMin(devSoundSamplesPlayed, samplesWritten);
-        }
-    }
-    return result;
-}
-
-void QAudioOutputPrivate::setError(QAudio::Error error)
-{
-    m_error = error;
-
-    // Although no state transition actually occurs here, a stateChanged event
-    // must be emitted to inform the client that the call to start() was
-    // unsuccessful.
-    if (QAudio::OpenError == error)
-        emit stateChanged(QAudio::StoppedState);
-
-    if (QAudio::UnderrunError == error)
-        setState(SymbianAudio::IdleState);
-    else
-        // Close the DevSound instance.  This causes a transition to
-        // StoppedState.  This must be done asynchronously in case the
-        // current function was called from a DevSound event handler, in which
-        // case deleting the DevSound instance may cause an exception.
-        QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection);
-}
-
-void QAudioOutputPrivate::setState(SymbianAudio::State newInternalState)
-{
-    const QAudio::State oldExternalState = m_externalState;
-    m_internalState = newInternalState;
-    m_externalState = SymbianAudio::Utils::stateNativeToQt(
-                            m_internalState, initializingState());
-
-    if (m_externalState != oldExternalState)
-        emit stateChanged(m_externalState);
-}
-
-bool QAudioOutputPrivate::isDataReady() const
-{
-    return (m_source && m_source->bytesAvailable())
-        ||  m_bytesPadding
-        ||  m_pushDataReady;
-}
-
-QAudio::State QAudioOutputPrivate::initializingState() const
-{
-    return isDataReady() ? QAudio::ActiveState : QAudio::IdleState;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiooutput_symbian_p.h b/src/multimedia/audio/qaudiooutput_symbian_p.h
deleted file mode 100644
index 00ccb24..0000000
--- a/src/multimedia/audio/qaudiooutput_symbian_p.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIOOUTPUT_SYMBIAN_P_H
-#define QAUDIOOUTPUT_SYMBIAN_P_H
-
-#include <QtMultimedia/qaudioengine.h>
-#include <QTime>
-#include <QTimer>
-#include <sounddevice.h>
-#include "qaudio_symbian_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QAudioOutputPrivate;
-
-class SymbianAudioOutputPrivate : public QIODevice
-{
-    friend class QAudioOutputPrivate;
-    Q_OBJECT
-public:
-    SymbianAudioOutputPrivate(QAudioOutputPrivate *audio);
-    ~SymbianAudioOutputPrivate();
-
-    qint64 readData(char *data, qint64 len);
-    qint64 writeData(const char *data, qint64 len);
-
-private:
-    QAudioOutputPrivate *const m_audioDevice;
-};
-
-class QAudioOutputPrivate
-    :   public QAbstractAudioOutput
-    ,   public MDevSoundObserver
-{
-    friend class SymbianAudioOutputPrivate;
-    Q_OBJECT
-public:
-    QAudioOutputPrivate(const QByteArray &device,
-                       const QAudioFormat &audioFormat);
-    ~QAudioOutputPrivate();
-
-    // QAbstractAudioOutput
-    QIODevice* start(QIODevice *device = 0);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-    int bytesFree() const;
-    int periodSize() const;
-    void setBufferSize(int value);
-    int bufferSize() const;
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-    QAudio::Error error() const;
-    QAudio::State state() const;
-    QAudioFormat format() const;
-
-    // MDevSoundObserver
-    void InitializeComplete(TInt aError);
-    void ToneFinished(TInt aError);
-    void BufferToBeFilled(CMMFBuffer *aBuffer);
-    void PlayError(TInt aError);
-    void BufferToBeEmptied(CMMFBuffer *aBuffer);
-    void RecordError(TInt aError);
-    void ConvertError(TInt aError);
-    void DeviceMessage(TUid aMessageType, const TDesC8 &aMsg);
-
-private slots:
-    void dataReady();
-    void underflowTimerExpired();
-
-private:
-   void open();
-   void startPlayback();
-   void startDevSoundL();
-   void writePaddingData();
-   qint64 pushData(const char *data, qint64 len);
-   void pullData();
-   void bufferFilled();
-   void lastBufferFilled();
-   Q_INVOKABLE void close();
-
-   qint64 getSamplesPlayed() const;
-
-   void setError(QAudio::Error error);
-   void setState(SymbianAudio::State state);
-
-   bool isDataReady() const;
-   QAudio::State initializingState() const;
-
-private:
-    const QByteArray m_device;
-    const QAudioFormat m_format;
-
-    int m_clientBufferSize;
-    int m_notifyInterval;
-    QScopedPointer<QTimer> m_notifyTimer;
-    QTime m_elapsed;
-    QAudio::Error m_error;
-
-    SymbianAudio::State m_internalState;
-    QAudio::State m_externalState;
-
-    bool m_pullMode;
-    QIODevice *m_source;
-
-    QScopedPointer<CMMFDevSound> m_devSound;
-    TUint32 m_nativeFourCC;
-    TMMFCapabilities m_nativeFormat;
-
-    // Buffer provided by DevSound, to be filled with data.
-    CMMFDataBuffer *m_devSoundBuffer;
-
-    int m_devSoundBufferSize;
-
-    // Number of bytes transferred from QIODevice to QAudioOutput.  It is
-    // necessary to count this because data is dropped when suspend() is
-    // called.  The difference between the position reported by DevSound and
-    // this value allows us to calculate m_bytesPadding;
-    quint32 m_bytesWritten;
-
-    // True if client has provided data while the audio subsystem was not
-    // ready to consume it.
-    bool m_pushDataReady;
-
-    // Number of zero bytes which will be written when client calls resume().
-    quint32 m_bytesPadding;
-
-    // True if PlayError(KErrUnderflow) has been called.
-    bool m_underflow;
-
-    // True if a buffer marked with the "last buffer" flag has been provided
-    // to DevSound.
-    bool m_lastBuffer;
-
-    // Some DevSound implementations ignore all underflow errors raised by the
-    // audio driver, unless the last buffer flag has been set by the client.
-    // In push-mode playback, this flag will never be set, so the underflow
-    // error will never be reported.  In order to work around this, a timer
-    // is used, which gets reset every time the client provides more data.  If
-    // the timer expires, an underflow error is raised by this object.
-    QScopedPointer<QTimer> m_underflowTimer;
-
-    // Result of previous call to CMMFDevSound::SamplesPlayed().  This value is
-    // used to determine whether, when m_underflowTimer expires, an
-    // underflow error has actually occurred.
-    quint32 m_samplesPlayed;
-
-    // Samples played up to the last call to suspend().  It is necessary
-    // to cache this because suspend() is implemented using
-    // CMMFDevSound::Stop(), which resets DevSound's SamplesPlayed() counter.
-    quint32 m_totalSamplesPlayed;
-
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp
deleted file mode 100644
index 13bce58..0000000
--- a/src/multimedia/audio/qaudiooutput_win32_p.cpp
+++ /dev/null
@@ -1,606 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qaudiooutput_win32_p.h"
-
-//#define DEBUG_AUDIO 1
-
-QT_BEGIN_NAMESPACE
-
-static const int minimumIntervalTime = 50;
-
-QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
-    settings(audioFormat)
-{
-    bytesAvailable = 0;
-    buffer_size = 0;
-    period_size = 0;
-    m_device = device;
-    totalTimeValue = 0;
-    intervalTime = 1000;
-    audioBuffer = 0;
-    errorState = QAudio::NoError;
-    deviceState = QAudio::StoppedState;
-    audioSource = 0;
-    pullMode = true;
-    finished = false;
-    InitializeCriticalSection(&waveOutCriticalSection);
-}
-
-QAudioOutputPrivate::~QAudioOutputPrivate()
-{
-    EnterCriticalSection(&waveOutCriticalSection);
-    finished = true;
-    LeaveCriticalSection(&waveOutCriticalSection);
-
-    close();
-    DeleteCriticalSection(&waveOutCriticalSection);
-}
-
-void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
-        DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 )
-{
-    Q_UNUSED(dwParam1)
-    Q_UNUSED(dwParam2)
-    Q_UNUSED(hWaveOut)
-
-    QAudioOutputPrivate* qAudio;
-    qAudio = (QAudioOutputPrivate*)(dwInstance);
-    if(!qAudio)
-        return;
-
-    switch(uMsg) {
-        case WOM_OPEN:
-            qAudio->feedback();
-            break;
-        case WOM_CLOSE:
-            return;
-        case WOM_DONE:
-            EnterCriticalSection(&qAudio->waveOutCriticalSection);
-            if(qAudio->finished || qAudio->buffer_size == 0 || qAudio->period_size == 0) {
-                LeaveCriticalSection(&qAudio->waveOutCriticalSection);
-                return;
-	    }
-            qAudio->waveFreeBlockCount++;
-            if(qAudio->waveFreeBlockCount >= qAudio->buffer_size/qAudio->period_size)
-                qAudio->waveFreeBlockCount = qAudio->buffer_size/qAudio->period_size;
-            qAudio->feedback();
-            LeaveCriticalSection(&qAudio->waveOutCriticalSection);
-            break;
-        default:
-            return;
-    }
-}
-
-WAVEHDR* QAudioOutputPrivate::allocateBlocks(int size, int count)
-{
-    int i;
-    unsigned char* buffer;
-    WAVEHDR* blocks;
-    DWORD totalBufferSize = (size + sizeof(WAVEHDR))*count;
-
-    if((buffer=(unsigned char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
-                    totalBufferSize)) == 0) {
-        qWarning("QAudioOutput: Memory allocation error");
-        return 0;
-    }
-    blocks = (WAVEHDR*)buffer;
-    buffer += sizeof(WAVEHDR)*count;
-    for(i = 0; i < count; i++) {
-        blocks[i].dwBufferLength = size;
-        blocks[i].lpData = (LPSTR)buffer;
-        buffer += size;
-    }
-    return blocks;
-}
-
-void QAudioOutputPrivate::freeBlocks(WAVEHDR* blockArray)
-{
-    WAVEHDR* blocks = blockArray;
-
-    int count = buffer_size/period_size;
-
-    for(int i = 0; i < count; i++) {
-        waveOutUnprepareHeader(hWaveOut,&blocks[i], sizeof(WAVEHDR));
-        blocks+=sizeof(WAVEHDR);
-    }
-    HeapFree(GetProcessHeap(), 0, blockArray);
-}
-
-QAudioFormat QAudioOutputPrivate::format() const
-{
-    return settings;
-}
-
-QIODevice* QAudioOutputPrivate::start(QIODevice* device)
-{
-    if(deviceState != QAudio::StoppedState)
-        close();
-
-    if(!pullMode && audioSource) {
-        delete audioSource;
-    }
-
-    if(device) {
-        //set to pull mode
-        pullMode = true;
-        audioSource = device;
-        deviceState = QAudio::ActiveState;
-    } else {
-        //set to push mode
-        pullMode = false;
-        audioSource = new OutputPrivate(this);
-        audioSource->open(QIODevice::WriteOnly|QIODevice::Unbuffered);
-        deviceState = QAudio::IdleState;
-    }
-
-    if( !open() )
-        return 0;
-
-    emit stateChanged(deviceState);
-
-    return audioSource;
-}
-
-void QAudioOutputPrivate::stop()
-{
-    if(deviceState == QAudio::StoppedState)
-        return;
-    close();
-    if(!pullMode && audioSource) {
-        delete audioSource;
-        audioSource = 0;
-    }
-    emit stateChanged(deviceState);
-}
-
-bool QAudioOutputPrivate::open()
-{
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
-#endif
-    if (!(settings.frequency() >= 8000 && settings.frequency() <= 48000)) {
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-        qWarning("QAudioOutput: open error, frequency out of range.");
-        return false;
-    }
-    if(buffer_size == 0) {
-        // Default buffer size, 200ms, default period size is 40ms
-        buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2;
-	period_size = buffer_size/5;
-    } else {
-        period_size = buffer_size/5;
-    }
-    waveBlocks = allocateBlocks(period_size, buffer_size/period_size);
-
-    EnterCriticalSection(&waveOutCriticalSection);
-    waveFreeBlockCount = buffer_size/period_size;
-    LeaveCriticalSection(&waveOutCriticalSection);
-
-    waveCurrentBlock = 0;
-
-    if(audioBuffer == 0)
-        audioBuffer = new char[buffer_size];
-
-    timeStamp.restart();
-    elapsedTimeOffset = 0;
-
-    wfx.nSamplesPerSec = settings.frequency();
-    wfx.wBitsPerSample = settings.sampleSize();
-    wfx.nChannels = settings.channels();
-    wfx.cbSize = 0;
-
-    wfx.wFormatTag = WAVE_FORMAT_PCM;
-    wfx.nBlockAlign = (wfx.wBitsPerSample >> 3) * wfx.nChannels;
-    wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
-
-    UINT_PTR devId = WAVE_MAPPER;
-
-    WAVEOUTCAPS woc;
-    unsigned long iNumDevs,ii;
-    iNumDevs = waveOutGetNumDevs();
-    for(ii=0;ii<iNumDevs;ii++) {
-        if(waveOutGetDevCaps(ii, &woc, sizeof(WAVEOUTCAPS))
-	    == MMSYSERR_NOERROR) {
-	    QString tmp;
-	    tmp = QString((const QChar *)woc.szPname);
-            if(tmp.compare(QLatin1String(m_device)) == 0) {
-	        devId = ii;
-		break;
-	    }
-	}
-    }
-
-    if(waveOutOpen(&hWaveOut, devId, &wfx,
-                (DWORD_PTR)&waveOutProc,
-                (DWORD_PTR) this,
-                CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
-        errorState = QAudio::OpenError;
-        deviceState = QAudio::StoppedState;
-        emit stateChanged(deviceState);
-        qWarning("QAudioOutput: open error");
-        return false;
-    }
-
-    totalTimeValue = 0;
-    timeStampOpened.restart();
-    elapsedTimeOffset = 0;
-
-    errorState = QAudio::NoError;
-    if(pullMode) {
-        deviceState = QAudio::ActiveState;
-        QTimer::singleShot(10, this, SLOT(feedback()));
-    } else
-        deviceState = QAudio::IdleState;
-
-    return true;
-}
-
-void QAudioOutputPrivate::close()
-{
-    if(deviceState == QAudio::StoppedState)
-        return;
-
-    deviceState = QAudio::StoppedState;
-    errorState = QAudio::NoError;
-    int delay = (buffer_size-bytesFree())*1000/(settings.frequency()
-                  *settings.channels()*(settings.sampleSize()/8));
-    waveOutReset(hWaveOut);
-    Sleep(delay+10);
-
-    freeBlocks(waveBlocks);
-    waveOutClose(hWaveOut);
-    delete [] audioBuffer;
-    audioBuffer = 0;
-    buffer_size = 0;
-}
-
-int QAudioOutputPrivate::bytesFree() const
-{
-    int buf;
-    buf = waveFreeBlockCount*period_size;
-
-    return buf;
-}
-
-int QAudioOutputPrivate::periodSize() const
-{
-    return period_size;
-}
-
-void QAudioOutputPrivate::setBufferSize(int value)
-{
-    if(deviceState == QAudio::StoppedState)
-        buffer_size = value;
-}
-
-int QAudioOutputPrivate::bufferSize() const
-{
-    return buffer_size;
-}
-
-void QAudioOutputPrivate::setNotifyInterval(int ms)
-{
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
-}
-
-int QAudioOutputPrivate::notifyInterval() const
-{
-    return intervalTime;
-}
-
-qint64 QAudioOutputPrivate::processedUSecs() const
-{
-    if (deviceState == QAudio::StoppedState)
-        return 0;
-    qint64 result = qint64(1000000) * totalTimeValue /
-        (settings.channels()*(settings.sampleSize()/8)) /
-        settings.frequency();
-
-    return result;
-}
-
-qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
-{
-    // Write out some audio data
-    if (deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
-        return 0;
-
-    char* p = (char*)data;
-    int l = (int)len;
-
-    WAVEHDR* current;
-    int remain;
-    current = &waveBlocks[waveCurrentBlock];
-    while(l > 0) {
-        EnterCriticalSection(&waveOutCriticalSection);
-        if(waveFreeBlockCount==0) {
-            LeaveCriticalSection(&waveOutCriticalSection);
-            break;
-        }
-        LeaveCriticalSection(&waveOutCriticalSection);
-
-        if(current->dwFlags & WHDR_PREPARED)
-            waveOutUnprepareHeader(hWaveOut, current, sizeof(WAVEHDR));
-
-        if(l < period_size)
-            remain = l;
-        else
-            remain = period_size;
-        memcpy(current->lpData, p, remain);
-
-        l -= remain;
-        p += remain;
-        current->dwBufferLength = remain;
-        waveOutPrepareHeader(hWaveOut, current, sizeof(WAVEHDR));
-        waveOutWrite(hWaveOut, current, sizeof(WAVEHDR));
-
-        EnterCriticalSection(&waveOutCriticalSection);
-        waveFreeBlockCount--;
-        LeaveCriticalSection(&waveOutCriticalSection);
-#ifdef DEBUG_AUDIO
-        EnterCriticalSection(&waveOutCriticalSection);
-        qDebug("write out l=%d, waveFreeBlockCount=%d",
-                current->dwBufferLength,waveFreeBlockCount);
-        LeaveCriticalSection(&waveOutCriticalSection);
-#endif
-        totalTimeValue += current->dwBufferLength;
-        waveCurrentBlock++;
-        waveCurrentBlock %= buffer_size/period_size;
-        current = &waveBlocks[waveCurrentBlock];
-        current->dwUser = 0;
-        errorState = QAudio::NoError;
-        if (deviceState != QAudio::ActiveState) {
-            deviceState = QAudio::ActiveState;
-            emit stateChanged(deviceState);
-        }
-    }
-    return (len-l);
-}
-
-void QAudioOutputPrivate::resume()
-{
-    if(deviceState == QAudio::SuspendedState) {
-        deviceState = QAudio::ActiveState;
-        errorState = QAudio::NoError;
-        waveOutRestart(hWaveOut);
-        QTimer::singleShot(10, this, SLOT(feedback()));
-        emit stateChanged(deviceState);
-    }
-}
-
-void QAudioOutputPrivate::suspend()
-{
-    if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState) {
-        int delay = (buffer_size-bytesFree())*1000/(settings.frequency()
-                *settings.channels()*(settings.sampleSize()/8));
-        waveOutPause(hWaveOut);
-        Sleep(delay+10);
-        deviceState = QAudio::SuspendedState;
-        errorState = QAudio::NoError;
-        emit stateChanged(deviceState);
-    }
-}
-
-void QAudioOutputPrivate::feedback()
-{
-#ifdef DEBUG_AUDIO
-    QTime now(QTime::currentTime());
-    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :feedback()";
-#endif
-    bytesAvailable = bytesFree();
-
-    if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState)) {
-        if(bytesAvailable >= period_size)
-            QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection);
-    }
-}
-
-bool QAudioOutputPrivate::deviceReady()
-{
-    if(deviceState == QAudio::StoppedState)
-        return false;
-
-    if(pullMode) {
-        int chunks = bytesAvailable/period_size;
-#ifdef DEBUG_AUDIO
-        qDebug()<<"deviceReady() avail="<<bytesAvailable<<" bytes, period size="<<period_size<<" bytes";
-        qDebug()<<"deviceReady() no. of chunks that can fit ="<<chunks<<", chunks in bytes ="<<chunks*period_size;
-#endif
-        bool startup = false;
-        if(totalTimeValue == 0)
-	    startup = true;
-
-	bool full=false;
-	EnterCriticalSection(&waveOutCriticalSection);
-	if(waveFreeBlockCount==0) full = true;
-	LeaveCriticalSection(&waveOutCriticalSection);
-	if (full){
-#ifdef DEBUG_AUDIO
-            qDebug() << "Skipping data as unable to write";
-#endif
-	    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) {
-                emit notify();
-		elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
-		timeStamp.restart();
-	    }
-	    return true;
-	}
-
-        if(startup)
-	    waveOutPause(hWaveOut);
-        int input = period_size*chunks;
-        int l = audioSource->read(audioBuffer,input);
-        if(l > 0) {
-            int out= write(audioBuffer,l);
-            if(out > 0) {
-                if (deviceState != QAudio::ActiveState) {
-                    deviceState = QAudio::ActiveState;
-                    emit stateChanged(deviceState);
-                }
-            }
-            if ( out < l) {
-                // Didnt write all data
-                audioSource->seek(audioSource->pos()-(l-out));
-            }
-	    if(startup)
-	        waveOutRestart(hWaveOut);
-        } else if(l == 0) {
-            bytesAvailable = bytesFree();
-
-            int check = 0;
-            EnterCriticalSection(&waveOutCriticalSection);
-            check = waveFreeBlockCount;
-            LeaveCriticalSection(&waveOutCriticalSection);
-            if(check == buffer_size/period_size) {
-                errorState = QAudio::UnderrunError;
-                if (deviceState != QAudio::IdleState) {
-                    deviceState = QAudio::IdleState;
-                    emit stateChanged(deviceState);
-                }
-            }
-
-        } else if(l < 0) {
-            bytesAvailable = bytesFree();
-            errorState = QAudio::IOError;
-        }
-    } else {
-        int buffered;
-	EnterCriticalSection(&waveOutCriticalSection);
-	buffered = waveFreeBlockCount;
-	LeaveCriticalSection(&waveOutCriticalSection);
-        errorState = QAudio::UnderrunError;
-        if (buffered >= buffer_size/period_size && deviceState == QAudio::ActiveState) {
-            deviceState = QAudio::IdleState;
-            emit stateChanged(deviceState);
-        }
-    }
-    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
-        return true;
-
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
-        emit notify();
-	elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
-        timeStamp.restart();
-    }
-
-    return true;
-}
-
-qint64 QAudioOutputPrivate::elapsedUSecs() const
-{
-    if (deviceState == QAudio::StoppedState)
-        return 0;
-
-    return timeStampOpened.elapsed()*1000;
-}
-
-QAudio::Error QAudioOutputPrivate::error() const
-{
-    return errorState;
-}
-
-QAudio::State QAudioOutputPrivate::state() const
-{
-    return deviceState;
-}
-
-void QAudioOutputPrivate::reset()
-{
-    close();
-}
-
-OutputPrivate::OutputPrivate(QAudioOutputPrivate* audio)
-{
-    audioDevice = qobject_cast<QAudioOutputPrivate*>(audio);
-}
-
-OutputPrivate::~OutputPrivate() {}
-
-qint64 OutputPrivate::readData( char* data, qint64 len)
-{
-    Q_UNUSED(data)
-    Q_UNUSED(len)
-
-    return 0;
-}
-
-qint64 OutputPrivate::writeData(const char* data, qint64 len)
-{
-    int retry = 0;
-    qint64 written = 0;
-
-    if((audioDevice->deviceState == QAudio::ActiveState)
-            ||(audioDevice->deviceState == QAudio::IdleState)) {
-        qint64 l = len;
-        while(written < l) {
-            int chunk = audioDevice->write(data+written,(l-written));
-            if(chunk <= 0)
-                retry++;
-            else
-                written+=chunk;
-
-            if(retry > 10)
-                return written;
-        }
-        audioDevice->deviceState = QAudio::ActiveState;
-    }
-    return written;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/audio/qaudiooutput_win32_p.h
deleted file mode 100644
index 68a40f7..0000000
--- a/src/multimedia/audio/qaudiooutput_win32_p.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef QAUDIOOUTPUTWIN_H
-#define QAUDIOOUTPUTWIN_H
-
-#include <windows.h>
-#include <mmsystem.h>
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
-
-#include <QtMultimedia/qaudio.h>
-#include <QtMultimedia/qaudiodeviceinfo.h>
-#include <QtMultimedia/qaudioengine.h>
-
-
-QT_BEGIN_NAMESPACE
-
-class QAudioOutputPrivate : public QAbstractAudioOutput
-{
-    Q_OBJECT
-public:
-    QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
-    ~QAudioOutputPrivate();
-
-    qint64 write( const char *data, qint64 len );
-
-    QAudioFormat format() const;
-    QIODevice* start(QIODevice* device = 0);
-    void stop();
-    void reset();
-    void suspend();
-    void resume();
-    int bytesFree() const;
-    int periodSize() const;
-    void setBufferSize(int value);
-    int bufferSize() const;
-    void setNotifyInterval(int milliSeconds);
-    int notifyInterval() const;
-    qint64 processedUSecs() const;
-    qint64 elapsedUSecs() const;
-    QAudio::Error error() const;
-    QAudio::State state() const;
-
-    QIODevice* audioSource;
-    QAudioFormat settings;
-    QAudio::Error errorState;
-    QAudio::State deviceState;
-
-private slots:
-    void feedback();
-    bool deviceReady();
-
-private:
-    QByteArray m_device;
-    bool resuming;
-    int bytesAvailable;
-    QTime timeStamp;
-    qint64 elapsedTimeOffset;
-    QTime timeStampOpened;
-    qint32 buffer_size;
-    qint32 period_size;
-    qint64 totalTimeValue;
-    bool pullMode;
-    int intervalTime;
-    static void QT_WIN_CALLBACK waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
-            DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
-
-    CRITICAL_SECTION waveOutCriticalSection;
-
-    WAVEHDR* allocateBlocks(int size, int count);
-    void freeBlocks(WAVEHDR* blockArray);
-    bool open();
-    void close();
-
-    WAVEFORMATEX wfx;
-    HWAVEOUT hWaveOut;
-    MMRESULT result;
-    WAVEHDR header;
-    WAVEHDR* waveBlocks;
-    volatile bool finished;
-    volatile int waveFreeBlockCount;
-    int waveCurrentBlock;
-    char* audioBuffer;
-};
-
-class OutputPrivate : public QIODevice
-{
-    Q_OBJECT
-public:
-    OutputPrivate(QAudioOutputPrivate* audio);
-    ~OutputPrivate();
-
-    qint64 readData( char* data, qint64 len);
-    qint64 writeData(const char* data, qint64 len);
-
-private:
-    QAudioOutputPrivate *audioDevice;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/base/base.pri b/src/multimedia/base/base.pri
deleted file mode 100644
index 49eca49..0000000
--- a/src/multimedia/base/base.pri
+++ /dev/null
@@ -1,69 +0,0 @@
-
-QT += network
-contains(QT_CONFIG, opengl):QT += opengl
-
-HEADERS += \
-    $$PWD/qmediaresource.h \
-    $$PWD/qmediacontent.h \
-    $$PWD/qmediaobject.h \
-    $$PWD/qmediaobject_p.h \
-    $$PWD/qmediapluginloader_p.h \
-    $$PWD/qmediaservice.h \
-    $$PWD/qmediaservice_p.h \
-    $$PWD/qmediaserviceprovider.h \
-    $$PWD/qmediaserviceproviderplugin.h \
-    $$PWD/qmediacontrol.h \
-    $$PWD/qmediacontrol_p.h \
-    $$PWD/qmetadatacontrol.h \
-    $$PWD/qvideooutputcontrol.h \
-    $$PWD/qvideowindowcontrol.h \
-    $$PWD/qvideorenderercontrol.h \
-    $$PWD/qvideodevicecontrol.h \
-    $$PWD/qvideowidgetcontrol.h \
-    $$PWD/qvideowidget.h \
-    $$PWD/qvideowidget_p.h \
-    $$PWD/qgraphicsvideoitem.h \
-    $$PWD/qmediaplaylistcontrol.h \
-    $$PWD/qmediaplaylist.h \
-    $$PWD/qmediaplaylist_p.h \
-    $$PWD/qmediaplaylistprovider.h \
-    $$PWD/qmediaplaylistprovider_p.h \
-    $$PWD/qmediaplaylistioplugin.h \
-    $$PWD/qlocalmediaplaylistprovider.h \
-    $$PWD/qmediaplaylistnavigator.h \
-    $$PWD/qpaintervideosurface_p.h \
-    $$PWD/qmediatimerange.h \
-    $$PWD/qtmedianamespace.h
-
-SOURCES += \
-    $$PWD/qmediaresource.cpp \
-    $$PWD/qmediacontent.cpp \
-    $$PWD/qmediaobject.cpp \
-    $$PWD/qmediapluginloader.cpp \
-    $$PWD/qmediaservice.cpp \
-    $$PWD/qmediaserviceprovider.cpp \
-    $$PWD/qmediacontrol.cpp \
-    $$PWD/qmetadatacontrol.cpp \
-    $$PWD/qvideooutputcontrol.cpp \
-    $$PWD/qvideowindowcontrol.cpp \
-    $$PWD/qvideorenderercontrol.cpp \
-    $$PWD/qvideodevicecontrol.cpp \
-    $$PWD/qvideowidgetcontrol.cpp \
-    $$PWD/qvideowidget.cpp \
-    $$PWD/qgraphicsvideoitem.cpp \
-    $$PWD/qmediaplaylistcontrol.cpp \
-    $$PWD/qmediaplaylist.cpp \
-    $$PWD/qmediaplaylistprovider.cpp \
-    $$PWD/qmediaplaylistioplugin.cpp \
-    $$PWD/qlocalmediaplaylistprovider.cpp \
-    $$PWD/qmediaplaylistnavigator.cpp \
-    $$PWD/qpaintervideosurface.cpp \
-    $$PWD/qmediatimerange.cpp
-
-mac {
-    HEADERS += $$PWD/qpaintervideosurface_mac_p.h
-    OBJECTIVE_SOURCES += $$PWD/qpaintervideosurface_mac.mm
-
-    LIBS += -framework AppKit -framework QuartzCore -framework QTKit
-
-}
diff --git a/src/multimedia/base/qgraphicsvideoitem.cpp b/src/multimedia/base/qgraphicsvideoitem.cpp
deleted file mode 100644
index f903eb7..0000000
--- a/src/multimedia/base/qgraphicsvideoitem.cpp
+++ /dev/null
@@ -1,437 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qgraphicsvideoitem.h>
-
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/private/qpaintervideosurface_p.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
-#include <QtMultimedia/qvideosurfaceformat.h>
-
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-#include <QtOpenGL/qgl.h>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-
-class QGraphicsVideoItemPrivate
-{
-public:
-    QGraphicsVideoItemPrivate()
-        : q_ptr(0)
-        , surface(0)
-        , mediaObject(0)
-        , service(0)
-        , outputControl(0)
-        , rendererControl(0)
-        , aspectRatioMode(Qt::KeepAspectRatio)
-        , updatePaintDevice(true)
-        , rect(0.0, 0.0, 320, 240)
-    {
-    }
-
-    QGraphicsVideoItem *q_ptr;
-
-    QPainterVideoSurface *surface;
-    QMediaObject *mediaObject;
-    QMediaService *service;
-    QVideoOutputControl *outputControl;
-    QVideoRendererControl *rendererControl;
-    Qt::AspectRatioMode aspectRatioMode;
-    bool updatePaintDevice;
-    QRectF rect;
-    QRectF boundingRect;
-    QRectF sourceRect;
-    QSizeF nativeSize;
-
-    void clearService();
-    void updateRects();
-
-    void _q_present();
-    void _q_formatChanged(const QVideoSurfaceFormat &format);
-    void _q_serviceDestroyed();
-    void _q_mediaObjectDestroyed();
-};
-
-void QGraphicsVideoItemPrivate::clearService()
-{
-    if (outputControl) {
-        outputControl->setOutput(QVideoOutputControl::NoOutput);
-        outputControl = 0;
-    }
-    if (rendererControl) {
-        surface->stop();
-        rendererControl->setSurface(0);
-        rendererControl = 0;
-    }
-    if (service) {
-        QObject::disconnect(service, SIGNAL(destroyed()), q_ptr, SLOT(_q_serviceDestroyed()));
-        service = 0;
-    }
-}
-
-void QGraphicsVideoItemPrivate::updateRects()
-{
-    q_ptr->prepareGeometryChange();
-
-    if (nativeSize.isEmpty()) {
-        boundingRect = QRectF();
-    } else if (aspectRatioMode == Qt::IgnoreAspectRatio) {
-        boundingRect = rect;
-        sourceRect = QRectF(0, 0, 1, 1);
-    } else if (aspectRatioMode == Qt::KeepAspectRatio) {
-        QSizeF size = nativeSize;
-        size.scale(rect.size(), Qt::KeepAspectRatio);
-
-        boundingRect = QRectF(0, 0, size.width(), size.height());
-        boundingRect.moveCenter(rect.center());
-
-        sourceRect = QRectF(0, 0, 1, 1);
-    } else if (aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
-        boundingRect = rect;
-
-        QSizeF size = rect.size();
-        size.scale(nativeSize, Qt::KeepAspectRatio);
-
-        sourceRect = QRectF(
-                0, 0, size.width() / nativeSize.width(), size.height() / nativeSize.height());
-        sourceRect.moveCenter(QPointF(0.5, 0.5));
-    }
-}
-
-void QGraphicsVideoItemPrivate::_q_present()
-{
-    if (q_ptr->isObscured()) {
-        q_ptr->update(boundingRect);
-        surface->setReady(true);
-    } else {
-        q_ptr->update(boundingRect);
-    }
-}
-
-void QGraphicsVideoItemPrivate::_q_formatChanged(const QVideoSurfaceFormat &format)
-{
-    nativeSize = format.sizeHint();
-
-    updateRects();
-
-    emit q_ptr->nativeSizeChanged(nativeSize);
-}
-
-void QGraphicsVideoItemPrivate::_q_serviceDestroyed()
-{
-    rendererControl = 0;
-    outputControl = 0;
-    service = 0;
-
-    surface->stop();
-}
-
-void QGraphicsVideoItemPrivate::_q_mediaObjectDestroyed()
-{
-    mediaObject = 0;
-
-    clearService();
-}
-
-/*!
-    \class QGraphicsVideoItem
-    \brief The QGraphicsVideoItem class provides a graphics item which display video produced by a QMediaObject.
-
-    \since 4.7
-
-    \ingroup multimedia
-
-    Attaching a QGraphicsVideoItem to a QMediaObject allows it to display
-    the video or image output of that media object.  A QGraphicsVideoItem
-    is attached to a media object by passing a pointer to the QMediaObject
-    to the setMediaObject() function.
-
-    \code
-    player = new QMediaPlayer(this);
-
-    QGraphicsVideoItem *item = new QGraphicsVideoItem;
-    item->setMediaObject(player);
-    graphicsView->scence()->addItem(item);
-    graphicsView->show();
-
-    player->setMedia(video);
-    player->play();
-    \endcode
-
-    \bold {Note}: Only a single display output can be attached to a media
-    object at one time.
-
-    \sa QMediaObject, QMediaPlayer, QVideoWidget
-*/
-
-/*!
-    Constructs a graphics item that displays video.
-
-    The \a parent is passed to QGraphicsItem.
-*/
-QGraphicsVideoItem::QGraphicsVideoItem(QGraphicsItem *parent)
-    : QGraphicsObject(parent)
-    , d_ptr(new QGraphicsVideoItemPrivate)
-{
-    d_ptr->q_ptr = this;
-    d_ptr->surface = new QPainterVideoSurface;
-
-    connect(d_ptr->surface, SIGNAL(frameChanged()), this, SLOT(_q_present()));
-    connect(d_ptr->surface, SIGNAL(surfaceFormatChanged(QVideoSurfaceFormat)),
-            this, SLOT(_q_formatChanged(QVideoSurfaceFormat)));
-}
-
-/*!
-    Destroys a video graphics item.
-*/
-QGraphicsVideoItem::~QGraphicsVideoItem()
-{
-    if (d_ptr->outputControl)
-        d_ptr->outputControl->setOutput(QVideoOutputControl::NoOutput);
-
-    if (d_ptr->rendererControl)
-        d_ptr->rendererControl->setSurface(0);
-
-    delete d_ptr->surface;
-    delete d_ptr;
-}
-
-/*!
-    \property QGraphicsVideoItem::mediaObject
-    \brief the media object which provides the video displayed by a graphics
-    item.
-*/
-
-QMediaObject *QGraphicsVideoItem::mediaObject() const
-{
-    return d_func()->mediaObject;
-}
-
-void QGraphicsVideoItem::setMediaObject(QMediaObject *object)
-{
-    Q_D(QGraphicsVideoItem);
-
-    if (object == d->mediaObject)
-        return;
-
-    d->clearService();
-
-    if (d->mediaObject) {
-        disconnect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
-        d->mediaObject->unbind(this);
-    }
-
-    d->mediaObject = object;
-
-    if (d->mediaObject) {
-        d->mediaObject->bind(this);
-
-        connect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
-
-        d->service = d->mediaObject->service();
-
-        if (d->service) {
-            connect(d->service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed()));
-
-            d->outputControl = qobject_cast<QVideoOutputControl *>(
-                    d->service->control(QVideoOutputControl_iid));
-            d->rendererControl = qobject_cast<QVideoRendererControl *>(
-                    d->service->control(QVideoRendererControl_iid));
-
-            if (d->outputControl != 0 && d->rendererControl != 0) {
-                d->rendererControl->setSurface(d->surface);
-
-                if (isVisible())
-                    d->outputControl->setOutput(QVideoOutputControl::RendererOutput);
-            }
-        }
-    }
-}
-
-/*!
-    \property QGraphicsVideoItem::aspectRatioMode
-    \brief how a video is scaled to fit the graphics item's size.
-*/
-
-Qt::AspectRatioMode QGraphicsVideoItem::aspectRatioMode() const
-{
-    return d_func()->aspectRatioMode;
-}
-
-void QGraphicsVideoItem::setAspectRatioMode(Qt::AspectRatioMode mode)
-{
-    Q_D(QGraphicsVideoItem);
-
-    d->aspectRatioMode = mode;
-    d->updateRects();
-}
-
-/*!
-    \property QGraphicsVideoItem::offset
-    \brief the video item's offset.
-
-    QGraphicsVideoItem will draw video using the offset for its top left
-    corner.
-*/
-
-QPointF QGraphicsVideoItem::offset() const
-{
-    return d_func()->rect.topLeft();
-}
-
-void QGraphicsVideoItem::setOffset(const QPointF &offset)
-{
-    Q_D(QGraphicsVideoItem);
-
-    d->rect.moveTo(offset);
-    d->updateRects();
-}
-
-/*!
-    \property QGraphicsVideoItem::size
-    \brief the video item's size.
-
-    QGraphicsVideoItem will draw video scaled to fit size according to its
-    fillMode.
-*/
-
-QSizeF QGraphicsVideoItem::size() const
-{
-    return d_func()->rect.size();
-}
-
-void QGraphicsVideoItem::setSize(const QSizeF &size)
-{
-    Q_D(QGraphicsVideoItem);
-
-    d->rect.setSize(size.isValid() ? size : QSizeF(0, 0));
-    d->updateRects();
-}
-
-/*!
-    \property QGraphicsVideoItem::nativeSize
-    \brief the native size of the video.
-*/
-
-QSizeF QGraphicsVideoItem::nativeSize() const
-{
-    return d_func()->nativeSize;
-}
-
-/*!
-    \fn QGraphicsVideoItem::nativeSizeChanged(const QSizeF &size)
-
-    Signals that the native \a size of the video has changed.
-*/
-
-/*!
-    \reimp
-*/
-QRectF QGraphicsVideoItem::boundingRect() const
-{
-    return d_func()->boundingRect;
-}
-
-/*!
-    \reimp
-*/
-void QGraphicsVideoItem::paint(
-        QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
-{
-    Q_D(QGraphicsVideoItem);
-
-    Q_UNUSED(option);
-    Q_UNUSED(widget);
-
-    if (d->surface && d->surface->isActive()) {
-        d->surface->paint(painter, d->boundingRect, d->sourceRect);
-        d->surface->setReady(true);
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-    } else if (d->updatePaintDevice && (painter->paintEngine()->type() == QPaintEngine::OpenGL
-            || painter->paintEngine()->type() == QPaintEngine::OpenGL2)) {
-        d->updatePaintDevice = false;
-
-        d->surface->setGLContext(const_cast<QGLContext *>(QGLContext::currentContext()));
-        if (d->surface->supportedShaderTypes() & QPainterVideoSurface::GlslShader) {
-            d->surface->setShaderType(QPainterVideoSurface::GlslShader);
-        } else {
-            d->surface->setShaderType(QPainterVideoSurface::FragmentProgramShader);
-        }
-#endif
-    }
-}
-
-/*!
-    \reimp
-
-    \internal
-*/
-QVariant QGraphicsVideoItem::itemChange(GraphicsItemChange change, const QVariant &value)
-{
-    return QGraphicsObject::itemChange(change, value);
-}
-
-/*!
-    \reimp
-
-    \internal
-*/
-bool QGraphicsVideoItem::event(QEvent *event)
-{
-    return QGraphicsObject::event(event);
-}
-
-/*!
-    \reimp
-
-    \internal
-*/
-bool QGraphicsVideoItem::sceneEvent(QEvent *event)
-{
-    return QGraphicsObject::sceneEvent(event);
-}
-
-QT_END_NAMESPACE
-#include "moc_qgraphicsvideoitem.cpp"
diff --git a/src/multimedia/base/qgraphicsvideoitem.h b/src/multimedia/base/qgraphicsvideoitem.h
deleted file mode 100644
index e6f0d81..0000000
--- a/src/multimedia/base/qgraphicsvideoitem.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGRAPHICSVIDEOITEM_H
-#define QGRAPHICSVIDEOITEM_H
-
-#include <QtGui/qgraphicsitem.h>
-
-#include <QtMultimedia/qvideowidget.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QVideoSurfaceFormat;
-
-class QGraphicsVideoItemPrivate;
-class Q_MULTIMEDIA_EXPORT QGraphicsVideoItem : public QGraphicsObject
-{
-    Q_OBJECT
-    Q_PROPERTY(QMediaObject* mediaObject READ mediaObject WRITE setMediaObject)
-    Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode WRITE setAspectRatioMode)
-    Q_PROPERTY(QPointF offset READ offset WRITE setOffset)
-    Q_PROPERTY(QSizeF size READ size WRITE setSize)
-    Q_PROPERTY(QSizeF nativeSize READ nativeSize NOTIFY nativeSizeChanged)
-public:
-    QGraphicsVideoItem(QGraphicsItem *parent = 0);
-    ~QGraphicsVideoItem();
-
-    QMediaObject *mediaObject() const;
-    void setMediaObject(QMediaObject *object);
-
-    Qt::AspectRatioMode aspectRatioMode() const;
-    void setAspectRatioMode(Qt::AspectRatioMode mode);
-
-    QPointF offset() const;
-    void setOffset(const QPointF &offset);
-
-    QSizeF size() const;
-    void setSize(const QSizeF &size);
-
-    QSizeF nativeSize() const;
-
-    QRectF boundingRect() const;
-
-    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
-
-Q_SIGNALS:
-    void nativeSizeChanged(const QSizeF &size);
-
-protected:
-    bool event(QEvent *event);
-    bool sceneEvent(QEvent *event);
-
-    QVariant itemChange(GraphicsItemChange change, const QVariant &value);
-
-    QGraphicsVideoItemPrivate *d_ptr;
-
-private:
-    Q_DECLARE_PRIVATE(QGraphicsVideoItem)
-    Q_PRIVATE_SLOT(d_func(), void _q_present())
-    Q_PRIVATE_SLOT(d_func(), void _q_formatChanged(const QVideoSurfaceFormat &))
-    Q_PRIVATE_SLOT(d_func(), void _q_serviceDestroyed())
-    Q_PRIVATE_SLOT(d_func(), void _q_mediaObjectDestroyed())
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qlocalmediaplaylistprovider.cpp b/src/multimedia/base/qlocalmediaplaylistprovider.cpp
deleted file mode 100644
index 40ff1fc..0000000
--- a/src/multimedia/base/qlocalmediaplaylistprovider.cpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qlocalmediaplaylistprovider.h>
-#include "qmediaplaylistprovider_p.h"
-#include <QtMultimedia/qmediacontent.h>
-
-
-QT_BEGIN_NAMESPACE
-
-class QLocalMediaPlaylistProviderPrivate: public QMediaPlaylistProviderPrivate
-{
-public:
-    QList<QMediaContent> resources;
-};
-
-QLocalMediaPlaylistProvider::QLocalMediaPlaylistProvider(QObject *parent)
-    :QMediaPlaylistProvider(*new QLocalMediaPlaylistProviderPrivate, parent)
-{
-}
-
-QLocalMediaPlaylistProvider::~QLocalMediaPlaylistProvider()
-{
-}
-
-bool QLocalMediaPlaylistProvider::isReadOnly() const
-{
-    return false;
-}
-
-int QLocalMediaPlaylistProvider::mediaCount() const
-{
-    return d_func()->resources.size();
-}
-
-QMediaContent QLocalMediaPlaylistProvider::media(int pos) const
-{
-    return d_func()->resources.value(pos);
-}
-
-bool QLocalMediaPlaylistProvider::addMedia(const QMediaContent &content)
-{
-    Q_D(QLocalMediaPlaylistProvider);
-
-    int pos = d->resources.count();
-
-    emit mediaAboutToBeInserted(pos, pos);
-    d->resources.append(content);
-    emit mediaInserted(pos, pos);
-
-    return true;
-}
-
-bool QLocalMediaPlaylistProvider::addMedia(const QList<QMediaContent> &items)
-{
-    Q_D(QLocalMediaPlaylistProvider);
-
-    if (items.isEmpty())
-        return true;
-
-    int pos = d->resources.count();
-    int end = pos+items.count()-1;
-
-    emit mediaAboutToBeInserted(pos, end);
-    d->resources.append(items);
-    emit mediaInserted(pos, end);
-
-    return true;
-}
-
-
-bool QLocalMediaPlaylistProvider::insertMedia(int pos, const QMediaContent &content)
-{
-    Q_D(QLocalMediaPlaylistProvider);
-
-    emit mediaAboutToBeInserted(pos, pos);
-    d->resources.insert(pos, content);
-    emit mediaInserted(pos,pos);
-
-    return true;
-}
-
-bool QLocalMediaPlaylistProvider::insertMedia(int pos, const QList<QMediaContent> &items)
-{
-    Q_D(QLocalMediaPlaylistProvider);
-
-    if (items.isEmpty())
-        return true;
-
-    const int last = pos+items.count()-1;
-
-    emit mediaAboutToBeInserted(pos, last);
-    for (int i=0; i<items.count(); i++)
-        d->resources.insert(pos+i, items.at(i));
-    emit mediaInserted(pos, last);
-
-    return true;
-}
-
-bool QLocalMediaPlaylistProvider::removeMedia(int fromPos, int toPos)
-{
-    Q_D(QLocalMediaPlaylistProvider);
-
-    Q_ASSERT(fromPos >= 0);
-    Q_ASSERT(fromPos <= toPos);
-    Q_ASSERT(toPos < mediaCount());
-
-    emit mediaAboutToBeRemoved(fromPos, toPos);
-    d->resources.erase(d->resources.begin()+fromPos, d->resources.begin()+toPos+1);
-    emit mediaRemoved(fromPos, toPos);
-
-    return true;
-}
-
-bool QLocalMediaPlaylistProvider::removeMedia(int pos)
-{
-    Q_D(QLocalMediaPlaylistProvider);
-
-    emit mediaAboutToBeRemoved(pos, pos);
-    d->resources.removeAt(pos);
-    emit mediaRemoved(pos, pos);
-
-    return true;
-}
-
-bool QLocalMediaPlaylistProvider::clear()
-{
-    Q_D(QLocalMediaPlaylistProvider);
-    if (!d->resources.isEmpty()) {
-        int lastPos = mediaCount()-1;
-        emit mediaAboutToBeRemoved(0, lastPos);
-        d->resources.clear();
-        emit mediaRemoved(0, lastPos);
-    }
-
-    return true;
-}
-
-void QLocalMediaPlaylistProvider::shuffle()
-{
-    Q_D(QLocalMediaPlaylistProvider);
-    if (!d->resources.isEmpty()) {
-        QList<QMediaContent> resources;
-
-        while (!d->resources.isEmpty()) {
-            resources.append(d->resources.takeAt(qrand() % d->resources.size()));
-        }
-
-        d->resources = resources;
-        emit mediaChanged(0, mediaCount()-1);
-    }
-
-}
-
-#include "moc_qlocalmediaplaylistprovider.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qlocalmediaplaylistprovider.h b/src/multimedia/base/qlocalmediaplaylistprovider.h
deleted file mode 100644
index db8deb1..0000000
--- a/src/multimedia/base/qlocalmediaplaylistprovider.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QLOCALMEDIAPAYLISTPROVIDER_H
-#define QLOCALMEDIAPAYLISTPROVIDER_H
-
-#include <QtMultimedia/qmediaplaylistprovider.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QLocalMediaPlaylistProviderPrivate;
-class Q_MULTIMEDIA_EXPORT QLocalMediaPlaylistProvider : public QMediaPlaylistProvider
-{
-    Q_OBJECT
-
-public:
-    QLocalMediaPlaylistProvider(QObject *parent=0);
-    virtual ~QLocalMediaPlaylistProvider();
-
-    virtual int mediaCount() const;
-    virtual QMediaContent media(int pos) const;
-
-    virtual bool isReadOnly() const;
-
-    virtual bool addMedia(const QMediaContent &content);
-    virtual bool addMedia(const QList<QMediaContent> &items);
-    virtual bool insertMedia(int pos, const QMediaContent &content);
-    virtual bool insertMedia(int pos, const QList<QMediaContent> &items);
-    virtual bool removeMedia(int pos);
-    virtual bool removeMedia(int start, int end);
-    virtual bool clear();
-
-public Q_SLOTS:
-    virtual void shuffle();
-
-private:
-    Q_DECLARE_PRIVATE(QLocalMediaPlaylistProvider)
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QLOCALMEDIAPAYLISTSOURCE_H
diff --git a/src/multimedia/base/qmediacontent.cpp b/src/multimedia/base/qmediacontent.cpp
deleted file mode 100644
index b6bf56b..0000000
--- a/src/multimedia/base/qmediacontent.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qurl.h>
-#include <QtCore/qvariant.h>
-
-#include <qmediacontent.h>
-
-
-QT_BEGIN_NAMESPACE
-
-
-class QMediaContentPrivate : public QSharedData
-{
-public:
-    QMediaContentPrivate() {}
-    QMediaContentPrivate(const QMediaResourceList &r):
-        resources(r) {}
-
-    QMediaContentPrivate(const QMediaContentPrivate &other):
-        QSharedData(other),
-        resources(other.resources)
-    {}
-
-    bool operator==(const QMediaContentPrivate &other) const
-    {
-        return resources == other.resources;
-    }
-
-    QMediaResourceList  resources;
-
-private:
-    QMediaContentPrivate& operator=(const QMediaContentPrivate &other);
-};
-
-
-/*!
-    \class QMediaContent
-    \preliminary
-    \brief The QMediaContent class provides access to the resources relating to a media content.
-    \since 4.7
-
-    \ingroup multimedia
-
-    QMediaContent is used within the multimedia framework as the logical handle
-    to media content.  A QMediaContent object is composed of one or more
-    \l {QMediaResource}s where each resource provides the URL and format
-    information of a different encoding of the content.
-
-    A non-null QMediaContent will always have a primary or canonical reference to
-    the content available through the canonicalUrl() or canonicalResource()
-    methods, any additional resources are optional.
-*/
-
-
-/*!
-    Constructs a null QMediaContent.
-*/
-
-QMediaContent::QMediaContent()
-{
-}
-
-/*!
-    Constructs a media content with \a url providing a reference to the content.
-*/
-
-QMediaContent::QMediaContent(const QUrl &url):
-    d(new QMediaContentPrivate)
-{
-    d->resources << QMediaResource(url);
-}
-
-/*!
-    Constructs a media content with \a request providing a reference to the content.
-
-    This constructor can be used to reference media content via network protocols such as HTTP.
-    This may include additional information required to obtain the resource, such as Cookies or HTTP headers.
-*/
-
-QMediaContent::QMediaContent(const QNetworkRequest &request):
-    d(new QMediaContentPrivate)
-{
-    d->resources << QMediaResource(request);
-}
-
-/*!
-    Constructs a media content with \a resource providing a reference to the content.
-*/
-
-QMediaContent::QMediaContent(const QMediaResource &resource):
-    d(new QMediaContentPrivate)
-{
-    d->resources << resource;
-}
-
-/*!
-    Constructs a media content with \a resources providing a reference to the content.
-*/
-
-QMediaContent::QMediaContent(const QMediaResourceList &resources):
-    d(new QMediaContentPrivate(resources))
-{
-}
-
-/*!
-    Constructs a copy of the media content \a other.
-*/
-
-QMediaContent::QMediaContent(const QMediaContent &other):
-    d(other.d)
-{
-}
-
-/*!
-    Destroys the media content object.
-*/
-
-QMediaContent::~QMediaContent()
-{
-}
-
-/*!
-    Assigns the value of \a other to this media content.
-*/
-
-QMediaContent& QMediaContent::operator=(const QMediaContent &other)
-{
-    d = other.d;
-    return *this;
-}
-
-/*!
-    Returns true if \a other is equivalent to this media content; false otherwise.
-*/
-
-bool QMediaContent::operator==(const QMediaContent &other) const
-{
-    return (d.constData() == 0 && other.d.constData() == 0) ||
-            (d.constData() != 0 && other.d.constData() != 0 &&
-             *d.constData() == *other.d.constData());
-}
-
-/*!
-    Returns true if \a other is not equivalent to this media content; false otherwise.
-*/
-
-bool QMediaContent::operator!=(const QMediaContent &other) const
-{
-    return !(*this == other);
-}
-
-/*!
-    Returns true if this media content is null (uninitialized); false otherwise.
-*/
-
-bool QMediaContent::isNull() const
-{
-    return d.constData() == 0;
-}
-
-/*!
-    Returns a QUrl that represents that canonical resource for this media content.
-*/
-
-QUrl QMediaContent::canonicalUrl() const
-{
-    return canonicalResource().url();
-}
-
-/*!
-    Returns a QNetworkRequest that represents that canonical resource for this media content.
-*/
-
-QNetworkRequest QMediaContent::canonicalRequest() const
-{
-    return canonicalResource().request();
-}
-
-/*!
-    Returns a QMediaResource that represents that canonical resource for this media content.
-*/
-
-QMediaResource QMediaContent::canonicalResource() const
-{
-    return d.constData() != 0
-            ?  d->resources.value(0)
-            : QMediaResource();
-}
-
-/*!
-    Returns a list of alternative resources for this media content.  The first item in this list
-    is always the canonical resource.
-*/
-
-QMediaResourceList QMediaContent::resources() const
-{
-    return d.constData() != 0
-            ? d->resources
-            : QMediaResourceList();
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediacontent.h b/src/multimedia/base/qmediacontent.h
deleted file mode 100644
index 5a279c1..0000000
--- a/src/multimedia/base/qmediacontent.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIACONTENT_H
-#define QMEDIACONTENT_H
-
-#include <QtCore/qmetatype.h>
-#include <QtCore/qshareddata.h>
-
-#include <QtMultimedia/qmediaresource.h>
-#include <QtNetwork/qnetworkrequest.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMediaContentPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaContent
-{
-public:
-    QMediaContent();
-    QMediaContent(const QUrl &contentUrl);
-    QMediaContent(const QNetworkRequest &contentRequest);
-    QMediaContent(const QMediaResource &contentResource);
-    QMediaContent(const QMediaResourceList &resources);
-    QMediaContent(const QMediaContent &other);
-    ~QMediaContent();
-
-    QMediaContent& operator=(const QMediaContent &other);
-
-    bool operator==(const QMediaContent &other) const;
-    bool operator!=(const QMediaContent &other) const;
-
-    bool isNull() const;
-
-    QUrl canonicalUrl() const;
-    QNetworkRequest canonicalRequest() const;
-    QMediaResource canonicalResource() const;
-
-    QMediaResourceList resources() const;
-
-private:
-    QSharedDataPointer<QMediaContentPrivate> d;
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QMediaContent)
-
-QT_END_HEADER
-
-#endif  // QMEDIACONTENT_H
diff --git a/src/multimedia/base/qmediacontrol.cpp b/src/multimedia/base/qmediacontrol.cpp
deleted file mode 100644
index b84c49e..0000000
--- a/src/multimedia/base/qmediacontrol.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qmetaobject.h>
-#include <QtCore/qtimer.h>
-
-#include <QtMultimedia/qmediacontrol.h>
-#include "qmediacontrol_p.h"
-
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QMediaControl
-    \ingroup multimedia-serv
-    \since 4.7
-
-    \preliminary
-    \brief The QMediaControl class provides a base interface for media service controls.
-
-    Media controls provide an interface to individual features provided by a media service.  Most
-    services implement a principal control which exposes the core functionality of the service and
-    a number optional controls which expose any additional functionality.
-
-    A pointer to a control implemented by a media service can be obtained using the
-    \l {QMediaService::control()}{control()} member of QMediaService.  If the service doesn't
-    implement a control it will instead return a null pointer.
-
-    \code
-    QMediaPlayerControl *control = qobject_cast<QMediaPlayerControl *>(
-            service->control("com.nokia.Qt.QMediaPlayerControl/1.0"));
-    \endcode
-
-    Alternatively if the IId of the control has been declared using Q_MEDIA_DECLARE_CONTROL
-    the template version of QMediaService::control() can be used to request the service without
-    explicitly passing the IId.
-
-    \code
-    QMediaPlayerControl *control = service->control<QMediaPlayerControl *>();
-    \endcode
-
-    Most application code will not interface directly with a media service's controls, instead the
-    QMediaObject which owns the service acts as an intermeditary between one or more controls and
-    the application.
-
-    \sa QMediaService, QMediaObject
-*/
-
-/*!
-    \macro Q_MEDIA_DECLARE_CONTROL(Class, IId)
-    \relates QMediaControl
-
-    The Q_MEDIA_DECLARE_CONTROL macro declares an \a IId for a \a Class that inherits from
-    QMediaControl.
-
-    Declaring an IId for a QMediaControl allows an instance of that control to be requested from
-    QMediaService::control() without explicitly passing the IId.
-
-    \code
-    QMediaPlayerControl *control = service->control<QMediaPlayerControl *>();
-    \endcode
-
-    \sa QMediaService::control()
-*/
-
-/*!
-    Destroys a media control.
-*/
-
-QMediaControl::~QMediaControl()
-{
-    delete d_ptr;
-}
-
-/*!
-    Constructs a media control with the given \a parent.
-*/
-
-QMediaControl::QMediaControl(QObject *parent)
-    : QObject(parent)
-    , d_ptr(new QMediaControlPrivate)
-{
-    d_ptr->q_ptr = this;
-}
-
-/*!
-    \internal
-*/
-
-QMediaControl::QMediaControl(QMediaControlPrivate &dd, QObject *parent)
-    : QObject(parent)
-    , d_ptr(&dd)
-
-{
-    d_ptr->q_ptr = this;
-}
-
-#include "moc_qmediacontrol.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediacontrol.h b/src/multimedia/base/qmediacontrol.h
deleted file mode 100644
index 8ed9fe8..0000000
--- a/src/multimedia/base/qmediacontrol.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTMEDIACONTROL_H
-#define QABSTRACTMEDIACONTROL_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qvariant.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMediaControlPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaControl : public QObject
-{
-    Q_OBJECT
-
-public:
-    ~QMediaControl();
-
-protected:
-    QMediaControl(QObject *parent = 0);
-    QMediaControl(QMediaControlPrivate &dd, QObject *parent = 0);
-
-    QMediaControlPrivate *d_ptr;
-
-private:
-    Q_DECLARE_PRIVATE(QMediaControl)
-};
-
-template <typename T> const char *qmediacontrol_iid() { return 0; }
-
-#define Q_MEDIA_DECLARE_CONTROL(Class, IId) \
-    template <> inline const char *qmediacontrol_iid<Class *>() { return IId; }
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QABSTRACTMEDIACONTROL_H
diff --git a/src/multimedia/base/qmediacontrol_p.h b/src/multimedia/base/qmediacontrol_p.h
deleted file mode 100644
index 4d00f11..0000000
--- a/src/multimedia/base/qmediacontrol_p.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTMEDIACONTROL_P_H
-#define QABSTRACTMEDIACONTROL_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMediaControl;
-
-class QMediaControlPrivate
-{
-public:
-    virtual ~QMediaControlPrivate() {}
-
-    QMediaControl *q_ptr;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qmediaobject.cpp b/src/multimedia/base/qmediaobject.cpp
deleted file mode 100644
index 0422718..0000000
--- a/src/multimedia/base/qmediaobject.cpp
+++ /dev/null
@@ -1,419 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qmetaobject.h>
-
-#include "qmediaobject_p.h"
-
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmetadatacontrol.h>
-
-
-QT_BEGIN_NAMESPACE
-
-void QMediaObjectPrivate::_q_notify()
-{
-    Q_Q(QMediaObject);
-
-    const QMetaObject* m = q->metaObject();
-
-    foreach (int pi, notifyProperties) {
-        QMetaProperty p = m->property(pi);
-        p.notifySignal().invoke(
-            q, QGenericArgument(QMetaType::typeName(p.userType()), p.read(q).data()));
-    }
-}
-
-
-/*!
-    \class QMediaObject
-    \preliminary
-    \brief The QMediaObject class provides a common base for multimedia objects.
-    \since 4.7
-
-    \ingroup multimedia
-
-    QMediaObject derived classes provide access to the functionality of a
-    QMediaService.  Each media object hosts a QMediaService and uses the
-    QMediaControl interfaces implemented by the service to implement its
-    API.  Most media objects when constructed will request a new
-    QMediaService instance from a QMediaServiceProvider, but some like
-    QMediaRecorder will share a service with another object.
-
-    QMediaObject itself provides an API for accessing a media service's \l {metaData()}{meta-data} and a means of connecting other media objects,
-    and peripheral classes like QVideoWidget and QMediaPlaylist.
-
-    \sa QMediaService, QMediaControl
-*/
-
-/*!
-    Destroys a media object.
-*/
-
-QMediaObject::~QMediaObject()
-{
-    delete d_ptr;
-}
-
-/*!
-    Returns the service availability error state.
-*/
-
-QtMultimedia::AvailabilityError QMediaObject::availabilityError() const
-{
-    return QtMultimedia::ServiceMissingError;
-}
-
-/*!
-    Returns true if the service is available for use.
-*/
-
-bool QMediaObject::isAvailable() const
-{
-    return false;
-}
-
-/*!
-    Returns the media service that provides the functionality of a multimedia object.
-*/
-
-QMediaService* QMediaObject::service() const
-{
-    return d_func()->service;
-}
-
-int QMediaObject::notifyInterval() const
-{
-    return d_func()->notifyTimer->interval();
-}
-
-void QMediaObject::setNotifyInterval(int milliSeconds)
-{
-    Q_D(QMediaObject);
-
-    if (d->notifyTimer->interval() != milliSeconds) {
-        d->notifyTimer->setInterval(milliSeconds);
-
-        emit notifyIntervalChanged(milliSeconds);
-    }
-}
-
-/*!
-  \internal
-*/
-void QMediaObject::bind(QObject*)
-{
-}
-
-/*!
-  \internal
-*/
-void QMediaObject::unbind(QObject*)
-{
-}
-
-
-/*!
-    Constructs a media object which uses the functionality provided by a media \a service.
-
-    The \a parent is passed to QObject.
-
-    This class is meant as a base class for Multimedia objects so this
-    constructor is protected.
-*/
-
-QMediaObject::QMediaObject(QObject *parent, QMediaService *service):
-    QObject(parent),
-    d_ptr(new QMediaObjectPrivate)
-
-{
-    Q_D(QMediaObject);
-
-    d->q_ptr = this;
-
-    d->notifyTimer = new QTimer(this);
-    d->notifyTimer->setInterval(1000);
-    connect(d->notifyTimer, SIGNAL(timeout()), SLOT(_q_notify()));
-
-    d->service = service;
-
-    setupMetaData();
-}
-
-/*!
-    \internal
-*/
-
-QMediaObject::QMediaObject(QMediaObjectPrivate &dd, QObject *parent,
-                                            QMediaService *service):
-    QObject(parent),
-    d_ptr(&dd)
-{
-    Q_D(QMediaObject);
-    d->q_ptr = this;
-
-    d->notifyTimer = new QTimer(this);
-    d->notifyTimer->setInterval(1000);
-    connect(d->notifyTimer, SIGNAL(timeout()), SLOT(_q_notify()));
-
-    d->service = service;
-
-    setupMetaData();
-}
-
-/*!
-    Watch the property \a name. The property's notify signal will be emitted
-    once every notifyInterval milliseconds.
-
-    \sa notifyInterval
-*/
-
-void QMediaObject::addPropertyWatch(QByteArray const &name)
-{
-    Q_D(QMediaObject);
-
-    const QMetaObject* m = metaObject();
-
-    int index = m->indexOfProperty(name.constData());
-
-    if (index != -1 && m->property(index).hasNotifySignal()) {
-        d->notifyProperties.insert(index);
-
-        if (!d->notifyTimer->isActive())
-            d->notifyTimer->start();
-    }
-}
-
-/*!
-    Remove property \a name from the list of properties whose changes are
-    regularly signaled.
-
-    \sa notifyInterval
-*/
-
-void QMediaObject::removePropertyWatch(QByteArray const &name)
-{
-    Q_D(QMediaObject);
-
-    int index = metaObject()->indexOfProperty(name.constData());
-
-    if (index != -1) {
-        d->notifyProperties.remove(index);
-
-        if (d->notifyProperties.isEmpty())
-            d->notifyTimer->stop();
-    }
-}
-
-/*!
-    \property QMediaObject::notifyInterval
-
-    The interval at which notifiable properties will update.
-
-    The interval is expressed in milliseconds, the default value is 1000.
-
-    \sa addPropertyWatch(), removePropertyWatch()
-*/
-
-/*!
-    \fn void QMediaObject::notifyIntervalChanged(int milliseconds)
-
-    Signal a change in the notify interval period to \a milliseconds.
-*/
-
-/*!
-    \property QMediaObject::metaDataAvailable
-    \brief whether access to a media object's meta-data is available.
-
-    If this is true there is meta-data available, otherwise there is no meta-data available.
-*/
-
-bool QMediaObject::isMetaDataAvailable() const
-{
-    Q_D(const QMediaObject);
-
-    return d->metaDataControl
-            ? d->metaDataControl->isMetaDataAvailable()
-            : false;
-}
-
-/*!
-    \fn QMediaObject::metaDataAvailableChanged(bool available)
-
-    Signals that the \a available state of a media object's meta-data has changed.
-*/
-
-/*!
-    \property QMediaObject::metaDataWritable
-    \brief whether a media object's meta-data is writable.
-
-    If this is true the meta-data is writable, otherwise the meta-data is read-only.
-*/
-
-bool QMediaObject::isMetaDataWritable() const
-{
-    Q_D(const QMediaObject);
-
-    return d->metaDataControl
-            ? d->metaDataControl->isWritable()
-            : false;
-}
-
-/*!
-    \fn QMediaObject::metaDataWritableChanged(bool writable)
-
-    Signals that the \a writable state of a media object's meta-data has changed.
-*/
-
-/*!
-    Returns the value associated with a meta-data \a key.
-*/
-QVariant QMediaObject::metaData(QtMultimedia::MetaData key) const
-{
-    Q_D(const QMediaObject);
-
-    return d->metaDataControl
-            ? d->metaDataControl->metaData(key)
-            : QVariant();
-}
-
-/*!
-    Sets a \a value for a meta-data \a key.
-*/
-void QMediaObject::setMetaData(QtMultimedia::MetaData key, const QVariant &value)
-{
-    Q_D(QMediaObject);
-
-    if (d->metaDataControl)
-        d->metaDataControl->setMetaData(key, value);
-}
-
-/*!
-    Returns a list of keys there is meta-data available for.
-*/
-QList<QtMultimedia::MetaData> QMediaObject::availableMetaData() const
-{
-    Q_D(const QMediaObject);
-
-    return d->metaDataControl
-            ? d->metaDataControl->availableMetaData()
-            : QList<QtMultimedia::MetaData>();
-}
-
-/*!
-    \fn QMediaObject::metaDataChanged()
-
-    Signals that a media object's meta-data has changed.
-*/
-
-/*!
-    Returns the value associated with a meta-data \a key.
-
-    The naming and type of extended meta-data is not standardized, so the values and meaning
-    of keys may vary between backends.
-*/
-QVariant QMediaObject::extendedMetaData(const QString &key) const
-{
-    Q_D(const QMediaObject);
-
-    return d->metaDataControl
-            ? d->metaDataControl->extendedMetaData(key)
-            : QVariant();
-}
-
-/*!
-    Sets a \a value for a meta-data \a key.
-
-    The naming and type of extended meta-data is not standardized, so the values and meaning
-    of keys may vary between backends.
-*/
-void QMediaObject::setExtendedMetaData(const QString &key, const QVariant &value)
-{
-    Q_D(QMediaObject);
-
-    if (d->metaDataControl)
-        d->metaDataControl->setExtendedMetaData(key, value);
-}
-
-/*!
-    Returns a list of keys there is extended meta-data available for.
-*/
-QStringList QMediaObject::availableExtendedMetaData() const
-{
-    Q_D(const QMediaObject);
-
-    return d->metaDataControl
-            ? d->metaDataControl->availableExtendedMetaData()
-            : QStringList();
-}
-
-
-void QMediaObject::setupMetaData()
-{
-    Q_D(QMediaObject);
-
-    if (d->service != 0) {
-        d->metaDataControl =
-            qobject_cast<QMetaDataControl*>(d->service->control(QMetaDataControl_iid));
-
-        if (d->metaDataControl) {
-            connect(d->metaDataControl, SIGNAL(metaDataChanged()), SIGNAL(metaDataChanged()));
-            connect(d->metaDataControl,
-                    SIGNAL(metaDataAvailableChanged(bool)),
-                    SIGNAL(metaDataAvailableChanged(bool)));
-            connect(d->metaDataControl,
-                    SIGNAL(writableChanged(bool)),
-                    SIGNAL(metaDataWritableChanged(bool)));
-        }
-    }
-}
-
-/*!
-    \fn QMediaObject::availabilityChanged(bool available)
-
-    Signal emitted when the availability state has changed to \a available
-*/
-
-
-#include "moc_qmediaobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediaobject.h b/src/multimedia/base/qmediaobject.h
deleted file mode 100644
index d09b1af..0000000
--- a/src/multimedia/base/qmediaobject.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTMEDIAOBJECT_H
-#define QABSTRACTMEDIAOBJECT_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qstringlist.h>
-
-#include <QtMultimedia/qtmedianamespace.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMediaService;
-
-class QMediaObjectPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaObject : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(int notifyInterval READ notifyInterval WRITE setNotifyInterval NOTIFY notifyIntervalChanged)
-    Q_PROPERTY(bool metaDataAvailable READ isMetaDataAvailable NOTIFY metaDataAvailableChanged)
-    Q_PROPERTY(bool metaDataWritable READ isMetaDataWritable NOTIFY metaDataWritableChanged)
-
-public:
-    ~QMediaObject();
-
-    virtual bool isAvailable() const;
-    virtual QtMultimedia::AvailabilityError availabilityError() const;
-
-    virtual QMediaService* service() const;
-
-    int notifyInterval() const;
-    void setNotifyInterval(int milliSeconds);
-
-    virtual void bind(QObject*);
-    virtual void unbind(QObject*);
-
-    bool isMetaDataAvailable() const;
-    bool isMetaDataWritable() const;
-
-    QVariant metaData(QtMultimedia::MetaData key) const;
-    void setMetaData(QtMultimedia::MetaData key, const QVariant &value);
-    QList<QtMultimedia::MetaData> availableMetaData() const;
-
-    QVariant extendedMetaData(const QString &key) const;
-    void setExtendedMetaData(const QString &key, const QVariant &value);
-    QStringList availableExtendedMetaData() const;
-
-Q_SIGNALS:
-    void notifyIntervalChanged(int milliSeconds);
-
-    void metaDataAvailableChanged(bool available);
-    void metaDataWritableChanged(bool writable);
-    void metaDataChanged();
-
-    void availabilityChanged(bool available);
-
-protected:
-    QMediaObject(QObject *parent, QMediaService *service);
-    QMediaObject(QMediaObjectPrivate &dd, QObject *parent, QMediaService *service);
-
-    void addPropertyWatch(QByteArray const &name);
-    void removePropertyWatch(QByteArray const &name);
-
-    QMediaObjectPrivate *d_ptr;
-
-private:
-    void setupMetaData();
-
-    Q_DECLARE_PRIVATE(QMediaObject)
-    Q_PRIVATE_SLOT(d_func(), void _q_notify())
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-
-#endif  // QABSTRACTMEDIAOBJECT_H
diff --git a/src/multimedia/base/qmediaobject_p.h b/src/multimedia/base/qmediaobject_p.h
deleted file mode 100644
index ec2f75a..0000000
--- a/src/multimedia/base/qmediaobject_p.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTMEDIAOBJECT_P_H
-#define QABSTRACTMEDIAOBJECT_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qbytearray.h>
-#include <QtCore/qset.h>
-#include <QtCore/qtimer.h>
-
-#include <QtMultimedia/qmediaobject.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMetaDataControl;
-
-#define Q_DECLARE_NON_CONST_PUBLIC(Class) \
-    inline Class* q_func() { return static_cast<Class *>(q_ptr); } \
-    friend class Class;
-
-
-class QMediaObjectPrivate
-{
-    Q_DECLARE_PUBLIC(QMediaObject)
-
-public:
-    QMediaObjectPrivate():metaDataControl(0), notifyTimer(0) {}
-    virtual ~QMediaObjectPrivate() {}
-
-    void _q_notify();
-
-    QMediaService *service;
-    QMetaDataControl *metaDataControl;
-    QTimer* notifyTimer;
-    QSet<int> notifyProperties;
-
-    QMediaObject *q_ptr;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qmediaplaylist.cpp b/src/multimedia/base/qmediaplaylist.cpp
deleted file mode 100644
index b3f3dd3..0000000
--- a/src/multimedia/base/qmediaplaylist.cpp
+++ /dev/null
@@ -1,724 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qlist.h>
-#include <QtCore/qfile.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qcoreevent.h>
-#include <QtCore/qcoreapplication.h>
-
-#include <QtMultimedia/qmediaplaylist.h>
-#include "qmediaplaylist_p.h"
-#include <QtMultimedia/qmediaplaylistprovider.h>
-#include <QtMultimedia/qlocalmediaplaylistprovider.h>
-#include <QtMultimedia/qmediaplaylistioplugin.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaplaylistcontrol.h>
-#include <QtMultimedia/qmediaplayercontrol.h>
-
-#include "qmediapluginloader_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, playlistIOLoader,
-        (QMediaPlaylistIOInterface_iid, QLatin1String("/playlistformats"), Qt::CaseInsensitive))
-
-
-/*!
-    \class QMediaPlaylist
-    \ingroup multimedia
-    \since 4.7
-
-    \preliminary
-    \brief The QMediaPlaylist class provides a list of media content to play.
-
-    QMediaPlaylist is intended to be used with other media objects,
-    like QMediaPlayer or QMediaImageViewer.
-    QMediaPlaylist allows to access the service intrinsic playlist functionality
-    if available, otherwise it provides the the local memory playlist implementation.
-
-\code
-    player = new QMediaPlayer;
-
-    playlist = new QMediaPlaylist;
-    playlist->setMediaObject(player);
-    playlist->append(QUrl("http://example.com/movie1.mp4"));
-    playlist->append(QUrl("http://example.com/movie2.mp4"));
-    playlist->append(QUrl("http://example.com/movie3.mp4"));
-
-    playlist->setCurrentIndex(1);
-
-    player->play();
-\endcode
-
-    Depending on playlist source implementation,
-    most of playlist modifcation operations can be asynchronous.
-
-    \sa QMediaContent
-*/
-
-
-/*!
-    \enum QMediaPlaylist::PlaybackMode
-
-    The QMediaPlaylist::PlaybackMode describes the order items in playlist are played.
-
-    \value CurrentItemOnce    The current item is played only once.
-
-    \value CurrentItemInLoop  The current item is played in the loop.
-
-    \value Linear             Playback starts from the first to the last items and stops.
-                              next item is a null item when the last one is currently playing.
-
-    \value Loop               Playback continues from the first item after the last one finished playing.
-
-    \value Random             Play items in random order.
-*/
-
-
-
-/*!
-  Create a new playlist object for with the given \a parent.  
-*/
-
-QMediaPlaylist::QMediaPlaylist(QObject *parent)
-    : QObject(parent)
-    , d_ptr(new QMediaPlaylistPrivate)
-{
-    Q_D(QMediaPlaylist);
-
-    d->q_ptr = this;
-    d->localPlaylistControl = new QLocalMediaPlaylistControl(this);
-
-    setMediaObject(0);
-}
-
-/*!
-  Destroys the playlist.
-  */
-
-QMediaPlaylist::~QMediaPlaylist()
-{
-    Q_D(QMediaPlaylist);
-
-    if (d->mediaObject)
-        d->mediaObject->unbind(this);
-
-    delete d_ptr;
-}
-
-/*!
-    Returns the QMediaObject that is being used to play the contents of this playlist.
-*/
-
-QMediaObject *QMediaPlaylist::mediaObject() const
-{
-    return d_func()->mediaObject;
-}
-
-/*!
-  If \a mediaObject is null or doesn't have an intrinsic playlist,
-  internal local memory playlist source will be created.
-*/
-void QMediaPlaylist::setMediaObject(QMediaObject *mediaObject)
-{
-    Q_D(QMediaPlaylist);
-
-    if (mediaObject && mediaObject == d->mediaObject)
-        return;
-
-    QMediaService *service = mediaObject
-            ? mediaObject->service() : 0;
-
-    QMediaPlaylistControl *newControl = 0;
-
-    if (service)
-        newControl = qobject_cast<QMediaPlaylistControl*>(service->control(QMediaPlaylistControl_iid));
-
-    if (!newControl)
-        newControl = d->localPlaylistControl;
-
-    if (d->control != newControl) {
-        int oldSize = 0;
-        if (d->control) {
-            QMediaPlaylistProvider *playlist = d->control->playlistProvider();
-            oldSize = playlist->mediaCount();
-            disconnect(playlist, SIGNAL(loadFailed(QMediaPlaylist::Error,QString)),
-                    this, SLOT(_q_loadFailed(QMediaPlaylist::Error,QString)));
-
-            disconnect(playlist, SIGNAL(mediaChanged(int,int)), this, SIGNAL(mediaChanged(int,int)));
-            disconnect(playlist, SIGNAL(mediaAboutToBeInserted(int,int)), this, SIGNAL(mediaAboutToBeInserted(int,int)));
-            disconnect(playlist, SIGNAL(mediaInserted(int,int)), this, SIGNAL(mediaInserted(int,int)));
-            disconnect(playlist, SIGNAL(mediaAboutToBeRemoved(int,int)), this, SIGNAL(mediaAboutToBeRemoved(int,int)));
-            disconnect(playlist, SIGNAL(mediaRemoved(int,int)), this, SIGNAL(mediaRemoved(int,int)));
-
-            disconnect(playlist, SIGNAL(loaded()), this, SIGNAL(loaded()));
-
-            disconnect(d->control, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)),
-                    this, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
-            disconnect(d->control, SIGNAL(currentIndexChanged(int)),
-                    this, SIGNAL(currentIndexChanged(int)));
-            disconnect(d->control, SIGNAL(currentMediaChanged(QMediaContent)),
-                    this, SIGNAL(currentMediaChanged(QMediaContent)));
-        }
-
-        d->control = newControl;
-        QMediaPlaylistProvider *playlist = d->control->playlistProvider();
-        connect(playlist, SIGNAL(loadFailed(QMediaPlaylist::Error,QString)),
-                this, SLOT(_q_loadFailed(QMediaPlaylist::Error,QString)));
-
-        connect(playlist, SIGNAL(mediaChanged(int,int)), this, SIGNAL(mediaChanged(int,int)));
-        connect(playlist, SIGNAL(mediaAboutToBeInserted(int,int)), this, SIGNAL(mediaAboutToBeInserted(int,int)));
-        connect(playlist, SIGNAL(mediaInserted(int,int)), this, SIGNAL(mediaInserted(int,int)));
-        connect(playlist, SIGNAL(mediaAboutToBeRemoved(int,int)), this, SIGNAL(mediaAboutToBeRemoved(int,int)));
-        connect(playlist, SIGNAL(mediaRemoved(int,int)), this, SIGNAL(mediaRemoved(int,int)));
-
-        connect(playlist, SIGNAL(loaded()), this, SIGNAL(loaded()));
-
-        connect(d->control, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)),
-                this, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
-        connect(d->control, SIGNAL(currentIndexChanged(int)),
-                this, SIGNAL(currentIndexChanged(int)));
-        connect(d->control, SIGNAL(currentMediaChanged(QMediaContent)),
-                this, SIGNAL(currentMediaChanged(QMediaContent)));
-
-        if (oldSize)
-            emit mediaRemoved(0, oldSize-1);
-
-        if (playlist->mediaCount()) {
-            emit mediaAboutToBeInserted(0,playlist->mediaCount()-1);
-            emit mediaInserted(0,playlist->mediaCount()-1);
-        }
-    }
-
-    if (d->mediaObject)
-        d->mediaObject->unbind(this);
-
-    d->mediaObject = mediaObject;
-    if (d->mediaObject)
-        d->mediaObject->bind(this);
-}
-
-/*!
-  \property QMediaPlaylist::playbackMode
-
-  This property defines the order, items in playlist are played.
-
-  \sa QMediaPlaylist::PlaybackMode
-*/
-
-QMediaPlaylist::PlaybackMode QMediaPlaylist::playbackMode() const
-{
-    return d_func()->control->playbackMode();
-}
-
-void QMediaPlaylist::setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
-{
-    Q_D(QMediaPlaylist);
-    d->control->setPlaybackMode(mode);
-}
-
-/*!
-  Returns position of the current media source in the playlist.
-*/
-int QMediaPlaylist::currentIndex() const
-{
-    return d_func()->control->currentIndex();
-}
-
-/*!
-  Returns the current media content.
-*/
-
-QMediaContent QMediaPlaylist::currentMedia() const
-{
-    return d_func()->playlist()->media(currentIndex());
-}
-
-/*!
-  Returns the index of item, which were current after calling next()
-  \a steps times.
-
-  Returned value depends on the size of playlist, current position
-  and playback mode.
-
-  \sa QMediaPlaylist::playbackMode
-*/
-int QMediaPlaylist::nextIndex(int steps) const
-{
-    return d_func()->control->nextIndex(steps);
-}
-
-/*!
-  Returns the index of item, which were current after calling previous()
-  \a steps times.
-
-  \sa QMediaPlaylist::playbackMode
-*/
-
-int QMediaPlaylist::previousIndex(int steps) const
-{
-    return d_func()->control->previousIndex(steps);
-}
-
-
-/*!
-  Returns the number of items in the playlist.
-
-  \sa isEmpty()
-  */
-int QMediaPlaylist::mediaCount() const
-{
-    return d_func()->playlist()->mediaCount();
-}
-
-/*!
-  Returns true if the playlist contains no items; otherwise returns false.
-  \sa mediaCount()
-  */
-bool QMediaPlaylist::isEmpty() const
-{
-    return mediaCount() == 0;
-}
-
-/*!
-  Returns true if the playlist can be modified; otherwise returns false.
-  \sa mediaCount()
-  */
-bool QMediaPlaylist::isReadOnly() const
-{
-    return d_func()->playlist()->isReadOnly();
-}
-
-/*!
-  Returns the media content at \a index in the playlist.
-*/
-
-QMediaContent QMediaPlaylist::media(int index) const
-{
-    return d_func()->playlist()->media(index);
-}
-
-/*!
-  Append the media \a content to the playlist.
-
-  Returns true if the operation is successfull, other wise return false.
-  */
-bool QMediaPlaylist::addMedia(const QMediaContent &content)
-{
-    return d_func()->control->playlistProvider()->addMedia(content);
-}
-
-/*!
-  Append multiple media content \a items to the playlist.
-
-  Returns true if the operation is successfull, other wise return false.
-  */
-bool QMediaPlaylist::addMedia(const QList<QMediaContent> &items)
-{
-    return d_func()->control->playlistProvider()->addMedia(items);
-}
-
-/*!
-  Insert the media \a content to the playlist at position \a pos.
-
-  Returns true if the operation is successful, otherwise false.
-*/
-
-bool QMediaPlaylist::insertMedia(int pos, const QMediaContent &content)
-{
-    return d_func()->playlist()->insertMedia(pos, content);
-}
-
-/*!
-  Insert multiple media content \a items to the playlist at position \a pos.
-
-  Returns true if the operation is successful, otherwise false.
-*/
-
-bool QMediaPlaylist::insertMedia(int pos, const QList<QMediaContent> &items)
-{
-    return d_func()->playlist()->insertMedia(pos, items);
-}
-
-/*!
-  Remove the item from the playlist at position \a pos.
-
-  Returns true if the operation is successfull, other wise return false.
-  */
-bool QMediaPlaylist::removeMedia(int pos)
-{
-    Q_D(QMediaPlaylist);
-    return d->playlist()->removeMedia(pos);
-}
-
-/*!
-  Remove the items from the playlist from position \a start to \a end inclusive.
-
-  Returns true if the operation is successfull, other wise return false.
-  */
-bool QMediaPlaylist::removeMedia(int start, int end)
-{
-    Q_D(QMediaPlaylist);
-    return d->playlist()->removeMedia(start, end);
-}
-
-/*!
-  Remove all the items from the playlist.
-
-  Returns true if the operation is successfull, other wise return false.
-  */
-bool QMediaPlaylist::clear()
-{
-    Q_D(QMediaPlaylist);
-    return d->playlist()->clear();
-}
-
-bool QMediaPlaylistPrivate::readItems(QMediaPlaylistReader *reader)
-{
-    while (!reader->atEnd())
-        playlist()->addMedia(reader->readItem());
-
-    return true;
-}
-
-bool QMediaPlaylistPrivate::writeItems(QMediaPlaylistWriter *writer)
-{
-    for (int i=0; i<playlist()->mediaCount(); i++) {
-        if (!writer->writeItem(playlist()->media(i)))
-            return false;
-    }
-    writer->close();
-    return true;
-}
-
-/*!
-  Load playlist from \a location. If \a format is specified, it is used,
-  otherwise format is guessed from location name and data.
-
-  New items are appended to playlist.
-
-  QMediaPlaylist::loaded() signal is emited if playlist was loaded succesfully,
-  otherwise the playlist emits loadFailed().
-*/
-void QMediaPlaylist::load(const QUrl &location, const char *format)
-{
-    Q_D(QMediaPlaylist);
-
-    d->error = NoError;
-    d->errorString.clear();
-
-    if (d->playlist()->load(location,format))
-        return;
-
-    if (isReadOnly()) {
-        d->error = AccessDeniedError;
-        d->errorString = tr("Could not add items to read only playlist.");
-        emit loadFailed();
-        return;
-    }
-
-    foreach (QString const& key, playlistIOLoader()->keys()) {
-        QMediaPlaylistIOInterface* plugin = qobject_cast<QMediaPlaylistIOInterface*>(playlistIOLoader()->instance(key));
-        if (plugin && plugin->canRead(location,format)) {
-            QMediaPlaylistReader *reader = plugin->createReader(location,QByteArray(format));
-            if (reader && d->readItems(reader)) {
-                delete reader;
-                emit loaded();
-                return;
-            }
-            delete reader;
-        }
-    }
-
-    d->error = FormatNotSupportedError;
-    d->errorString = tr("Playlist format is not supported");
-    emit loadFailed();
-
-    return;
-}
-
-/*!
-  Load playlist from QIODevice \a device. If \a format is specified, it is used,
-  otherwise format is guessed from device data.
-
-  New items are appended to playlist.
-
-  QMediaPlaylist::loaded() signal is emited if playlist was loaded succesfully,
-  otherwise the playlist emits loadFailed().
-*/
-void QMediaPlaylist::load(QIODevice * device, const char *format)
-{
-    Q_D(QMediaPlaylist);
-
-    d->error = NoError;
-    d->errorString.clear();
-
-    if (d->playlist()->load(device,format))
-        return;
-
-    if (isReadOnly()) {
-        d->error = AccessDeniedError;
-        d->errorString = tr("Could not add items to read only playlist.");
-        emit loadFailed();
-        return;
-    }
-
-    foreach (QString const& key, playlistIOLoader()->keys()) {
-        QMediaPlaylistIOInterface* plugin = qobject_cast<QMediaPlaylistIOInterface*>(playlistIOLoader()->instance(key));
-        if (plugin && plugin->canRead(device,format)) {
-            QMediaPlaylistReader *reader = plugin->createReader(device,QByteArray(format));
-            if (reader && d->readItems(reader)) {
-                delete reader;
-                emit loaded();
-                return;
-            }
-            delete reader;
-        }
-    }
-
-    d->error = FormatNotSupportedError;
-    d->errorString = tr("Playlist format is not supported");
-    emit loadFailed();
-
-    return;
-}
-
-/*!
-  Save playlist to \a location. If \a format is specified, it is used,
-  otherwise format is guessed from location name.
-
-  Returns true if playlist was saved succesfully, otherwise returns false.
-  */
-bool QMediaPlaylist::save(const QUrl &location, const char *format)
-{
-    Q_D(QMediaPlaylist);
-
-    d->error = NoError;
-    d->errorString.clear();
-
-    if (d->playlist()->save(location,format))
-        return true;
-
-    QFile file(location.toLocalFile());
-
-    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
-        d->error = AccessDeniedError;
-        d->errorString = tr("The file could not be accessed.");
-        return false;
-    }
-
-    return save(&file, format);
-}
-
-/*!
-  Save playlist to QIODevice \a device using format \a format.
-
-  Returns true if playlist was saved succesfully, otherwise returns false.
-*/
-bool QMediaPlaylist::save(QIODevice * device, const char *format)
-{
-    Q_D(QMediaPlaylist);
-
-    d->error = NoError;
-    d->errorString.clear();
-
-    if (d->playlist()->save(device,format))
-        return true;
-
-    foreach (QString const& key, playlistIOLoader()->keys()) {
-        QMediaPlaylistIOInterface* plugin = qobject_cast<QMediaPlaylistIOInterface*>(playlistIOLoader()->instance(key));
-        if (plugin && plugin->canWrite(device,format)) {
-            QMediaPlaylistWriter *writer = plugin->createWriter(device,QByteArray(format));
-            if (writer && d->writeItems(writer)) {
-                delete writer;
-                return true;
-            }
-            delete writer;
-        }
-    }
-
-    d->error = FormatNotSupportedError;
-    d->errorString = tr("Playlist format is not supported.");
-
-    return false;
-}
-
-/*!
-    Returns the last error condition.
-*/
-QMediaPlaylist::Error QMediaPlaylist::error() const
-{
-    return d_func()->error;
-}
-
-/*!
-    Returns the string describing the last error condition.
-*/
-QString QMediaPlaylist::errorString() const
-{
-    return d_func()->errorString;
-}
-
-/*!
-  Shuffle items in the playlist.
-*/
-void QMediaPlaylist::shuffle()
-{
-    d_func()->playlist()->shuffle();
-}
-
-
-/*!
-    Advance to the next media content in playlist.
-*/
-void QMediaPlaylist::next()
-{
-    d_func()->control->next();
-}
-
-/*!
-    Return to the previous media content in playlist.
-*/
-void QMediaPlaylist::previous()
-{
-    d_func()->control->previous();
-}
-
-/*!
-    Activate media content from playlist at position \a playlistPosition.
-*/
-
-void QMediaPlaylist::setCurrentIndex(int playlistPosition)
-{
-    d_func()->control->setCurrentIndex(playlistPosition);
-}
-
-/*!
-    \fn void QMediaPlaylist::mediaInserted(int start, int end)
-
-    This signal is emitted after media has been inserted into the playlist.
-    The new items are those between \a start and \a end inclusive.
- */
-
-/*!
-    \fn void QMediaPlaylist::mediaRemoved(int start, int end)
-
-    This signal is emitted after media has been removed from the playlist.
-    The removed items are those between \a start and \a end inclusive.
- */
-
-/*!
-    \fn void QMediaPlaylist::mediaChanged(int start, int end)
-
-    This signal is emitted after media has been changed in the playlist
-    between \a start and \a end positions inclusive.
- */
-
-/*!
-    \fn void QMediaPlaylist::currentIndexChanged(int position)
-
-    Signal emitted when playlist position changed to \a position.
-*/
-
-/*!
-    \fn void QMediaPlaylist::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)
-
-    Signal emitted when playback mode changed to \a mode.
-*/
-
-/*!
-    \fn void QMediaPlaylist::mediaAboutToBeInserted(int start, int end)
-
-    Signal emitted when item to be inserted at \a start and ending at \a end.
-*/
-
-/*!
-    \fn void QMediaPlaylist::mediaAboutToBeRemoved(int start, int end)
-
-    Signal emitted when item to de deleted ar \a start and ending at \a end.
-*/
-
-/*!
-    \fn void QMediaPlaylist::currentMediaChanged(const QMediaContent &content)
-
-    Signal emitted when current media changes to \a content.
-*/
-
-/*!
-    \property QMediaPlaylist::currentIndex
-    \brief Current position.
-*/
-
-/*!
-    \property QMediaPlaylist::currentMedia
-    \brief Current media content.
-*/
-
-/*!
-    \fn QMediaPlaylist::loaded()
-
-    Signal emitted when playlist finished loading.
-*/
-
-/*!
-    \fn QMediaPlaylist::loadFailed()
-
-    Signal emitted if failed to load playlist.
-*/
-
-/*!
-    \enum QMediaPlaylist::Error
-
-    This enum describes the QMediaPlaylist error codes.
-
-    \value NoError                 No errors.
-    \value FormatError             Format error.
-    \value FormatNotSupportedError Format not supported.
-    \value NetworkError            Network error.
-    \value AccessDeniedError       Access denied error.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qmediaplaylist.cpp"
-#include "moc_qmediaplaylist_p.cpp"
diff --git a/src/multimedia/base/qmediaplaylist.h b/src/multimedia/base/qmediaplaylist.h
deleted file mode 100644
index 494cf11..0000000
--- a/src/multimedia/base/qmediaplaylist.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYLIST_H
-#define QMEDIAPLAYLIST_H
-
-#include <QtCore/qobject.h>
-
-#include <QtMultimedia/qmediacontent.h>
-#include <QtMultimedia/qmediaobject.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMediaPlaylistProvider;
-
-class QMediaPlaylistPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlaylist : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode NOTIFY playbackModeChanged)
-    Q_PROPERTY(QMediaContent currentMedia READ currentMedia NOTIFY currentMediaChanged)
-    Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
-    Q_ENUMS(PlaybackMode Error)
-
-public:
-    enum PlaybackMode { CurrentItemOnce, CurrentItemInLoop, Linear, Loop, Random };
-    enum Error { NoError, FormatError, FormatNotSupportedError, NetworkError, AccessDeniedError };
-
-    QMediaPlaylist(QObject *parent = 0);
-    virtual ~QMediaPlaylist();
-
-    QMediaObject *mediaObject() const;
-    void setMediaObject(QMediaObject *object);
-
-    PlaybackMode playbackMode() const;
-    void setPlaybackMode(PlaybackMode mode);
-
-    int currentIndex() const;
-    QMediaContent currentMedia() const;
-
-    int nextIndex(int steps = 1) const;
-    int previousIndex(int steps = 1) const;
-
-    QMediaContent media(int index) const;
-
-    int mediaCount() const;
-    bool isEmpty() const;
-    bool isReadOnly() const;
-
-    bool addMedia(const QMediaContent &content);
-    bool addMedia(const QList<QMediaContent> &items);
-    bool insertMedia(int index, const QMediaContent &content);
-    bool insertMedia(int index, const QList<QMediaContent> &items);
-    bool removeMedia(int pos);
-    bool removeMedia(int start, int end);
-    bool clear();
-
-    void load(const QUrl &location, const char *format = 0);
-    void load(QIODevice * device, const char *format = 0);
-
-    bool save(const QUrl &location, const char *format = 0);
-    bool save(QIODevice * device, const char *format);
-
-    Error error() const;
-    QString errorString() const;
-
-public Q_SLOTS:
-    void shuffle();
-
-    void next();
-    void previous();
-
-    void setCurrentIndex(int index);
-
-Q_SIGNALS:
-    void currentIndexChanged(int index);
-    void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
-    void currentMediaChanged(const QMediaContent&);
-
-    void mediaAboutToBeInserted(int start, int end);
-    void mediaInserted(int start, int end);
-    void mediaAboutToBeRemoved(int start, int end);
-    void mediaRemoved(int start, int end);
-    void mediaChanged(int start, int end);
-
-    void loaded();
-    void loadFailed();
-
-protected:
-    QMediaPlaylistPrivate *d_ptr;
-
-private:
-    Q_DECLARE_PRIVATE(QMediaPlaylist)
-    Q_PRIVATE_SLOT(d_func(), void _q_loadFailed(QMediaPlaylist::Error, const QString &))
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QMediaPlaylist::PlaybackMode)
-Q_DECLARE_METATYPE(QMediaPlaylist::Error)
-
-QT_END_HEADER
-
-#endif  // QMEDIAPLAYLIST_H
diff --git a/src/multimedia/base/qmediaplaylist_p.h b/src/multimedia/base/qmediaplaylist_p.h
deleted file mode 100644
index da529b7..0000000
--- a/src/multimedia/base/qmediaplaylist_p.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYLIST_P_H
-#define QMEDIAPLAYLIST_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/qmediaplaylist.h>
-#include <QtMultimedia/qmediaplaylistcontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qlocalmediaplaylistprovider.h>
-#include "qmediaobject_p.h"
-
-#include <QtCore/qdebug.h>
-
-#ifdef Q_MOC_RUN
-# pragma Q_MOC_EXPAND_MACROS
-#endif
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMediaPlaylistControl;
-class QMediaPlaylistProvider;
-class QMediaPlaylistReader;
-class QMediaPlaylistWriter;
-class QMediaPlayerControl;
-
-class QMediaPlaylistPrivate
-{
-    Q_DECLARE_PUBLIC(QMediaPlaylist)
-public:
-    QMediaPlaylistPrivate()
-        :mediaObject(0),
-        control(0),
-        localPlaylistControl(0),
-        error(QMediaPlaylist::NoError)
-    {
-    }
-
-    virtual ~QMediaPlaylistPrivate() {}
-
-    void _q_loadFailed(QMediaPlaylist::Error error, const QString &errorString)
-    {
-        this->error = error;
-        this->errorString = errorString;
-
-        emit q_ptr->loadFailed();
-    }
-
-    void _q_mediaObjectDeleted()
-    {
-        Q_Q(QMediaPlaylist);
-        mediaObject = 0;
-        if (control != localPlaylistControl)
-            control = 0;
-        q->setMediaObject(0);
-    }
-
-    QMediaObject *mediaObject;
-
-    QMediaPlaylistControl *control;
-    QMediaPlaylistProvider *playlist() const { return control->playlistProvider(); }
-
-    QMediaPlaylistControl *localPlaylistControl;
-
-    bool readItems(QMediaPlaylistReader *reader);
-    bool writeItems(QMediaPlaylistWriter *writer);
-
-    QMediaPlaylist::Error error;
-    QString errorString;
-
-    QMediaPlaylist *q_ptr;
-};
-
-
-class QLocalMediaPlaylistControl : public QMediaPlaylistControl
-{
-    Q_OBJECT
-public:
-    QLocalMediaPlaylistControl(QObject *parent)
-        :QMediaPlaylistControl(parent)
-    {
-        QMediaPlaylistProvider *playlist = new QLocalMediaPlaylistProvider(this);
-        m_navigator = new QMediaPlaylistNavigator(playlist,this);
-        m_navigator->setPlaybackMode(QMediaPlaylist::Linear);
-
-        connect(m_navigator, SIGNAL(currentIndexChanged(int)), SIGNAL(currentIndexChanged(int)));
-        connect(m_navigator, SIGNAL(activated(QMediaContent)), SIGNAL(currentMediaChanged(QMediaContent)));
-    }
-
-    virtual ~QLocalMediaPlaylistControl() {};
-
-    QMediaPlaylistProvider* playlistProvider() const { return m_navigator->playlist(); }
-    bool setPlaylistProvider(QMediaPlaylistProvider *mediaPlaylist)
-    {
-        m_navigator->setPlaylist(mediaPlaylist);
-        emit playlistProviderChanged();
-        return true;
-    }
-
-    int currentIndex() const { return m_navigator->currentIndex(); }
-    void setCurrentIndex(int position) { m_navigator->jump(position); }
-    int nextIndex(int steps) const { return m_navigator->nextIndex(steps); }
-    int previousIndex(int steps) const { return m_navigator->previousIndex(steps); }
-
-    void next() { m_navigator->next(); }
-    void previous() { m_navigator->previous(); }
-
-    QMediaPlaylist::PlaybackMode playbackMode() const { return m_navigator->playbackMode(); }
-    void setPlaybackMode(QMediaPlaylist::PlaybackMode mode) { m_navigator->setPlaybackMode(mode); }
-
-private:
-    QMediaPlaylistNavigator *m_navigator;
-};
-
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QMEDIAPLAYLIST_P_H
diff --git a/src/multimedia/base/qmediaplaylistcontrol.cpp b/src/multimedia/base/qmediaplaylistcontrol.cpp
deleted file mode 100644
index ba3d224..0000000
--- a/src/multimedia/base/qmediaplaylistcontrol.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtMultimedia/qmediaplaylistcontrol.h>
-#include "qmediacontrol_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QMediaPlaylistControl
-    \ingroup multimedia-serv
-    \since 4.7
-
-    \preliminary
-    \brief The QMediaPlaylistControl class provides access to the playlist functionality of a
-    QMediaService.
-
-    If a QMediaService contains an internal playlist it will implement QMediaPlaylistControl.  This
-    control provides access to the contents of the \l {playlistProvider()}{playlist}, as well as the
-    \l {currentIndex()}{position} of the current media, and a means of navigating to the
-    \l {next()}{next} and \l {previous()}{previous} media.
-
-    The functionality provided by the control is exposed to application code through the
-    QMediaPlaylist class.
-
-    The interface name of QMediaPlaylistControl is \c com.nokia.Qt.QMediaPlaylistControl/1.0 as
-    defined in QMediaPlaylistControl_iid.
-
-    \sa QMediaService::control(), QMediaPlayer
-*/
-
-/*!
-    \macro QMediaPlaylistControl_iid
-
-    \c com.nokia.Qt.QMediaPlaylistControl/1.0
-
-    Defines the interface name of the QMediaPlaylistControl class.
-
-    \relates QMediaPlaylistControl
-*/
-
-/*!
-  Create a new playlist control object with the given \a parent.
-*/
-QMediaPlaylistControl::QMediaPlaylistControl(QObject *parent):
-    QMediaControl(*new QMediaControlPrivate, parent)
-{
-}
-
-/*!
-  Destroys the playlist control.
-*/
-QMediaPlaylistControl::~QMediaPlaylistControl()
-{
-}
-
-
-/*!
-  \fn QMediaPlaylistControl::playlistProvider() const
-
-  Returns the playlist used by this media player.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::setPlaylistProvider(QMediaPlaylistProvider *playlist)
-
-  Set the playlist of this media player to \a playlist.
-
-  In many cases it is possible just to use the playlist
-  constructed by player, but sometimes replacing the whole
-  playlist allows to avoid copyting of all the items bettween playlists.
-
-  Returns true if player can use this passed playlist; otherwise returns false.
-
-*/
-
-/*!
-  \fn QMediaPlaylistControl::currentIndex() const
-
-  Returns position of the current media source in the playlist.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::setCurrentIndex(int position)
-
-  Jump to the item at the given \a position.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::nextIndex(int step) const
-
-  Returns the index of item, which were current after calling next()
-  \a step times.
-
-  Returned value depends on the size of playlist, current position
-  and playback mode.
-
-  \sa QMediaPlaylist::playbackMode
-*/
-
-/*!
-  \fn QMediaPlaylistControl::previousIndex(int step) const
-
-  Returns the index of item, which were current after calling previous()
-  \a step times.
-
-  \sa QMediaPlaylist::playbackMode
-*/
-
-/*!
-  \fn QMediaPlaylistControl::next()
-
-  Moves to the next item in playlist.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::previous()
-
-  Returns to the previous item in playlist.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::playbackMode() const
-
-  Returns the playlist navigation mode.
-
-  \sa QMediaPlaylist::PlaybackMode
-*/
-
-/*!
-  \fn QMediaPlaylistControl::setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
-
-  Sets the playback \a mode.
-
-  \sa QMediaPlaylist::PlaybackMode
-*/
-
-/*!
-  \fn QMediaPlaylistControl::playlistProviderChanged()
-
-  Signal emited when the playlist provider has changed.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::currentIndexChanged(int position)
-
-  Signal emited when the playlist \a position is changed.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)
-
-  Signal emited when the playback \a mode is changed.
-*/
-
-/*!
-  \fn QMediaPlaylistControl::currentMediaChanged(const QMediaContent& content)
-
-  Signal emitted when current media changes to \a content.
-*/
-
-#include "moc_qmediaplaylistcontrol.cpp"
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediaplaylistcontrol.h b/src/multimedia/base/qmediaplaylistcontrol.h
deleted file mode 100644
index 228ee19..0000000
--- a/src/multimedia/base/qmediaplaylistcontrol.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QMEDIAPLAYLISTCONTROL_H
-#define QMEDIAPLAYLISTCONTROL_H
-
-#include <QtMultimedia/qmediacontrol.h>
-#include <QtMultimedia/qmediaplaylistnavigator.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QMediaPlaylistProvider;
-
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    virtual ~QMediaPlaylistControl();
-
-    virtual QMediaPlaylistProvider* playlistProvider() const = 0;
-    virtual bool setPlaylistProvider(QMediaPlaylistProvider *playlist) = 0;
-
-    virtual int currentIndex() const = 0;
-    virtual void setCurrentIndex(int position) = 0;
-    virtual int nextIndex(int steps) const = 0;
-    virtual int previousIndex(int steps) const = 0;
-
-    virtual void next() = 0;
-    virtual void previous() = 0;
-
-    virtual QMediaPlaylist::PlaybackMode playbackMode() const = 0;
-    virtual void setPlaybackMode(QMediaPlaylist::PlaybackMode mode) = 0;
-
-Q_SIGNALS:
-    void playlistProviderChanged();
-    void currentIndexChanged(int position);
-    void currentMediaChanged(const QMediaContent&);
-    void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
-
-protected:
-    QMediaPlaylistControl(QObject* parent = 0);
-};
-
-#define QMediaPlaylistControl_iid "com.nokia.Qt.QMediaPlaylistControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QMediaPlaylistControl, QMediaPlaylistControl_iid)
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QMEDIAPLAYLISTCONTROL_H
diff --git a/src/multimedia/base/qmediaplaylistioplugin.cpp b/src/multimedia/base/qmediaplaylistioplugin.cpp
deleted file mode 100644
index 48fd721..0000000
--- a/src/multimedia/base/qmediaplaylistioplugin.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qmediaplaylistioplugin.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QMediaPlaylistReader
-    \preliminary
-    \since 4.7
-    \brief The QMediaPlaylistReader class provides an interface for reading a playlist file.
-
-    \sa QMediaPlaylistIOPlugin
-*/
-
-/*!
-    Destroys a media playlist reader.
-*/
-QMediaPlaylistReader::~QMediaPlaylistReader()
-{
-}
-
-/*!
-    \fn QMediaPlaylistReader::atEnd() const
-
-    Identifies if a playlist reader has reached the end of its input.
-
-    Returns true if the reader has reached the end; and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlaylistReader::readItem()
-
-    Reads an item of media from a playlist file.
-
-    Returns the read media, or a null QMediaContent if no more media is available.
-*/
-
-/*!
-    \fn QMediaPlaylistReader::close()
-
-    Closes a playlist reader's input device.
-*/
-
-/*!
-    \class QMediaPlaylistWriter
-    \preliminary
-    \since 4.7
-    \brief The QMediaPlaylistWriter class provides an interface for writing a playlist file.
-
-    \sa QMediaPlaylistIOPlugin
-*/
-
-/*!
-    Destroys a media playlist writer.
-*/
-QMediaPlaylistWriter::~QMediaPlaylistWriter()
-{
-}
-
-/*!
-    \fn QMediaPlaylistWriter::writeItem(const QMediaContent &media)
-
-    Writes an item of \a media to a playlist file.
-
-    Returns true if the media was written succesfully; and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlaylistWriter::close()
-
-    Finalizes the writing of a playlist and closes the output device.
-*/
-
-/*!
-    \class QMediaPlaylistIOPlugin
-    \since 4.7
-    \brief The QMediaPlaylistIOPlugin class provides an interface for media playlist I/O plug-ins.
-*/
-
-/*!
-    Constructs a media playlist I/O plug-in with the given \a parent.
-*/
-QMediaPlaylistIOPlugin::QMediaPlaylistIOPlugin(QObject *parent)
-    :QObject(parent)
-{
-}
-
-/*!
-    Destroys a media playlist I/O plug-in.
-*/
-QMediaPlaylistIOPlugin::~QMediaPlaylistIOPlugin()
-{
-}
-
-/*!
-    \fn QMediaPlaylistIOPlugin::canRead(QIODevice *device, const QByteArray &format) const
-
-    Identifies if plug-in can read \a format data from an I/O \a device.
-
-    Returns true if the data can be read; and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlaylistIOPlugin::canRead(const QUrl& location, const QByteArray &format) const
-
-    Identifies if a plug-in can read \a format data from a URL \a location.
-
-    Returns true if the data can be read; and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlaylistIOPlugin::canWrite(QIODevice *device, const QByteArray &format) const
-
-    Identifies if a plug-in can write \a format data to an I/O \a device.
-
-    Returns true if the data can be written; and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlaylistIOPlugin::keys() const
-
-    Returns a list of format keys supported by a plug-in.
-*/
-
-/*!
-    \fn QMediaPlaylistIOPlugin::createReader(QIODevice *device, const QByteArray &format)
-
-    Returns a new QMediaPlaylistReader which reads \a format data from an I/O \a device.
-
-    If the device is invalid or the format is unsupported this will return a null pointer.
-*/
-
-/*!
-    \fn QMediaPlaylistIOPlugin::createReader(const QUrl& location, const QByteArray &format)
-
-    Returns a new QMediaPlaylistReader which reads \a format data from a URL \a location.
-
-    If the location or the format is unsupported this will return a null pointer.
-*/
-
-/*!
-    \fn QMediaPlaylistIOPlugin::createWriter(QIODevice *device, const QByteArray &format)
-
-    Returns a new QMediaPlaylistWriter which writes \a format data to an I/O \a device.
-
-    If the device is invalid or the format is unsupported this will return a null pointer.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qmediaplaylistioplugin.cpp"
-
diff --git a/src/multimedia/base/qmediaplaylistioplugin.h b/src/multimedia/base/qmediaplaylistioplugin.h
deleted file mode 100644
index e55298d..0000000
--- a/src/multimedia/base/qmediaplaylistioplugin.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYLISTIOPLUGIN_H
-#define QMEDIAPLAYLISTIOPLUGIN_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qplugin.h>
-#include <QtCore/qfactoryinterface.h>
-
-#include <QtMultimedia/qmediacontent.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QString;
-class QUrl;
-class QByteArray;
-class QIODevice;
-class QStringList;
-
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistReader
-{
-public:
-    virtual ~QMediaPlaylistReader();
-
-    virtual bool atEnd() const = 0;
-    virtual QMediaContent readItem() = 0;
-    virtual void close() = 0;
-};
-
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistWriter
-{
-public:
-    virtual ~QMediaPlaylistWriter();
-
-    virtual bool writeItem(const QMediaContent &content) = 0;
-    virtual void close() = 0;
-};
-
-struct Q_MULTIMEDIA_EXPORT QMediaPlaylistIOInterface : public QFactoryInterface
-{
-    virtual bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const = 0;
-    virtual bool canRead(const QUrl& location, const QByteArray &format = QByteArray()) const = 0;
-
-    virtual bool canWrite(QIODevice *device, const QByteArray &format) const = 0;
-
-    virtual QMediaPlaylistReader *createReader(QIODevice *device, const QByteArray &format = QByteArray()) = 0;
-    virtual QMediaPlaylistReader *createReader(const QUrl& location, const QByteArray &format = QByteArray()) = 0;
-
-    virtual QMediaPlaylistWriter *createWriter(QIODevice *device, const QByteArray &format) = 0;
-};
-
-#define QMediaPlaylistIOInterface_iid "com.nokia.Qt.QMediaPlaylistIOInterface"
-Q_DECLARE_INTERFACE(QMediaPlaylistIOInterface, QMediaPlaylistIOInterface_iid);
-
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistIOPlugin : public QObject, public QMediaPlaylistIOInterface
-{
-    Q_OBJECT
-    Q_INTERFACES(QMediaPlaylistIOInterface:QFactoryInterface)
-
-public:
-    explicit QMediaPlaylistIOPlugin(QObject *parent = 0);
-    virtual ~QMediaPlaylistIOPlugin();
-
-    virtual bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const = 0;
-    virtual bool canRead(const QUrl& location, const QByteArray &format = QByteArray()) const = 0;
-
-    virtual bool canWrite(QIODevice *device, const QByteArray &format) const = 0;
-
-    virtual QStringList keys() const = 0;
-
-    virtual QMediaPlaylistReader *createReader(QIODevice *device, const QByteArray &format = QByteArray()) = 0;
-    virtual QMediaPlaylistReader *createReader(const QUrl& location, const QByteArray &format = QByteArray()) = 0;
-
-    virtual QMediaPlaylistWriter *createWriter(QIODevice *device, const QByteArray &format) = 0;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QMEDIAPLAYLISTIOPLUGIN_H
diff --git a/src/multimedia/base/qmediaplaylistnavigator.cpp b/src/multimedia/base/qmediaplaylistnavigator.cpp
deleted file mode 100644
index 0c52c71..0000000
--- a/src/multimedia/base/qmediaplaylistnavigator.cpp
+++ /dev/null
@@ -1,545 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qmediaplaylistnavigator.h>
-#include <QtMultimedia/qmediaplaylistprovider.h>
-#include <QtMultimedia/qmediaplaylist.h>
-#include "qmediaobject_p.h"
-
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-class QMediaPlaylistNullProvider : public QMediaPlaylistProvider
-{
-public:
-    QMediaPlaylistNullProvider() :QMediaPlaylistProvider() {}
-    virtual ~QMediaPlaylistNullProvider() {}
-    virtual int mediaCount() const {return 0;}
-    virtual QMediaContent media(int) const { return QMediaContent(); }
-};
-
-Q_GLOBAL_STATIC(QMediaPlaylistNullProvider, _q_nullMediaPlaylist)
-
-class QMediaPlaylistNavigatorPrivate
-{
-    Q_DECLARE_NON_CONST_PUBLIC(QMediaPlaylistNavigator)
-public:
-    QMediaPlaylistNavigatorPrivate()
-        :playlist(0),
-        currentPos(-1),
-        lastValidPos(-1),
-        playbackMode(QMediaPlaylist::Linear),
-        randomPositionsOffset(-1)
-    {
-    }
-
-    QMediaPlaylistProvider *playlist;
-    int currentPos;
-    int lastValidPos; //to be used with CurrentItemOnce playback mode
-    QMediaPlaylist::PlaybackMode playbackMode;
-    QMediaContent currentItem;
-
-    mutable QList<int> randomModePositions;
-    mutable int randomPositionsOffset;
-
-    int nextItemPos(int steps = 1) const;
-    int previousItemPos(int steps = 1) const;
-
-    void _q_mediaInserted(int start, int end);
-    void _q_mediaRemoved(int start, int end);
-    void _q_mediaChanged(int start, int end);
-
-    QMediaPlaylistNavigator *q_ptr;
-};
-
-
-int QMediaPlaylistNavigatorPrivate::nextItemPos(int steps) const
-{
-    if (playlist->mediaCount() == 0)
-        return -1;
-
-    if (steps == 0)
-        return currentPos;
-
-    switch (playbackMode) {
-        case QMediaPlaylist::CurrentItemOnce:
-            return /*currentPos == -1 ? lastValidPos :*/ -1;
-        case QMediaPlaylist::CurrentItemInLoop:
-            return currentPos;
-        case QMediaPlaylist::Linear:
-            {
-                int nextPos = currentPos+steps;
-                return nextPos < playlist->mediaCount() ? nextPos : -1;
-            }
-        case QMediaPlaylist::Loop:
-            return (currentPos+steps) % playlist->mediaCount();
-        case QMediaPlaylist::Random:
-            {
-                //TODO: limit the history size
-
-                if (randomPositionsOffset == -1) {
-                    randomModePositions.clear();
-                    randomModePositions.append(currentPos);
-                    randomPositionsOffset = 0;
-                }
-
-                while (randomModePositions.size() < randomPositionsOffset+steps+1)
-                    randomModePositions.append(-1);
-                int res = randomModePositions[randomPositionsOffset+steps];
-                if (res<0 || res >= playlist->mediaCount()) {
-                    res = qrand() % playlist->mediaCount();
-                    randomModePositions[randomPositionsOffset+steps] = res;
-                }
-
-                return res;
-            }
-    }
-
-    return -1;
-}
-
-int QMediaPlaylistNavigatorPrivate::previousItemPos(int steps) const
-{
-    if (playlist->mediaCount() == 0)
-        return -1;
-
-    if (steps == 0)
-        return currentPos;
-
-    switch (playbackMode) {
-        case QMediaPlaylist::CurrentItemOnce:
-            return /*currentPos == -1 ? lastValidPos :*/ -1;
-        case QMediaPlaylist::CurrentItemInLoop:
-            return currentPos;
-        case QMediaPlaylist::Linear:
-            {
-                int prevPos = currentPos == -1 ? playlist->mediaCount() - steps : currentPos - steps;
-                return prevPos>=0 ? prevPos : -1;
-            }
-        case QMediaPlaylist::Loop:
-            {
-                int prevPos = currentPos - steps;
-                while (prevPos<0)
-                    prevPos += playlist->mediaCount();
-                return prevPos;
-            }
-        case QMediaPlaylist::Random:
-            {
-                //TODO: limit the history size
-
-                if (randomPositionsOffset == -1) {
-                    randomModePositions.clear();
-                    randomModePositions.append(currentPos);
-                    randomPositionsOffset = 0;
-                }
-
-                while (randomPositionsOffset-steps < 0) {
-                    randomModePositions.prepend(-1);
-                    randomPositionsOffset++;
-                }
-
-                int res = randomModePositions[randomPositionsOffset-steps];
-                if (res<0 || res >= playlist->mediaCount()) {
-                    res = qrand() % playlist->mediaCount();
-                    randomModePositions[randomPositionsOffset-steps] = res;
-                }
-
-                return res;
-            }
-    }
-
-    return -1;
-}
-
-/*!
-    \class QMediaPlaylistNavigator
-    \preliminary
-    \since 4.7
-    \brief The QMediaPlaylistNavigator class provides navigation for a media playlist.
-
-    \sa QMediaPlaylist, QMediaPlaylistProvider
-*/
-
-
-/*!
-    Constructs a media playlist navigator for a \a playlist.
-
-    The \a parent is passed to QObject.
- */
-QMediaPlaylistNavigator::QMediaPlaylistNavigator(QMediaPlaylistProvider *playlist, QObject *parent)
-    : QObject(parent)
-    , d_ptr(new QMediaPlaylistNavigatorPrivate)
-{
-    d_ptr->q_ptr = this;
-
-    setPlaylist(playlist ? playlist : _q_nullMediaPlaylist());
-}
-
-/*!
-    Destroys a media playlist navigator.
- */
-
-QMediaPlaylistNavigator::~QMediaPlaylistNavigator()
-{
-    delete d_ptr;
-}
-
-
-/*! \property QMediaPlaylistNavigator::playbackMode
-    Contains the playback mode.
- */
-QMediaPlaylist::PlaybackMode QMediaPlaylistNavigator::playbackMode() const
-{
-    return d_func()->playbackMode;
-}
-
-/*!
-    Sets the playback \a mode.
- */
-void QMediaPlaylistNavigator::setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
-{
-    Q_D(QMediaPlaylistNavigator);
-    if (d->playbackMode == mode)
-        return;
-
-    if (mode == QMediaPlaylist::Random) {
-        d->randomPositionsOffset = 0;
-        d->randomModePositions.append(d->currentPos);
-    } else if (d->playbackMode == QMediaPlaylist::Random) {
-        d->randomPositionsOffset = -1;
-        d->randomModePositions.clear();
-    }
-
-    d->playbackMode = mode;
-
-    emit playbackModeChanged(mode);
-    emit surroundingItemsChanged();
-}
-
-/*!
-    Returns the playlist being navigated.
-*/
-
-QMediaPlaylistProvider *QMediaPlaylistNavigator::playlist() const
-{
-    return d_func()->playlist;
-}
-
-/*!
-    Sets the \a playlist to navigate.
-*/
-void QMediaPlaylistNavigator::setPlaylist(QMediaPlaylistProvider *playlist)
-{
-    Q_D(QMediaPlaylistNavigator);
-
-    if (d->playlist == playlist)
-        return;
-
-    if (d->playlist) {
-        d->playlist->disconnect(this);
-    }
-
-    if (playlist) {
-        d->playlist = playlist;
-    } else {
-        //assign to shared readonly null playlist
-        d->playlist = _q_nullMediaPlaylist();
-    }
-
-    connect(d->playlist, SIGNAL(mediaInserted(int,int)), SLOT(_q_mediaInserted(int,int)));
-    connect(d->playlist, SIGNAL(mediaRemoved(int,int)), SLOT(_q_mediaRemoved(int,int)));
-    connect(d->playlist, SIGNAL(mediaChanged(int,int)), SLOT(_q_mediaChanged(int,int)));
-
-    d->randomPositionsOffset = -1;
-    d->randomModePositions.clear();
-
-    if (d->currentPos != -1) {
-        d->currentPos = -1;
-        emit currentIndexChanged(-1);
-    }
-
-    if (!d->currentItem.isNull()) {
-        d->currentItem = QMediaContent();
-        emit activated(d->currentItem); //stop playback
-    }
-}
-
-/*! \property QMediaPlaylistNavigator::currentItem
-
-  Contains the media at the current position in the playlist.
-
-  \sa currentIndex()
-*/
-
-QMediaContent QMediaPlaylistNavigator::currentItem() const
-{
-    return itemAt(d_func()->currentPos);
-}
-
-/*! \fn QMediaContent QMediaPlaylistNavigator::nextItem(int steps) const
-
-  Returns the media that is \a steps positions ahead of the current
-  position in the playlist.
-
-  \sa nextIndex()
-*/
-QMediaContent QMediaPlaylistNavigator::nextItem(int steps) const
-{
-    return itemAt(nextIndex(steps));
-}
-
-/*!
-  Returns the media that is \a steps positions behind the current
-  position in the playlist.
-
-  \sa previousIndex()
- */
-QMediaContent QMediaPlaylistNavigator::previousItem(int steps) const
-{
-    return itemAt(previousIndex(steps));
-}
-
-/*!
-    Returns the media at a \a position in the playlist.
- */
-QMediaContent QMediaPlaylistNavigator::itemAt(int position) const
-{
-    return d_func()->playlist->media(position);
-}
-
-/*! \property QMediaPlaylistNavigator::currentIndex
-
-  Contains the position of the current media.
-
-  If no media is current, the property contains -1.
-
-  \sa nextIndex(), previousIndex()
-*/
-
-int QMediaPlaylistNavigator::currentIndex() const
-{
-    return d_func()->currentPos;
-}
-
-/*!
-  Returns a position \a steps ahead of the current position
-  accounting for the playbackMode().
-
-  If the position is beyond the end of the playlist, this value
-  returned is -1.
-
-  \sa currentIndex(), previousIndex(), playbackMode()
-*/
-
-int QMediaPlaylistNavigator::nextIndex(int steps) const
-{
-    return d_func()->nextItemPos(steps);
-}
-
-/*!
-
-  Returns a position \a steps behind the current position accounting
-  for the playbackMode().
-
-  If the position is prior to the beginning of the playlist this will
-  return -1.
-
-  \sa currentIndex(), nextIndex(), playbackMode()
-*/
-int QMediaPlaylistNavigator::previousIndex(int steps) const
-{
-    return d_func()->previousItemPos(steps);
-}
-
-/*!
-  Advances to the next item in the playlist.
-
-  \sa previous(), jump(), playbackMode()
- */
-void QMediaPlaylistNavigator::next()
-{
-    Q_D(QMediaPlaylistNavigator);
-
-    int nextPos = d->nextItemPos();
-
-    if ( playbackMode() == QMediaPlaylist::Random )
-            d->randomPositionsOffset++;
-
-    jump(nextPos);
-}
-
-/*!
-  Returns to the previous item in the playlist,
-
-  \sa next(), jump(), playbackMode()
- */
-void QMediaPlaylistNavigator::previous()
-{
-    Q_D(QMediaPlaylistNavigator);
-
-    int prevPos = d->previousItemPos();
-    if ( playbackMode() == QMediaPlaylist::Random )
-        d->randomPositionsOffset--;
-
-    jump(prevPos);
-}
-
-/*!
-  Jumps to a new \a position in the playlist.
- */
-void QMediaPlaylistNavigator::jump(int position)
-{
-    Q_D(QMediaPlaylistNavigator);
-
-    if (position<-1 || position>=d->playlist->mediaCount()) {
-        qWarning() << "QMediaPlaylistNavigator: Jump outside playlist range";
-        position = -1;
-    }
-
-    if (position != -1)
-        d->lastValidPos = position;
-
-    if (playbackMode() == QMediaPlaylist::Random) {
-        if (d->randomModePositions[d->randomPositionsOffset] != position) {
-            d->randomModePositions.clear();
-            d->randomModePositions.append(position);
-            d->randomPositionsOffset = 0;
-        }
-    }
-
-    if (position != -1)
-        d->currentItem = d->playlist->media(position);
-    else
-        d->currentItem = QMediaContent();
-
-    if (position != d->currentPos) {
-        d->currentPos = position;
-        emit currentIndexChanged(d->currentPos);
-        emit surroundingItemsChanged();
-    }
-
-    emit activated(d->currentItem);
-}
-
-/*!
-    \internal
-*/
-void QMediaPlaylistNavigatorPrivate::_q_mediaInserted(int start, int end)
-{
-    Q_Q(QMediaPlaylistNavigator);
-
-    if (currentPos >= start) {
-        currentPos = end-start+1;
-        q->jump(currentPos);
-    }
-
-    //TODO: check if they really changed
-    emit q->surroundingItemsChanged();
-}
-
-/*!
-    \internal
-*/
-void QMediaPlaylistNavigatorPrivate::_q_mediaRemoved(int start, int end)
-{
-    Q_Q(QMediaPlaylistNavigator);
-
-    if (currentPos > end) {
-        currentPos = currentPos - end-start+1;
-        q->jump(currentPos);
-    } else if (currentPos >= start) {
-        //current item was removed
-        currentPos = qMin(start, playlist->mediaCount()-1);
-        q->jump(currentPos);
-    }
-
-    //TODO: check if they really changed
-    emit q->surroundingItemsChanged();
-}
-
-/*!
-    \internal
-*/
-void QMediaPlaylistNavigatorPrivate::_q_mediaChanged(int start, int end)
-{
-    Q_Q(QMediaPlaylistNavigator);
-
-    if (currentPos >= start && currentPos<=end) {
-        QMediaContent src = playlist->media(currentPos);
-        if (src != currentItem) {
-            currentItem = src;
-            emit q->activated(src);
-        }
-    }
-
-    //TODO: check if they really changed
-    emit q->surroundingItemsChanged();
-}
-
-/*!
-    \fn QMediaPlaylistNavigator::activated(const QMediaContent &media)
-
-    Signals that the current \a media has changed.
-*/
-
-/*!
-    \fn QMediaPlaylistNavigator::currentIndexChanged(int position)
-
-    Signals the \a position of the current media has changed.
-*/
-
-/*!
-    \fn QMediaPlaylistNavigator::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)
-
-    Signals that the playback \a mode has changed.
-*/
-
-/*!
-    \fn QMediaPlaylistNavigator::surroundingItemsChanged()
-
-    Signals that media immediately surrounding the current position has changed.
-*/
-
-#include "moc_qmediaplaylistnavigator.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediaplaylistnavigator.h b/src/multimedia/base/qmediaplaylistnavigator.h
deleted file mode 100644
index 73789af..0000000
--- a/src/multimedia/base/qmediaplaylistnavigator.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYLISTNAVIGATOR_H
-#define QMEDIAPLAYLISTNAVIGATOR_H
-
-#include <QtCore/qobject.h>
-
-#include <QtMultimedia/qmediaplaylistprovider.h>
-#include <QtMultimedia/qmediaplaylist.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QMediaPlaylistNavigatorPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistNavigator : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode NOTIFY playbackModeChanged)
-    Q_PROPERTY(int currentIndex READ currentIndex WRITE jump NOTIFY currentIndexChanged)
-    Q_PROPERTY(QMediaContent currentItem READ currentItem NOTIFY currentItemChanged)
-
-public:
-    QMediaPlaylistNavigator(QMediaPlaylistProvider *playlist, QObject *parent = 0);
-    virtual ~QMediaPlaylistNavigator();
-
-    QMediaPlaylistProvider *playlist() const;
-    void setPlaylist(QMediaPlaylistProvider *playlist);
-
-    QMediaPlaylist::PlaybackMode playbackMode() const;
-
-    QMediaContent currentItem() const;
-    QMediaContent nextItem(int steps = 1) const;
-    QMediaContent previousItem(int steps = 1) const;
-
-    QMediaContent itemAt(int position) const;
-
-    int currentIndex() const;
-    int nextIndex(int steps = 1) const;
-    int previousIndex(int steps = 1) const;
-
-public Q_SLOTS:
-    void next();
-    void previous();
-
-    void jump(int);
-
-    void setPlaybackMode(QMediaPlaylist::PlaybackMode mode);
-
-Q_SIGNALS:
-    void activated(const QMediaContent &content);
-    void currentIndexChanged(int);
-    void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
-
-    void surroundingItemsChanged();
-
-protected:
-    QMediaPlaylistNavigatorPrivate *d_ptr;
-
-private:
-    Q_DISABLE_COPY(QMediaPlaylistNavigator)
-    Q_DECLARE_PRIVATE(QMediaPlaylistNavigator)
-
-    Q_PRIVATE_SLOT(d_func(), void _q_mediaInserted(int start, int end))
-    Q_PRIVATE_SLOT(d_func(), void _q_mediaRemoved(int start, int end))
-    Q_PRIVATE_SLOT(d_func(), void _q_mediaChanged(int start, int end))
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QMEDIAPLAYLISTNAVIGATOR_H
diff --git a/src/multimedia/base/qmediaplaylistprovider.cpp b/src/multimedia/base/qmediaplaylistprovider.cpp
deleted file mode 100644
index 942f155..0000000
--- a/src/multimedia/base/qmediaplaylistprovider.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qurl.h>
-
-#include <QtMultimedia/qmediaplaylistprovider.h>
-#include "qmediaplaylistprovider_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QMediaPlaylistProvider
-    \preliminary
-    \since 4.7
-    \brief The QMediaPlaylistProvider class provides an abstract list of media.
-
-    \sa QMediaPlaylist
-*/
-
-/*!
-    Constructs a playlist provider with the given \a parent.
-*/
-QMediaPlaylistProvider::QMediaPlaylistProvider(QObject *parent)
-    :QObject(parent), d_ptr(new QMediaPlaylistProviderPrivate)
-{
-}
-
-/*!
-    \internal
-*/
-QMediaPlaylistProvider::QMediaPlaylistProvider(QMediaPlaylistProviderPrivate &dd, QObject *parent)
-    :QObject(parent), d_ptr(&dd)
-{
-}
-
-/*!
-    Destroys a playlist provider.
-*/
-QMediaPlaylistProvider::~QMediaPlaylistProvider()
-{
-    delete d_ptr;
-}
-
-/*!
-    \fn QMediaPlaylistProvider::mediaCount() const;
-
-    Returns the size of playlist.
-*/
-
-/*!
-    \fn QMediaPlaylistProvider::media(int index) const;
-
-    Returns the media at \a index in the playlist.
-
-    If the index is invalid this will return a null media content.
-*/
-
-
-/*!
-    Loads a playlist from from a URL \a location. If no playlist \a format is specified the loader
-    will inspect the URL or probe the headers to guess the format.
-
-    New items are appended to playlist.
-
-    Returns true if the provider supports the format and loading from the locations URL protocol,
-    otherwise this will return false.
-*/
-bool QMediaPlaylistProvider::load(const QUrl &location, const char *format)
-{
-    Q_UNUSED(location);
-    Q_UNUSED(format);
-    return false;
-}
-
-/*!
-    Loads a playlist from from an I/O \a device. If no playlist \a format is specified the loader
-    will probe the headers to guess the format.
-
-    New items are appended to playlist.
-
-    Returns true if the provider supports the format and loading from an I/O device, otherwise this
-    will return false.
-*/
-bool QMediaPlaylistProvider::load(QIODevice * device, const char *format)
-{
-    Q_UNUSED(device);
-    Q_UNUSED(format);
-    return false;
-}
-
-/*!
-    Saves the contents of a playlist to a URL \a location.  If no playlist \a format is specified
-    the writer will inspect the URL to guess the format.
-
-    Returns true if the playlist was saved succesfully; and false otherwise.
-  */
-bool QMediaPlaylistProvider::save(const QUrl &location, const char *format)
-{
-    Q_UNUSED(location);
-    Q_UNUSED(format);
-    return false;
-}
-
-/*!
-    Saves the contents of a playlist to an I/O \a device in the specified \a format.
-
-    Returns true if the playlist was saved succesfully; and false otherwise.
-*/
-bool QMediaPlaylistProvider::save(QIODevice * device, const char *format)
-{
-    Q_UNUSED(device);
-    Q_UNUSED(format);
-    return false;
-}
-
-/*!
-    Returns true if a playlist is read-only; otherwise returns false.
-*/
-bool QMediaPlaylistProvider::isReadOnly() const
-{
-    return true;
-}
-
-/*!
-    Append \a media to a playlist.
-
-    Returns true if the media was appended; and false otherwise.
-*/
-bool QMediaPlaylistProvider::addMedia(const QMediaContent &media)
-{
-    Q_UNUSED(media);
-    return false;
-}
-
-/*!
-    Append multiple media \a items to a playlist.
-
-    Returns true if the media items were appended; and false otherwise.
-*/
-bool QMediaPlaylistProvider::addMedia(const QList<QMediaContent> &items)
-{
-    foreach(const QMediaContent &item, items) {
-        if (!addMedia(item))
-            return false;
-    }
-
-    return true;
-}
-
-/*!
-    Inserts \a media into a playlist at \a position.
-
-    Returns true if the media was inserted; and false otherwise.
-*/
-bool QMediaPlaylistProvider::insertMedia(int position, const QMediaContent &media)
-{
-    Q_UNUSED(position);
-    Q_UNUSED(media);
-    return false;
-}
-
-/*!
-    Inserts multiple media \a items into a playlist at \a position.
-
-    Returns true if the media \a items were inserted; and false otherwise.
-*/
-bool QMediaPlaylistProvider::insertMedia(int position, const QList<QMediaContent> &items)
-{
-    for (int i=0; i<items.count(); i++) {
-        if (!insertMedia(position+i,items.at(i)))
-            return false;
-    }
-
-    return true;
-}
-
-
-/*!
-    Removes the media at \a position from a playlist.
-
-    Returns true if the media was removed; and false otherwise.
-*/
-bool QMediaPlaylistProvider::removeMedia(int position)
-{
-    Q_UNUSED(position);
-    return false;
-}
-
-/*!
-    Removes the media between the given \a start and \a end positions from a playlist.
-
-    Returns true if the media was removed; and false otherwise.
-  */
-bool QMediaPlaylistProvider::removeMedia(int start, int end)
-{
-    for (int pos=start; pos<=end; pos++) {
-        if (!removeMedia(pos))
-            return false;
-    }
-
-    return true;
-}
-
-/*!
-    Removes all media from a playlist.
-
-    Returns true if the media was removed; and false otherwise.
-*/
-bool QMediaPlaylistProvider::clear()
-{
-    return removeMedia(0, mediaCount()-1);
-}
-
-/*!
-    Shuffles the contents of a playlist.
-*/
-void QMediaPlaylistProvider::shuffle()
-{
-}
-
-/*!
-    \fn void QMediaPlaylistProvider::mediaAboutToBeInserted(int start, int end);
-
-    Signals that new media is about to be inserted into a playlist between the \a start and \a end
-    positions.
-*/
-
-/*!
-    \fn void QMediaPlaylistProvider::mediaInserted(int start, int end);
-
-    Signals that new media has been inserted into a playlist between the \a start and \a end
-    positions.
-*/
-
-/*!
-    \fn void QMediaPlaylistProvider::mediaAboutToBeRemoved(int start, int end);
-
-    Signals that media is about to be removed from a playlist between the \a start and \a end
-    positions.
-*/
-
-/*!
-    \fn void QMediaPlaylistProvider::mediaRemoved(int start, int end);
-
-    Signals that media has been removed from a playlist between the \a start and \a end positions.
-*/
-
-/*!
-    \fn void QMediaPlaylistProvider::mediaChanged(int start, int end);
-
-    Signals that media in playlist between the \a start and \a end positions inclusive has changed.
-*/
-
-/*!
-    \fn void QMediaPlaylistProvider::loaded()
-
-    Signals that a load() finished successfully.
-*/
-
-/*!
-    \fn void QMediaPlaylistProvider::loadFailed(QMediaPlaylist::Error error, const QString& errorMessage)
-
-    Signals that a load failed() due to an \a error.  The \a errorMessage provides more information.
-*/
-
-#include "moc_qmediaplaylistprovider.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediaplaylistprovider.h b/src/multimedia/base/qmediaplaylistprovider.h
deleted file mode 100644
index b8f07d1..0000000
--- a/src/multimedia/base/qmediaplaylistprovider.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYLISTPROVIDER_H
-#define QMEDIAPLAYLISTPROVIDER_H
-
-#include <QtCore/qobject.h>
-
-#include <QtMultimedia/qmediacontent.h>
-#include <QtMultimedia/qmediaplaylist.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QString;
-
-
-class QMediaPlaylistProviderPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistProvider : public QObject
-{
-    Q_OBJECT
-
-public:
-    QMediaPlaylistProvider(QObject *parent=0);
-    virtual ~QMediaPlaylistProvider();
-
-    virtual bool load(const QUrl &location, const char *format = 0);
-    virtual bool load(QIODevice * device, const char *format = 0);
-    virtual bool save(const QUrl &location, const char *format = 0);
-    virtual bool save(QIODevice * device, const char *format);
-
-    virtual int mediaCount() const = 0;
-    virtual QMediaContent media(int index) const = 0;
-
-    virtual bool isReadOnly() const;
-
-    virtual bool addMedia(const QMediaContent &content);
-    virtual bool addMedia(const QList<QMediaContent> &contentList);
-    virtual bool insertMedia(int index, const QMediaContent &content);
-    virtual bool insertMedia(int index, const QList<QMediaContent> &content);
-    virtual bool removeMedia(int pos);
-    virtual bool removeMedia(int start, int end);
-    virtual bool clear();
-
-public Q_SLOTS:
-    virtual void shuffle();
-
-Q_SIGNALS:
-    void mediaAboutToBeInserted(int start, int end);
-    void mediaInserted(int start, int end);
-
-    void mediaAboutToBeRemoved(int start, int end);
-    void mediaRemoved(int start, int end);
-
-    void mediaChanged(int start, int end);
-
-    void loaded();
-    void loadFailed(QMediaPlaylist::Error, const QString& errorMessage);
-
-protected:
-    QMediaPlaylistProviderPrivate *d_ptr;
-    QMediaPlaylistProvider(QMediaPlaylistProviderPrivate &dd, QObject *parent);
-
-private:
-    Q_DECLARE_PRIVATE(QMediaPlaylistProvider)
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QMEDIAPLAYLISTPROVIDER_H
diff --git a/src/multimedia/base/qmediaplaylistprovider_p.h b/src/multimedia/base/qmediaplaylistprovider_p.h
deleted file mode 100644
index aaf6deb..0000000
--- a/src/multimedia/base/qmediaplaylistprovider_p.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYLISTPROVIDER_P_H
-#define QMEDIAPLAYLISTPROVIDER_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/qmediaplaylist.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMediaPlaylistProviderPrivate
-{
-public:
-    QMediaPlaylistProviderPrivate()
-    {}
-    virtual ~QMediaPlaylistProviderPrivate()
-    {}
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QMEDIAPLAYLISTSOURCE_P_H
diff --git a/src/multimedia/base/qmediapluginloader.cpp b/src/multimedia/base/qmediapluginloader.cpp
deleted file mode 100644
index eaf6218..0000000
--- a/src/multimedia/base/qmediapluginloader.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmediapluginloader_p.h"
-#include <QtCore/qcoreapplication.h>
-#include <QtCore/qpluginloader.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qdebug.h>
-
-#include <QtMultimedia/qmediaserviceproviderplugin.h>
-
-
-QT_BEGIN_NAMESPACE
-
-
-typedef QMap<QString,QObjectList> ObjectListMap;
-Q_GLOBAL_STATIC(ObjectListMap, staticMediaPlugins);
-
-QMediaPluginLoader::QMediaPluginLoader(const char *iid, const QString &location, Qt::CaseSensitivity):
-    m_iid(iid)
-{
-    m_location = location + QLatin1String("/");
-    load();
-}
-
-QStringList QMediaPluginLoader::keys() const
-{
-    return m_instances.keys();
-}
-
-QObject* QMediaPluginLoader::instance(QString const &key)
-{
-    return m_instances.value(key);
-}
-
-QList<QObject*> QMediaPluginLoader::instances(QString const &key)
-{
-    return m_instances.values(key);
-}
-
-//to be used for testing purposes only
-void QMediaPluginLoader::setStaticPlugins(const QString &location, const QObjectList& objects)
-{
-    staticMediaPlugins()->insert(location + QLatin1String("/"), objects);
-}
-
-void QMediaPluginLoader::load()
-{
-    if (!m_instances.isEmpty())
-        return;
-
-    if (staticMediaPlugins() && staticMediaPlugins()->contains(m_location)) {
-        foreach(QObject *o, staticMediaPlugins()->value(m_location)) {
-            if (o != 0 && o->qt_metacast(m_iid) != 0) {
-                QFactoryInterface* p = qobject_cast<QFactoryInterface*>(o);
-                if (p != 0) {
-                    foreach (QString const &key, p->keys())
-                        m_instances.insertMulti(key, o);
-                }
-            }
-        }
-    } else {
-#ifndef QT_NO_LIBRARY
-        QStringList     paths = QCoreApplication::libraryPaths();
-
-        foreach (QString const &path, paths) {
-            QString     pluginPathName(path + m_location);
-            QDir        pluginDir(pluginPathName);
-
-            if (!pluginDir.exists())
-                continue;
-
-            foreach (QString pluginLib, pluginDir.entryList(QDir::Files)) {
-                QPluginLoader   loader(pluginPathName + pluginLib);
-
-                QObject *o = loader.instance();
-                if (o != 0 && o->qt_metacast(m_iid) != 0) {
-                    QFactoryInterface* p = qobject_cast<QFactoryInterface*>(o);
-                    if (p != 0) {
-                        foreach (QString const &key, p->keys())
-                            m_instances.insertMulti(key, o);
-                    }
-
-                    continue;
-                } else {
-                    qWarning() << "QMediaPluginLoader: Failed to load plugin: " << pluginLib << loader.errorString();
-                }
-                delete o;
-                loader.unload();
-            }
-        }
-#endif
-    }
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediapluginloader_p.h b/src/multimedia/base/qmediapluginloader_p.h
deleted file mode 100644
index 351d2f1..0000000
--- a/src/multimedia/base/qmediapluginloader_p.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLUGINLOADER_H
-#define QMEDIAPLUGINLOADER_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qobject.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qmap.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMediaServiceProviderPlugin;
-
-class Q_AUTOTEST_EXPORT QMediaPluginLoader
-{
-public:
-    QMediaPluginLoader(const char *iid,
-                   const QString &suffix = QString(),
-                   Qt::CaseSensitivity = Qt::CaseSensitive);
-
-    QStringList keys() const;
-    QObject* instance(QString const &key);
-    QList<QObject*> instances(QString const &key);
-
-    static void setStaticPlugins(const QString &location, const QObjectList& objects);
-
-private:
-    void load();
-
-    QByteArray  m_iid;
-    QString     m_location;
-    QMap<QString, QObject*> m_instances;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QMEDIAPLUGINLOADER_H
diff --git a/src/multimedia/base/qmediaresource.cpp b/src/multimedia/base/qmediaresource.cpp
deleted file mode 100644
index 646d9a7..0000000
--- a/src/multimedia/base/qmediaresource.cpp
+++ /dev/null
@@ -1,399 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qsize.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qvariant.h>
-
-#include <QtMultimedia/qmediaresource.h>
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QMediaResource
-    \preliminary
-    \since 4.7
-    \brief The QMediaResource class provides a description of a media resource.
-    \ingroup multimedia
-
-    A media resource is composed of a \l {url()}{URL} containing the
-    location of the resource and a set of properties that describe the
-    format of the resource.  The properties provide a means to assess a
-    resource without first attempting to load it, and in situations where
-    media be represented by multiple alternative representations provide a
-    means to select the appropriate resource.
-
-    Media made available by a remote services can often be available in
-    multiple encodings or quality levels, this allows a client to select
-    an appropriate resource based on considerations such as codecs supported,
-    network bandwidth, and display constraints.  QMediaResource includes
-    information such as the \l {mimeType()}{MIME type}, \l {audioCodec()}{audio}
-    and \l {videoCodec()}{video} codecs, \l {audioBitRate()}{audio} and
-    \l {videoBitRate()}{video} bit rates, and \l {resolution()}{resolution}
-    so these constraints and others can be evaluated.
-
-    The only mandatory property of a QMediaResource is the url().
-
-    \sa QMediaContent
-*/
-
-/*!
-    \typedef QMediaResourceList
-
-    Synonym for \c QList<QMediaResource>
-*/
-
-/*!
-    Constructs a null media resource.
-*/
-QMediaResource::QMediaResource()
-{
-}
-
-/*!
-    Constructs a media resource with the given \a mimeType from a \a url.
-*/
-QMediaResource::QMediaResource(const QUrl &url, const QString &mimeType)
-{
-    values.insert(Url, url);
-    values.insert(MimeType, mimeType);
-}
-
-/*!
-    Constructs a media resource with the given \a mimeType from a network \a request.
-*/
-QMediaResource::QMediaResource(const QNetworkRequest &request, const QString &mimeType)
-{
-    values.insert(Request, QVariant::fromValue(request));
-    values.insert(Url, request.url());
-    values.insert(MimeType, mimeType);
-}
-
-/*!
-    Constructs a copy of a media resource \a other.
-*/
-QMediaResource::QMediaResource(const QMediaResource &other)
-    : values(other.values)
-{
-}
-
-/*!
-    Assigns the value of \a other to a media resource.
-*/
-QMediaResource &QMediaResource::operator =(const QMediaResource &other)
-{
-    values = other.values;
-
-    return *this;
-}
-
-/*!
-    Destroys a media resource.
-*/
-QMediaResource::~QMediaResource()
-{
-}
-
-
-/*!
-    Compares a media resource to \a other.
-
-    Returns true if the resources are identical, and false otherwise.
-*/
-bool QMediaResource::operator ==(const QMediaResource &other) const
-{
-    return values == other.values;
-}
-
-/*!
-    Compares a media resource to \a other.
-
-    Returns true if they are different, and false otherwise.
-*/
-bool QMediaResource::operator !=(const QMediaResource &other) const
-{
-    return values != other.values;
-}
-
-/*!
-    Identifies if a media resource is null.
-
-    Returns true if the resource is null, and false otherwise.
-*/
-bool QMediaResource::isNull() const
-{
-    return values.isEmpty();
-}
-
-/*!
-    Returns the URL of a media resource.
-*/
-QUrl QMediaResource::url() const
-{
-    return qvariant_cast<QUrl>(values.value(Url));
-}
-
-/*!
-    Returns the network request associated with this media resource.
-*/
-QNetworkRequest QMediaResource::request() const
-{
-    if(values.contains(Request))
-        return qvariant_cast<QNetworkRequest>(values.value(Request));
-
-    return QNetworkRequest(url());
-}
-
-/*!
-    Returns the MIME type of a media resource.
-
-    This may be null if the MIME type is unknown.
-*/
-QString QMediaResource::mimeType() const
-{
-    return qvariant_cast<QString>(values.value(MimeType));
-}
-
-/*!
-    Returns the language of a media resource as an ISO 639-2 code.
-
-    This may be null if the language is unknown.
-*/
-QString QMediaResource::language() const
-{
-    return qvariant_cast<QString>(values.value(Language));
-}
-
-/*!
-    Sets the \a language of a media resource.
-*/
-void QMediaResource::setLanguage(const QString &language)
-{
-    if (!language.isNull())
-        values.insert(Language, language);
-    else
-        values.remove(Language);
-}
-
-/*!
-    Returns the audio codec of a media resource.
-
-    This may be null if the media resource does not contain an audio stream, or the codec is
-    unknown.
-*/
-QString QMediaResource::audioCodec() const
-{
-    return qvariant_cast<QString>(values.value(AudioCodec));
-}
-
-/*!
-    Sets the audio \a codec of a media resource.
-*/
-void QMediaResource::setAudioCodec(const QString &codec)
-{
-    if (!codec.isNull())
-        values.insert(AudioCodec, codec);
-    else
-        values.remove(AudioCodec);
-}
-
-/*!
-    Returns the video codec of a media resource.
-
-    This may be null if the media resource does not contain a video stream, or the codec is
-    unknonwn.
-*/
-QString QMediaResource::videoCodec() const
-{
-    return qvariant_cast<QString>(values.value(VideoCodec));
-}
-
-/*!
-    Sets the video \a codec of media resource.
-*/
-void QMediaResource::setVideoCodec(const QString &codec)
-{
-    if (!codec.isNull())
-        values.insert(VideoCodec, codec);
-    else
-        values.remove(VideoCodec);
-}
-
-/*!
-    Returns the size in bytes of a media resource.
-
-    This may be zero if the size is unknown.
-*/
-qint64 QMediaResource::dataSize() const
-{
-    return qvariant_cast<qint64>(values.value(DataSize));
-}
-
-/*!
-    Sets the \a size in bytes of a media resource.
-*/
-void QMediaResource::setDataSize(const qint64 size)
-{
-    if (size != 0)
-        values.insert(DataSize, size);
-    else
-        values.remove(DataSize);
-}
-
-/*!
-    Returns the bit rate in bits per second of a media resource's audio stream.
-
-    This may be zero if the bit rate is unknown, or the resource contains no audio stream.
-*/
-int QMediaResource::audioBitRate() const
-{
-    return values.value(AudioBitRate).toInt();
-}
-
-/*!
-    Sets the bit \a rate in bits per second of a media resource's video stream.
-*/
-void QMediaResource::setAudioBitRate(int rate)
-{
-    if (rate != 0)
-        values.insert(AudioBitRate, rate);
-    else
-        values.remove(AudioBitRate);
-}
-
-/*!
-    Returns the audio sample rate of a media resource.
-
-    This may be zero if the sample size is unknown, or the resource contains no audio stream.
-*/
-int QMediaResource::sampleRate() const
-{
-    return qvariant_cast<int>(values.value(SampleRate));
-}
-
-/*!
-    Sets the audio \a sampleRate of a media resource.
-*/
-void QMediaResource::setSampleRate(int sampleRate)
-{
-    if (sampleRate != 0)
-        values.insert(SampleRate, sampleRate);
-    else
-        values.remove(SampleRate);
-}
-
-/*!
-    Returns the number of audio channels in a media resource.
-
-    This may be zero if the sample size is unknown, or the resource contains no audio stream.
-*/
-int QMediaResource::channelCount() const
-{
-    return qvariant_cast<int>(values.value(ChannelCount));
-}
-
-/*!
-    Sets the number of audio \a channels in a media resource.
-*/
-void QMediaResource::setChannelCount(int channels)
-{
-    if (channels != 0)
-        values.insert(ChannelCount, channels);
-    else
-        values.remove(ChannelCount);
-}
-
-/*!
-    Returns the bit rate in bits per second of a media resource's video stream.
-
-    This may be zero if the bit rate is unknown, or the resource contains no video stream.
-*/
-int QMediaResource::videoBitRate() const
-{
-    return values.value(VideoBitRate).toInt();
-}
-
-/*!
-    Sets the bit \a rate in bits per second of a media resource's video stream.
-*/
-void QMediaResource::setVideoBitRate(int rate)
-{
-    if (rate != 0)
-        values.insert(VideoBitRate, rate);
-    else
-        values.remove(VideoBitRate);
-}
-
-/*!
-    Returns the resolution in pixels of a media resource.
-
-    This may be null is the resolution is unknown, or the resource contains no pixel data (i.e. the
-    resource is an audio stream.
-*/
-QSize QMediaResource::resolution() const
-{
-    return qvariant_cast<QSize>(values.value(Resolution));
-}
-
-/*!
-    Sets the \a resolution in pixels of a media resource.
-*/
-void QMediaResource::setResolution(const QSize &resolution)
-{
-    if (resolution.width() != -1 || resolution.height() != -1)
-        values.insert(Resolution, resolution);
-    else
-        values.remove(Resolution);
-}
-
-/*!
-    Sets the \a width and \a height in pixels of a media resource.
-*/
-void QMediaResource::setResolution(int width, int height)
-{
-    if (width != -1 || height != -1)
-        values.insert(Resolution, QSize(width, height));
-    else
-        values.remove(Resolution);
-}
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediaresource.h b/src/multimedia/base/qmediaresource.h
deleted file mode 100644
index a535bbd..0000000
--- a/src/multimedia/base/qmediaresource.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIARESOURCE_H
-#define QMEDIARESOURCE_H
-
-#include <QtCore/qmap.h>
-#include <QtCore/qmetatype.h>
-#include <QtNetwork/qnetworkrequest.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class Q_MULTIMEDIA_EXPORT QMediaResource
-{
-public:
-    QMediaResource();
-    QMediaResource(const QUrl &url, const QString &mimeType = QString());
-    QMediaResource(const QNetworkRequest &request, const QString &mimeType = QString());
-    QMediaResource(const QMediaResource &other);
-    QMediaResource &operator =(const QMediaResource &other);
-    ~QMediaResource();
-
-    bool isNull() const;
-
-    bool operator ==(const QMediaResource &other) const;
-    bool operator !=(const QMediaResource &other) const;
-
-    QUrl url() const;
-    QNetworkRequest request() const;
-    QString mimeType() const;
-
-    QString language() const;
-    void setLanguage(const QString &language);
-
-    QString audioCodec() const;
-    void setAudioCodec(const QString &codec);
-
-    QString videoCodec() const;
-    void setVideoCodec(const QString &codec);
-
-    qint64 dataSize() const;
-    void setDataSize(const qint64 size);
-
-    int audioBitRate() const;
-    void setAudioBitRate(int rate);
-
-    int sampleRate() const;
-    void setSampleRate(int frequency);
-
-    int channelCount() const;
-    void setChannelCount(int channels);
-
-    int videoBitRate() const;
-    void setVideoBitRate(int rate);
-
-    QSize resolution() const;
-    void setResolution(const QSize &resolution);
-    void setResolution(int width, int height);
-
-
-private:
-    enum Property
-    {
-        Url,
-        Request,
-        MimeType,
-        Language,
-        AudioCodec,
-        VideoCodec,
-        DataSize,
-        AudioBitRate,
-        VideoBitRate,
-        SampleRate,
-        ChannelCount,
-        Resolution
-    };
-    QMap<int, QVariant> values;
-};
-
-typedef QList<QMediaResource> QMediaResourceList;
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QMediaResource)
-Q_DECLARE_METATYPE(QMediaResourceList)
-
-QT_END_HEADER
-
-
-#endif
diff --git a/src/multimedia/base/qmediaservice.cpp b/src/multimedia/base/qmediaservice.cpp
deleted file mode 100644
index d9e980b..0000000
--- a/src/multimedia/base/qmediaservice.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qtimer.h>
-
-#include <QtMultimedia/qmediaservice.h>
-#include "qmediaservice_p.h"
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-/*!
-    \class QMediaService
-    \brief The QMediaService class provides a common base class for media
-    service implementations.
-    \ingroup multimedia-serv
-    \preliminary
-    \since 4.7
-
-    Media services provide implementations of the functionality promised
-    by media objects, and allow multiple providers to implement a QMediaObject.
-
-    To provide the functionality of a QMediaObject media services implement
-    QMediaControl interfaces.  Services typically implement one core media
-    control which provides the core feature of a media object, and some
-    number of additional controls which provide either optional features of
-    the media object, or features of a secondary media object or peripheral
-    object.
-
-    A pointer to media service's QMediaControl implementation can be
-    obtained by passing the control's interface name to the control() function.
-
-    \code
-    QMediaPlayerControl *control = qobject_cast<QMediaPlayerControl *>(
-            service->control("com.nokia.Qt.QMediaPlayerControl/1.0"));
-    \endcode
-
-    Media objects can use services loaded dynamically from plug-ins or
-    implemented statically within an applications.  Plug-in based services
-    should also implement the QMediaServiceProviderPlugin interface.  Static
-    services should implement the QMediaServiceProvider interface.
-
-    \sa QMediaObject, QMediaControl, QMediaServiceProvider, QMediaServiceProviderPlugin
-*/
-
-/*!
-    Construct a media service with the given \a parent. This class is meant as a
-    base class for Multimedia services so this constructor is protected.
-*/
-
-QMediaService::QMediaService(QObject *parent)
-    : QObject(parent)
-    , d_ptr(new QMediaServicePrivate)
-{
-    d_ptr->q_ptr = this;
-}
-
-/*!
-    \internal
-*/
-QMediaService::QMediaService(QMediaServicePrivate &dd, QObject *parent)
-    : QObject(parent)
-    , d_ptr(&dd)
-{
-    d_ptr->q_ptr = this;
-}
-
-/*!
-    Destroys a media service.
-*/
-
-QMediaService::~QMediaService()
-{
-    delete d_ptr;
-}
-
-/*!
-    \fn QMediaService::control(const char *interface) const
-
-    Returns a pointer to the media control implementing \a interface.
-
-    If the service does not implement the control a null pointer is returned instead.
-*/
-
-/*!
-    \fn QMediaService::control() const
-
-    Returns a pointer to the media control of type T implemented by a media service.
-
-    If the service does not implment the control a null pointer is returned instead.
-*/
-
-#include "moc_qmediaservice.cpp"
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
diff --git a/src/multimedia/base/qmediaservice.h b/src/multimedia/base/qmediaservice.h
deleted file mode 100644
index c53a15f..0000000
--- a/src/multimedia/base/qmediaservice.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTMEDIASERVICE_H
-#define QABSTRACTMEDIASERVICE_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qstringlist.h>
-
-#include <QtMultimedia/qmediacontrol.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMediaServicePrivate;
-class Q_MULTIMEDIA_EXPORT QMediaService : public QObject
-{
-    Q_OBJECT
-
-public:
-    ~QMediaService();
-
-    virtual QMediaControl* control(const char *name) const = 0;
-
-#ifndef QT_NO_MEMBER_TEMPLATES
-    template <typename T> inline T control() const {
-        if (QObject *object = control(qmediacontrol_iid<T>())) {
-            return qobject_cast<T>(object);
-        }
-        return 0;
-    }
-#endif
-
-protected:
-    QMediaService(QObject* parent);
-    QMediaService(QMediaServicePrivate &dd, QObject *parent);
-
-    QMediaServicePrivate *d_ptr;
-
-private:
-    Q_DECLARE_PRIVATE(QMediaService)
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QABSTRACTMEDIASERVICE_H
-
diff --git a/src/multimedia/base/qmediaservice_p.h b/src/multimedia/base/qmediaservice_p.h
deleted file mode 100644
index 7dbcd8a..0000000
--- a/src/multimedia/base/qmediaservice_p.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTMEDIASERVICE_P_H
-#define QABSTRACTMEDIASERVICE_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QAudioDeviceControl;
-
-class QMediaServicePrivate
-{
-public:
-    QMediaServicePrivate(): q_ptr(0) {}
-    virtual ~QMediaServicePrivate() {}
-
-    QMediaService *q_ptr;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qmediaserviceprovider.cpp b/src/multimedia/base/qmediaserviceprovider.cpp
deleted file mode 100644
index b089b39..0000000
--- a/src/multimedia/base/qmediaserviceprovider.cpp
+++ /dev/null
@@ -1,738 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qmap.h>
-
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaserviceprovider.h>
-#include <QtMultimedia/qmediaserviceproviderplugin.h>
-#include "qmediapluginloader_p.h"
-#include <QtMultimedia/qmediaplayer.h>
-
-QT_BEGIN_NAMESPACE
-
-class QMediaServiceProviderHintPrivate : public QSharedData
-{
-public:
-    QMediaServiceProviderHintPrivate(QMediaServiceProviderHint::Type type)
-        :type(type), features(0)
-    {
-    }
-
-    QMediaServiceProviderHintPrivate(const QMediaServiceProviderHintPrivate &other)
-        :QSharedData(other),
-        type(other.type),
-        device(other.device),
-        mimeType(other.mimeType),
-        codecs(other.codecs),
-        features(other.features)
-    {
-    }
-
-    ~QMediaServiceProviderHintPrivate()
-    {
-    }
-
-    QMediaServiceProviderHint::Type type;
-    QByteArray device;
-    QString mimeType;
-    QStringList codecs;
-    QMediaServiceProviderHint::Features features;
-};
-
-/*!
-    \class QMediaServiceProviderHint
-    \preliminary
-    \since 4.7
-    \brief The QMediaServiceProviderHint class describes what is required of a QMediaService.
-    
-    \ingroup multimedia-serv
-
-    The QMediaServiceProvider class uses hints to select an appropriate media service.
-*/
-
-/*!
-    \enum QMediaServiceProviderHint::Feature
-
-    Enumerates features a media service may provide.
-
-    \value LowLatencyPlayback
-            The service is expected to play simple audio formats,
-            but playback should start without significant delay.
-            Such playback service can be used for beeps, ringtones, etc.
-
-    \value RecordingSupport
-            The service provides audio or video recording functions.
-
-    \value StreamPlayback
-            The service is capable of playing QIODevice based streams.
-*/
-
-/*!
-    \enum QMediaServiceProviderHint::Type
-
-    Enumerates the possible types of media service provider hint.
-
-    \value Null               En empty hint, use the default service.
-    \value ContentType        Select media service most suitable for certain content type.
-    \value Device             Select media service which supports certain device.
-    \value SupportedFeatures  Select media service supporting the set of optional features.
-*/
-
-
-/*!
-    Constructs an empty media service provider hint.
-*/
-QMediaServiceProviderHint::QMediaServiceProviderHint()
-    :d(new QMediaServiceProviderHintPrivate(Null))
-{
-}
-
-/*!
-    Constructs a ContentType media service provider hint.
-
-    This type of hint describes a service that is able to play content of a specific MIME \a type
-    encoded with one or more of the listed \a codecs.
-*/
-QMediaServiceProviderHint::QMediaServiceProviderHint(const QString &type, const QStringList& codecs)
-    :d(new QMediaServiceProviderHintPrivate(ContentType))
-{
-    d->mimeType = type;
-    d->codecs = codecs;
-}
-
-/*!
-  Constructs a Device media service provider hint.
-
-  This type of hint describes a media service that utilizes a specific \a device.
-*/
-QMediaServiceProviderHint::QMediaServiceProviderHint(const QByteArray &device)
-    :d(new QMediaServiceProviderHintPrivate(Device))
-{
-    d->device = device;
-}
-
-/*!
-    Constructs a SupportedFeatures media service provider hint.
-
-    This type of hint describes a service which supports a specific set of \a features.
-*/
-QMediaServiceProviderHint::QMediaServiceProviderHint(QMediaServiceProviderHint::Features features)
-    :d(new QMediaServiceProviderHintPrivate(SupportedFeatures))
-{
-    d->features = features;
-}
-
-/*!
-    Constructs a copy of the media service provider hint \a other.
-*/
-QMediaServiceProviderHint::QMediaServiceProviderHint(const QMediaServiceProviderHint &other)
-    :d(other.d)
-{
-}
-
-/*!
-    Destroys a media service provider hint.
-*/
-QMediaServiceProviderHint::~QMediaServiceProviderHint()
-{
-}
-
-/*!
-    Assigns the value \a other to a media service provider hint.
-*/
-QMediaServiceProviderHint& QMediaServiceProviderHint::operator=(const QMediaServiceProviderHint &other)
-{
-    d = other.d;
-    return *this;
-}
-
-/*!
-    Identifies if \a other is of equal value to a media service provider hint.
-
-    Returns true if the hints are equal, and false if they are not.
-*/
-bool QMediaServiceProviderHint::operator == (const QMediaServiceProviderHint &other) const
-{
-    return (d == other.d) ||
-           (d->type == other.d->type &&
-            d->device == other.d->device &&
-            d->mimeType == other.d->mimeType &&
-            d->codecs == other.d->codecs &&
-            d->features == other.d->features);
-}
-
-/*!
-    Identifies if \a other is not of equal value to a media service provider hint.
-
-    Returns true if the hints are not equal, and false if they are.
-*/
-bool QMediaServiceProviderHint::operator != (const QMediaServiceProviderHint &other) const
-{
-    return !(*this == other);
-}
-
-/*!
-    Returns true if a media service provider is null.
-*/
-bool QMediaServiceProviderHint::isNull() const
-{
-    return d->type == Null;
-}
-
-/*!
-    Returns the type of a media service provider hint.
-*/
-QMediaServiceProviderHint::Type QMediaServiceProviderHint::type() const
-{
-    return d->type;
-}
-
-/*!
-    Returns the mime type of the media a service is expected to be able play.
-*/
-QString QMediaServiceProviderHint::mimeType() const
-{
-    return d->mimeType;
-}
-
-/*!
-    Returns a list of codes a media service is expected to be able to decode.
-*/
-QStringList QMediaServiceProviderHint::codecs() const
-{
-    return d->codecs;
-}
-
-/*!
-    Returns the name of a device a media service is expected to utilize.
-*/
-QByteArray QMediaServiceProviderHint::device() const
-{
-    return d->device;
-}
-
-/*!
-    Returns a set of features a media service is expected to provide.
-*/
-QMediaServiceProviderHint::Features QMediaServiceProviderHint::features() const
-{
-    return d->features;
-}
-
-
-Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, loader,
-        (QMediaServiceProviderFactoryInterface_iid, QLatin1String("/mediaservices"), Qt::CaseInsensitive))
-
-
-class QPluginServiceProvider : public QMediaServiceProvider
-{
-    QMap<QMediaService*, QMediaServiceProviderPlugin*> pluginMap;
-
-public:
-    QMediaService* requestService(const QByteArray &type, const QMediaServiceProviderHint &hint)
-    {
-        QString key(QString::fromLatin1(type.constData(),type.length()));
-
-        QList<QMediaServiceProviderPlugin *>plugins;
-        foreach (QObject *obj, loader()->instances(key)) {
-            QMediaServiceProviderPlugin *plugin =
-                qobject_cast<QMediaServiceProviderPlugin*>(obj);
-            if (plugin)
-                plugins << plugin;
-        }
-
-        if (!plugins.isEmpty()) {
-            QMediaServiceProviderPlugin *plugin = 0;
-
-            switch (hint.type()) {
-            case QMediaServiceProviderHint::Null:
-                plugin = plugins[0];
-                //special case for media player, if low latency was not asked,
-                //prefer services not offering it, since they are likely to support
-                //more formats
-                if (type == QByteArray(Q_MEDIASERVICE_MEDIAPLAYER)) {
-                    foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
-                        QMediaServiceFeaturesInterface *iface =
-                                qobject_cast<QMediaServiceFeaturesInterface*>(currentPlugin);
-
-                        if (!iface || !(iface->supportedFeatures(type) &
-                                        QMediaServiceProviderHint::LowLatencyPlayback)) {
-                            plugin = currentPlugin;
-                            break;
-                        }
-
-                    }
-                }
-                break;
-            case QMediaServiceProviderHint::SupportedFeatures:
-                plugin = plugins[0];
-                foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
-                    QMediaServiceFeaturesInterface *iface =
-                            qobject_cast<QMediaServiceFeaturesInterface*>(currentPlugin);
-
-                    if (iface) {
-                        if ((iface->supportedFeatures(type) & hint.features()) == hint.features()) {
-                            plugin = currentPlugin;
-                            break;
-                        }
-                    }
-                }
-                break;
-            case QMediaServiceProviderHint::Device: {
-                    foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
-                        QMediaServiceSupportedDevicesInterface *iface =
-                                qobject_cast<QMediaServiceSupportedDevicesInterface*>(currentPlugin);
-
-                        if (!iface) {
-                            // the plugin may support the device,
-                            // but this choice still can be overridden
-                            plugin = currentPlugin;
-                        } else {
-                            if (iface->devices(type).contains(hint.device())) {
-                                plugin = currentPlugin;
-                                break;
-                            }
-                        }
-                    }
-                }
-                break;
-            case QMediaServiceProviderHint::ContentType: {
-                    QtMultimedia::SupportEstimate estimate = QtMultimedia::NotSupported;
-                    foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
-                        QtMultimedia::SupportEstimate currentEstimate = QtMultimedia::MaybeSupported;
-                        QMediaServiceSupportedFormatsInterface *iface =
-                                qobject_cast<QMediaServiceSupportedFormatsInterface*>(currentPlugin);
-
-                        if (iface)
-                            currentEstimate = iface->hasSupport(hint.mimeType(), hint.codecs());
-
-                        if (currentEstimate > estimate) {
-                            estimate = currentEstimate;
-                            plugin = currentPlugin;
-
-                            if (currentEstimate == QtMultimedia::PreferredService)
-                                break;
-                        }
-                    }
-                }
-                break;
-            }
-
-            if (plugin != 0) {
-                QMediaService *service = plugin->create(key);
-                if (service != 0)
-                    pluginMap.insert(service, plugin);
-
-                return service;
-            }
-        }
-
-        qWarning() << "defaultServiceProvider::requestService(): no service found for -" << key;
-        return 0;
-    }
-
-    void releaseService(QMediaService *service)
-    {
-        if (service != 0) {
-            QMediaServiceProviderPlugin *plugin = pluginMap.take(service);
-
-            if (plugin != 0)
-                plugin->release(service);
-        }
-    }
-
-    QtMultimedia::SupportEstimate hasSupport(const QByteArray &serviceType,
-                                     const QString &mimeType,
-                                     const QStringList& codecs,
-                                     int flags) const
-    {
-        QList<QObject*> instances = loader()->instances(
-                QString::fromLatin1(serviceType.constData(),serviceType.length()));
-
-        if (instances.isEmpty())
-            return QtMultimedia::NotSupported;
-
-        bool allServicesProvideInterface = true;
-        QtMultimedia::SupportEstimate supportEstimate = QtMultimedia::NotSupported;
-
-        foreach(QObject *obj, instances) {
-            QMediaServiceSupportedFormatsInterface *iface =
-                    qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
-
-
-            if (flags) {
-                QMediaServiceFeaturesInterface *iface =
-                        qobject_cast<QMediaServiceFeaturesInterface*>(obj);
-
-                if (iface) {
-                    QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
-
-                    //if low latency playback was asked, skip services known
-                    //not to provide low latency playback
-                    if ((flags & QMediaPlayer::LowLatency) &&
-                        !(features & QMediaServiceProviderHint::LowLatencyPlayback))
-                            continue;
-
-                    //the same for QIODevice based streams support
-                    if ((flags & QMediaPlayer::StreamPlayback) &&
-                        !(features & QMediaServiceProviderHint::StreamPlayback))
-                            continue;
-                }
-            }
-
-            if (iface)
-                supportEstimate = qMax(supportEstimate, iface->hasSupport(mimeType, codecs));
-            else
-                allServicesProvideInterface = false;
-        }
-
-        //don't return PreferredService
-        supportEstimate = qMin(supportEstimate, QtMultimedia::ProbablySupported);
-
-        //Return NotSupported only if no services are available of serviceType
-        //or all the services returned NotSupported, otherwise return at least MaybeSupported
-        if (!allServicesProvideInterface)
-            supportEstimate = qMax(QtMultimedia::MaybeSupported, supportEstimate);
-
-        return supportEstimate;
-    }
-
-    QStringList supportedMimeTypes(const QByteArray &serviceType, int flags) const
-    {
-        QList<QObject*> instances = loader()->instances(
-                QString::fromLatin1(serviceType.constData(),serviceType.length()));
-
-        QStringList supportedTypes;
-
-        foreach(QObject *obj, instances) {
-            QMediaServiceSupportedFormatsInterface *iface =
-                    qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
-
-
-            if (flags & QMediaPlayer::LowLatency) {
-                QMediaServiceFeaturesInterface *iface =
-                        qobject_cast<QMediaServiceFeaturesInterface*>(obj);
-
-                if (iface) {
-                    QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
-
-                    // If low latency playback was asked for, skip MIME types from services known
-                    // not to provide low latency playback
-                    if ((flags & QMediaPlayer::LowLatency) &&
-                        !(features & QMediaServiceProviderHint::LowLatencyPlayback))
-                        continue;
-
-                    //the same for QIODevice based streams support
-                    if ((flags & QMediaPlayer::StreamPlayback) &&
-                        !(features & QMediaServiceProviderHint::StreamPlayback))
-                            continue;
-                }
-            }
-
-            if (iface) {
-                supportedTypes << iface->supportedMimeTypes();
-            }
-        }
-
-        // Multiple services may support the same MIME type
-        supportedTypes.removeDuplicates();
-
-        return supportedTypes;
-    }
-
-    QList<QByteArray> devices(const QByteArray &serviceType) const
-    {
-        QList<QByteArray> res;
-
-        foreach(QObject *obj, loader()->instances(
-                    QString::fromLatin1(serviceType.constData(),serviceType.length()))) {
-            QMediaServiceSupportedDevicesInterface *iface =
-                    qobject_cast<QMediaServiceSupportedDevicesInterface*>(obj);
-
-            if (iface) {
-                res.append(iface->devices(serviceType));
-            }
-        }
-
-        return res;
-    }
-
-    QString deviceDescription(const QByteArray &serviceType, const QByteArray &device)
-    {
-        foreach(QObject *obj, loader()->instances(
-                    QString::fromLatin1(serviceType.constData(),serviceType.length()))) {
-            QMediaServiceSupportedDevicesInterface *iface =
-                    qobject_cast<QMediaServiceSupportedDevicesInterface*>(obj);
-
-            if (iface) {
-                if (iface->devices(serviceType).contains(device))
-                    return iface->deviceDescription(serviceType, device);
-            }
-        }
-
-        return QString();
-    }
-};
-
-Q_GLOBAL_STATIC(QPluginServiceProvider, pluginProvider);
-
-/*!
-    \class QMediaServiceProvider
-    \preliminary
-    \since 4.7
-    \brief The QMediaServiceProvider class provides an abstract allocator for media services.
-*/
-
-/*!
-    \fn QMediaServiceProvider::requestService(const QByteArray &type, const QMediaServiceProviderHint &hint)
-
-    Requests an instance of a \a type service which best matches the given \a hint.
-
-    Returns a pointer to the requested service, or a null pointer if there is no suitable service.
-
-    The returned service must be released with releaseService when it is finished with.
-*/
-
-/*!
-    \fn QMediaServiceProvider::releaseService(QMediaService *service)
-
-    Releases a media \a service requested with requestService().
-*/
-
-/*!
-    \fn QtMultimedia::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType, const QString &mimeType, const QStringList& codecs, int flags) const
-
-    Returns how confident a media service provider is that is can provide a \a serviceType
-    service that is able to play media of a specific \a mimeType that is encoded using the listed
-    \a codecs while adhearing to constraints identified in \a flags.
-*/
-QtMultimedia::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType,
-                                                        const QString &mimeType,
-                                                        const QStringList& codecs,
-                                                        int flags) const
-{
-    Q_UNUSED(serviceType);
-    Q_UNUSED(mimeType);
-    Q_UNUSED(codecs);
-    Q_UNUSED(flags);
-
-    return QtMultimedia::MaybeSupported;
-}
-
-/*!
-    \fn QStringList QMediaServiceProvider::supportedMimeTypes(const QByteArray &serviceType, int flags) const
-
-    Returns a list of MIME types supported by the service provider for the specified \a serviceType.
-
-    The resultant list is restricted to MIME types which can be supported given the constraints in \a flags.
-*/
-QStringList QMediaServiceProvider::supportedMimeTypes(const QByteArray &serviceType, int flags) const
-{
-    Q_UNUSED(serviceType);
-    Q_UNUSED(flags);
-
-    return QStringList();
-}
-
-/*!
-  Returns the list of devices related to \a service type.
-*/
-QList<QByteArray> QMediaServiceProvider::devices(const QByteArray &service) const
-{
-    Q_UNUSED(service);
-    return QList<QByteArray>();
-}
-
-/*!
-    Returns the description of \a device related to \a serviceType,
-    suitable to be displayed to user.
-*/
-QString QMediaServiceProvider::deviceDescription(const QByteArray &serviceType, const QByteArray &device)
-{
-    Q_UNUSED(serviceType);
-    Q_UNUSED(device);
-    return QString();
-}
-
-
-#ifdef QT_BUILD_INTERNAL
-
-static QMediaServiceProvider *qt_defaultMediaServiceProvider = 0;
-
-/*!
-    Sets a media service \a provider as the default.
-
-    \internal
-*/
-void QMediaServiceProvider::setDefaultServiceProvider(QMediaServiceProvider *provider)
-{
-    qt_defaultMediaServiceProvider = provider;
-}
-
-#endif
-
-/*!
-    Returns a default provider of media services.
-*/
-QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
-{
-#ifdef QT_BUILD_INTERNAL
-    return qt_defaultMediaServiceProvider != 0
-            ? qt_defaultMediaServiceProvider
-            : static_cast<QMediaServiceProvider *>(pluginProvider());
-#else
-    return pluginProvider();
-#endif
-}
-
-/*!
-    \class QMediaServiceProviderPlugin
-    \preliminary
-    \since 4.7
-    \brief The QMediaServiceProviderPlugin class interface provides an interface for QMediaService
-    plug-ins.
-
-    A media service provider plug-in may implement one or more of
-    QMediaServiceSupportedFormatsInterface, QMediaServiceSupportedDevicesInterface,
-    and QMediaServiceFeaturesInterface to identify the features it supports.
-*/
-
-/*!
-    \fn QMediaServiceProviderPlugin::keys() const
-
-    Returns a list of keys for media services a plug-in can create.
-*/
-
-/*!
-    \fn QMediaServiceProviderPlugin::create(const QString &key)
-
-    Constructs a new instance of the QMediaService identified by \a key.
-
-    The QMediaService returned must be destroyed with release().
-*/
-
-/*!
-    \fn QMediaServiceProviderPlugin::release(QMediaService *service)
-
-    Destroys a media \a service constructed with create().
-*/
-
-
-/*!
-    \class QMediaServiceSupportedFormatsInterface
-    \brief The QMediaServiceSupportedFormatsInterface class interface
-    identifies if a media service plug-in supports a media format.
-    \since 4.7
-
-    A QMediaServiceProviderPlugin may implement this interface.
-*/
-
-/*!
-    \fn QMediaServiceSupportedFormatsInterface::~QMediaServiceSupportedFormatsInterface()
-
-    Destroys a media service supported formats interface.
-*/
-
-/*!
-    \fn QMediaServiceSupportedFormatsInterface::hasSupport(const QString &mimeType, const QStringList& codecs) const
-
-    Returns the level of support a media service plug-in has for a \a mimeType and set of \a codecs.
-*/
-
-/*!
-    \fn QMediaServiceSupportedFormatsInterface::supportedMimeTypes() const
-
-    Returns a list of MIME types supported by the media service plug-in.
-*/
-
-/*!
-    \class QMediaServiceSupportedDevicesInterface
-    \brief The QMediaServiceSupportedDevicesInterface class interface
-    identifies the devices supported by a media service plug-in.
-    \since 4.7
-
-    A QMediaServiceProviderPlugin may implement this interface.
-*/
-
-/*!
-    \fn QMediaServiceSupportedDevicesInterface::~QMediaServiceSupportedDevicesInterface()
-
-    Destroys a media service supported devices interface.
-*/
-
-/*!
-    \fn QMediaServiceSupportedDevicesInterface::devices(const QByteArray &service) const
-
-    Returns a list of devices supported by a plug-in \a service.
-*/
-
-/*!
-    \fn QMediaServiceSupportedDevicesInterface::deviceDescription(const QByteArray &service, const QByteArray &device)
-
-    Returns a description of a \a device supported by a plug-in \a service.
-*/
-
-/*!
-    \class QMediaServiceFeaturesInterface
-    \brief The QMediaServiceFeaturesInterface class interface identifies
-    features supported by a media service plug-in.
-    \since 4.7
-
-    A QMediaServiceProviderPlugin may implement this interface.
-*/
-
-/*!
-    \fn QMediaServiceFeaturesInterface::~QMediaServiceFeaturesInterface()
-
-    Destroys a media service features interface.
-*/
-/*!
-    \fn QMediaServiceFeaturesInterface::supportedFeatures(const QByteArray &service) const
-
-    Returns a set of features supported by a plug-in \a service.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qmediaserviceprovider.cpp"
-#include "moc_qmediaserviceproviderplugin.cpp"
diff --git a/src/multimedia/base/qmediaserviceprovider.h b/src/multimedia/base/qmediaserviceprovider.h
deleted file mode 100644
index 6e31493..0000000
--- a/src/multimedia/base/qmediaserviceprovider.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIASERVICEPROVIDER_H
-#define QMEDIASERVICEPROVIDER_H
-
-#include <QtCore/qobject.h>
-#include <QtCore/qshareddata.h>
-
-#include <QtMultimedia/qtmedianamespace.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QMediaService;
-
-class QMediaServiceProviderHintPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaServiceProviderHint
-{
-public:
-    enum Type { Null, ContentType, Device, SupportedFeatures };
-
-    enum Feature {
-        LowLatencyPlayback = 0x01,
-        RecordingSupport = 0x02,
-        StreamPlayback = 0x04
-    };
-    Q_DECLARE_FLAGS(Features, Feature)
-
-    QMediaServiceProviderHint();
-    QMediaServiceProviderHint(const QString &mimeType, const QStringList& codecs);
-    QMediaServiceProviderHint(const QByteArray &device);
-    QMediaServiceProviderHint(Features features);
-    QMediaServiceProviderHint(const QMediaServiceProviderHint &other);
-    ~QMediaServiceProviderHint();
-
-    QMediaServiceProviderHint& operator=(const QMediaServiceProviderHint &other);
-
-    bool operator == (const QMediaServiceProviderHint &other) const;
-    bool operator != (const QMediaServiceProviderHint &other) const;
-
-    bool isNull() const;
-
-    Type type() const;
-
-    QString mimeType() const;
-    QStringList codecs() const;
-
-    QByteArray device() const;
-
-    Features features() const;
-
-    //to be extended, if necessary
-
-private:
-    QSharedDataPointer<QMediaServiceProviderHintPrivate> d;
-};
-
-class Q_MULTIMEDIA_EXPORT QMediaServiceProvider : public QObject
-{
-    Q_OBJECT
-
-public:
-    virtual QMediaService* requestService(const QByteArray &type, const QMediaServiceProviderHint &hint = QMediaServiceProviderHint()) = 0;
-    virtual void releaseService(QMediaService *service) = 0;
-
-    virtual QtMultimedia::SupportEstimate hasSupport(const QByteArray &serviceType,
-                                             const QString &mimeType,
-                                             const QStringList& codecs,
-                                             int flags = 0) const;
-    virtual QStringList supportedMimeTypes(const QByteArray &serviceType, int flags = 0) const;
-
-    virtual QList<QByteArray> devices(const QByteArray &serviceType) const;
-    virtual QString deviceDescription(const QByteArray &serviceType, const QByteArray &device);
-
-    static QMediaServiceProvider* defaultServiceProvider();
-
-#ifdef QT_BUILD_INTERNAL
-    static void setDefaultServiceProvider(QMediaServiceProvider *provider);
-#endif
-};
-
-/*!
-    Service with support for media playback
-    Required Controls: QMediaPlayerControl
-    Optional Controls: QMediaPlaylistControl, QAudioDeviceControl
-    Video Output Controls (used by QWideoWidget and QGraphicsVideoItem):
-                        Required: QVideoOutputControl
-                        Optional: QVideoWindowControl, QVideoRendererControl, QVideoWidgetControl
-*/
-#define Q_MEDIASERVICE_MEDIAPLAYER "com.nokia.qt.mediaplayer"
-
-/*!
-   Service with support for recording from audio sources
-   Required Controls: QAudioDeviceControl
-   Recording Controls (QMediaRecorder):
-                        Required: QMediaRecorderControl
-                        Recommended: QAudioEncoderControl
-                        Optional: QMediaContainerControl
-*/
-#define Q_MEDIASERVICE_AUDIOSOURCE "com.nokia.qt.audiosource"
-
-/*!
-    Service with support for camera use.
-    Required Controls: QCameraControl
-    Optional Controls: QCameraExposureControl, QCameraFocusControl, QImageProcessingControl
-    Still Capture Controls: QImageCaptureControl
-    Recording Controls (QMediaRecorder):
-                        Required: QMediaRecorderControl
-                        Recommended: QAudioEncoderControl, QVideoEncoderControl, QMediaContainerControl
-    Viewfinder Video Output Controls (used by QWideoWidget and QGraphicsVideoItem):
-                        Required: QVideoOutputControl
-                        Optional: QVideoWindowControl, QVideoRendererControl, QVideoWidgetControl
-*/
-#define Q_MEDIASERVICE_CAMERA "com.nokia.qt.camera"
-
-/*!
-    Service with support for radio tuning.
-    Required Controls: QRadioTunerControl
-    Recording Controls (Optional, used by QMediaRecorder):
-                        Required: QMediaRecorderControl
-                        Recommended: QAudioEncoderControl
-                        Optional: QMediaContainerControl
-*/
-#define Q_MEDIASERVICE_RADIO "com.nokia.qt.radio"
-
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QMEDIASERVICEPROVIDER_H
diff --git a/src/multimedia/base/qmediaserviceproviderplugin.h b/src/multimedia/base/qmediaserviceproviderplugin.h
deleted file mode 100644
index b1e728b..0000000
--- a/src/multimedia/base/qmediaserviceproviderplugin.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIASERVICEPROVIDERPLUGIN_H
-#define QMEDIASERVICEPROVIDERPLUGIN_H
-
-#include <QtCore/qstringlist.h>
-#include <QtCore/qplugin.h>
-#include <QtCore/qfactoryinterface.h>
-
-#include <QtMultimedia/qmediaserviceprovider.h>
-
-#ifdef Q_MOC_RUN
-# pragma Q_MOC_EXPAND_MACROS
-#endif
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMediaService;
-
-
-struct Q_MULTIMEDIA_EXPORT QMediaServiceProviderFactoryInterface : public QFactoryInterface
-{
-    virtual QStringList keys() const = 0;
-    virtual QMediaService* create(QString const& key) = 0;
-    virtual void release(QMediaService *service) = 0;
-};
-
-#define QMediaServiceProviderFactoryInterface_iid \
-    "com.nokia.Qt.QMediaServiceProviderFactoryInterface/1.0"
-Q_DECLARE_INTERFACE(QMediaServiceProviderFactoryInterface, QMediaServiceProviderFactoryInterface_iid)
-
-
-struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedFormatsInterface
-{
-    virtual ~QMediaServiceSupportedFormatsInterface() {}
-    virtual QtMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const = 0;
-    virtual QStringList supportedMimeTypes() const = 0;
-};
-
-#define QMediaServiceSupportedFormatsInterface_iid \
-    "com.nokia.Qt.QMediaServiceSupportedFormatsInterface/1.0"
-Q_DECLARE_INTERFACE(QMediaServiceSupportedFormatsInterface, QMediaServiceSupportedFormatsInterface_iid)
-
-
-struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedDevicesInterface
-{
-    virtual ~QMediaServiceSupportedDevicesInterface() {}
-    virtual QList<QByteArray> devices(const QByteArray &service) const = 0;
-    virtual QString deviceDescription(const QByteArray &service, const QByteArray &device) = 0;
-};
-
-#define QMediaServiceSupportedDevicesInterface_iid \
-    "com.nokia.Qt.QMediaServiceSupportedDevicesInterface/1.0"
-Q_DECLARE_INTERFACE(QMediaServiceSupportedDevicesInterface, QMediaServiceSupportedDevicesInterface_iid)
-
-
-struct Q_MULTIMEDIA_EXPORT QMediaServiceFeaturesInterface
-{
-    virtual ~QMediaServiceFeaturesInterface() {}
-    virtual QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const = 0;
-};
-
-#define QMediaServiceFeaturesInterface_iid \
-    "com.nokia.Qt.QMediaServiceFeaturesInterface/1.0"
-Q_DECLARE_INTERFACE(QMediaServiceFeaturesInterface, QMediaServiceFeaturesInterface_iid)
-
-class Q_MULTIMEDIA_EXPORT QMediaServiceProviderPlugin : public QObject, public QMediaServiceProviderFactoryInterface
-{
-    Q_OBJECT
-    Q_INTERFACES(QMediaServiceProviderFactoryInterface:QFactoryInterface)
-
-public:
-    virtual QStringList keys() const = 0;
-    virtual QMediaService* create(const QString& key) = 0;
-    virtual void release(QMediaService *service) = 0;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QMEDIASERVICEPROVIDERPLUGIN_H
diff --git a/src/multimedia/base/qmediatimerange.cpp b/src/multimedia/base/qmediatimerange.cpp
deleted file mode 100644
index e1cea7e..0000000
--- a/src/multimedia/base/qmediatimerange.cpp
+++ /dev/null
@@ -1,708 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qmediatimerange.h>
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QMediaTimeInterval
-    \brief The QMediaTimeInterval class represents a time interval with integer precision.
-    \ingroup multimedia
-    \since 4.7
-
-    An interval is specified by an inclusive start() and end() time.
-    These must be set in the constructor, as this is an immutable class.
-    The specific units of time represented by the class have not been defined -
-    it is suitable for any times which can be represented by a signed 64 bit integer.
-
-    The isNormal() method determines if a time interval is normal
-    (a normal time interval has start() <= end()). An abnormal interval can be converted
-    in to a normal interval by calling the normalized() method.
-
-    The contains() method determines if a specified time lies within
-    the time interval.
-
-    The translated() method returns a time interval which has been translated
-    forwards or backwards through time by a specified offset.
-
-    \sa QMediaTimeRange
-*/
-
-/*!
-    \fn QMediaTimeInterval::QMediaTimeInterval()
-
-    Constructs an empty interval.
-*/
-QMediaTimeInterval::QMediaTimeInterval()
-    : s(0)
-    , e(0)
-{
-
-}
-
-/*!
-    \fn QMediaTimeInterval::QMediaTimeInterval(qint64 start, qint64 end)
-
-    Constructs an interval with the specified \a start and \a end times.
-*/
-QMediaTimeInterval::QMediaTimeInterval(qint64 start, qint64 end)
-    : s(start)
-    , e(end)
-{
-
-}
-
-/*!
-    \fn QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
-
-    Constructs an interval by taking a copy of \a other.
-*/
-QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
-    : s(other.s)
-    , e(other.e)
-{
-
-}
-
-/*!
-    \fn QMediaTimeInterval::start() const
-
-    Returns the start time of the interval.
-
-    \sa end()
-*/
-qint64 QMediaTimeInterval::start() const
-{
-    return s;
-}
-
-/*!
-    \fn QMediaTimeInterval::end() const
-
-    Returns the end time of the interval.
-
-    \sa start()
-*/
-qint64 QMediaTimeInterval::end() const
-{
-    return e;
-}
-
-/*!
-    \fn QMediaTimeInterval::contains(qint64 time) const
-
-    Returns true if the time interval contains the specified \a time.
-    That is, start() <= time <= end().
-*/
-bool QMediaTimeInterval::contains(qint64 time) const
-{
-    return isNormal() ? (s <= time && time <= e)
-        : (e <= time && time <= s);
-}
-
-/*!
-    \fn QMediaTimeInterval::isNormal() const
-
-    Returns true if this time interval is normal.
-    A normal time interval has start() <= end().
-
-    \sa normalized()
-*/
-bool QMediaTimeInterval::isNormal() const
-{
-    return s <= e;
-}
-
-/*!
-    \fn QMediaTimeInterval::normalized() const
-
-    Returns a normalized version of this interval.
-
-    If the start() time of the interval is greater than the end() time,
-    then the returned interval has the start and end times swapped.
-*/
-QMediaTimeInterval QMediaTimeInterval::normalized() const
-{
-    if(s > e)
-        return QMediaTimeInterval(e, s);
-
-    return *this;
-}
-
-/*!
-    \fn QMediaTimeInterval::translated(qint64 offset) const
-
-    Returns a copy of this time interval, translated by a value of \a offset.
-    An interval can be moved forward through time with a positive offset, or backward
-    through time with a negative offset.
-*/
-QMediaTimeInterval QMediaTimeInterval::translated(qint64 offset) const
-{
-    return QMediaTimeInterval(s + offset, e + offset);
-}
-
-/*!
-    \fn operator==(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
-    \relates QMediaTimeRange
-
-    Returns true if \a a is exactly equal to \a b.
-*/
-bool operator==(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
-{
-    return a.start() == b.start() && a.end() == b.end();
-}
-
-/*!
-    \fn operator!=(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
-    \relates QMediaTimeRange
-
-    Returns true if \a a is not exactly equal to \a b.
-*/
-bool operator!=(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
-{
-    return a.start() != b.start() || a.end() != b.end();
-}
-
-class QMediaTimeRangePrivate : public QSharedData
-{
-public:
-
-    QMediaTimeRangePrivate();
-    QMediaTimeRangePrivate(const QMediaTimeRangePrivate &other);
-    QMediaTimeRangePrivate(const QMediaTimeInterval &interval);
-
-    QList<QMediaTimeInterval> intervals;
-
-    void addInterval(const QMediaTimeInterval &interval);
-    void removeInterval(const QMediaTimeInterval &interval);
-};
-
-QMediaTimeRangePrivate::QMediaTimeRangePrivate()
-    : QSharedData()
-{
-
-}
-
-QMediaTimeRangePrivate::QMediaTimeRangePrivate(const QMediaTimeRangePrivate &other)
-    : QSharedData()
-    , intervals(other.intervals)
-{
-
-}
-
-QMediaTimeRangePrivate::QMediaTimeRangePrivate(const QMediaTimeInterval &interval)
-    : QSharedData()
-{
-    if(interval.isNormal())
-        intervals << interval;
-}
-
-void QMediaTimeRangePrivate::addInterval(const QMediaTimeInterval &interval)
-{    
-    // Handle normalized intervals only
-    if(!interval.isNormal())
-        return;
-
-    // Find a place to insert the interval
-    int i;
-    for (i = 0; i < intervals.count(); i++) {
-        // Insert before this element
-        if(interval.s < intervals[i].s) {
-            intervals.insert(i, interval);
-            break;
-        }
-    }
-
-    // Interval needs to be added to the end of the list
-    if (i == intervals.count())
-        intervals.append(interval);
-
-    // Do we need to correct the element before us?
-    if(i > 0 && intervals[i - 1].e >= interval.s - 1)
-        i--;
-
-    // Merge trailing ranges
-    while (i < intervals.count() - 1
-          && intervals[i].e >= intervals[i + 1].s - 1) {
-        intervals[i].e = qMax(intervals[i].e, intervals[i + 1].e);
-        intervals.removeAt(i + 1);
-    }
-}
-
-void QMediaTimeRangePrivate::removeInterval(const QMediaTimeInterval &interval)
-{
-    // Handle normalized intervals only
-    if(!interval.isNormal())
-        return;
-
-    for (int i = 0; i < intervals.count(); i++) {
-        QMediaTimeInterval r = intervals[i];
-
-        if (r.e < interval.s) {
-            // Before the removal interval
-            continue;
-        } else if (interval.e < r.s) {
-            // After the removal interval - stop here
-            break;
-        } else if (r.s < interval.s && interval.e < r.e) {
-            // Split case - a single range has a chunk removed
-            intervals[i].e = interval.s -1;
-            addInterval(QMediaTimeInterval(interval.e + 1, r.e));
-            break;
-        } else if (r.s < interval.s) {
-            // Trimming Tail Case
-            intervals[i].e = interval.s - 1;
-        } else if (interval.e < r.e) {
-            // Trimming Head Case - we can stop after this
-            intervals[i].s = interval.e + 1;
-            break;
-        } else {
-            // Complete coverage case
-            intervals.removeAt(i);
-            --i;
-        }
-    }
-}
-
-/*!
-    \class QMediaTimeRange
-    \brief The QMediaTimeRange class represents a set of zero or more disjoint
-    time intervals.
-    \ingroup multimedia
-    \since 4.7
-
-    \reentrant
-
-    The earliestTime(), latestTime(), intervals() and isEmpty()
-    methods are used to get information about the current time range.
-
-    The addInterval(), removeInterval() and clear() methods are used to modify
-    the current time range.
-
-    When adding or removing intervals from the time range, existing intervals
-    within the range may be expanded, trimmed, deleted, merged or split to ensure
-    that all intervals within the time range remain distinct and disjoint. As a
-    consequence, all intervals added or removed from a time range must be
-    \l{QMediaTimeInterval::isNormal()}{normal}.
-
-    \sa QMediaTimeInterval
-*/
-
-/*!
-    \fn QMediaTimeRange::QMediaTimeRange()
-
-    Constructs an empty time range.
-*/
-QMediaTimeRange::QMediaTimeRange()
-    : d(new QMediaTimeRangePrivate)
-{
-
-}
-
-/*!
-    \fn QMediaTimeRange::QMediaTimeRange(qint64 start, qint64 end)
-
-    Constructs a time range that contains an initial interval from
-    \a start to \a end inclusive.
-
-    If the interval is not \l{QMediaTimeInterval::isNormal()}{normal},
-    the resulting time range will be empty.
-
-    \sa addInterval()
-*/
-QMediaTimeRange::QMediaTimeRange(qint64 start, qint64 end)
-    : d(new QMediaTimeRangePrivate(QMediaTimeInterval(start, end)))
-{
-
-}
-
-/*!
-    \fn QMediaTimeRange::QMediaTimeRange(const QMediaTimeInterval &interval)
-
-    Constructs a time range that contains an intitial interval, \a interval.
-
-    If \a interval is not \l{QMediaTimeInterval::isNormal()}{normal},
-    the resulting time range will be empty.
-
-    \sa addInterval()
-*/
-QMediaTimeRange::QMediaTimeRange(const QMediaTimeInterval &interval)
-    : d(new QMediaTimeRangePrivate(interval))
-{
-
-}
-
-/*!
-    \fn QMediaTimeRange::QMediaTimeRange(const QMediaTimeRange &range)
-
-    Constructs a time range by copying another time \a range.
-*/
-QMediaTimeRange::QMediaTimeRange(const QMediaTimeRange &range)
-    : d(range.d)
-{
-
-}
-
-/*!
-    \fn QMediaTimeRange::~QMediaTimeRange()
-
-    Destructor.
-*/
-QMediaTimeRange::~QMediaTimeRange()
-{
-
-}
-
-/*!
-    \fn QMediaTimeRange::operator=(const QMediaTimeRange &other)
-
-    Takes a copy of the \a other time range and returns itself.
-*/
-QMediaTimeRange &QMediaTimeRange::operator=(const QMediaTimeRange &other)
-{
-    d = other.d;
-    return *this;
-}
-
-/*!
-    \fn QMediaTimeRange::operator=(const QMediaTimeInterval &interval)
-
-    Sets the time range to a single continuous interval, \a interval.
-*/
-QMediaTimeRange &QMediaTimeRange::operator=(const QMediaTimeInterval &interval)
-{
-    d = new QMediaTimeRangePrivate(interval);
-    return *this;
-}
-
-/*!
-    \fn QMediaTimeRange::earliestTime() const
-
-    Returns the earliest time within the time range.
-
-    For empty time ranges, this value is equal to zero.
-
-    \sa latestTime()
-*/
-qint64 QMediaTimeRange::earliestTime() const
-{
-    if (!d->intervals.isEmpty())
-        return d->intervals[0].s;
-
-    return 0;
-}
-
-/*!
-    \fn QMediaTimeRange::latestTime() const
-
-    Returns the latest time within the time range.
-
-    For empty time ranges, this value is equal to zero.
-
-    \sa earliestTime()
-*/
-qint64 QMediaTimeRange::latestTime() const
-{
-    if (!d->intervals.isEmpty())
-        return d->intervals[d->intervals.count() - 1].e;
-
-    return 0;
-}
-
-/*!
-    \fn QMediaTimeRange::addInterval(qint64 start, qint64 end)
-    \overload
-
-    Adds the interval specified by \a start and \a end
-    to the time range.
-
-    \sa addInterval()
-*/
-void QMediaTimeRange::addInterval(qint64 start, qint64 end)
-{
-    d->addInterval(QMediaTimeInterval(start, end));
-}
-
-/*!
-    \fn QMediaTimeRange::addInterval(const QMediaTimeInterval &interval)
-
-    Adds the specified \a interval to the time range.
-
-    Adding intervals which are not \l{QMediaTimeInterval::isNormal()}{normal}
-    is invalid, and will be ignored.
-
-    If the specified interval is adjacent to, or overlaps existing
-    intervals within the time range, these intervals will be merged.
-
-    This operation takes \l{linear time}
-
-    \sa removeInterval()
-*/
-void QMediaTimeRange::addInterval(const QMediaTimeInterval &interval)
-{
-    d->addInterval(interval);
-}
-
-/*!
-    \fn QMediaTimeRange::addTimeRange(const QMediaTimeRange &range)
-
-    Adds each of the intervals in \a range to this time range.
-
-    Equivalent to calling addInterval() for each interval in \a range.
-*/
-void QMediaTimeRange::addTimeRange(const QMediaTimeRange &range)
-{
-    foreach(const QMediaTimeInterval &i, range.intervals()) {
-        d->addInterval(i);
-    }
-}
-
-/*!
-    \fn QMediaTimeRange::removeInterval(qint64 start, qint64 end)
-    \overload
-
-    Removes the interval specified by \a start and \a end
-    from the time range.
-
-    \sa removeInterval()
-*/
-void QMediaTimeRange::removeInterval(qint64 start, qint64 end)
-{
-    d->removeInterval(QMediaTimeInterval(start, end));
-}
-
-/*!
-    \fn QMediaTimeRange::removeInterval(const QMediaTimeInterval &interval)
-
-    Removes the specified \a interval from the time range.
-
-    Removing intervals which are not \l{QMediaTimeInterval::isNormal()}{normal}
-    is invalid, and will be ignored.
-
-    Intervals within the time range will be trimmed, split or deleted
-    such that no intervals within the time range include any part of the
-    target interval.
-
-    This operation takes \l{linear time}
-
-    \sa addInterval()
-*/
-void QMediaTimeRange::removeInterval(const QMediaTimeInterval &interval)
-{
-    d->removeInterval(interval);
-}
-
-/*!
-    \fn QMediaTimeRange::removeTimeRange(const QMediaTimeRange &range)
-
-    Removes each of the intervals in \a range from this time range.
-
-    Equivalent to calling removeInterval() for each interval in \a range.
-*/
-void QMediaTimeRange::removeTimeRange(const QMediaTimeRange &range)
-{
-    foreach(const QMediaTimeInterval &i, range.intervals()) {
-        d->removeInterval(i);
-    }
-}
-
-/*!
-    \fn QMediaTimeRange::operator+=(const QMediaTimeRange &other)
-
-    Adds each interval in \a other to the time range and returns the result.
-*/
-QMediaTimeRange& QMediaTimeRange::operator+=(const QMediaTimeRange &other)
-{
-    addTimeRange(other);
-    return *this;
-}
-
-/*!
-    \fn QMediaTimeRange::operator+=(const QMediaTimeInterval &interval)
-
-    Adds the specified \a interval to the time range and returns the result.
-*/
-QMediaTimeRange& QMediaTimeRange::operator+=(const QMediaTimeInterval &interval)
-{
-    addInterval(interval);
-    return *this;
-}
-
-/*!
-    \fn QMediaTimeRange::operator-=(const QMediaTimeRange &other)
-
-    Removes each interval in \a other from the time range and returns the result.
-*/
-QMediaTimeRange& QMediaTimeRange::operator-=(const QMediaTimeRange &other)
-{
-    removeTimeRange(other);
-    return *this;
-}
-
-/*!
-    \fn QMediaTimeRange::operator-=(const QMediaTimeInterval &interval)
-
-    Removes the specified \a interval from the time range and returns the result.
-*/
-QMediaTimeRange& QMediaTimeRange::operator-=(const QMediaTimeInterval &interval)
-{
-    removeInterval(interval);
-    return *this;
-}
-
-/*!
-    \fn QMediaTimeRange::clear()
-
-    Removes all intervals from the time range.
-
-    \sa removeInterval()
-*/
-void QMediaTimeRange::clear()
-{
-    d->intervals.clear();
-}
-
-/*!
-    \fn QMediaTimeRange::intervals() const
-
-    Returns the list of intervals covered by this time range.
-*/
-QList<QMediaTimeInterval> QMediaTimeRange::intervals() const
-{
-    return d->intervals;
-}
-
-/*!
-    \fn QMediaTimeRange::isEmpty() const
-
-    Returns true if there are no intervals within the time range.
-
-    \sa intervals()
-*/
-bool QMediaTimeRange::isEmpty() const
-{
-    return d->intervals.isEmpty();
-}
-
-/*!
-    \fn QMediaTimeRange::isContinuous() const
-
-    Returns true if the time range consists of a continuous interval.
-    That is, there is one or fewer disjoint intervals within the time range.
-*/
-bool QMediaTimeRange::isContinuous() const
-{
-    return (d->intervals.count() <= 1);
-}
-
-/*!
-    \fn QMediaTimeRange::contains(qint64 time) const
-
-    Returns true if the specified \a time lies within the time range.
-*/
-bool QMediaTimeRange::contains(qint64 time) const
-{
-    for (int i = 0; i < d->intervals.count(); i++) {
-        if (d->intervals[i].contains(time))
-            return true;
-
-        if (time < d->intervals[i].s)
-            break;
-    }
-
-    return false;
-}
-
-/*!
-    \fn operator==(const QMediaTimeRange &a, const QMediaTimeRange &b)
-    \relates QMediaTimeRange
-
-    Returns true if all intervals in \a a are present in \a b.
-*/
-bool operator==(const QMediaTimeRange &a, const QMediaTimeRange &b)
-{
-    if (a.intervals().count() != b.intervals().count())
-        return false;
-
-    for (int i = 0; i < a.intervals().count(); i++)
-    {
-        if(a.intervals()[i] != b.intervals()[i])
-            return false;
-    }
-
-    return true;
-}
-
-/*!
-    \fn operator!=(const QMediaTimeRange &a, const QMediaTimeRange &b)
-    \relates QMediaTimeRange
-
-    Returns true if one or more intervals in \a a are not present in \a b.
-*/
-bool operator!=(const QMediaTimeRange &a, const QMediaTimeRange &b)
-{
-    return !(a == b);
-}
-
-/*!
-    \fn operator+(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
-
-    Returns a time range containing the union between \a r1 and \a r2.
- */
-QMediaTimeRange operator+(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
-{
-    return (QMediaTimeRange(r1) += r2);
-}
-
-/*!
-    \fn operator-(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
-
-    Returns a time range containing \a r2 subtracted from \a r1.
- */
-QMediaTimeRange operator-(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
-{
-    return (QMediaTimeRange(r1) -= r2);
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmediatimerange.h b/src/multimedia/base/qmediatimerange.h
deleted file mode 100644
index a65629e..0000000
--- a/src/multimedia/base/qmediatimerange.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIATIMERANGE_H
-#define QMEDIATIMERANGE_H
-
-#include <QtCore/qshareddata.h>
-#include <QtMultimedia/qtmedianamespace.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMediaTimeRangePrivate;
-
-class Q_MULTIMEDIA_EXPORT QMediaTimeInterval
-{
-public:
-    QMediaTimeInterval();
-    QMediaTimeInterval(qint64 start, qint64 end);
-    QMediaTimeInterval(const QMediaTimeInterval&);
-
-    qint64 start() const;
-    qint64 end() const;
-
-    bool contains(qint64 time) const;
-
-    bool isNormal() const;
-    QMediaTimeInterval normalized() const;
-    QMediaTimeInterval translated(qint64 offset) const;
-
-private:
-    friend class QMediaTimeRangePrivate;
-    friend class QMediaTimeRange;
-
-    qint64 s;
-    qint64 e;
-};
-
-Q_MULTIMEDIA_EXPORT bool operator==(const QMediaTimeInterval&, const QMediaTimeInterval&);
-Q_MULTIMEDIA_EXPORT bool operator!=(const QMediaTimeInterval&, const QMediaTimeInterval&);
-
-class Q_MULTIMEDIA_EXPORT QMediaTimeRange
-{
-public:
-
-    QMediaTimeRange();
-    QMediaTimeRange(qint64 start, qint64 end);
-    QMediaTimeRange(const QMediaTimeInterval&);
-    QMediaTimeRange(const QMediaTimeRange &range);
-    ~QMediaTimeRange();
-
-    QMediaTimeRange &operator=(const QMediaTimeRange&);
-    QMediaTimeRange &operator=(const QMediaTimeInterval&);
-
-    qint64 earliestTime() const;
-    qint64 latestTime() const;
-
-    QList<QMediaTimeInterval> intervals() const;
-    bool isEmpty() const;
-    bool isContinuous() const;
-
-    bool contains(qint64 time) const;
-
-    void addInterval(qint64 start, qint64 end);
-    void addInterval(const QMediaTimeInterval &interval);
-    void addTimeRange(const QMediaTimeRange&);
-
-    void removeInterval(qint64 start, qint64 end);
-    void removeInterval(const QMediaTimeInterval &interval);
-    void removeTimeRange(const QMediaTimeRange&);
-
-    QMediaTimeRange& operator+=(const QMediaTimeRange&);
-    QMediaTimeRange& operator+=(const QMediaTimeInterval&);
-    QMediaTimeRange& operator-=(const QMediaTimeRange&);
-    QMediaTimeRange& operator-=(const QMediaTimeInterval&);
-
-    void clear();
-
-private:
-    QSharedDataPointer<QMediaTimeRangePrivate> d;
-};
-
-Q_MULTIMEDIA_EXPORT bool operator==(const QMediaTimeRange&, const QMediaTimeRange&);
-Q_MULTIMEDIA_EXPORT bool operator!=(const QMediaTimeRange&, const QMediaTimeRange&);
-Q_MULTIMEDIA_EXPORT QMediaTimeRange operator+(const QMediaTimeRange&, const QMediaTimeRange&);
-Q_MULTIMEDIA_EXPORT QMediaTimeRange operator-(const QMediaTimeRange&, const QMediaTimeRange&);
-
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QMEDIATIMERANGE_H
diff --git a/src/multimedia/base/qmetadatacontrol.cpp b/src/multimedia/base/qmetadatacontrol.cpp
deleted file mode 100644
index 28a82ec..0000000
--- a/src/multimedia/base/qmetadatacontrol.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qmetadatacontrol.h>
-#include "qmediacontrol_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
-    \class QMetaDataControl
-    \ingroup multimedia-serv
-    \since 4.7
-    \preliminary
-    \brief The QMetaDataControl class provides access to the meta-data of a
-    QMediaService's media.
-
-    If a QMediaService can provide read or write access to the meta-data of
-    its current media it will implement QMetaDataControl.  This control
-    provides functions for both retrieving and setting meta-data values.
-    Meta-data may be addressed by the well defined keys in the
-    QtMultimedia::MetaData enumeration using the metaData() functions, or by
-    string keys using the extendedMetaData() functions.
-
-    The functionality provided by this control is exposed to application
-    code by the meta-data members of QMediaObject, and so meta-data access
-    is potentially available in any of the media object classes.  Any media
-    service may implement QMetaDataControl.
-
-    The interface name of QMetaDataControl is \c com.nokia.Qt.QMetaDataControl/1.0 as
-    defined in QMetaDataControl_iid.
-
-    \sa QMediaService::control(), QMediaObject
-*/
-
-/*!
-    \macro QMetaDataControl_iid
-
-    \c com.nokia.Qt.QMetaDataControl/1.0
-
-    Defines the interface name of the QMetaDataControl class.
-
-    \relates QMetaDataControl
-*/
-
-/*!
-    Construct a QMetaDataControl with \a parent. This class is meant as a base class
-    for service specific meta data providers so this constructor is protected.
-*/
-
-QMetaDataControl::QMetaDataControl(QObject *parent):
-    QMediaControl(*new QMediaControlPrivate, parent)
-{
-}
-
-/*!
-    Destroy the meta-data object.
-*/
-
-QMetaDataControl::~QMetaDataControl()
-{
-}
-
-/*!
-    \fn bool QMetaDataControl::isMetaDataAvailable() const
-
-    Identifies if meta-data is available from a media service.
-
-    Returns true if the meta-data is available and false otherwise.
-*/
-
-/*!
-    \fn bool QMetaDataControl::isWritable() const
-
-    Identifies if a media service's meta-data can be edited.
-
-    Returns true if the meta-data is writable and false otherwise.
-*/
-
-/*!
-    \fn QVariant QMetaDataControl::metaData(QtMultimedia::MetaData key) const
-
-    Returns the meta-data for the given \a key.
-*/
-
-/*!
-    \fn void QMetaDataControl::setMetaData(QtMultimedia::MetaData key, const QVariant &value)
-
-    Sets the \a value of the meta-data element with the given \a key.
-*/
-
-/*!
-    \fn QMetaDataControl::availableMetaData() const
-
-    Returns a list of keys there is meta-data available for.
-*/
-
-/*!
-    \fn QMetaDataControl::extendedMetaData(const QString &key) const
-
-    Returns the metaData for an abitrary string \a key.
-
-    The valid selection of keys for extended meta-data is determined by the provider and the meaning
-    and type may differ between providers.
-*/
-
-/*!
-    \fn QMetaDataControl::setExtendedMetaData(const QString &key, const QVariant &value)
-
-    Change the value of the meta-data element with an abitrary string \a key to \a value.
-
-    The valid selection of keys for extended meta-data is determined by the provider and the meaning
-    and type may differ between providers.
-*/
-
-/*!
-    \fn QMetaDataControl::availableExtendedMetaData() const
-
-    Returns a list of keys there is extended meta-data available for.
-*/
-
-
-/*!
-    \fn void QMetaDataControl::metaDataChanged()
-
-    Signal the changes of meta-data.
-*/
-
-/*!
-    \fn void QMetaDataControl::metaDataAvailableChanged(bool available)
-
-    Signal the availability of meta-data has changed, \a available will
-    be true if the multimedia object has meta-data.
-*/
-
-/*!
-    \fn void QMetaDataControl::writableChanged(bool writable)
-
-    Signal a change in the writable status of meta-data, \a writable will be
-    true if meta-data elements can be added or adjusted.
-*/
-
-#include "moc_qmetadatacontrol.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qmetadatacontrol.h b/src/multimedia/base/qmetadatacontrol.h
deleted file mode 100644
index 8e18c16..0000000
--- a/src/multimedia/base/qmetadatacontrol.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMETADATACONTROL_H
-#define QMETADATACONTROL_H
-
-#include <QtMultimedia/qmediacontrol.h>
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaresource.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class Q_MULTIMEDIA_EXPORT QMetaDataControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    ~QMetaDataControl();
-
-    virtual bool isWritable() const = 0;
-    virtual bool isMetaDataAvailable() const = 0;
-
-    virtual QVariant metaData(QtMultimedia::MetaData key) const = 0;
-    virtual void setMetaData(QtMultimedia::MetaData key, const QVariant &value) = 0;
-    virtual QList<QtMultimedia::MetaData> availableMetaData() const = 0;
-
-    virtual QVariant extendedMetaData(const QString &key) const = 0;
-    virtual void setExtendedMetaData(const QString &key, const QVariant &value) = 0;
-    virtual QStringList availableExtendedMetaData() const = 0;
-
-Q_SIGNALS:
-    void metaDataChanged();
-
-    void writableChanged(bool writable);
-    void metaDataAvailableChanged(bool available);
-
-protected:
-    QMetaDataControl(QObject *parent = 0);
-};
-
-#define QMetaDataControl_iid "com.nokia.Qt.QMetaDataControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QMetaDataControl, QMetaDataControl_iid)
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-
-#endif  // QMETADATAPROVIDER_H
diff --git a/src/multimedia/base/qpaintervideosurface.cpp b/src/multimedia/base/qpaintervideosurface.cpp
deleted file mode 100644
index 2fe941b..0000000
--- a/src/multimedia/base/qpaintervideosurface.cpp
+++ /dev/null
@@ -1,1565 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qpaintervideosurface_p.h"
-#include "qpaintervideosurface_mac_p.h"
-
-#include <qmath.h>
-
-#include <qpainter.h>
-#include <qvariant.h>
-#include <QtMultimedia/qvideosurfaceformat.h>
-
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-#include <qglshaderprogram.h>
-#endif
-
-#include <QtDebug>
-
-
-QT_BEGIN_NAMESPACE
-
-QVideoSurfacePainter::~QVideoSurfacePainter()
-{
-}
-
-class QVideoSurfaceRasterPainter : public QVideoSurfacePainter
-{
-public:
-    QVideoSurfaceRasterPainter();
-
-    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
-            QAbstractVideoBuffer::HandleType handleType) const;
-
-    bool isFormatSupported(
-            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const;
-
-    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
-    void stop();
-
-    QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame);
-
-    QAbstractVideoSurface::Error paint(
-            const QRectF &target, QPainter *painter, const QRectF &source);
-
-    void updateColors(int brightness, int contrast, int hue, int saturation);
-
-private:
-    QList<QVideoFrame::PixelFormat> m_imagePixelFormats;
-    QVideoFrame m_frame;
-    QSize m_imageSize;
-    QImage::Format m_imageFormat;
-    QVideoSurfaceFormat::Direction m_scanLineDirection;
-};
-
-QVideoSurfaceRasterPainter::QVideoSurfaceRasterPainter()
-    : m_imageFormat(QImage::Format_Invalid)
-    , m_scanLineDirection(QVideoSurfaceFormat::TopToBottom)
-{
-    m_imagePixelFormats
-        << QVideoFrame::Format_RGB32
-#ifndef QT_OPENGL_ES // The raster formats should be a subset of the GL formats.
-        << QVideoFrame::Format_RGB24
-#endif
-        << QVideoFrame::Format_ARGB32
-        << QVideoFrame::Format_RGB565;
-}
-
-QList<QVideoFrame::PixelFormat> QVideoSurfaceRasterPainter::supportedPixelFormats(
-        QAbstractVideoBuffer::HandleType handleType) const
-{
-    return handleType == QAbstractVideoBuffer::NoHandle
-        ? m_imagePixelFormats
-        : QList<QVideoFrame::PixelFormat>();
-}
-
-bool QVideoSurfaceRasterPainter::isFormatSupported(
-        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *) const
-{
-    return format.handleType() == QAbstractVideoBuffer::NoHandle
-            && m_imagePixelFormats.contains(format.pixelFormat())
-            && !format.frameSize().isEmpty();
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceRasterPainter::start(const QVideoSurfaceFormat &format)
-{
-    m_frame = QVideoFrame();
-    m_imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
-    m_imageSize = format.frameSize();
-    m_scanLineDirection = format.scanLineDirection();
-
-    return format.handleType() == QAbstractVideoBuffer::NoHandle
-            && m_imageFormat != QImage::Format_Invalid
-            && !m_imageSize.isEmpty()
-            ? QAbstractVideoSurface::NoError
-            : QAbstractVideoSurface::UnsupportedFormatError;
-}
-
-void QVideoSurfaceRasterPainter::stop()
-{
-    m_frame = QVideoFrame();
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceRasterPainter::setCurrentFrame(const QVideoFrame &frame)
-{
-    m_frame = frame;
-
-    return QAbstractVideoSurface::NoError;
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceRasterPainter::paint(
-            const QRectF &target, QPainter *painter, const QRectF &source)
-{
-    if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
-        QImage image(
-                m_frame.bits(),
-                m_imageSize.width(),
-                m_imageSize.height(),
-                m_frame.bytesPerLine(),
-                m_imageFormat);
-
-        if (m_scanLineDirection == QVideoSurfaceFormat::BottomToTop) {
-            const QTransform oldTransform = painter->transform();
-
-            painter->scale(1, -1);
-            painter->translate(0, -target.bottom());
-            painter->drawImage(
-                QRectF(target.x(), 0, target.width(), target.height()), image, source);
-            painter->setTransform(oldTransform);
-        } else {
-            painter->drawImage(target, image, source);
-        }
-
-        m_frame.unmap();
-    } else if (m_frame.isValid()) {
-        return QAbstractVideoSurface::IncorrectFormatError;
-    } else {
-        painter->fillRect(target, Qt::black);
-    }
-    return QAbstractVideoSurface::NoError;
-}
-
-void QVideoSurfaceRasterPainter::updateColors(int, int, int, int)
-{
-}
-
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-
-#ifndef Q_WS_MAC
-# ifndef APIENTRYP
-#   ifdef APIENTRY
-#     define APIENTRYP APIENTRY *
-#   else
-#     define APIENTRY
-#     define APIENTRYP *
-#   endif
-# endif
-#else
-# define APIENTRY
-# define APIENTRYP *
-#endif
-
-#ifndef GL_TEXTURE0
-#  define GL_TEXTURE0    0x84C0
-#  define GL_TEXTURE1    0x84C1
-#  define GL_TEXTURE2    0x84C2
-#endif
-#ifndef GL_PROGRAM_ERROR_STRING_ARB
-#  define GL_PROGRAM_ERROR_STRING_ARB       0x8874
-#endif
-
-#ifndef GL_UNSIGNED_SHORT_5_6_5
-#  define GL_UNSIGNED_SHORT_5_6_5 33635
-#endif
-
-class QVideoSurfaceGLPainter : public QVideoSurfacePainter
-{
-public:
-    QVideoSurfaceGLPainter(QGLContext *context);
-    ~QVideoSurfaceGLPainter();
-    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
-            QAbstractVideoBuffer::HandleType handleType) const;
-
-    bool isFormatSupported(
-            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const;
-
-    QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame);
-
-    void updateColors(int brightness, int contrast, int hue, int saturation);
-
-protected:
-    void initRgbTextureInfo(GLenum internalFormat, GLuint format, GLenum type, const QSize &size);
-    void initYuv420PTextureInfo(const QSize &size);
-    void initYv12TextureInfo(const QSize &size);
-
-#ifndef QT_OPENGL_ES
-    typedef void (APIENTRY *_glActiveTexture) (GLenum);
-    _glActiveTexture glActiveTexture;
-#endif
-
-    QList<QVideoFrame::PixelFormat> m_imagePixelFormats;
-    QList<QVideoFrame::PixelFormat> m_glPixelFormats;
-    QMatrix4x4 m_colorMatrix;
-    QVideoFrame m_frame;
-
-    QGLContext *m_context;
-    QAbstractVideoBuffer::HandleType m_handleType;
-    QVideoSurfaceFormat::Direction m_scanLineDirection;
-    GLenum m_textureFormat;
-    GLuint m_textureInternalFormat;
-    GLenum m_textureType;
-    int m_textureCount;
-    GLuint m_textureIds[3];
-    int m_textureWidths[3];
-    int m_textureHeights[3];
-    int m_textureOffsets[3];
-    bool m_yuv;
-};
-
-QVideoSurfaceGLPainter::QVideoSurfaceGLPainter(QGLContext *context)
-    : m_context(context)
-    , m_handleType(QAbstractVideoBuffer::NoHandle)
-    , m_scanLineDirection(QVideoSurfaceFormat::TopToBottom)
-    , m_textureFormat(0)
-    , m_textureInternalFormat(0)
-    , m_textureType(0)
-    , m_textureCount(0)
-    , m_yuv(false)
-{
-#ifndef QT_OPENGL_ES
-    glActiveTexture = (_glActiveTexture)m_context->getProcAddress(QLatin1String("glActiveTexture"));
-#endif
-}
-
-QVideoSurfaceGLPainter::~QVideoSurfaceGLPainter()
-{
-}
-
-QList<QVideoFrame::PixelFormat> QVideoSurfaceGLPainter::supportedPixelFormats(
-        QAbstractVideoBuffer::HandleType handleType) const
-{
-    switch (handleType) {
-    case QAbstractVideoBuffer::NoHandle:
-        return m_imagePixelFormats;
-    case QAbstractVideoBuffer::GLTextureHandle:
-        return m_glPixelFormats;
-    default:
-        return QList<QVideoFrame::PixelFormat>();
-    }
-}
-
-bool QVideoSurfaceGLPainter::isFormatSupported(
-        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *) const
-{
-    if (format.frameSize().isEmpty()) {
-        return false;
-    } else {
-        switch (format.handleType()) {
-        case QAbstractVideoBuffer::NoHandle:
-            return m_imagePixelFormats.contains(format.pixelFormat());
-        case QAbstractVideoBuffer::GLTextureHandle:
-            return m_glPixelFormats.contains(format.pixelFormat());
-        default:
-            return false;
-        }
-    }
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceGLPainter::setCurrentFrame(const QVideoFrame &frame)
-{
-    m_frame = frame;
-
-    if (m_handleType == QAbstractVideoBuffer::GLTextureHandle) {
-        m_textureIds[0] = frame.handle().toInt();
-    } else if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
-        m_context->makeCurrent();
-
-        for (int i = 0; i < m_textureCount; ++i) {
-            glBindTexture(GL_TEXTURE_2D, m_textureIds[i]);
-            glTexImage2D(
-                    GL_TEXTURE_2D,
-                    0,
-                    m_textureInternalFormat,
-                    m_textureWidths[i],
-                    m_textureHeights[i],
-                    0,
-                    m_textureFormat,
-                    m_textureType,
-                    m_frame.bits() + m_textureOffsets[i]);
-            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-        }
-        m_frame.unmap();
-    } else if (m_frame.isValid()) {
-        return QAbstractVideoSurface::IncorrectFormatError;
-    }
-
-    return QAbstractVideoSurface::NoError;
-}
-
-void QVideoSurfaceGLPainter::updateColors(int brightness, int contrast, int hue, int saturation)
-{
-    const qreal b = brightness / 200.0;
-    const qreal c = contrast / 100.0 + 1.0;
-    const qreal h = hue / 100.0;
-    const qreal s = saturation / 100.0 + 1.0;
-
-    const qreal cosH = qCos(M_PI * h);
-    const qreal sinH = qSin(M_PI * h);
-
-    const qreal h11 =  0.787 * cosH - 0.213 * sinH + 0.213;
-    const qreal h21 = -0.213 * cosH + 0.143 * sinH + 0.213;
-    const qreal h31 = -0.213 * cosH - 0.787 * sinH + 0.213;
-
-    const qreal h12 = -0.715 * cosH - 0.715 * sinH + 0.715;
-    const qreal h22 =  0.285 * cosH + 0.140 * sinH + 0.715;
-    const qreal h32 = -0.715 * cosH + 0.715 * sinH + 0.715;
-
-    const qreal h13 = -0.072 * cosH + 0.928 * sinH + 0.072;
-    const qreal h23 = -0.072 * cosH - 0.283 * sinH + 0.072;
-    const qreal h33 =  0.928 * cosH + 0.072 * sinH + 0.072;
-
-    const qreal sr = (1.0 - s) * 0.3086;
-    const qreal sg = (1.0 - s) * 0.6094;
-    const qreal sb = (1.0 - s) * 0.0820;
-
-    const qreal sr_s = sr + s;
-    const qreal sg_s = sg + s;
-    const qreal sb_s = sr + s;
-
-    const float m4 = (s + sr + sg + sb) * (0.5 - 0.5 * c + b);
-
-    m_colorMatrix(0, 0) = c * (sr_s * h11 + sg * h21 + sb * h31);
-    m_colorMatrix(0, 1) = c * (sr_s * h12 + sg * h22 + sb * h32);
-    m_colorMatrix(0, 2) = c * (sr_s * h13 + sg * h23 + sb * h33);
-    m_colorMatrix(0, 3) = m4;
-
-    m_colorMatrix(1, 0) = c * (sr * h11 + sg_s * h21 + sb * h31);
-    m_colorMatrix(1, 1) = c * (sr * h12 + sg_s * h22 + sb * h32);
-    m_colorMatrix(1, 2) = c * (sr * h13 + sg_s * h23 + sb * h33);
-    m_colorMatrix(1, 3) = m4;
-
-    m_colorMatrix(2, 0) = c * (sr * h11 + sg * h21 + sb_s * h31);
-    m_colorMatrix(2, 1) = c * (sr * h12 + sg * h22 + sb_s * h32);
-    m_colorMatrix(2, 2) = c * (sr * h13 + sg * h23 + sb_s * h33);
-    m_colorMatrix(2, 3) = m4;
-
-    m_colorMatrix(3, 0) = 0.0;
-    m_colorMatrix(3, 1) = 0.0;
-    m_colorMatrix(3, 2) = 0.0;
-    m_colorMatrix(3, 3) = 1.0;
-
-    if (m_yuv) {
-        m_colorMatrix = m_colorMatrix * QMatrix4x4(
-                1.0,  0.000,  1.140, -0.5700,
-                1.0, -0.394, -0.581,  0.4875,
-                1.0,  2.028,  0.000, -1.0140,
-                0.0,  0.000,  0.000,  1.0000);
-    }
-}
-
-void QVideoSurfaceGLPainter::initRgbTextureInfo(
-        GLenum internalFormat, GLuint format, GLenum type, const QSize &size)
-{
-    m_yuv = false;
-    m_textureInternalFormat = internalFormat;
-    m_textureFormat = format;
-    m_textureType = type;
-    m_textureCount = 1;
-    m_textureWidths[0] = size.width();
-    m_textureHeights[0] = size.height();
-    m_textureOffsets[0] = 0;
-}
-
-void QVideoSurfaceGLPainter::initYuv420PTextureInfo(const QSize &size)
-{
-    int w = (size.width() + 3) & ~3;
-    int w2 = (size.width()/2 + 3) & ~3;
-
-    m_yuv = true;
-    m_textureInternalFormat = GL_LUMINANCE;
-    m_textureFormat = GL_LUMINANCE;
-    m_textureType = GL_UNSIGNED_BYTE;
-    m_textureCount = 3;
-    m_textureWidths[0] = size.width();
-    m_textureHeights[0] = size.height();
-    m_textureOffsets[0] = 0;
-    m_textureWidths[1] = size.width() / 2;
-    m_textureHeights[1] = size.height() / 2;
-    m_textureOffsets[1] = w * size.height();
-    m_textureWidths[2] = size.width() / 2;
-    m_textureHeights[2] = size.height() / 2;
-    m_textureOffsets[2] = w * size.height() + w2 * (size.height() / 2);
-}
-
-void QVideoSurfaceGLPainter::initYv12TextureInfo(const QSize &size)
-{
-    int w = (size.width() + 3) & ~3;
-    int w2 = (size.width()/2 + 3) & ~3;
-
-    m_yuv = true;
-    m_textureInternalFormat = GL_LUMINANCE;
-    m_textureFormat = GL_LUMINANCE;
-    m_textureType = GL_UNSIGNED_BYTE;
-    m_textureCount = 3;
-    m_textureWidths[0] = size.width();
-    m_textureHeights[0] = size.height();
-    m_textureOffsets[0] = 0;
-    m_textureWidths[1] = size.width() / 2;
-    m_textureHeights[1] = size.height() / 2;
-    m_textureOffsets[1] = w * size.height() + w2 * (size.height() / 2);
-    m_textureWidths[2] = size.width() / 2;
-    m_textureHeights[2] = size.height() / 2;
-    m_textureOffsets[2] = w * size.height();
-}
-
-#ifndef QT_OPENGL_ES
-
-# ifndef GL_FRAGMENT_PROGRAM_ARB
-#  define GL_FRAGMENT_PROGRAM_ARB           0x8804
-#  define GL_PROGRAM_FORMAT_ASCII_ARB       0x8875
-# endif
-
-// Paints an RGB32 frame
-static const char *qt_arbfp_xrgbShaderProgram =
-    "!!ARBfp1.0\n"
-    "PARAM matrix[4] = { program.local[0..2],"
-    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
-    "TEMP xrgb;\n"
-    "TEX xrgb.xyz, fragment.texcoord[0], texture[0], 2D;\n"
-    "MOV xrgb.w, matrix[3].w;\n"
-    "DP4 result.color.x, xrgb.zyxw, matrix[0];\n"
-    "DP4 result.color.y, xrgb.zyxw, matrix[1];\n"
-    "DP4 result.color.z, xrgb.zyxw, matrix[2];\n"
-    "END";
-
-// Paints an ARGB frame.
-static const char *qt_arbfp_argbShaderProgram =
-    "!!ARBfp1.0\n"
-    "PARAM matrix[4] = { program.local[0..2],"
-    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
-    "TEMP argb;\n"
-    "TEX argb, fragment.texcoord[0], texture[0], 2D;\n"
-    "MOV argb.w, matrix[3].w;\n"
-    "DP4 result.color.x, argb.zyxw, matrix[0];\n"
-    "DP4 result.color.y, argb.zyxw, matrix[1];\n"
-    "DP4 result.color.z, argb.zyxw, matrix[2];\n"
-    "TEX result.color.w, fragment.texcoord[0], texture, 2D;\n"
-    "END";
-
-// Paints an RGB(A) frame.
-static const char *qt_arbfp_rgbShaderProgram =
-    "!!ARBfp1.0\n"
-    "PARAM matrix[4] = { program.local[0..2],"
-    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
-    "TEMP rgb;\n"
-    "TEX rgb, fragment.texcoord[0], texture[0], 2D;\n"
-    "MOV rgb.w, matrix[3].w;\n"
-    "DP4 result.color.x, rgb, matrix[0];\n"
-    "DP4 result.color.y, rgb, matrix[1];\n"
-    "DP4 result.color.z, rgb, matrix[2];\n"
-    "TEX result.color.w, fragment.texcoord[0], texture, 2D;\n"
-    "END";
-
-// Paints a YUV420P or YV12 frame.
-static const char *qt_arbfp_yuvPlanarShaderProgram =
-    "!!ARBfp1.0\n"
-    "PARAM matrix[4] = { program.local[0..2],"
-    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
-    "TEMP yuv;\n"
-    "TEX yuv.x, fragment.texcoord[0], texture[0], 2D;\n"
-    "TEX yuv.y, fragment.texcoord[0], texture[1], 2D;\n"
-    "TEX yuv.z, fragment.texcoord[0], texture[2], 2D;\n"
-    "MOV yuv.w, matrix[3].w;\n"
-    "DP4 result.color.x, yuv, matrix[0];\n"
-    "DP4 result.color.y, yuv, matrix[1];\n"
-    "DP4 result.color.z, yuv, matrix[2];\n"
-    "END";
-
-// Paints a YUV444 frame.
-static const char *qt_arbfp_xyuvShaderProgram =
-    "!!ARBfp1.0\n"
-    "PARAM matrix[4] = { program.local[0..2],"
-    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
-    "TEMP ayuv;\n"
-    "TEX ayuv, fragment.texcoord[0], texture[0], 2D;\n"
-    "MOV ayuv.x, matrix[3].w;\n"
-    "DP4 result.color.x, ayuv.yzwx, matrix[0];\n"
-    "DP4 result.color.y, ayuv.yzwx, matrix[1];\n"
-    "DP4 result.color.z, ayuv.yzwx, matrix[2];\n"
-    "END";
-
-// Paints a AYUV444 frame.
-static const char *qt_arbfp_ayuvShaderProgram =
-    "!!ARBfp1.0\n"
-    "PARAM matrix[4] = { program.local[0..2],"
-    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
-    "TEMP ayuv;\n"
-    "TEX ayuv, fragment.texcoord[0], texture[0], 2D;\n"
-    "MOV ayuv.x, matrix[3].w;\n"
-    "DP4 result.color.x, ayuv.yzwx, matrix[0];\n"
-    "DP4 result.color.y, ayuv.yzwx, matrix[1];\n"
-    "DP4 result.color.z, ayuv.yzwx, matrix[2];\n"
-    "TEX result.color.w, fragment.texcoord[0], texture, 2D;\n"
-    "END";
-
-class QVideoSurfaceArbFpPainter : public QVideoSurfaceGLPainter
-{
-public:
-    QVideoSurfaceArbFpPainter(QGLContext *context);
-
-    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
-    void stop();
-
-    QAbstractVideoSurface::Error paint(
-            const QRectF &target, QPainter *painter, const QRectF &source);
-
-private:
-    typedef void (APIENTRY *_glProgramStringARB) (GLenum, GLenum, GLsizei, const GLvoid *);
-    typedef void (APIENTRY *_glBindProgramARB) (GLenum, GLuint);
-    typedef void (APIENTRY *_glDeleteProgramsARB) (GLsizei, const GLuint *);
-    typedef void (APIENTRY *_glGenProgramsARB) (GLsizei, GLuint *);
-    typedef void (APIENTRY *_glProgramLocalParameter4fARB) (
-            GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
-    typedef void (APIENTRY *_glActiveTexture) (GLenum);
-
-    _glProgramStringARB glProgramStringARB;
-    _glBindProgramARB glBindProgramARB;
-    _glDeleteProgramsARB glDeleteProgramsARB;
-    _glGenProgramsARB glGenProgramsARB;
-    _glProgramLocalParameter4fARB glProgramLocalParameter4fARB;
-
-    GLuint m_programId;
-    QSize m_frameSize;
-};
-
-QVideoSurfaceArbFpPainter::QVideoSurfaceArbFpPainter(QGLContext *context)
-    : QVideoSurfaceGLPainter(context)
-    , m_programId(0)
-{
-    glProgramStringARB = (_glProgramStringARB) m_context->getProcAddress(
-                QLatin1String("glProgramStringARB"));
-    glBindProgramARB = (_glBindProgramARB) m_context->getProcAddress(
-                QLatin1String("glBindProgramARB"));
-    glDeleteProgramsARB = (_glDeleteProgramsARB) m_context->getProcAddress(
-                QLatin1String("glDeleteProgramsARB"));
-    glGenProgramsARB = (_glGenProgramsARB) m_context->getProcAddress(
-                QLatin1String("glGenProgramsARB"));
-    glProgramLocalParameter4fARB = (_glProgramLocalParameter4fARB) m_context->getProcAddress(
-                QLatin1String("glProgramLocalParameter4fARB"));
-
-    m_imagePixelFormats
-            << QVideoFrame::Format_RGB32
-            << QVideoFrame::Format_BGR32
-            << QVideoFrame::Format_ARGB32
-            << QVideoFrame::Format_RGB24
-            << QVideoFrame::Format_BGR24
-            << QVideoFrame::Format_RGB565
-            << QVideoFrame::Format_AYUV444
-            << QVideoFrame::Format_YUV444
-            << QVideoFrame::Format_YV12
-            << QVideoFrame::Format_YUV420P;
-    m_glPixelFormats
-            << QVideoFrame::Format_RGB32
-            << QVideoFrame::Format_ARGB32;
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceArbFpPainter::start(const QVideoSurfaceFormat &format)
-{
-    Q_ASSERT(m_textureCount == 0);
-
-    QAbstractVideoSurface::Error error = QAbstractVideoSurface::NoError;
-
-    m_context->makeCurrent();
-
-    const char *program = 0;
-
-    if (format.handleType() == QAbstractVideoBuffer::NoHandle) {
-        switch (format.pixelFormat()) {
-        case QVideoFrame::Format_RGB32:
-            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            program = qt_arbfp_xrgbShaderProgram;
-            break;
-        case QVideoFrame::Format_BGR32:
-            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            program = qt_arbfp_rgbShaderProgram;
-            break;
-        case QVideoFrame::Format_ARGB32:
-            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            program = qt_arbfp_argbShaderProgram;
-            break;
-        case QVideoFrame::Format_RGB24:
-            initRgbTextureInfo(GL_RGB8, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            program = qt_arbfp_rgbShaderProgram;
-            break;
-        case QVideoFrame::Format_BGR24:
-            initRgbTextureInfo(GL_RGB8, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            program = qt_arbfp_xrgbShaderProgram;
-            break;
-        case QVideoFrame::Format_RGB565:
-            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, format.frameSize());
-            program = qt_arbfp_rgbShaderProgram;
-            break;
-        case QVideoFrame::Format_YUV444:
-            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
-            program = qt_arbfp_xyuvShaderProgram;
-            m_yuv = true;
-            break;
-        case QVideoFrame::Format_AYUV444:
-            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            program = qt_arbfp_ayuvShaderProgram;
-            m_yuv = true;
-            break;
-        case QVideoFrame::Format_YV12:
-            initYv12TextureInfo(format.frameSize());
-            program = qt_arbfp_yuvPlanarShaderProgram;
-            break;
-        case QVideoFrame::Format_YUV420P:
-            initYuv420PTextureInfo(format.frameSize());
-            program = qt_arbfp_yuvPlanarShaderProgram;
-            break;
-        default:
-            break;
-        }
-    } else if (format.handleType() == QAbstractVideoBuffer::GLTextureHandle) {
-        switch (format.pixelFormat()) {
-        case QVideoFrame::Format_RGB32:
-        case QVideoFrame::Format_ARGB32:
-            m_yuv = false;
-            m_textureCount = 1;
-            program = qt_arbfp_rgbShaderProgram;
-            break;
-        default:
-            break;
-        }
-    }
-
-    if (!program) {
-        error = QAbstractVideoSurface::UnsupportedFormatError;
-    } else {
-        glGenProgramsARB(1, &m_programId);
-
-        GLenum glError = glGetError();
-        if (glError != GL_NO_ERROR) {
-            qWarning("QPainterVideoSurface: ARBfb Shader allocation error %x", int(glError));
-            m_textureCount = 0;
-            m_programId = 0;
-
-            error = QAbstractVideoSurface::ResourceError;
-        } else {
-            glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, m_programId);
-            glProgramStringARB(
-                    GL_FRAGMENT_PROGRAM_ARB,
-                    GL_PROGRAM_FORMAT_ASCII_ARB,
-                    qstrlen(program),
-                    reinterpret_cast<const GLvoid *>(program));
-
-            if ((glError = glGetError()) != GL_NO_ERROR) {
-                const GLubyte* errorString = glGetString(GL_PROGRAM_ERROR_STRING_ARB);
-
-                qWarning("QPainterVideoSurface: ARBfp Shader compile error %x, %s",
-                         int(glError),
-                         reinterpret_cast<const char *>(errorString));
-                glDeleteProgramsARB(1, &m_programId);
-
-                m_textureCount = 0;
-                m_programId = 0;
-
-                error = QAbstractVideoSurface::ResourceError;
-            } else {
-                m_handleType = format.handleType();
-                m_scanLineDirection = format.scanLineDirection();
-                m_frameSize = format.frameSize();
-
-                if (m_handleType == QAbstractVideoBuffer::NoHandle)
-                    glGenTextures(m_textureCount, m_textureIds);
-            }
-        }
-    }
-
-    return error;
-}
-
-void QVideoSurfaceArbFpPainter::stop()
-{
-    m_context->makeCurrent();
-
-    if (m_handleType != QAbstractVideoBuffer::GLTextureHandle)
-        glDeleteTextures(m_textureCount, m_textureIds);
-    glDeleteProgramsARB(1, &m_programId);
-
-    m_textureCount = 0;
-    m_programId = 0;
-    m_handleType = QAbstractVideoBuffer::NoHandle;
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceArbFpPainter::paint(
-        const QRectF &target, QPainter *painter, const QRectF &source)
-{
-    if (m_frame.isValid()) {
-        bool stencilTestEnabled = glIsEnabled(GL_STENCIL_TEST);
-        bool scissorTestEnabled = glIsEnabled(GL_SCISSOR_TEST);
-
-        painter->beginNativePainting();
-
-        if (stencilTestEnabled)
-            glEnable(GL_STENCIL_TEST);
-        if (scissorTestEnabled)
-            glEnable(GL_SCISSOR_TEST);
-
-        const float txLeft = source.left() / m_frameSize.width();
-        const float txRight = source.right() / m_frameSize.width();
-        const float txTop = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
-                ? source.top() / m_frameSize.height()
-                : source.bottom() / m_frameSize.height();
-        const float txBottom = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
-                ? source.bottom() / m_frameSize.height()
-                : source.top() / m_frameSize.height();
-
-
-        const float tx_array[] =
-        {
-            txLeft , txBottom,
-            txRight, txBottom,
-            txLeft , txTop,
-            txRight, txTop
-        };
-        const float v_array[] =
-        {
-            float(target.left())     , float(target.bottom() + 1),
-            float(target.right() + 1), float(target.bottom() + 1),
-            float(target.left())     , float(target.top()),
-            float(target.right() + 1), float(target.top())
-        };
-
-        glEnable(GL_FRAGMENT_PROGRAM_ARB);
-        glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, m_programId);
-
-        glProgramLocalParameter4fARB(
-                GL_FRAGMENT_PROGRAM_ARB,
-                0,
-                m_colorMatrix(0, 0),
-                m_colorMatrix(0, 1),
-                m_colorMatrix(0, 2),
-                m_colorMatrix(0, 3));
-        glProgramLocalParameter4fARB(
-                GL_FRAGMENT_PROGRAM_ARB,
-                1,
-                m_colorMatrix(1, 0),
-                m_colorMatrix(1, 1),
-                m_colorMatrix(1, 2),
-                m_colorMatrix(1, 3));
-        glProgramLocalParameter4fARB(
-                GL_FRAGMENT_PROGRAM_ARB,
-                2,
-                m_colorMatrix(2, 0),
-                m_colorMatrix(2, 1),
-                m_colorMatrix(2, 2),
-                m_colorMatrix(2, 3));
-
-        glActiveTexture(GL_TEXTURE0);
-        glBindTexture(GL_TEXTURE_2D, m_textureIds[0]);
-
-        if (m_textureCount == 3) {
-            glActiveTexture(GL_TEXTURE1);
-            glBindTexture(GL_TEXTURE_2D, m_textureIds[1]);
-            glActiveTexture(GL_TEXTURE2);
-            glBindTexture(GL_TEXTURE_2D, m_textureIds[2]);
-            glActiveTexture(GL_TEXTURE0);
-        }
-
-        glVertexPointer(2, GL_FLOAT, 0, v_array);
-        glTexCoordPointer(2, GL_FLOAT, 0, tx_array);
-
-        glEnableClientState(GL_VERTEX_ARRAY);
-        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
-        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-
-        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-        glDisableClientState(GL_VERTEX_ARRAY);
-        glDisable(GL_FRAGMENT_PROGRAM_ARB);
-
-        painter->endNativePainting();
-    }
-    return QAbstractVideoSurface::NoError;
-}
-
-#endif
-
-static const char *qt_glsl_vertexShaderProgram =
-        "attribute highp vec4 vertexCoordArray;\n"
-        "attribute highp vec2 textureCoordArray;\n"
-        "uniform highp mat4 positionMatrix;\n"
-        "varying highp vec2 textureCoord;\n"
-        "void main(void)\n"
-        "{\n"
-        "   gl_Position = positionMatrix * vertexCoordArray;\n"
-        "   textureCoord = textureCoordArray;\n"
-        "}\n";
-
-// Paints an RGB32 frame
-static const char *qt_glsl_xrgbShaderProgram =
-        "uniform sampler2D texRgb;\n"
-        "uniform mediump mat4 colorMatrix;\n"
-        "varying highp vec2 textureCoord;\n"
-        "void main(void)\n"
-        "{\n"
-        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).bgr, 1.0);\n"
-        "    gl_FragColor = colorMatrix * color;\n"
-        "}\n";
-
-// Paints an ARGB frame.
-static const char *qt_glsl_argbShaderProgram =
-        "uniform sampler2D texRgb;\n"
-        "uniform mediump mat4 colorMatrix;\n"
-        "varying highp vec2 textureCoord;\n"
-        "void main(void)\n"
-        "{\n"
-        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).bgr, 1.0);\n"
-        "    color = colorMatrix * color;\n"
-        "    gl_FragColor = vec4(color.rgb, texture2D(texRgb, textureCoord.st).a);\n"
-        "}\n";
-
-// Paints an RGB(A) frame.
-static const char *qt_glsl_rgbShaderProgram =
-        "uniform sampler2D texRgb;\n"
-        "uniform mediump mat4 colorMatrix;\n"
-        "varying highp vec2 textureCoord;\n"
-        "void main(void)\n"
-        "{\n"
-        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).rgb, 1.0);\n"
-        "    color = colorMatrix * color;\n"
-        "    gl_FragColor = vec4(color.rgb, texture2D(texRgb, textureCoord.st).a);\n"
-        "}\n";
-
-// Paints a YUV420P or YV12 frame.
-static const char *qt_glsl_yuvPlanarShaderProgram =
-        "uniform sampler2D texY;\n"
-        "uniform sampler2D texU;\n"
-        "uniform sampler2D texV;\n"
-        "uniform mediump mat4 colorMatrix;\n"
-        "varying highp vec2 textureCoord;\n"
-        "void main(void)\n"
-        "{\n"
-        "    highp vec4 color = vec4(\n"
-        "           texture2D(texY, textureCoord.st).r,\n"
-        "           texture2D(texU, textureCoord.st).r,\n"
-        "           texture2D(texV, textureCoord.st).r,\n"
-        "           1.0);\n"
-        "    gl_FragColor = colorMatrix * color;\n"
-        "}\n";
-
-// Paints a YUV444 frame.
-static const char *qt_glsl_xyuvShaderProgram =
-        "uniform sampler2D texRgb;\n"
-        "uniform mediump mat4 colorMatrix;\n"
-        "varying highp vec2 textureCoord;\n"
-        "void main(void)\n"
-        "{\n"
-        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).gba, 1.0);\n"
-        "    gl_FragColor = colorMatrix * color;\n"
-        "}\n";
-
-// Paints a AYUV444 frame.
-static const char *qt_glsl_ayuvShaderProgram =
-        "uniform sampler2D texRgb;\n"
-        "uniform mediump mat4 colorMatrix;\n"
-        "varying highp vec2 textureCoord;\n"
-        "void main(void)\n"
-        "{\n"
-        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).gba, 1.0);\n"
-        "    color = colorMatrix * color;\n"
-        "    gl_FragColor = vec4(color.rgb, texture2D(texRgb, textureCoord.st).r);\n"
-        "}\n";
-
-class QVideoSurfaceGlslPainter : public QVideoSurfaceGLPainter
-{
-public:
-    QVideoSurfaceGlslPainter(QGLContext *context);
-
-    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
-    void stop();
-
-    QAbstractVideoSurface::Error paint(
-            const QRectF &target, QPainter *painter, const QRectF &source);
-
-private:
-    QGLShaderProgram m_program;
-    QSize m_frameSize;
-};
-
-QVideoSurfaceGlslPainter::QVideoSurfaceGlslPainter(QGLContext *context)
-    : QVideoSurfaceGLPainter(context)
-    , m_program(context)
-{
-    m_imagePixelFormats
-            << QVideoFrame::Format_RGB32
-            << QVideoFrame::Format_BGR32
-            << QVideoFrame::Format_ARGB32
-#ifndef QT_OPENGL_ES
-            << QVideoFrame::Format_RGB24
-            << QVideoFrame::Format_BGR24
-#endif
-            << QVideoFrame::Format_RGB565
-            << QVideoFrame::Format_YUV444
-            << QVideoFrame::Format_AYUV444
-            << QVideoFrame::Format_YV12
-            << QVideoFrame::Format_YUV420P;
-    m_glPixelFormats
-            << QVideoFrame::Format_RGB32
-            << QVideoFrame::Format_ARGB32;
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceGlslPainter::start(const QVideoSurfaceFormat &format)
-{
-    Q_ASSERT(m_textureCount == 0);
-
-    QAbstractVideoSurface::Error error = QAbstractVideoSurface::NoError;
-
-    m_context->makeCurrent();
-
-    const char *fragmentProgram = 0;
-
-    if (format.handleType() == QAbstractVideoBuffer::NoHandle) {
-        switch (format.pixelFormat()) {
-        case QVideoFrame::Format_RGB32:
-            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            fragmentProgram = qt_glsl_xrgbShaderProgram;
-            break;
-        case QVideoFrame::Format_BGR32:
-            initRgbTextureInfo(GL_RGB, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            fragmentProgram = qt_glsl_rgbShaderProgram;
-            break;
-        case QVideoFrame::Format_ARGB32:
-            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            fragmentProgram = qt_glsl_argbShaderProgram;
-            break;
-#ifndef QT_OPENGL_ES
-        case QVideoFrame::Format_RGB24:
-            initRgbTextureInfo(GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
-            fragmentProgram = qt_glsl_rgbShaderProgram;
-            break;
-        case QVideoFrame::Format_BGR24:
-            initRgbTextureInfo(GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
-            fragmentProgram = qt_glsl_argbShaderProgram;
-            break;
-#endif
-        case QVideoFrame::Format_RGB565:
-            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, format.frameSize());
-            fragmentProgram = qt_glsl_rgbShaderProgram;
-            break;
-        case QVideoFrame::Format_YUV444:
-            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
-            fragmentProgram = qt_glsl_xyuvShaderProgram;
-            m_yuv = true;
-            break;
-        case QVideoFrame::Format_AYUV444:
-            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
-            fragmentProgram = qt_glsl_ayuvShaderProgram;
-            m_yuv = true;
-            break;
-        case QVideoFrame::Format_YV12:
-            initYv12TextureInfo(format.frameSize());
-            fragmentProgram = qt_glsl_yuvPlanarShaderProgram;
-            break;
-        case QVideoFrame::Format_YUV420P:
-            initYuv420PTextureInfo(format.frameSize());
-            fragmentProgram = qt_glsl_yuvPlanarShaderProgram;
-            break;
-        default:
-            break;
-        }
-    } else if (format.handleType() == QAbstractVideoBuffer::GLTextureHandle) {
-        switch (format.pixelFormat()) {
-        case QVideoFrame::Format_RGB32:
-        case QVideoFrame::Format_ARGB32:
-            m_yuv = false;
-            m_textureCount = 1;
-            fragmentProgram = qt_glsl_rgbShaderProgram;
-            break;
-        default:
-            break;
-        }
-    }
-
-    if (!fragmentProgram) {
-        error = QAbstractVideoSurface::UnsupportedFormatError;
-    } else if (!m_program.addShaderFromSourceCode(QGLShader::Vertex, qt_glsl_vertexShaderProgram)) {
-        qWarning("QPainterVideoSurface: Vertex shader compile error %s",
-                 qPrintable(m_program.log()));
-        error = QAbstractVideoSurface::ResourceError;
-    } else if (!m_program.addShaderFromSourceCode(QGLShader::Fragment, fragmentProgram)) {
-        qWarning("QPainterVideoSurface: Shader compile error %s", qPrintable(m_program.log()));
-        error = QAbstractVideoSurface::ResourceError;
-        m_program.removeAllShaders();
-    } else if(!m_program.link()) {
-        qWarning("QPainterVideoSurface: Shader link error %s", qPrintable(m_program.log()));
-        m_program.removeAllShaders();
-        error = QAbstractVideoSurface::ResourceError;
-    } else {
-        m_handleType = format.handleType();
-        m_scanLineDirection = format.scanLineDirection();
-        m_frameSize = format.frameSize();
-
-        if (m_handleType == QAbstractVideoBuffer::NoHandle)
-            glGenTextures(m_textureCount, m_textureIds);
-    }
-
-    return error;
-}
-
-void QVideoSurfaceGlslPainter::stop()
-{
-    m_context->makeCurrent();
-
-    if (m_handleType != QAbstractVideoBuffer::GLTextureHandle)
-        glDeleteTextures(m_textureCount, m_textureIds);
-    m_program.removeAllShaders();
-
-    m_textureCount = 0;
-    m_handleType = QAbstractVideoBuffer::NoHandle;
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceGlslPainter::paint(
-        const QRectF &target, QPainter *painter, const QRectF &source)
-{
-    if (m_frame.isValid()) {
-        bool stencilTestEnabled = glIsEnabled(GL_STENCIL_TEST);
-        bool scissorTestEnabled = glIsEnabled(GL_SCISSOR_TEST);
-
-        painter->beginNativePainting();
-
-        if (stencilTestEnabled)
-            glEnable(GL_STENCIL_TEST);
-        if (scissorTestEnabled)
-            glEnable(GL_SCISSOR_TEST);
-
-        const int width = QGLContext::currentContext()->device()->width();
-        const int height = QGLContext::currentContext()->device()->height();
-
-        const QTransform transform = painter->deviceTransform();
-
-        const GLfloat wfactor = 2.0 / width;
-        const GLfloat hfactor = -2.0 / height;
-
-        const GLfloat positionMatrix[4][4] =
-        {
-            {
-                /*(0,0)*/ GLfloat(wfactor * transform.m11() - transform.m13()),
-                /*(0,1)*/ GLfloat(hfactor * transform.m12() + transform.m13()),
-                /*(0,2)*/ 0.0,
-                /*(0,3)*/ GLfloat(transform.m13())
-            }, {
-                /*(1,0)*/ GLfloat(wfactor * transform.m21() - transform.m23()),
-                /*(1,1)*/ GLfloat(hfactor * transform.m22() + transform.m23()),
-                /*(1,2)*/ 0.0,
-                /*(1,3)*/ GLfloat(transform.m23())
-            }, {
-                /*(2,0)*/ 0.0,
-                /*(2,1)*/ 0.0,
-                /*(2,2)*/ -1.0,
-                /*(2,3)*/ 0.0
-            }, {
-                /*(3,0)*/ GLfloat(wfactor * transform.dx() - transform.m33()),
-                /*(3,1)*/ GLfloat(hfactor * transform.dy() + transform.m33()),
-                /*(3,2)*/ 0.0,
-                /*(3,3)*/ GLfloat(transform.m33())
-            }
-        };
-
-        const GLfloat vertexCoordArray[] =
-        {
-            GLfloat(target.left())     , GLfloat(target.bottom() + 1),
-            GLfloat(target.right() + 1), GLfloat(target.bottom() + 1),
-            GLfloat(target.left())     , GLfloat(target.top()),
-            GLfloat(target.right() + 1), GLfloat(target.top())
-        };
-
-        const GLfloat txLeft = source.left() / m_frameSize.width();
-        const GLfloat txRight = source.right() / m_frameSize.width();
-        const GLfloat txTop = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
-                ? source.top() / m_frameSize.height()
-                : source.bottom() / m_frameSize.height();
-        const GLfloat txBottom = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
-                ? source.bottom() / m_frameSize.height()
-                : source.top() / m_frameSize.height();
-
-        const GLfloat textureCoordArray[] =
-        {
-            txLeft , txBottom,
-            txRight, txBottom,
-            txLeft , txTop,
-            txRight, txTop
-        };
-
-        m_program.bind();
-
-        m_program.enableAttributeArray("vertexCoordArray");
-        m_program.enableAttributeArray("textureCoordArray");
-        m_program.setAttributeArray("vertexCoordArray", vertexCoordArray, 2);
-        m_program.setAttributeArray("textureCoordArray", textureCoordArray, 2);
-        m_program.setUniformValue("positionMatrix", positionMatrix);
-
-        if (m_textureCount == 3) {
-            glActiveTexture(GL_TEXTURE0);
-            glBindTexture(GL_TEXTURE_2D, m_textureIds[0]);
-            glActiveTexture(GL_TEXTURE1);
-            glBindTexture(GL_TEXTURE_2D, m_textureIds[1]);
-            glActiveTexture(GL_TEXTURE2);
-            glBindTexture(GL_TEXTURE_2D, m_textureIds[2]);
-            glActiveTexture(GL_TEXTURE0);
-
-            m_program.setUniformValue("texY", GLint(0));
-            m_program.setUniformValue("texU", GLint(1));
-            m_program.setUniformValue("texV", GLint(2));
-        } else {
-            glActiveTexture(GL_TEXTURE0);
-            glBindTexture(GL_TEXTURE_2D, m_textureIds[0]);
-
-            m_program.setUniformValue("texRgb", GLint(0));
-        }
-        m_program.setUniformValue("colorMatrix", m_colorMatrix);
-
-        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-
-        m_program.release();
-
-        painter->endNativePainting();
-    }
-    return QAbstractVideoSurface::NoError;
-}
-
-#endif
-
-/*!
-    \class QPainterVideoSurface
-    \internal
-*/
-
-/*!
-*/
-QPainterVideoSurface::QPainterVideoSurface(QObject *parent)
-    : QAbstractVideoSurface(parent)
-    , m_painter(0)
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-    , m_glContext(0)
-    , m_shaderTypes(NoShaders)
-    , m_shaderType(NoShaders)
-#endif
-    , m_brightness(0)
-    , m_contrast(0)
-    , m_hue(0)
-    , m_saturation(0)
-    , m_pixelFormat(QVideoFrame::Format_Invalid)
-    , m_colorsDirty(true)
-    , m_ready(false)
-{
-}
-
-/*!
-*/
-QPainterVideoSurface::~QPainterVideoSurface()
-{
-    if (isActive())
-        m_painter->stop();
-
-    delete m_painter;
-}
-
-/*!
-*/
-QList<QVideoFrame::PixelFormat> QPainterVideoSurface::supportedPixelFormats(
-        QAbstractVideoBuffer::HandleType handleType) const
-{
-    if (!m_painter)
-        const_cast<QPainterVideoSurface *>(this)->createPainter();
-
-    return m_painter->supportedPixelFormats(handleType);
-}
-
-/*!
-*/
-bool QPainterVideoSurface::isFormatSupported(
-        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const
-{
-    if (!m_painter)
-        const_cast<QPainterVideoSurface *>(this)->createPainter();
-
-    return m_painter->isFormatSupported(format, similar);
-}
-
-/*!
-*/
-bool QPainterVideoSurface::start(const QVideoSurfaceFormat &format)
-{
-    if (isActive())
-        m_painter->stop();
-
-    if (!m_painter)
-        createPainter();
-
-    if (format.frameSize().isEmpty()) {
-        setError(UnsupportedFormatError);
-    } else {
-        QAbstractVideoSurface::Error error = m_painter->start(format);
-
-        if (error != QAbstractVideoSurface::NoError) {
-            setError(error);
-        } else {
-            m_pixelFormat = format.pixelFormat();
-            m_frameSize = format.frameSize();
-            m_sourceRect = format.viewport();
-            m_colorsDirty = true;
-            m_ready = true;
-
-            return QAbstractVideoSurface::start(format);
-        }
-    }
-
-    QAbstractVideoSurface::stop();
-
-    return false;
-}
-
-/*!
-*/
-void QPainterVideoSurface::stop()
-{
-    if (isActive()) {
-        m_painter->stop();
-        m_ready = false;
-
-        QAbstractVideoSurface::stop();
-    }
-}
-
-/*!
-*/
-bool QPainterVideoSurface::present(const QVideoFrame &frame)
-{
-    if (!m_ready) {
-        if (!isActive())
-            setError(StoppedError);
-    } else if (frame.isValid() 
-            && (frame.pixelFormat() != m_pixelFormat || frame.size() != m_frameSize)) {
-        setError(IncorrectFormatError);
-
-        stop();
-    } else {
-        QAbstractVideoSurface::Error error = m_painter->setCurrentFrame(frame);
-
-        if (error != QAbstractVideoSurface::NoError) {
-            setError(error);
-
-            stop();
-        } else {
-            m_ready = false;
-
-            emit frameChanged();
-
-            return true;
-        }
-    }
-    return false;
-}
-
-/*!
-*/
-int QPainterVideoSurface::brightness() const
-{
-    return m_brightness;
-}
-
-/*!
-*/
-void QPainterVideoSurface::setBrightness(int brightness)
-{
-    m_brightness = brightness;
-
-    m_colorsDirty = true;
-}
-
-/*!
-*/
-int QPainterVideoSurface::contrast() const
-{
-    return m_contrast;
-}
-
-/*!
-*/
-void QPainterVideoSurface::setContrast(int contrast)
-{
-    m_contrast = contrast;
-
-    m_colorsDirty = true;
-}
-
-/*!
-*/
-int QPainterVideoSurface::hue() const
-{
-    return m_hue;
-}
-
-/*!
-*/
-void QPainterVideoSurface::setHue(int hue)
-{
-    m_hue = hue;
-
-    m_colorsDirty = true;
-}
-
-/*!
-*/
-int QPainterVideoSurface::saturation() const
-{
-    return m_saturation;
-}
-
-/*!
-*/
-void QPainterVideoSurface::setSaturation(int saturation)
-{
-    m_saturation = saturation;
-
-    m_colorsDirty = true;
-}
-
-/*!
-*/
-bool QPainterVideoSurface::isReady() const
-{
-    return m_ready;
-}
-
-/*!
-*/
-void QPainterVideoSurface::setReady(bool ready)
-{
-    m_ready = ready;
-}
-
-/*!
-*/
-void QPainterVideoSurface::paint(QPainter *painter, const QRectF &target, const QRectF &source)
-{
-    if (!isActive()) {
-        painter->fillRect(target, QBrush(Qt::black));
-    } else {
-        if (m_colorsDirty) {
-            m_painter->updateColors(m_brightness, m_contrast, m_hue, m_saturation);
-            m_colorsDirty = false;
-        }
-
-        const QRectF sourceRect(
-                m_sourceRect.x() + m_sourceRect.width() * source.x(),
-                m_sourceRect.y() + m_sourceRect.height() * source.y(),
-                m_sourceRect.width() * source.width(),
-                m_sourceRect.height() * source.height());
-
-        QAbstractVideoSurface::Error error = m_painter->paint(target, painter, sourceRect);
-
-        if (error != QAbstractVideoSurface::NoError) {
-            setError(error);
-
-            stop();
-        }
-    }
-}
-
-/*!
-    \fn QPainterVideoSurface::frameChanged()
-*/
-
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-
-/*!
-*/
-const QGLContext *QPainterVideoSurface::glContext() const
-{
-    return m_glContext;
-}
-
-/*!
-*/
-void QPainterVideoSurface::setGLContext(QGLContext *context)
-{
-    if (m_glContext == context)
-        return;
-
-    m_glContext = context;
-
-    m_shaderTypes = NoShaders;
-
-    if (m_glContext) {
-        m_glContext->makeCurrent();
-
-        const QByteArray extensions(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS)));
-#ifndef QT_OPENGL_ES
-
-        if (extensions.contains("ARB_fragment_program"))
-            m_shaderTypes |= FragmentProgramShader;
-#endif
-
-        if (QGLShaderProgram::hasOpenGLShaderPrograms(m_glContext)
-                && extensions.contains("ARB_shader_objects"))
-            m_shaderTypes |= GlslShader;
-    }
-
-    ShaderType type = (m_shaderType & m_shaderTypes)
-            ? m_shaderType
-            : NoShaders;
-
-    if (type != m_shaderType || type != NoShaders) {
-        m_shaderType = type;
-
-        if (isActive()) {
-            m_painter->stop();
-            delete m_painter;
-            m_painter = 0;
-            m_ready = false;
-
-            setError(ResourceError);
-            QAbstractVideoSurface::stop();
-        }
-        emit supportedFormatsChanged();
-    }
-}
-
-/*!
-    \enum QPainterVideoSurface::ShaderType
-
-    \value NoShaders
-    \value FragmentProgramShader
-    \value HlslShader
-*/
-
-/*!
-    \typedef QPainterVideoSurface::ShaderTypes
-*/
-
-/*!
-*/
-QPainterVideoSurface::ShaderTypes QPainterVideoSurface::supportedShaderTypes() const
-{
-    return m_shaderTypes;
-}
-
-/*!
-*/
-QPainterVideoSurface::ShaderType QPainterVideoSurface::shaderType() const
-{
-    return m_shaderType;
-}
-
-/*!
-*/
-void QPainterVideoSurface::setShaderType(ShaderType type)
-{
-    if (!(type & m_shaderTypes))
-        type = NoShaders;
-
-    if (type != m_shaderType) {
-        m_shaderType = type;
-
-        if (isActive()) {
-            m_painter->stop();
-            delete m_painter;
-            m_painter = 0;
-            m_ready = false;
-
-            setError(ResourceError);
-            QAbstractVideoSurface::stop();
-        } else {
-            delete m_painter;
-            m_painter = 0;
-        }
-        emit supportedFormatsChanged();
-    }
-}
-
-#endif
-
-void QPainterVideoSurface::createPainter()
-{
-    Q_ASSERT(!m_painter);
-
-#ifdef Q_WS_MAC
-    if (m_glContext)
-        m_glContext->makeCurrent();
-
-    m_painter = new QVideoSurfaceCoreGraphicsPainter(m_glContext != 0);
-    return;
-#endif
-
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-    switch (m_shaderType) {
-#ifndef QT_OPENGL_ES
-    case FragmentProgramShader:
-        Q_ASSERT(m_glContext);
-        m_glContext->makeCurrent();
-        m_painter = new QVideoSurfaceArbFpPainter(m_glContext);
-        break;
-#endif
-    case GlslShader:
-        Q_ASSERT(m_glContext);
-        m_glContext->makeCurrent();
-        m_painter = new QVideoSurfaceGlslPainter(m_glContext);
-        break;
-    default:
-        m_painter = new QVideoSurfaceRasterPainter;
-        break;
-    }
-#else
-    m_painter = new QVideoSurfaceRasterPainter;
-#endif
-}
-
-QT_END_NAMESPACE
-
-#include "moc_qpaintervideosurface_p.cpp"
-
-
diff --git a/src/multimedia/base/qpaintervideosurface_mac.mm b/src/multimedia/base/qpaintervideosurface_mac.mm
deleted file mode 100644
index 1154f86..0000000
--- a/src/multimedia/base/qpaintervideosurface_mac.mm
+++ /dev/null
@@ -1,283 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qpaintervideosurface_mac_p.h"
-
-#include <QtCore/qdatetime.h>
-
-#include <qmath.h>
-
-#include <qpainter.h>
-#include <qvariant.h>
-#include <QtMultimedia/qvideosurfaceformat.h>
-
-#include <QtDebug>
-
-#include <QuartzCore/CIContext.h>
-#include <CGLCurrent.h>
-#include <gl.h>
-
-QT_BEGIN_NAMESPACE
-
-extern CGContextRef qt_mac_cg_context(const QPaintDevice *pdev); //qpaintdevice_mac.cpp
-
-QVideoSurfaceCoreGraphicsPainter::QVideoSurfaceCoreGraphicsPainter(bool glSupported)
-    : ciContext(0)
-    , m_imageFormat(QImage::Format_Invalid)
-    , m_scanLineDirection(QVideoSurfaceFormat::TopToBottom)
-{
-    //qDebug() << "QVideoSurfaceCoreGraphicsPainter, GL supported:" << glSupported;
-    ciContext = 0;
-    m_imagePixelFormats
-        << QVideoFrame::Format_RGB32;
-
-    m_supportedHandles
-            << QAbstractVideoBuffer::NoHandle
-            << QAbstractVideoBuffer::CoreImageHandle;
-
-    if (glSupported)
-            m_supportedHandles << QAbstractVideoBuffer::GLTextureHandle;
-}
-
-QVideoSurfaceCoreGraphicsPainter::~QVideoSurfaceCoreGraphicsPainter()
-{
-    [(CIContext*)ciContext release];
-}
-
-QList<QVideoFrame::PixelFormat> QVideoSurfaceCoreGraphicsPainter::supportedPixelFormats(
-        QAbstractVideoBuffer::HandleType handleType) const
-{
-    return m_supportedHandles.contains(handleType)
-        ? m_imagePixelFormats
-        : QList<QVideoFrame::PixelFormat>();
-}
-
-bool QVideoSurfaceCoreGraphicsPainter::isFormatSupported(
-        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *) const
-{
-    return m_supportedHandles.contains(format.handleType())
-            && m_imagePixelFormats.contains(format.pixelFormat())
-            && !format.frameSize().isEmpty();
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceCoreGraphicsPainter::start(const QVideoSurfaceFormat &format)
-{
-    m_frame = QVideoFrame();
-    m_imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
-    m_imageSize = format.frameSize();
-    m_scanLineDirection = format.scanLineDirection();
-
-    return m_supportedHandles.contains(format.handleType())
-            && m_imageFormat != QImage::Format_Invalid
-            && !m_imageSize.isEmpty()
-            ? QAbstractVideoSurface::NoError
-            : QAbstractVideoSurface::UnsupportedFormatError;
-}
-
-void QVideoSurfaceCoreGraphicsPainter::stop()
-{
-    m_frame = QVideoFrame();
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceCoreGraphicsPainter::setCurrentFrame(const QVideoFrame &frame)
-{
-    m_frame = frame;
-
-    return QAbstractVideoSurface::NoError;
-}
-
-QAbstractVideoSurface::Error QVideoSurfaceCoreGraphicsPainter::paint(
-            const QRectF &target, QPainter *painter, const QRectF &source)
-{
-    if (m_frame.handleType() == QAbstractVideoBuffer::CoreImageHandle) {
-        if (painter->paintEngine()->type() == QPaintEngine::CoreGraphics ) {
-
-            CIImage *img = (CIImage*)(m_frame.handle().value<void*>());
-
-            if (img) {
-                CGContextRef cgContext = qt_mac_cg_context(painter->device());
-
-                if (cgContext) {
-                    painter->beginNativePainting();
-
-                    CGRect sRect = CGRectMake(source.x(), source.y(), source.width(), source.height());
-                    CGRect dRect = CGRectMake(target.x(), target.y(), target.width(), target.height());
-
-                    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCIImage:img];
-
-                    if (m_scanLineDirection == QVideoSurfaceFormat::TopToBottom) {
-                        CGContextSaveGState( cgContext );
-                        CGContextTranslateCTM(cgContext, 0, dRect.origin.y + CGRectGetMaxY(dRect));
-                        CGContextScaleCTM(cgContext, 1, -1);
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4)
-    if (QSysInfo::MacintoshVersion > QSysInfo::MV_10_4) {
-                        CGContextDrawImage(cgContext, dRect, [bitmap CGImage]);
-    }
-#endif
-
-                        CGContextRestoreGState(cgContext);
-                    } else {
-#if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4)
-    if (QSysInfo::MacintoshVersion > QSysInfo::MV_10_4) {
-                        CGContextDrawImage(cgContext, dRect, [bitmap CGImage]);
-    }
-#endif
-                    }
-
-                    [bitmap release];
-
-                    painter->endNativePainting();
-
-                    return QAbstractVideoSurface::NoError;
-                }
-            }
-        } else if (painter->paintEngine()->type() == QPaintEngine::OpenGL2 ||
-                   painter->paintEngine()->type() == QPaintEngine::OpenGL) {
-            CIImage *img = (CIImage*)(m_frame.handle().value<void*>());
-
-            if (img) {
-                CGLContextObj cglContext = CGLGetCurrentContext();
-
-                if (cglContext) {
-
-                    if (!ciContext) {
-                        CGLContextObj cglContext = CGLGetCurrentContext();
-                        NSOpenGLPixelFormat *nsglPixelFormat = [NSOpenGLView defaultPixelFormat];
-                        CGLPixelFormatObj cglPixelFormat = static_cast<CGLPixelFormatObj>([nsglPixelFormat CGLPixelFormatObj]);
-
-                        ciContext = [CIContext contextWithCGLContext:cglContext
-                                     pixelFormat:cglPixelFormat
-                                         options:nil];
-
-                        [(CIContext*)ciContext retain];
-                    }
-
-                    CGRect sRect = CGRectMake(source.x(), source.y(), source.width(), source.height());
-                    CGRect dRect = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom ?
-                                   CGRectMake(target.x(), target.y()+target.height(), target.width(), -target.height()) :
-                                   CGRectMake(target.x(), target.y(), target.width(), target.height());
-
-
-                    painter->beginNativePainting();
-
-                    [(CIContext*)ciContext drawImage:img inRect:dRect fromRect:sRect];
-
-                    painter->endNativePainting();
-
-                    return QAbstractVideoSurface::NoError;
-                }
-            }
-        }
-    }
-
-    if (m_frame.handleType() == QAbstractVideoBuffer::GLTextureHandle &&
-               (painter->paintEngine()->type() == QPaintEngine::OpenGL2 ||
-                painter->paintEngine()->type() == QPaintEngine::OpenGL)) {
-
-        painter->beginNativePainting();
-            GLuint texture = m_frame.handle().toUInt();
-
-            glDisable(GL_CULL_FACE);
-            glEnable(GL_TEXTURE_2D);
-
-            glBindTexture(GL_TEXTURE_2D, texture);
-            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
-            const float txLeft = source.left() / m_frame.width();
-            const float txRight = source.right() / m_frame.width();
-            const float txTop = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
-                    ? source.top() / m_frame.height()
-                    : source.bottom() / m_frame.height();
-            const float txBottom = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
-                    ? source.bottom() / m_frame.height()
-                    : source.top() / m_frame.height();
-
-            glBegin(GL_QUADS);
-                QRectF rect = target;
-                glTexCoord2f(txLeft, txBottom);
-                glVertex2f(rect.topLeft().x(), rect.topLeft().y());
-                glTexCoord2f(txRight, txBottom);
-                glVertex2f(rect.topRight().x() + 1, rect.topRight().y());
-                glTexCoord2f(txRight, txTop);
-                glVertex2f(rect.bottomRight().x() + 1, rect.bottomRight().y() + 1);
-                glTexCoord2f(txLeft, txTop);
-                glVertex2f(rect.bottomLeft().x(), rect.bottomLeft().y() + 1);
-            glEnd();
-        painter->endNativePainting();
-
-        return QAbstractVideoSurface::NoError;
-    }
-
-    //fallback case, software rendering
-    if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
-        QImage image(
-                m_frame.bits(),
-                m_imageSize.width(),
-                m_imageSize.height(),
-                m_frame.bytesPerLine(),
-                m_imageFormat);
-
-        if (m_scanLineDirection == QVideoSurfaceFormat::BottomToTop) {
-            const QTransform oldTransform = painter->transform();
-
-            painter->scale(1, -1);
-            painter->translate(0, -target.bottom());
-            painter->drawImage(
-                QRectF(target.x(), 0, target.width(), target.height()), image, source);
-            painter->setTransform(oldTransform);
-        } else {
-            painter->drawImage(target, image, source);
-        }
-
-        m_frame.unmap();
-    } else {
-        painter->fillRect(target, Qt::black);
-    }
-    return QAbstractVideoSurface::NoError;
-}
-
-void QVideoSurfaceCoreGraphicsPainter::updateColors(int, int, int, int)
-{
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/base/qpaintervideosurface_mac_p.h b/src/multimedia/base/qpaintervideosurface_mac_p.h
deleted file mode 100644
index 64442ed..0000000
--- a/src/multimedia/base/qpaintervideosurface_mac_p.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QPAINTERVIDEOSURFACE_MAC_P_H
-#define QPAINTERVIDEOSURFACE_MAC_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qpaintervideosurface_p.h"
-#include <QtMultimedia/qvideosurfaceformat.h>
-#include <QtMultimedia/qvideoframe.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QVideoSurfaceCoreGraphicsPainter : public QVideoSurfacePainter
-{
-public:
-    QVideoSurfaceCoreGraphicsPainter(bool glSupported);
-    ~QVideoSurfaceCoreGraphicsPainter();
-
-    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
-            QAbstractVideoBuffer::HandleType handleType) const;
-
-    bool isFormatSupported(
-            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const;
-
-    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
-    void stop();
-
-    QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame);
-
-    QAbstractVideoSurface::Error paint(
-            const QRectF &target, QPainter *painter, const QRectF &source);
-
-    void updateColors(int brightness, int contrast, int hue, int saturation);
-
-private:
-    void* ciContext;
-    QList<QVideoFrame::PixelFormat> m_imagePixelFormats;
-    QVideoFrame m_frame;
-    QSize m_imageSize;
-    QImage::Format m_imageFormat;
-    QVector<QAbstractVideoBuffer::HandleType> m_supportedHandles;
-    QVideoSurfaceFormat::Direction m_scanLineDirection;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qpaintervideosurface_p.h b/src/multimedia/base/qpaintervideosurface_p.h
deleted file mode 100644
index caba3ba..0000000
--- a/src/multimedia/base/qpaintervideosurface_p.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QPAINTERVIDEOSURFACE_P_H
-#define QPAINTERVIDEOSURFACE_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qsize.h>
-#include <QtGui/qimage.h>
-#include <QtGui/qmatrix4x4.h>
-#include <QtGui/qpaintengine.h>
-#include <QtMultimedia/qabstractvideosurface.h>
-#include <QtMultimedia/qvideoframe.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QGLContext;
-
-class QVideoSurfacePainter
-{
-public:
-    virtual ~QVideoSurfacePainter();
-
-    virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(
-            QAbstractVideoBuffer::HandleType handleType) const = 0;
-
-    virtual bool isFormatSupported(
-            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const = 0;
-
-    virtual QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format) = 0;
-    virtual void stop() = 0;
-
-    virtual QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame) = 0;
-
-    virtual QAbstractVideoSurface::Error paint(
-            const QRectF &target, QPainter *painter, const QRectF &source) = 0;
-
-    virtual void updateColors(int brightness, int contrast, int hue, int saturation) = 0;
-};
-
-class Q_MULTIMEDIA_EXPORT QPainterVideoSurface : public QAbstractVideoSurface
-{
-    Q_OBJECT
-public:
-    explicit QPainterVideoSurface(QObject *parent = 0);
-    ~QPainterVideoSurface();
-
-    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
-            QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const;
-
-    bool isFormatSupported(
-            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar = 0) const;
-
-    bool start(const QVideoSurfaceFormat &format);
-    void stop();
-
-    bool present(const QVideoFrame &frame);
-
-    int brightness() const;
-    void setBrightness(int brightness);
-
-    int contrast() const;
-    void setContrast(int contrast);
-
-    int hue() const;
-    void setHue(int hue);
-
-    int saturation() const;
-    void setSaturation(int saturation);
-
-    bool isReady() const;
-    void setReady(bool ready);
-
-    void paint(QPainter *painter, const QRectF &target, const QRectF &source = QRectF(0, 0, 1, 1));
-
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-    const QGLContext *glContext() const;
-    void setGLContext(QGLContext *context);
-
-    enum ShaderType
-    {
-        NoShaders = 0x00,
-        FragmentProgramShader = 0x01,
-        GlslShader = 0x02
-    };
-
-    Q_DECLARE_FLAGS(ShaderTypes, ShaderType)
-
-    ShaderTypes supportedShaderTypes() const;
-
-    ShaderType shaderType() const;
-    void setShaderType(ShaderType type);
-#endif
-
-Q_SIGNALS:
-    void frameChanged();
-
-private:
-    void createPainter();
-
-    QVideoSurfacePainter *m_painter;
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-    QGLContext *m_glContext;
-    ShaderTypes m_shaderTypes;
-    ShaderType m_shaderType;
-#endif
-    int m_brightness;
-    int m_contrast;
-    int m_hue;
-    int m_saturation;
-
-    QVideoFrame::PixelFormat m_pixelFormat;
-    QSize m_frameSize;
-    QRect m_sourceRect;
-    bool m_colorsDirty;
-    bool m_ready;
-};
-
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-Q_DECLARE_OPERATORS_FOR_FLAGS(QPainterVideoSurface::ShaderTypes)
-#endif
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qtmedianamespace.h b/src/multimedia/base/qtmedianamespace.h
deleted file mode 100644
index 1e04da8..0000000
--- a/src/multimedia/base/qtmedianamespace.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QTMEDIANAMESPACE_H
-#define QTMEDIANAMESPACE_H
-
-#include <QtCore/qpair.h>
-#include <QtCore/qmetatype.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-namespace QtMultimedia
-{
-    enum MetaData
-    {
-        // Common
-        Title,
-        SubTitle,
-        Author,
-        Comment,
-        Description,
-        Category,
-        Genre,
-        Year,
-        Date,
-        UserRating,
-        Keywords,
-        Language,
-        Publisher,
-        Copyright,
-        ParentalRating,
-        RatingOrganisation,
-
-        // Media
-        Size,
-        MediaType,
-        Duration,
-
-        // Audio
-        AudioBitRate,
-        AudioCodec,
-        AverageLevel,
-        ChannelCount,
-        PeakValue,
-        SampleRate,
-
-        // Music
-        AlbumTitle,
-        AlbumArtist,
-        ContributingArtist,
-        Composer,
-        Conductor,
-        Lyrics,
-        Mood,
-        TrackNumber,
-        TrackCount,
-
-        CoverArtUrlSmall,
-        CoverArtUrlLarge,
-
-        // Image/Video
-        Resolution,
-        PixelAspectRatio,
-
-        // Video
-        VideoFrameRate,
-        VideoBitRate,
-        VideoCodec,
-
-        PosterUrl,
-
-        // Movie
-        ChapterNumber,
-        Director,
-        LeadPerformer,
-        Writer,
-
-        // Photos
-        CameraManufacturer,
-        CameraModel,
-        Event,
-        Subject,
-        Orientation,
-        ExposureTime,
-        FNumber,
-        ExposureProgram,
-        ISOSpeedRatings,
-        ExposureBiasValue,
-        DateTimeOriginal,
-        DateTimeDigitized,
-        SubjectDistance,
-        MeteringMode,
-        LightSource,
-        Flash,
-        FocalLength,
-        ExposureMode,
-        WhiteBalance,
-        DigitalZoomRatio,
-        FocalLengthIn35mmFilm,
-        SceneCaptureType,
-        GainControl,
-        Contrast,
-        Saturation,
-        Sharpness,
-        DeviceSettingDescription,
-
-        PosterImage,
-        CoverArtImage,
-        ThumbnailImage
-
-    };
-
-    enum SupportEstimate
-    {
-        NotSupported,
-        MaybeSupported,
-        ProbablySupported,
-        PreferredService
-    };
-
-    enum EncodingQuality
-    {
-        VeryLowQuality,
-        LowQuality,
-        NormalQuality,
-        HighQuality,
-        VeryHighQuality
-    };
-
-    enum EncodingMode
-    {
-        ConstantQualityEncoding,
-        ConstantBitRateEncoding,
-        AverageBitRateEncoding,
-        TwoPassEncoding
-    };
-
-    enum AvailabilityError
-    {
-        NoError,
-        ServiceMissingError,
-        BusyError,
-        ResourceError
-    };
-
-}
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qtmedianamespace.qdoc b/src/multimedia/base/qtmedianamespace.qdoc
deleted file mode 100644
index 277b1a5..0000000
--- a/src/multimedia/base/qtmedianamespace.qdoc
+++ /dev/null
@@ -1,214 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-    \namespace QtMultimedia
-    \ingroup multimedia
-
-    \brief The QtMultimedia namespace contains miscellaneous identifiers used
-    throughout the Qt Multimedia library.
-*/
-
-/*!
-    \enum QtMultimedia::MetaData
-
-    This enum provides identifiers for meta-data attributes.
-
-    Common attributes
-    \value Title The title of the media.  QString.
-    \value SubTitle The sub-title of the media. QString.
-    \value Author The authors of the media. QStringList.
-    \value Comment A user comment about the media. QString.
-    \value Description A description of the media.  QString
-    \value Category The category of the media.  QStringList.
-    \value Genre The genre of the media.  QStringList.
-    \value Year The year of release of the media.  int.
-    \value Date The date of the media. QDate.
-    \value UserRating A user rating of the media. int [0..100].
-    \value Keywords A list of keywords describing the media.  QStringList.
-    \value Language The language of media, as an ISO 639-2 code.
-
-    \value Publisher The publisher of the media.  QString.
-    \value Copyright The media's copyright notice.  QString.
-    \value ParentalRating  The parental rating of the media.  QString.
-    \value RatingOrganisation The organisation responsible for the parental rating of the media.
-    QString.
-
-    Media attributes
-    \value Size The size in bytes of the media. qint64
-    \value MediaType The type of the media (audio, video, etc).  QString.
-    \value Duration The duration in millseconds of the media.  qint64.
-
-    Audio attributes
-    \value AudioBitRate The bit rate of the media's audio stream in bits per second.  int.
-    \value AudioCodec The codec of the media's audio stream.  QString.
-    \value AverageLevel The average volume level of the media.  int.
-    \value ChannelCount The number of channels in the media's audio stream. int.
-    \value PeakValue The peak volume of the media's audio stream. int
-    \value SampleRate The sample rate of the media's audio stream in hertz. int
-
-    Music attributes
-    \value AlbumTitle The title of the album the media belongs to.  QString.
-    \value AlbumArtist The principal artist of the album the media belongs to.  QString.
-    \value ContributingArtist The artists contributing to the media.  QStringList.
-    \value Composer The composer of the media.  QStringList.
-    \value Conductor The conductor of the media. QString.
-    \value Lyrics The lyrics to the media. QString.
-    \value Mood The mood of the media.  QString.
-    \value TrackNumber The track number of the media.  int.
-    \value TrackCount The number of tracks on the album containing the media.  int.
-
-    \value CoverArtUrlSmall The URL of a small cover art image. QUrl.
-    \value CoverArtUrlLarge The URL of a large cover art image. QUrl.
-    \value CoverArtImage An embedded cover art image. QImage.
-
-    Image and video attributes
-    \value Resolution The dimensions of an image or video.  QSize.
-    \value PixelAspectRatio The pixel aspect ratio of an image or video.  QSize.
-
-    Video attributes
-    \value VideoFrameRate The frame rate of the media's video stream.  qreal.
-    \value VideoBitRate The bit rate of the media's video stream in bits per second.  int.
-    \value VideoCodec The codec of the media's video stream.  QString.
-
-    \value PosterUrl The URL of a poster image.  QUrl.
-    \value PosterImage An embedded poster image.  QImage.
-
-    Movie attributes
-    \value ChapterNumber The chapter number of the media.  int.
-    \value Director The director of the media.  QString.
-    \value LeadPerformer The lead performer in the media.  QStringList.
-    \value Writer The writer of the media.  QStringList.
-
-    Photo attributes.
-    \value CameraManufacturer The manufacturer of the camera used to capture the media.  QString.
-    \value CameraModel The model of the camera used to capture the media.  QString.
-    \value Event The event during which the media was captured.  QString.
-    \value Subject The subject of the media.  QString.
-    \value Orientation Orientation of image.
-    \value ExposureTime Exposure time, given in seconds.
-    \value FNumber The F Number.
-    \value ExposureProgram
-        The class of the program used by the camera to set exposure when the picture is taken.
-    \value ISOSpeedRatings
-        Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232.
-    \value ExposureBiasValue
-        The exposure bias.
-        The unit is the APEX (Additive System of Photographic Exposure) setting.
-    \value DateTimeOriginal The date and time when the original image data was generated.
-    \value DateTimeDigitized The date and time when the image was stored as digital data.
-    \value SubjectDistance The distance to the subject, given in meters.
-    \value MeteringMode The metering mode.
-    \value LightSource
-        The kind of light source.
-    \value Flash
-        Status of flash when the image was shot.
-    \value FocalLength
-        The actual focal length of the lens, in mm.
-    \value ExposureMode
-        Indicates the exposure mode set when the image was shot.
-    \value WhiteBalance
-        Indicates the white balance mode set when the image was shot.
-    \value DigitalZoomRatio
-        Indicates the digital zoom ratio when the image was shot.
-    \value FocalLengthIn35mmFilm
-        Indicates the equivalent focal length assuming a 35mm film camera, in mm.
-    \value SceneCaptureType
-        Indicates the type of scene that was shot.
-        It can also be used to record the mode in which the image was shot.
-    \value GainControl
-        Indicates the degree of overall image gain adjustment.
-    \value Contrast
-        Indicates the direction of contrast processing applied by the camera when the image was shot.
-    \value Saturation
-        Indicates the direction of saturation processing applied by the camera when the image was shot.
-    \value Sharpness
-        Indicates the direction of sharpness processing applied by the camera when the image was shot.
-    \value DeviceSettingDescription
-        Exif tag, indicates information on the picture-taking conditions of a particular camera model. QString
-
-    \value ThumbnailImage An embedded thumbnail image.  QImage.
-*/
-
-/*!
-    \enum QtMultimedia::SupportEstimate
-
-    Enumerates the levels of support a media service provider may have for a feature.
-
-    \value NotSupported The feature is not supported.
-    \value MaybeSupported The feature may be supported.
-    \value ProbablySupported The feature is probably supported.
-    \value PreferredService The service is the preferred provider of a service.
-*/
-
-/*!
-    \enum QtMultimedia::EncodingQuality
-
-    Enumerates quality encoding levels.
-
-    \value VeryLowQuality
-    \value LowQuality
-    \value NormalQuality
-    \value HighQuality
-    \value VeryHighQuality
-*/
-
-/*!
-    \enum QtMultimedia::EncodingMode
-
-    Enumerates encoding modes.
-
-    \value ConstantQualityEncoding
-    \value ConstantBitRateEncoding
-    \value AverageBitRateEncoding
-    \value TwoPassEncoding
-*/
-
-/*!
-    \enum QtMultimedia::AvailabilityError
-
-    Enumerates Service status errors.
-
-    \value NoError
-    \value ServiceMissingError
-    \value ResourceError
-    \value BusyError
-*/
diff --git a/src/multimedia/base/qvideodevicecontrol.cpp b/src/multimedia/base/qvideodevicecontrol.cpp
deleted file mode 100644
index c0fe9a8..0000000
--- a/src/multimedia/base/qvideodevicecontrol.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qvideodevicecontrol.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QVideoDeviceControl
-    \preliminary
-    \since 4.7
-    \brief The QVideoDeviceControl class provides an video device selector media control.
-    \ingroup multimedia-serv
-
-    The QVideoDeviceControl class provides descriptions of the video devices
-    available on a system and allows one to be selected as the  endpoint of
-    a media service.
-
-    The interface name of QVideoDeviceControl is \c com.nokia.Qt.VideoDeviceControl as
-    defined in QVideoDeviceControl_iid.
-*/
-
-/*!
-    \macro QVideoDeviceControl_iid
-
-    \c com.nokia.Qt.VideoDeviceControl
-
-    Defines the interface name of the QVideoDeviceControl class.
-
-    \relates QVideoDeviceControl
-*/
-
-/*!
-    Constructs a video device control with the given \a parent.
-*/
-QVideoDeviceControl::QVideoDeviceControl(QObject *parent)
-    :QMediaControl(parent)
-{
-}
-
-/*!
-    Destroys a video device control.
-*/
-QVideoDeviceControl::~QVideoDeviceControl()
-{
-}
-
-/*!
-    \fn QVideoDeviceControl::deviceCount() const
-
-    Returns the number of available video devices;
-*/
-
-/*!
-    \fn QVideoDeviceControl::deviceName(int index) const
-
-    Returns the name of the video device at \a index.
-*/
-
-/*!
-    \fn QVideoDeviceControl::deviceDescription(int index) const
-
-    Returns a description of the video device at \a index.
-*/
-
-/*!
-    \fn QVideoDeviceControl::deviceIcon(int index) const
-
-    Returns an icon for the video device at \a index.
-*/
-
-/*!
-    \fn QVideoDeviceControl::defaultDevice() const
-
-    Returns the index of the default video device.
-*/
-
-/*!
-    \fn QVideoDeviceControl::selectedDevice() const
-
-    Returns the index of the selected video device.
-*/
-
-/*!
-    \fn QVideoDeviceControl::setSelectedDevice(int index)
-
-    Sets the selected video device \a index.
-*/
-
-/*!
-    \fn QVideoDeviceControl::devicesChanged()
-
-    Signals that the list of available video devices has changed.
-*/
-
-/*!
-    \fn QVideoDeviceControl::selectedDeviceChanged(int index)
-
-    Signals that the selected video device \a index has changed.
-*/
-
-/*!
-    \fn QVideoDeviceControl::selectedDeviceChanged(const QString &name)
-
-    Signals that the selected video device \a name has changed.
-*/
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#include "moc_qvideodevicecontrol.cpp"
-
-
diff --git a/src/multimedia/base/qvideodevicecontrol.h b/src/multimedia/base/qvideodevicecontrol.h
deleted file mode 100644
index ce99fd1..0000000
--- a/src/multimedia/base/qvideodevicecontrol.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEODEVICECONTROL_H
-#define QVIDEODEVICECONTROL_H
-
-#include <QtMultimedia/qmediacontrol.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class Q_MULTIMEDIA_EXPORT QVideoDeviceControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    virtual ~QVideoDeviceControl();
-
-    virtual int deviceCount() const = 0;
-
-    virtual QString deviceName(int index) const = 0;
-    virtual QString deviceDescription(int index) const = 0;
-    virtual QIcon deviceIcon(int index) const = 0;
-
-    virtual int defaultDevice() const = 0;
-    virtual int selectedDevice() const = 0;
-
-public Q_SLOTS:
-    virtual void setSelectedDevice(int index) = 0;
-
-Q_SIGNALS:
-    void selectedDeviceChanged(int index);
-    void selectedDeviceChanged(const QString &deviceName);
-    void devicesChanged();
-
-protected:
-    QVideoDeviceControl(QObject *parent = 0);
-};
-
-#define QVideoDeviceControl_iid "com.nokia.Qt.QVideoDeviceControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QVideoDeviceControl, QVideoDeviceControl_iid)
-
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QVIDEODEVICECONTROL_H
diff --git a/src/multimedia/base/qvideooutputcontrol.cpp b/src/multimedia/base/qvideooutputcontrol.cpp
deleted file mode 100644
index 58f1527..0000000
--- a/src/multimedia/base/qvideooutputcontrol.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qvideooutputcontrol.h>
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QVideoOutputControl
-    \preliminary
-    \since 4.7
-    \brief The QVideoOutputControl class provides a means of selecting the
-    active video output control.
-
-    \ingroup multimedia-serv
-
-    There are multiple controls which a QMediaService may use to output
-    video ony one of which may be active at one time, QVideoOutputControl
-    is the means by which this active control is selected.
-
-    The possible output controls are QVideoRendererControl,
-    QVideoWindowControl, and QVideoWidgetControl.
-
-    The interface name of QVideoOutputControl is \c com.nokia.Qt.QVideoOutputControl/1.0 as
-    defined in QVideoOutputControl_iid.
-
-    \sa QMediaService::control(), QVideoWidget, QVideoRendererControl,
-    QVideoWindowControl, QVideoWidgetControl
-*/
-
-/*!
-    \macro QVideoOutputControl_iid
-
-    \c com.nokia.Qt.QVideoOutputControl/1.0
-
-    Defines the interface name of the QVideoOutputControl class.
-
-    \relates QVideoOutputControl
-*/
-
-/*!
-    \enum QVideoOutputControl::Output
-
-    Identifies the possible render targets of a video output.
-
-    \value NoOutput Video is not rendered.
-    \value WindowOutput Video is rendered to the target of a QVideoWindowControl.
-    \value RendererOutput Video is rendered to the target of a QVideoRendererControl.
-    \value WidgetOutput Video is rendered to a QWidget provided by QVideoWidgetControl.
-    \value UserOutput Start value for user defined video targets.
-    \value MaxUserOutput End value for user defined video targets.
-*/
-
-/*!
-    Constructs a new video output control with the given \a parent.
-*/
-QVideoOutputControl::QVideoOutputControl(QObject *parent)
-    : QMediaControl(parent)
-{
-}
-
-/*!
-    Destroys a video output control.
-*/
-QVideoOutputControl::~QVideoOutputControl()
-{
-}
-
-/*!
-    \fn QList<QVideoOutputControl::Output> QVideoOutputControl::availableOutputs() const
-
-    Returns a list of available video output targets.
-*/
-
-/*!
-    \fn QVideoOutputControl::output() const
-
-    Returns the current video output target.
-*/
-
-/*!
-    \fn QVideoOutputControl::setOutput(Output output)
-
-    Sets the current video \a output target.
-*/
-
-/*!
-    \fn QVideoOutputControl::availableOutputsChanged(const QList<QVideoOutputControl::Output>  &outputs)
-
-    Signals that available set of video \a outputs has changed.
-*/
-
-#include "moc_qvideooutputcontrol.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qvideooutputcontrol.h b/src/multimedia/base/qvideooutputcontrol.h
deleted file mode 100644
index 805da58..0000000
--- a/src/multimedia/base/qvideooutputcontrol.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOOUTPUTCONTROL_H
-#define QVIDEOOUTPUTCONTROL_H
-
-#include <QtMultimedia/qmediacontrol.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class Q_MULTIMEDIA_EXPORT QVideoOutputControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    enum Output
-    {
-        NoOutput,
-        WindowOutput,
-        RendererOutput,
-        WidgetOutput,
-        UserOutput = 100,
-        MaxUserOutput = 1000
-    };
-
-    ~QVideoOutputControl();
-
-    virtual QList<Output> availableOutputs() const = 0;
-
-    virtual Output output() const = 0;
-    virtual void setOutput(Output output) = 0;
-
-Q_SIGNALS:
-    void availableOutputsChanged(const QList<QVideoOutputControl::Output> &outputs);
-
-protected:
-    QVideoOutputControl(QObject *parent = 0);
-};
-
-#define QVideoOutputControl_iid "com.nokia.Qt.QVideoOutputControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QVideoOutputControl, QVideoOutputControl_iid)
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qvideorenderercontrol.cpp b/src/multimedia/base/qvideorenderercontrol.cpp
deleted file mode 100644
index a34ef9b..0000000
--- a/src/multimedia/base/qvideorenderercontrol.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qvideorenderercontrol.h>
-
-#include "qmediacontrol_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QVideoRendererControl
-    \preliminary
-    \since 4.7
-    \brief The QVideoRendererControl class provides a control for rendering
-    to a video surface.
-
-    \ingroup multimedia-serv
-
-    Using the surface() property of QVideoRendererControl a QAbstractVideoSurface
-    may be set as the video render target of a QMediaService.
-
-    \code
-    QVideoRendererControl *rendererControl = mediaService->control<QVideoRendererControl *>();
-    rendererControl->setSurface(myVideoSurface);
-    \endcode
-
-    QVideoRendererControl is one of number of possible video output controls,
-    in order to receive video it must be made the active video output
-    control by setting the output property of QVideoOutputControl to
-    \l {QVideoOutputControl::RendererOutput}{RendererOutput}. Consequently any
-    QMediaService that implements QVideoRendererControl must also implement
-    QVideoOutputControl.
-
-    \code
-    QVideoOutputControl *outputControl = mediaService->control<QVideoOutputControl *>();
-    outputControl->setOutput(QVideoOutputControl::RendererOutput);
-    \endcode
-
-    The interface name of QVideoRendererControl is \c com.nokia.Qt.QVideoRendererControl/1.0 as
-    defined in QVideoRendererControl_iid.
-
-    \sa QMediaService::control(), QVideoOutputControl, QVideoWidget
-*/
-
-/*!
-    \macro QVideoRendererControl_iid
-
-    \c com.nokia.Qt.QVideoRendererControl/1.0
-
-    Defines the interface name of the QVideoRendererControl class.
-
-    \relates QVideoRendererControl
-*/
-
-/*!
-    Constructs a new video renderer media end point with the given \a parent.
-*/
-QVideoRendererControl::QVideoRendererControl(QObject *parent)
-    : QMediaControl(parent)
-{
-}
-
-/*!
-    Destroys a video renderer media end point.
-*/
-QVideoRendererControl::~QVideoRendererControl()
-{
-}
-
-/*!
-    \fn QVideoRendererControl::surface() const
-
-    Returns the surface a video producer renders to.
-*/
-
-/*!
-    \fn QVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
-
-    Sets the \a surface a video producer renders to.
-*/
-
-#include "moc_qvideorenderercontrol.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qvideorenderercontrol.h b/src/multimedia/base/qvideorenderercontrol.h
deleted file mode 100644
index f5ba83e..0000000
--- a/src/multimedia/base/qvideorenderercontrol.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEORENDERERCONTROL_H
-#define QVIDEORENDERERCONTROL_H
-
-#include <QtMultimedia/qmediacontrol.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QAbstractVideoSurface;
-
-class Q_MULTIMEDIA_EXPORT QVideoRendererControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    ~QVideoRendererControl();
-
-    virtual QAbstractVideoSurface *surface() const = 0;
-    virtual void setSurface(QAbstractVideoSurface *surface) = 0;
-
-protected:
-    QVideoRendererControl(QObject *parent = 0);
-};
-
-#define QVideoRendererControl_iid "com.nokia.Qt.QVideoRendererControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QVideoRendererControl, QVideoRendererControl_iid)
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QVIDEORENDERERCONTROL_H
diff --git a/src/multimedia/base/qvideowidget.cpp b/src/multimedia/base/qvideowidget.cpp
deleted file mode 100644
index b791abd..0000000
--- a/src/multimedia/base/qvideowidget.cpp
+++ /dev/null
@@ -1,944 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qvideowidget_p.h"
-
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideowindowcontrol.h>
-#include <QtMultimedia/qvideowidgetcontrol.h>
-
-#include "qpaintervideosurface_p.h"
-#include <QtMultimedia/qvideorenderercontrol.h>
-#include <QtMultimedia/qvideosurfaceformat.h>
-#include <qpainter.h>
-
-#include <qapplication.h>
-#include <qevent.h>
-#include <qdialog.h>
-#include <qboxlayout.h>
-#include <qnamespace.h>
-
-
-QT_BEGIN_NAMESPACE
-
-QVideoWidgetControlBackend::QVideoWidgetControlBackend(
-        QVideoWidgetControl *control, QWidget *widget)
-    : m_widgetControl(control)
-{
-    connect(control, SIGNAL(brightnessChanged(int)), widget, SLOT(_q_brightnessChanged(int)));
-    connect(control, SIGNAL(contrastChanged(int)), widget, SLOT(_q_contrastChanged(int)));
-    connect(control, SIGNAL(hueChanged(int)), widget, SLOT(_q_hueChanged(int)));
-    connect(control, SIGNAL(saturationChanged(int)), widget, SLOT(_q_saturationChanged(int)));
-    connect(control, SIGNAL(fullScreenChanged(bool)), widget, SLOT(_q_fullScreenChanged(bool)));
-
-    QBoxLayout *layout = new QVBoxLayout;
-    layout->setMargin(0);
-    layout->setSpacing(0);
-    layout->addWidget(control->videoWidget());
-
-    widget->setLayout(layout);
-}
-
-void QVideoWidgetControlBackend::setBrightness(int brightness)
-{
-    m_widgetControl->setBrightness(brightness);
-}
-
-void QVideoWidgetControlBackend::setContrast(int contrast)
-{
-    m_widgetControl->setContrast(contrast);
-}
-
-void QVideoWidgetControlBackend::setHue(int hue)
-{
-    m_widgetControl->setHue(hue);
-}
-
-void QVideoWidgetControlBackend::setSaturation(int saturation)
-{
-    m_widgetControl->setSaturation(saturation);
-}
-
-void QVideoWidgetControlBackend::setFullScreen(bool fullScreen)
-{
-    m_widgetControl->setFullScreen(fullScreen);
-}
-
-
-Qt::AspectRatioMode QVideoWidgetControlBackend::aspectRatioMode() const
-{
-    return m_widgetControl->aspectRatioMode();
-}
-
-void QVideoWidgetControlBackend::setAspectRatioMode(Qt::AspectRatioMode mode)
-{
-    m_widgetControl->setAspectRatioMode(mode);
-}
-
-QRendererVideoWidgetBackend::QRendererVideoWidgetBackend(
-        QVideoRendererControl *control, QWidget *widget)
-    : m_rendererControl(control)
-    , m_widget(widget)
-    , m_surface(new QPainterVideoSurface)
-    , m_aspectRatioMode(Qt::KeepAspectRatio)
-    , m_updatePaintDevice(true)
-{
-    connect(this, SIGNAL(brightnessChanged(int)), m_widget, SLOT(_q_brightnessChanged(int)));
-    connect(this, SIGNAL(contrastChanged(int)), m_widget, SLOT(_q_contrastChanged(int)));
-    connect(this, SIGNAL(hueChanged(int)), m_widget, SLOT(_q_hueChanged(int)));
-    connect(this, SIGNAL(saturationChanged(int)), m_widget, SLOT(_q_saturationChanged(int)));
-    connect(m_surface, SIGNAL(frameChanged()), this, SLOT(frameChanged()));
-    connect(m_surface, SIGNAL(surfaceFormatChanged(QVideoSurfaceFormat)),
-            this, SLOT(formatChanged(QVideoSurfaceFormat)));
-
-    m_rendererControl->setSurface(m_surface);
-}
-
-QRendererVideoWidgetBackend::~QRendererVideoWidgetBackend()
-{
-    delete m_surface;
-}
-
-void QRendererVideoWidgetBackend::clearSurface()
-{
-    m_rendererControl->setSurface(0);
-}
-
-void QRendererVideoWidgetBackend::setBrightness(int brightness)
-{
-    m_surface->setBrightness(brightness);
-
-    emit brightnessChanged(brightness);
-}
-
-void QRendererVideoWidgetBackend::setContrast(int contrast)
-{
-    m_surface->setContrast(contrast);
-
-    emit contrastChanged(contrast);
-}
-
-void QRendererVideoWidgetBackend::setHue(int hue)
-{
-    m_surface->setHue(hue);
-
-    emit hueChanged(hue);
-}
-
-void QRendererVideoWidgetBackend::setSaturation(int saturation)
-{
-    m_surface->setSaturation(saturation);
-
-    emit saturationChanged(saturation);
-}
-
-Qt::AspectRatioMode QRendererVideoWidgetBackend::aspectRatioMode() const
-{
-    return m_aspectRatioMode;
-}
-
-void QRendererVideoWidgetBackend::setAspectRatioMode(Qt::AspectRatioMode mode)
-{
-    m_aspectRatioMode = mode;
-
-    m_widget->updateGeometry();
-}
-
-void QRendererVideoWidgetBackend::setFullScreen(bool)
-{
-}
-
-QSize QRendererVideoWidgetBackend::sizeHint() const
-{
-    return m_surface->surfaceFormat().sizeHint();
-}
-
-void QRendererVideoWidgetBackend::showEvent()
-{
-}
-
-void QRendererVideoWidgetBackend::hideEvent(QHideEvent *)
-{
-#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-    m_updatePaintDevice = true;
-    m_surface->setGLContext(0);
-#endif
-}
-
-void QRendererVideoWidgetBackend::resizeEvent(QResizeEvent *)
-{
-    updateRects();
-}
-
-void QRendererVideoWidgetBackend::moveEvent(QMoveEvent *)
-{
-}
-
-void QRendererVideoWidgetBackend::paintEvent(QPaintEvent *event)
-{
-    QPainter painter(m_widget);
-
-    if (m_widget->testAttribute(Qt::WA_OpaquePaintEvent)) {
-        QRegion borderRegion = event->region();
-        borderRegion = borderRegion.subtracted(m_boundingRect);
-
-        QBrush brush = m_widget->palette().window();
-
-        QVector<QRect> rects = borderRegion.rects();
-        for (QVector<QRect>::iterator it = rects.begin(), end = rects.end(); it != end; ++it) {
-            painter.fillRect(*it, brush);
-        }
-    }
-
-    if (m_surface->isActive() && m_boundingRect.intersects(event->rect())) {
-        m_surface->paint(&painter, m_boundingRect, m_sourceRect);
-
-        m_surface->setReady(true);
-    } else {
- #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
-        if (m_updatePaintDevice && (painter.paintEngine()->type() == QPaintEngine::OpenGL
-                || painter.paintEngine()->type() == QPaintEngine::OpenGL2)) {
-            m_updatePaintDevice = false;
-
-            m_surface->setGLContext(const_cast<QGLContext *>(QGLContext::currentContext()));
-            if (m_surface->supportedShaderTypes() & QPainterVideoSurface::GlslShader) {
-                m_surface->setShaderType(QPainterVideoSurface::GlslShader);
-            } else {
-                m_surface->setShaderType(QPainterVideoSurface::FragmentProgramShader);
-            }
-        }
-#endif
-    }
-
-}
-
-void QRendererVideoWidgetBackend::formatChanged(const QVideoSurfaceFormat &format)
-{
-    m_nativeSize = format.sizeHint();
-
-    updateRects();
-
-    m_widget->updateGeometry();
-    m_widget->update();
-}
-
-void QRendererVideoWidgetBackend::frameChanged()
-{
-    m_widget->update(m_boundingRect);
-}
-
-void QRendererVideoWidgetBackend::updateRects()
-{
-    QRect rect = m_widget->rect();
-
-    if (m_nativeSize.isEmpty()) {
-        m_boundingRect = QRect();
-    } else if (m_aspectRatioMode == Qt::IgnoreAspectRatio) {
-        m_boundingRect = rect;
-        m_sourceRect = QRectF(0, 0, 1, 1);
-    } else if (m_aspectRatioMode == Qt::KeepAspectRatio) {
-        QSize size = m_nativeSize;
-        size.scale(rect.size(), Qt::KeepAspectRatio);
-
-        m_boundingRect = QRect(0, 0, size.width(), size.height());
-        m_boundingRect.moveCenter(rect.center());
-
-        m_sourceRect = QRectF(0, 0, 1, 1);
-    } else if (m_aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
-        m_boundingRect = rect;
-
-        QSizeF size = rect.size();
-        size.scale(m_nativeSize, Qt::KeepAspectRatio);
-
-        m_sourceRect = QRectF(
-                0, 0, size.width() / m_nativeSize.width(), size.height() / m_nativeSize.height());
-        m_sourceRect.moveCenter(QPointF(0.5, 0.5));
-    }
-}
-
-QWindowVideoWidgetBackend::QWindowVideoWidgetBackend(QVideoWindowControl *control, QWidget *widget)
-    : m_windowControl(control)
-    , m_widget(widget)
-    , m_aspectRatioMode(Qt::KeepAspectRatio)
-{
-    connect(control, SIGNAL(brightnessChanged(int)), m_widget, SLOT(_q_brightnessChanged(int)));
-    connect(control, SIGNAL(contrastChanged(int)), m_widget, SLOT(_q_contrastChanged(int)));
-    connect(control, SIGNAL(hueChanged(int)), m_widget, SLOT(_q_hueChanged(int)));
-    connect(control, SIGNAL(saturationChanged(int)), m_widget, SLOT(_q_saturationChanged(int)));
-    connect(control, SIGNAL(fullScreenChanged(bool)), m_widget, SLOT(_q_fullScreenChanged(bool)));
-    connect(control, SIGNAL(nativeSizeChanged()), m_widget, SLOT(_q_dimensionsChanged()));
-}
-
-QWindowVideoWidgetBackend::~QWindowVideoWidgetBackend()
-{
-}
-
-void QWindowVideoWidgetBackend::setBrightness(int brightness)
-{
-    m_windowControl->setBrightness(brightness);
-}
-
-void QWindowVideoWidgetBackend::setContrast(int contrast)
-{
-    m_windowControl->setContrast(contrast);
-}
-
-void QWindowVideoWidgetBackend::setHue(int hue)
-{
-    m_windowControl->setHue(hue);
-}
-
-void QWindowVideoWidgetBackend::setSaturation(int saturation)
-{
-    m_windowControl->setSaturation(saturation);
-}
-
-void QWindowVideoWidgetBackend::setFullScreen(bool fullScreen)
-{
-    m_windowControl->setFullScreen(fullScreen);
-}
-
-Qt::AspectRatioMode QWindowVideoWidgetBackend::aspectRatioMode() const
-{
-    return m_windowControl->aspectRatioMode();
-}
-
-void QWindowVideoWidgetBackend::setAspectRatioMode(Qt::AspectRatioMode mode)
-{
-    m_windowControl->setAspectRatioMode(mode);
-}
-
-QSize QWindowVideoWidgetBackend::sizeHint() const
-{
-    return m_windowControl->nativeSize();
-}
-
-void QWindowVideoWidgetBackend::showEvent()
-{
-    m_windowControl->setWinId(m_widget->winId());
-
-    m_windowControl->setDisplayRect(m_widget->rect());
-}
-
-void QWindowVideoWidgetBackend::hideEvent(QHideEvent *)
-{
-}
-
-void QWindowVideoWidgetBackend::moveEvent(QMoveEvent *)
-{
-    m_windowControl->setDisplayRect(m_widget->rect());
-}
-
-void QWindowVideoWidgetBackend::resizeEvent(QResizeEvent *)
-{
-    m_windowControl->setDisplayRect(m_widget->rect());
-}
-
-void QWindowVideoWidgetBackend::paintEvent(QPaintEvent *event)
-{
-    if (m_widget->testAttribute(Qt::WA_OpaquePaintEvent)) {
-        QPainter painter(m_widget);
-
-        painter.fillRect(event->rect(), m_widget->palette().window());
-    }
-
-    m_windowControl->repaint();
-
-    event->accept();
-}
-
-void QVideoWidgetPrivate::setCurrentControl(QVideoWidgetControlInterface *control)
-{
-    if (currentControl != control) {
-        currentControl = control;
-
-        currentControl->setBrightness(brightness);
-        currentControl->setContrast(contrast);
-        currentControl->setHue(hue);
-        currentControl->setSaturation(saturation);
-        currentControl->setAspectRatioMode(aspectRatioMode);
-    }
-}
-
-void QVideoWidgetPrivate::show()
-{
-    if (outputControl) {
-        if (widgetBackend != 0) {
-            setCurrentControl(widgetBackend);
-            outputControl->setOutput(QVideoOutputControl::WidgetOutput);
-        } else if (windowBackend != 0 && (q_func()->window() == 0
-                || !q_func()->window()->testAttribute(Qt::WA_DontShowOnScreen))) {
-            windowBackend->showEvent();
-            currentBackend = windowBackend;
-            setCurrentControl(windowBackend);
-            outputControl->setOutput(QVideoOutputControl::WindowOutput);
-        } else if (rendererBackend != 0) {
-            rendererBackend->showEvent();
-            currentBackend = rendererBackend;
-            setCurrentControl(rendererBackend);
-            outputControl->setOutput(QVideoOutputControl::RendererOutput);
-        } else {
-            outputControl->setOutput(QVideoOutputControl::NoOutput);
-        }
-    }
-}
-
-void QVideoWidgetPrivate::clearService()
-{
-    if (service) {
-        QObject::disconnect(service, SIGNAL(destroyed()), q_func(), SLOT(_q_serviceDestroyed()));
-
-        if (outputControl)
-            outputControl->setOutput(QVideoOutputControl::NoOutput);
-
-        if (widgetBackend) {
-            QLayout *layout = q_func()->layout();
-
-            for (QLayoutItem *item = layout->takeAt(0); item; item = layout->takeAt(0)) {
-                item->widget()->setParent(0);
-                delete item;
-            }
-            delete layout;
-
-            delete widgetBackend;
-            widgetBackend = 0;
-        }
-
-        delete windowBackend;
-        windowBackend = 0;
-
-        if (rendererBackend) {
-            rendererBackend->clearSurface();
-
-            delete rendererBackend;
-            rendererBackend = 0;
-        }
-
-        currentBackend = 0;
-        currentControl = 0;
-        outputControl = 0;
-        service = 0;
-    }
-}
-
-void QVideoWidgetPrivate::_q_serviceDestroyed()
-{
-    if (widgetBackend) {
-        delete q_func()->layout();
-
-        delete widgetBackend;
-        widgetBackend = 0;
-    }
-
-    delete windowBackend;
-    windowBackend = 0;
-
-    delete rendererBackend;
-    rendererBackend = 0;
-
-    currentControl = 0;
-    currentBackend = 0;
-    outputControl = 0;
-    service = 0;
-}
-
-void QVideoWidgetPrivate::_q_mediaObjectDestroyed()
-{
-    mediaObject = 0;
-    clearService();
-}
-
-void QVideoWidgetPrivate::_q_brightnessChanged(int b)
-{
-    if (b != brightness)
-        emit q_func()->brightnessChanged(brightness = b);
-}
-
-void QVideoWidgetPrivate::_q_contrastChanged(int c)
-{
-    if (c != contrast)
-        emit q_func()->contrastChanged(contrast = c);
-}
-
-void QVideoWidgetPrivate::_q_hueChanged(int h)
-{
-    if (h != hue)
-        emit q_func()->hueChanged(hue = h);
-}
-
-void QVideoWidgetPrivate::_q_saturationChanged(int s)
-{
-    if (s != saturation)
-        emit q_func()->saturationChanged(saturation = s);
-}
-
-
-void QVideoWidgetPrivate::_q_fullScreenChanged(bool fullScreen)
-{
-    if (!fullScreen && q_func()->isFullScreen())
-        q_func()->showNormal();
-}
-
-void QVideoWidgetPrivate::_q_dimensionsChanged()
-{
-    q_func()->updateGeometry();
-    q_func()->update();
-}
-
-/*!
-    \class QVideoWidget
-    \preliminary
-    \since 4.7
-    \brief The QVideoWidget class provides a widget which presents video
-    produced by a media object.
-    \ingroup multimedia
-
-    Attaching a QVideoWidget to a QMediaObject allows it to display the
-    video or image output of that media object.  A QVideoWidget is attached
-    to media object by passing a pointer to the QMediaObject in its
-    constructor, and detached by destroying the QVideoWidget.
-
-    \code
-        player = new QMediaPlayer;
-
-        widget = new QVideoWidget(player);
-        widget->show();
-
-        player->setMedia(QUrl("http://example.com/movie.mp4"));
-        player->play();
-    \endcode
-
-    \bold {Note}: Only a single display output can be attached to a media
-    object at one time.
-
-    \sa QMediaObject, QMediaPlayer, QGraphicsVideoItem
-*/
-
-/*!
-    Constructs a new video widget.
-
-    The \a parent is passed to QWidget.
-*/
-QVideoWidget::QVideoWidget(QWidget *parent)
-    : QWidget(parent, 0)
-    , d_ptr(new QVideoWidgetPrivate)
-{
-    d_ptr->q_ptr = this;
-}
-
-/*!
-    Destroys a video widget.
-*/
-QVideoWidget::~QVideoWidget()
-{
-    setMediaObject(0);
-    delete d_ptr;
-}
-
-/*!
-    \property QVideoWidget::mediaObject
-    \brief the media object which provides the video displayed by a widget.
-*/
-
-QMediaObject *QVideoWidget::mediaObject() const
-{
-    return d_func()->mediaObject;
-}
-
-void QVideoWidget::setMediaObject(QMediaObject *object)
-{
-    Q_D(QVideoWidget);
-
-    if (object == d->mediaObject)
-        return;
-
-    if (d->mediaObject) {
-        disconnect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
-        d->mediaObject->unbind(this);
-    }
-
-    d->clearService();
-
-    d->mediaObject = object;
-
-    if (d->mediaObject) {
-        d->service = d->mediaObject->service();
-
-        connect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
-        d->mediaObject->bind(this);
-    }
-
-    if (d->service) {
-        connect(d->service, SIGNAL(destroyed()), SLOT(_q_serviceDestroyed()));
-
-        d->outputControl = qobject_cast<QVideoOutputControl *>(
-                d->service->control(QVideoOutputControl_iid));
-
-        QVideoWidgetControl *widgetControl = qobject_cast<QVideoWidgetControl *>(
-                d->service->control(QVideoWidgetControl_iid));
-
-        if (widgetControl != 0) {
-            d->widgetBackend = new QVideoWidgetControlBackend(widgetControl, this);
-        } else {
-            QVideoWindowControl *windowControl = qobject_cast<QVideoWindowControl *>(
-                    d->service->control(QVideoWindowControl_iid));
-
-            if (windowControl != 0)
-                d->windowBackend = new QWindowVideoWidgetBackend(windowControl, this);
-
-            QVideoRendererControl *rendererControl = qobject_cast<QVideoRendererControl *>(
-                    d->service->control(QVideoRendererControl_iid));
-
-            if (rendererControl != 0)
-                d->rendererBackend = new QRendererVideoWidgetBackend(rendererControl, this);
-        }
-
-        if (isVisible())
-            d->show();
-    }
-}
-
-/*!
-    \property QVideoWidget::aspectRatioMode
-    \brief how video is scaled with respect to its aspect ratio.
-*/
-
-Qt::AspectRatioMode QVideoWidget::aspectRatioMode() const
-{
-    return d_func()->aspectRatioMode;
-}
-
-void QVideoWidget::setAspectRatioMode(Qt::AspectRatioMode mode)
-{
-    Q_D(QVideoWidget);
-
-    if (d->currentControl) {
-        d->currentControl->setAspectRatioMode(mode);
-        d->aspectRatioMode = d->currentControl->aspectRatioMode();
-    } else {
-        d->aspectRatioMode = mode;
-    }
-}
-
-/*!
-    \property QVideoWidget::fullScreen
-    \brief whether video display is confined to a window or is fullScreen.
-*/
-
-void QVideoWidget::setFullScreen(bool fullScreen)
-{
-    Q_D(QVideoWidget);
-
-    if (fullScreen) {
-        Qt::WindowFlags flags = windowFlags();
-
-        d->nonFullScreenFlags = flags & (Qt::Window | Qt::SubWindow);
-        flags |= Qt::Window;
-        flags &= ~Qt::SubWindow;
-        setWindowFlags(flags);
-        
-        showFullScreen();
-    } else {
-        showNormal();
-    }
-}
-
-/*!
-    \fn QVideoWidget::fullScreenChanged(bool fullScreen)
-
-    Signals that the \a fullScreen mode of a video widget has changed.
-
-    \sa fullScreen
-*/
-
-/*!
-    \property QVideoWidget::brightness
-    \brief an adjustment to the brightness of displayed video.
-
-    Valid brightness values range between -100 and 100, the default is 0.
-*/
-
-int QVideoWidget::brightness() const
-{
-    return d_func()->brightness;
-}
-
-void QVideoWidget::setBrightness(int brightness)
-{
-    Q_D(QVideoWidget);
-
-    int boundedBrightness = qBound(-100, brightness, 100);
-
-    if (d->currentControl)
-        d->currentControl->setBrightness(boundedBrightness);
-    else if (d->brightness != boundedBrightness)
-        emit brightnessChanged(d->brightness = boundedBrightness);
-}
-
-/*!
-    \fn QVideoWidget::brightnessChanged(int brightness)
-
-    Signals that a video widgets's \a brightness adjustment has changed.
-
-    \sa brightness
-*/
-
-/*!
-    \property QVideoWidget::contrast
-    \brief an adjustment to the contrast of displayed video.
-
-    Valid contrast values range between -100 and 100, the default is 0.
-
-*/
-
-int QVideoWidget::contrast() const
-{
-    return d_func()->contrast;
-}
-
-void QVideoWidget::setContrast(int contrast)
-{
-    Q_D(QVideoWidget);
-
-    int boundedContrast = qBound(-100, contrast, 100);
-
-    if (d->currentControl)
-        d->currentControl->setContrast(boundedContrast);
-    else if (d->contrast != boundedContrast)
-        emit contrastChanged(d->contrast = boundedContrast);
-}
-
-/*!
-    \fn QVideoWidget::contrastChanged(int contrast)
-
-    Signals that a video widgets's \a contrast adjustment has changed.
-
-    \sa contrast
-*/
-
-/*!
-    \property QVideoWidget::hue
-    \brief an adjustment to the hue of displayed video.
-
-    Valid hue values range between -100 and 100, the default is 0.
-*/
-
-int QVideoWidget::hue() const
-{
-    return d_func()->hue;
-}
-
-void QVideoWidget::setHue(int hue)
-{
-    Q_D(QVideoWidget);
-
-    int boundedHue = qBound(-100, hue, 100);
-
-    if (d->currentControl)
-        d->currentControl->setHue(boundedHue);
-    else if (d->hue != boundedHue)
-        emit hueChanged(d->hue = boundedHue);
-}
-
-/*!
-    \fn QVideoWidget::hueChanged(int hue)
-
-    Signals that a video widgets's \a hue has changed.
-
-    \sa hue
-*/
-
-/*!
-    \property QVideoWidget::saturation
-    \brief an adjustment to the saturation of displayed video.
-
-    Valid saturation values range between -100 and 100, the default is 0.
-*/
-
-int QVideoWidget::saturation() const
-{
-    return d_func()->saturation;
-}
-
-void QVideoWidget::setSaturation(int saturation)
-{
-    Q_D(QVideoWidget);
-
-    int boundedSaturation = qBound(-100, saturation, 100);
-
-    if (d->currentControl)
-        d->currentControl->setSaturation(boundedSaturation);
-    else if (d->saturation != boundedSaturation)
-        emit saturationChanged(d->saturation = boundedSaturation);
-
-}
-
-/*!
-    \fn QVideoWidget::saturationChanged(int saturation)
-
-    Signals that a video widgets's \a saturation has changed.
-
-    \sa saturation
-*/
-
-/*!
-  Returns the size hint for the current back end,
-  if there is one, or else the size hint from QWidget.
- */
-QSize QVideoWidget::sizeHint() const
-{
-    Q_D(const QVideoWidget);
-
-    if (d->currentBackend)
-        return d->currentBackend->sizeHint();
-    else
-        return QWidget::sizeHint();
-
-
-}
-
-/*!
-    \reimp
-    \internal
- */
-bool QVideoWidget::event(QEvent *event)
-{
-    Q_D(QVideoWidget);
-
-    if (event->type() == QEvent::WindowStateChange) {
-        Qt::WindowFlags flags = windowFlags();
-
-        if (windowState() & Qt::WindowFullScreen) {
-            if (d->currentControl)
-                d->currentControl->setFullScreen(true);
-
-            if (!d->wasFullScreen)
-                emit fullScreenChanged(d->wasFullScreen = true);
-        } else {
-            if (d->currentControl)
-                d->currentControl->setFullScreen(false);
-
-            if (d->wasFullScreen) {
-                flags &= ~(Qt::Window | Qt::SubWindow); //clear the flags...
-                flags |= d->nonFullScreenFlags; //then we reset the flags (window and subwindow)
-                setWindowFlags(flags);
-
-                emit fullScreenChanged(d->wasFullScreen = false);
-            }
-        }
-    }
-    return QWidget::event(event);
-}
-
-/*!
-  Handles the show \a event.
- */
-void QVideoWidget::showEvent(QShowEvent *event)
-{
-    Q_D(QVideoWidget);
-
-    QWidget::showEvent(event);
-
-    d->show();
-
-}
-
-/*!
-
-  Handles the hide \a event.
-*/
-void QVideoWidget::hideEvent(QHideEvent *event)
-{
-    Q_D(QVideoWidget);
-
-    if (d->currentBackend)
-        d->currentBackend->hideEvent(event);
-
-    QWidget::hideEvent(event);
-}
-
-/*!
-  Handles the resize \a event.
- */
-void QVideoWidget::resizeEvent(QResizeEvent *event)
-{
-    Q_D(QVideoWidget);
-
-    QWidget::resizeEvent(event);
-
-    if (d->currentBackend)
-        d->currentBackend->resizeEvent(event);
-}
-
-/*!
-  Handles the move \a event.
- */
-void QVideoWidget::moveEvent(QMoveEvent *event)
-{
-    Q_D(QVideoWidget);
-
-    if (d->currentBackend)
-        d->currentBackend->moveEvent(event);
-}
-
-/*!
-  Handles the paint \a event.
- */
-void QVideoWidget::paintEvent(QPaintEvent *event)
-{
-    Q_D(QVideoWidget);
-
-    if (d->currentBackend) {
-        d->currentBackend->paintEvent(event);
-    } else if (testAttribute(Qt::WA_OpaquePaintEvent)) {
-        QPainter painter(this);
-
-        painter.fillRect(event->rect(), palette().window());
-    }
-}
-
-#include "moc_qvideowidget.cpp"
-#include "moc_qvideowidget_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qvideowidget.h b/src/multimedia/base/qvideowidget.h
deleted file mode 100644
index 4b24bcb..0000000
--- a/src/multimedia/base/qvideowidget.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOWIDGET_H
-#define QVIDEOWIDGET_H
-
-#include <QtGui/qwidget.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QMediaObject;
-
-class QVideoWidgetPrivate;
-class Q_MULTIMEDIA_EXPORT QVideoWidget : public QWidget
-{
-    Q_OBJECT
-    Q_PROPERTY(QMediaObject* mediaObject READ mediaObject WRITE setMediaObject)
-    Q_PROPERTY(bool fullScreen READ isFullScreen WRITE setFullScreen NOTIFY fullScreenChanged)
-    Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode WRITE setAspectRatioMode NOTIFY aspectRatioModeChanged)
-    Q_PROPERTY(int brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged)
-    Q_PROPERTY(int contrast READ contrast WRITE setContrast NOTIFY contrastChanged)
-    Q_PROPERTY(int hue READ hue WRITE setHue NOTIFY hueChanged)
-    Q_PROPERTY(int saturation READ saturation WRITE setSaturation NOTIFY saturationChanged)
-
-public:
-    QVideoWidget(QWidget *parent = 0);
-    ~QVideoWidget();   
-
-    QMediaObject *mediaObject() const;
-    void setMediaObject(QMediaObject *object);
-
-#ifdef Q_QDOC
-    bool isFullScreen() const;
-#endif
-
-    Qt::AspectRatioMode aspectRatioMode() const;
-
-    int brightness() const;
-    int contrast() const;
-    int hue() const;
-    int saturation() const;
-
-    QSize sizeHint() const;
-
-public Q_SLOTS:
-    void setFullScreen(bool fullScreen);
-    void setAspectRatioMode(Qt::AspectRatioMode mode);
-    void setBrightness(int brightness);
-    void setContrast(int contrast);
-    void setHue(int hue);
-    void setSaturation(int saturation);
-
-Q_SIGNALS:
-    void fullScreenChanged(bool fullScreen);
-    void brightnessChanged(int brightness);
-    void contrastChanged(int contrast);
-    void hueChanged(int hue);
-    void saturationChanged(int saturation);
-
-protected:
-    bool event(QEvent *event);
-    void showEvent(QShowEvent *event);
-    void hideEvent(QHideEvent *event);
-    void resizeEvent(QResizeEvent *event);
-    void moveEvent(QMoveEvent *event);
-    void paintEvent(QPaintEvent *event);
-
-protected:
-    QVideoWidgetPrivate *d_ptr;
-
-private:
-    Q_DECLARE_PRIVATE(QVideoWidget)
-    Q_PRIVATE_SLOT(d_func(), void _q_serviceDestroyed())
-    Q_PRIVATE_SLOT(d_func(), void _q_mediaObjectDestroyed())
-    Q_PRIVATE_SLOT(d_func(), void _q_brightnessChanged(int))
-    Q_PRIVATE_SLOT(d_func(), void _q_contrastChanged(int))
-    Q_PRIVATE_SLOT(d_func(), void _q_hueChanged(int))
-    Q_PRIVATE_SLOT(d_func(), void _q_saturationChanged(int))
-    Q_PRIVATE_SLOT(d_func(), void _q_fullScreenChanged(bool))
-    Q_PRIVATE_SLOT(d_func(), void _q_dimensionsChanged());
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qvideowidget_p.h b/src/multimedia/base/qvideowidget_p.h
deleted file mode 100644
index 44fd1cd..0000000
--- a/src/multimedia/base/qvideowidget_p.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOWIDGET_P_H
-#define QVIDEOWIDGET_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/qvideowidget.h>
-
-#ifndef QT_NO_OPENGL
-#include <QGLWidget>
-#endif
-
-#include "qpaintervideosurface_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QVideoWidgetControlInterface
-{
-public:
-    virtual ~QVideoWidgetControlInterface() {}
-
-    virtual void setBrightness(int brightness) = 0;
-    virtual void setContrast(int contrast) = 0;
-    virtual void setHue(int hue) = 0;
-    virtual void setSaturation(int saturation) = 0;
-
-    virtual void setFullScreen(bool fullScreen) = 0;
-
-    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
-    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
-};
-
-class QVideoWidgetBackend : public QObject, public QVideoWidgetControlInterface
-{
-    Q_OBJECT
-
-public:
-    virtual QSize sizeHint() const = 0;
-
-    virtual void showEvent() = 0;
-    virtual void hideEvent(QHideEvent *event) = 0;
-    virtual void resizeEvent(QResizeEvent *event) = 0;
-    virtual void moveEvent(QMoveEvent *event) = 0;
-    virtual void paintEvent(QPaintEvent *event) = 0;
-};
-
-class QVideoWidgetControl;
-
-class QVideoWidgetControlBackend : public QObject, public QVideoWidgetControlInterface
-{
-    Q_OBJECT
-public:
-    QVideoWidgetControlBackend(QVideoWidgetControl *control, QWidget *widget);
-
-    void setBrightness(int brightness);
-    void setContrast(int contrast);
-    void setHue(int hue);
-    void setSaturation(int saturation);
-
-    void setFullScreen(bool fullScreen);
-
-    Qt::AspectRatioMode aspectRatioMode() const;
-    void setAspectRatioMode(Qt::AspectRatioMode mode);
-
-private:
-    QVideoWidgetControl *m_widgetControl;
-};
-
-
-class QVideoRendererControl;
-
-class QRendererVideoWidgetBackend : public QVideoWidgetBackend
-{
-    Q_OBJECT
-public:
-    QRendererVideoWidgetBackend(QVideoRendererControl *control, QWidget *widget);
-    ~QRendererVideoWidgetBackend();
-
-    void clearSurface();
-
-    void setBrightness(int brightness);
-    void setContrast(int contrast);
-    void setHue(int hue);
-    void setSaturation(int saturation);
-
-    void setFullScreen(bool fullScreen);
-
-    Qt::AspectRatioMode aspectRatioMode() const;
-    void setAspectRatioMode(Qt::AspectRatioMode mode);
-
-    QSize sizeHint() const;
-
-    void showEvent();
-    void hideEvent(QHideEvent *event);
-    void resizeEvent(QResizeEvent *event);
-    void moveEvent(QMoveEvent *event);
-    void paintEvent(QPaintEvent *event);
-
-Q_SIGNALS:
-    void fullScreenChanged(bool fullScreen);
-    void brightnessChanged(int brightness);
-    void contrastChanged(int contrast);
-    void hueChanged(int hue);
-    void saturationChanged(int saturation);
-
-private Q_SLOTS:
-    void formatChanged(const QVideoSurfaceFormat &format);
-    void frameChanged();
-
-private:
-    void updateRects();
-
-    QVideoRendererControl *m_rendererControl;
-    QWidget *m_widget;
-    QPainterVideoSurface *m_surface;
-    Qt::AspectRatioMode m_aspectRatioMode;
-    QRect m_boundingRect;
-    QRectF m_sourceRect;
-    QSize m_nativeSize;
-    bool m_updatePaintDevice;
-};
-
-class QVideoWindowControl;
-
-class QWindowVideoWidgetBackend : public QVideoWidgetBackend
-{
-    Q_OBJECT
-public:
-    QWindowVideoWidgetBackend(QVideoWindowControl *control, QWidget *widget);
-    ~QWindowVideoWidgetBackend();
-
-    void setBrightness(int brightness);
-    void setContrast(int contrast);
-    void setHue(int hue);
-    void setSaturation(int saturation);
-
-   void setFullScreen(bool fullScreen);
-
-    Qt::AspectRatioMode aspectRatioMode() const;
-    void setAspectRatioMode(Qt::AspectRatioMode mode);
-
-    QSize sizeHint() const;
-
-    void showEvent();
-    void hideEvent(QHideEvent *event);
-    void resizeEvent(QResizeEvent *event);
-    void moveEvent(QMoveEvent *event);
-    void paintEvent(QPaintEvent *event);
-
-private:
-    QVideoWindowControl *m_windowControl;
-    QWidget *m_widget;
-    Qt::AspectRatioMode m_aspectRatioMode;
-    QSize m_pixelAspectRatio;
-};
-
-class QMediaService;
-class QVideoOutputControl;
-
-class QVideoWidgetPrivate
-{
-    Q_DECLARE_PUBLIC(QVideoWidget)
-public:
-    QVideoWidgetPrivate()
-        : q_ptr(0)
-        , mediaObject(0)
-        , service(0)
-        , outputControl(0)
-        , widgetBackend(0)
-        , windowBackend(0)
-        , rendererBackend(0)
-        , currentControl(0)
-        , currentBackend(0)
-        , brightness(0)
-        , contrast(0)
-        , hue(0)
-        , saturation(0)
-        , aspectRatioMode(Qt::KeepAspectRatio)
-        , nonFullScreenFlags(0)
-        , wasFullScreen(false)
-    {
-    }
-
-    QVideoWidget *q_ptr;
-    QMediaObject *mediaObject;
-    QMediaService *service;
-    QVideoOutputControl *outputControl;
-    QVideoWidgetControlBackend *widgetBackend;
-    QWindowVideoWidgetBackend *windowBackend;
-    QRendererVideoWidgetBackend *rendererBackend;
-    QVideoWidgetControlInterface *currentControl;
-    QVideoWidgetBackend *currentBackend;
-    int brightness;
-    int contrast;
-    int hue;
-    int saturation;
-    Qt::AspectRatioMode aspectRatioMode;
-    Qt::WindowFlags nonFullScreenFlags;
-    bool wasFullScreen;
-
-    void setCurrentControl(QVideoWidgetControlInterface *control);
-    void show();
-    void clearService();
-
-    void _q_serviceDestroyed();
-    void _q_mediaObjectDestroyed();
-    void _q_brightnessChanged(int brightness);
-    void _q_contrastChanged(int contrast);
-    void _q_hueChanged(int hue);
-    void _q_saturationChanged(int saturation);
-    void _q_fullScreenChanged(bool fullScreen);
-    void _q_dimensionsChanged();
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qvideowidgetcontrol.cpp b/src/multimedia/base/qvideowidgetcontrol.cpp
deleted file mode 100644
index e8957dc..0000000
--- a/src/multimedia/base/qvideowidgetcontrol.cpp
+++ /dev/null
@@ -1,235 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qvideowidgetcontrol.h>
-#include "qmediacontrol_p.h"
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QVideoWidgetControl
-    \preliminary
-    \since 4.7
-    \brief The QVideoWidgetControl class provides a media control which
-    implements a video widget.
-
-    \ingroup multimedia-serv
-
-    The videoWidget() property of QVideoWidgetControl provides a pointer to
-    a video widget implemented by the control's media service.  This widget
-    is owned by the media service and so care should be taken not to delete it.
-
-    \code
-    QVideoWidgetControl *widgetControl = mediaService->control<QVideoWidgetControl *>();
-
-    layout->addWidget(widgetControl->widget());
-    \endcode
-
-    QVideoWidgetControl is one of number of possible video output controls,
-    in order to receive video it must be made the active video output
-    control by setting the output property of QVideoOutputControl to \l {QVideoOutputControl::WidgetOutput}{WidgetOutput}. Consequently any
-    QMediaService that implements QVideoWidgetControl must also implement
-    QVideoOutputControl.
-
-    The interface name of QVideoWidgetControl is \c com.nokia.Qt.QVideoWidgetControl/1.0 as
-    defined in QVideoWidgetControl_iid.
-
-    \sa QMediaService::control(), QVideoOutputControl, QVideoWidget
-*/
-
-/*!
-    \macro QVideoWidgetControl_iid
-
-    \c com.nokia.Qt.QVideoWidgetControl/1.0
-
-    Defines the interface name of the QVideoWidgetControl class.
-
-    \relates QVideoWidgetControl
-*/
-
-/*!
-    Constructs a new video widget control with the given \a parent.
-*/
-QVideoWidgetControl::QVideoWidgetControl(QObject *parent)
-    :QMediaControl(parent)
-{
-}
-
-/*!
-    Destroys a video widget control.
-*/
-QVideoWidgetControl::~QVideoWidgetControl()
-{
-}
-
-/*!
-    \fn QVideoWidgetControl::isFullScreen() const
-
-    Returns true if the video is shown using the complete screen.
-*/
-
-/*!
-    \fn QVideoWidgetControl::setFullScreen(bool fullScreen)
-
-    Sets whether a video widget is in \a fullScreen mode.
-*/
-
-/*!
-    \fn QVideoWidgetControl::fullScreenChanged(bool fullScreen)
-
-    Signals that the \a fullScreen state of a video widget has changed.
-*/
-
-/*!
-    \fn QVideoWidgetControl::aspectRatioMode() const
-
-    Returns how video is scaled to fit the widget with respect to its aspect ratio.
-*/
-
-/*!
-    \fn QVideoWidgetControl::setAspectRatioMode(Qt::AspectRatioMode mode)
-
-    Sets the aspect ratio \a mode which determines how video is scaled to the fit the widget with
-    respect to its aspect ratio.
-*/
-
-/*!
-    \fn QVideoWidgetControl::brightness() const
-
-    Returns the brightness adjustment applied to a video.
-
-    Valid brightness values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWidgetControl::setBrightness(int brightness)
-
-    Sets a \a brightness adjustment for a video.
-
-    Valid brightness values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWidgetControl::brightnessChanged(int brightness)
-
-    Signals that a video widget's \a brightness adjustment has changed.
-*/
-
-/*!
-    \fn QVideoWidgetControl::contrast() const
-
-    Returns the contrast adjustment applied to a video.
-
-    Valid contrast values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWidgetControl::setContrast(int contrast)
-
-    Sets the contrast adjustment for a video widget to \a contrast.
-
-    Valid contrast values range between -100 and 100, the default is 0.
-*/
-
-
-/*!
-    \fn QVideoWidgetControl::contrastChanged(int contrast)
-
-    Signals that a video widget's \a contrast adjustment has changed.
-*/
-
-/*!
-    \fn QVideoWidgetControl::hue() const
-
-    Returns the hue adjustment applied to a video widget.
-
-    Value hue values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWidgetControl::setHue(int hue)
-
-    Sets a \a hue adjustment for a video widget.
-
-    Valid hue values range between -100 and 100, the default is 0.
-*/
-
-
-/*!
-    \fn QVideoWidgetControl::hueChanged(int hue)
-
-    Signals that a video widget's \a hue adjustment has changed.
-*/
-
-/*!
-    \fn QVideoWidgetControl::saturation() const
-
-    Returns the saturation adjustment applied to a video widget.
-
-    Value saturation values range between -100 and 100, the default is 0.
-*/
-
-
-/*!
-    \fn QVideoWidgetControl::setSaturation(int saturation)
-
-    Sets a \a saturation adjustment for a video widget.
-
-    Valid saturation values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWidgetControl::saturationChanged(int saturation)
-
-    Signals that a video widget's \a saturation adjustment has changed.
-*/
-
-/*!
-    \fn QVideoWidgetControl::videoWidget()
-
-    Returns the QWidget.
-*/
-
-#include "moc_qvideowidgetcontrol.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qvideowidgetcontrol.h b/src/multimedia/base/qvideowidgetcontrol.h
deleted file mode 100644
index 4c0a6c6..0000000
--- a/src/multimedia/base/qvideowidgetcontrol.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOWIDGETCONTROL_H
-#define QVIDEOWIDGETCONTROL_H
-
-#include <QtGui/qwidget.h>
-
-#include <QtMultimedia/qvideowidget.h>
-#include <QtMultimedia/qmediacontrol.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QVideoWidgetControlPrivate;
-
-class Q_MULTIMEDIA_EXPORT QVideoWidgetControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    virtual ~QVideoWidgetControl();
-
-    virtual QWidget *videoWidget() = 0;
-
-    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
-    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
-
-    virtual bool isFullScreen() const = 0;
-    virtual void setFullScreen(bool fullScreen) = 0;
-
-    virtual int brightness() const = 0;
-    virtual void setBrightness(int brightness) = 0;
-
-    virtual int contrast() const = 0;
-    virtual void setContrast(int contrast) = 0;
-
-    virtual int hue() const = 0;
-    virtual void setHue(int hue) = 0;
-
-    virtual int saturation() const = 0;
-    virtual void setSaturation(int saturation) = 0;
-
-Q_SIGNALS:
-    void fullScreenChanged(bool fullScreen);
-    void brightnessChanged(int brightness);
-    void contrastChanged(int contrast);
-    void hueChanged(int hue);
-    void saturationChanged(int saturation);
-
-protected:
-    QVideoWidgetControl(QObject *parent = 0);
-};
-
-#define QVideoWidgetControl_iid "com.nokia.Qt.QVideoWidgetControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QVideoWidgetControl, QVideoWidgetControl_iid)
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/base/qvideowindowcontrol.cpp b/src/multimedia/base/qvideowindowcontrol.cpp
deleted file mode 100644
index c74a0d5..0000000
--- a/src/multimedia/base/qvideowindowcontrol.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qvideowindowcontrol.h>
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QVideoWindowControl
-    \preliminary
-    \since 4.7
-    \ingroup multimedia-serv
-    \brief The QVideoWindowControl class provides a media control for rendering video to a window.
-
-
-    The winId() property QVideoWindowControl allows a platform specific
-    window ID to be set as the video render target of a QMediaService.  The
-    displayRect() property is used to set the region of the window the
-    video should be rendered to, and the aspectRatioMode() property
-    indicates how the video should be scaled to fit the displayRect().
-
-    \code
-    QVideoWindowControl *windowControl = mediaService->control<QVideoWindowControl *>();
-    windowControl->setWinId(widget->winId());
-    windowControl->setDisplayRect(widget->rect());
-    windowControl->setAspectRatioMode(Qt::KeepAspectRatio);
-    \endcode
-
-    QVideoWindowControl is one of number of possible video output controls,
-    in order to receive video it must be made the active video output
-    control by setting the output property of QVideoOutputControl to \l {QVideoOutputControl::WindowOutput}{WindowOutput}.
-    Consequently any QMediaService that implements QVideoWindowControl must
-    also implement QVideoOutputControl.
-
-    \code
-    QVideoOutputControl *outputControl = mediaService->control<QVideoOutputControl *>();
-    outputControl->setOutput(QVideoOutputControl::WindowOutput);
-    \endcode
-
-    The interface name of QVideoWindowControl is \c com.nokia.Qt.QVideoWindowControl/1.0 as
-    defined in QVideoWindowControl_iid.
-
-    \sa QMediaService::control(), QVideoOutputControl, QVideoWidget
-*/
-
-/*!
-    \macro QVideoWindowControl_iid
-
-    \c com.nokia.Qt.QVideoWindowControl/1.0
-
-    Defines the interface name of the QVideoWindowControl class.
-
-    \relates QVideoWindowControl
-*/
-
-/*!
-    Constructs a new video window control with the given \a parent.
-*/
-QVideoWindowControl::QVideoWindowControl(QObject *parent)
-    : QMediaControl(parent)
-{
-}
-
-/*!
-    Destroys a video window control.
-*/
-QVideoWindowControl::~QVideoWindowControl()
-{
-}
-
-/*!
-    \fn QVideoWindowControl::winId() const
-
-    Returns the ID of the window a video overlay end point renders to.
-*/
-
-/*!
-    \fn QVideoWindowControl::setWinId(WId id)
-
-    Sets the \a id of the window a video overlay end point renders to.
-*/
-
-/*!
-    \fn QVideoWindowControl::displayRect() const
-    Returns the sub-rect of a window where video is displayed.
-*/
-
-/*!
-    \fn QVideoWindowControl::setDisplayRect(const QRect &rect)
-    Sets the sub-\a rect of a window where video is displayed.
-*/
-
-/*!
-    \fn QVideoWindowControl::isFullScreen() const
-
-    Identifies if a video overlay is a fullScreen overlay.
-
-    Returns true if the video overlay is fullScreen, and false otherwise.
-*/
-
-/*!
-    \fn QVideoWindowControl::setFullScreen(bool fullScreen)
-
-    Sets whether a video overlay is a \a fullScreen overlay.
-*/
-
-/*!
-    \fn QVideoWindowControl::fullScreenChanged(bool fullScreen)
-
-    Signals that the \a fullScreen state of a video overlay has changed.
-*/
-
-/*!
-    \fn QVideoWindowControl::repaint()
-
-    Repaints the last frame.
-*/
-
-/*!
-    \fn QVideoWindowControl::nativeSize() const
-
-    Returns a suggested size for the video display based on the resolution and aspect ratio of the
-    video.
-*/
-
-/*!
-    \fn QVideoWindowControl::nativeSizeChanged()
-
-    Signals that the native dimensions of the video have changed.
-*/
-
-
-/*!
-    \fn QVideoWindowControl::aspectRatioMode() const
-
-    Returns how video is scaled to fit the display region with respect to its aspect ratio.
-*/
-
-/*!
-    \fn QVideoWindowControl::setAspectRatioMode(Qt::AspectRatioMode mode)
-
-    Sets the aspect ratio \a mode which determines how video is scaled to the fit the display region
-    with respect to its aspect ratio.
-*/
-
-/*!
-    \fn QVideoWindowControl::brightness() const
-
-    Returns the brightness adjustment applied to a video overlay.
-
-    Valid brightness values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::setBrightness(int brightness)
-
-    Sets a \a brightness adjustment for a video overlay.
-
-    Valid brightness values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::brightnessChanged(int brightness)
-
-    Signals that a video overlay's \a brightness adjustment has changed.
-*/
-
-/*!
-    \fn QVideoWindowControl::contrast() const
-
-    Returns the contrast adjustment applied to a video overlay.
-
-    Valid contrast values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::setContrast(int contrast)
-
-    Sets the \a contrast adjustment for a video overlay.
-
-    Valid contrast values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::contrastChanged(int contrast)
-
-    Signals that a video overlay's \a contrast adjustment has changed.
-*/
-
-/*!
-    \fn QVideoWindowControl::hue() const
-
-    Returns the hue adjustment applied to a video overlay.
-
-    Value hue values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::setHue(int hue)
-
-    Sets a \a hue adjustment for a video overlay.
-
-    Valid hue values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::hueChanged(int hue)
-
-    Signals that a video overlay's \a hue adjustment has changed.
-*/
-
-/*!
-    \fn QVideoWindowControl::saturation() const
-
-    Returns the saturation adjustment applied to a video overlay.
-
-    Value saturation values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::setSaturation(int saturation)
-    Sets a \a saturation adjustment for a video overlay.
-
-    Valid saturation values range between -100 and 100, the default is 0.
-*/
-
-/*!
-    \fn QVideoWindowControl::saturationChanged(int saturation)
-
-    Signals that a video overlay's \a saturation adjustment has changed.
-*/
-
-#include "moc_qvideowindowcontrol.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/base/qvideowindowcontrol.h b/src/multimedia/base/qvideowindowcontrol.h
deleted file mode 100644
index 53f7b0e..0000000
--- a/src/multimedia/base/qvideowindowcontrol.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOWINDOWCONTROL_H
-#define QVIDEOWINDOWCONTROL_H
-
-#include <QtGui/qwidget.h>
-
-#include <QtMultimedia/qmediacontrol.h>
-#include <QtMultimedia/qvideowidget.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class Q_MULTIMEDIA_EXPORT QVideoWindowControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    ~QVideoWindowControl();
-
-    virtual WId winId() const = 0;
-    virtual void setWinId(WId id) = 0;
-
-    virtual QRect displayRect() const = 0;
-    virtual void setDisplayRect(const QRect &rect) = 0;
-
-    virtual bool isFullScreen() const = 0;
-    virtual void setFullScreen(bool fullScreen) = 0;
-
-    virtual void repaint() = 0;
-
-    virtual QSize nativeSize() const = 0;
-
-    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
-    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
-
-    virtual int brightness() const = 0;
-    virtual void setBrightness(int brightness) = 0;
-
-    virtual int contrast() const = 0;
-    virtual void setContrast(int contrast) = 0;
-
-    virtual int hue() const = 0;
-    virtual void setHue(int hue) = 0;
-
-    virtual int saturation() const = 0;
-    virtual void setSaturation(int saturation) = 0;
-
-Q_SIGNALS:
-    void fullScreenChanged(bool fullScreen);
-    void brightnessChanged(int brightness);
-    void contrastChanged(int contrast);
-    void hueChanged(int hue);
-    void saturationChanged(int saturation);
-    void nativeSizeChanged();
-
-protected:
-    QVideoWindowControl(QObject *parent = 0);
-};
-
-#define QVideoWindowControl_iid "com.nokia.Qt.QVideoWindowControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QVideoWindowControl, QVideoWindowControl_iid)
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/effects/effects.pri b/src/multimedia/effects/effects.pri
deleted file mode 100644
index 6307255..0000000
--- a/src/multimedia/effects/effects.pri
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-unix:!mac {
-   contains(QT_CONFIG, pulseaudio) {
-        DEFINES += QT_MULTIMEDIA_PULSEAUDIO
-        HEADERS += $$PWD/qsoundeffect_pulse_p.h
-        SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
-        QMAKE_CXXFLAGS += $$QT_CFLAGS_PULSEAUDIO
-        LIBS += $$QT_LIBS_PULSEAUDIO
-    } else {
-        DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
-        HEADERS += $$PWD/qsoundeffect_qmedia_p.h
-        SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
-    }
-} else {
-    HEADERS += $$PWD/qsoundeffect_qsound_p.h
-    SOURCES += $$PWD/qsoundeffect_qsound_p.cpp
-}
-
-HEADERS += \
-    $$PWD/qsoundeffect_p.h \
-    $$PWD/wavedecoder_p.h
-
-SOURCES += \
-    $$PWD/qsoundeffect.cpp \
-    $$PWD/wavedecoder_p.cpp
diff --git a/src/multimedia/effects/qsoundeffect.cpp b/src/multimedia/effects/qsoundeffect.cpp
deleted file mode 100644
index 8a38103..0000000
--- a/src/multimedia/effects/qsoundeffect.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qsoundeffect_p.h"
-
-#if defined(QT_MULTIMEDIA_PULSEAUDIO)
-#include "qsoundeffect_pulse_p.h"
-#elif(QT_MULTIMEDIA_QMEDIAPLAYER)
-#include "qsoundeffect_qmedia_p.h"
-#else
-#include "qsoundeffect_qsound_p.h"
-#endif
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \qmlclass SoundEffect QSoundEffect
-    \since 4.7
-    \brief The SoundEffect element provides a way to play sound effects in qml.
-
-    This element is part of the \bold{Qt.multimedia 4.7} module.
-
-    The following example plays a wav file on mouse click.
-
-    \qml
-    import Qt 4.6
-    import Qt.multimedia 4.7
-
-    Item {
-        SoundEffect {
-            id: playSound
-            source: "test.wav"
-        }
-        MouseArea {
-            id: playArea
-            anchors.fill: parent
-            onPressed: {
-                playSound.play()
-            }
-        }
-    }
-    \endqml
-*/
-
-/*!
-    \qmlproperty QUrl SoundEffect::source
-
-    This property provides a way to control the sound to play.
-*/
-
-/*!
-    \qmlproperty int SoundEffect::loops
-
-    This property provides a way to control the number of times to repeat the sound on each play().
-*/
-
-/*!
-    \qmlproperty int SoundEffect::volume
-
-    This property provides a way to control the volume for playback.
-*/
-
-/*!
-    \qmlproperty bool SoundEffect::muted
-
-    This property provides a way to control muting.
-*/
-
-/*!
-    \qmlsignal SoundEffect::sourceChanged()
-
-    This handler is called when the source has changed.
-*/
-
-/*!
-    \qmlsignal SoundEffect::loopsChanged()
-
-    This handler is called when the number of loops has changes.
-*/
-
-/*!
-    \qmlsignal SoundEffect::volumeChanged()
-
-    This handler is called when the volume has changed.
-*/
-
-/*!
-    \qmlsignal SoundEffect::mutedChanged()
-
-    This handler is called when the mute state has changed.
-*/
-
-
-QSoundEffect::QSoundEffect(QObject *parent) :
-    QObject(parent)
-{
-    d = new QSoundEffectPrivate(this);
-    connect(d, SIGNAL(volumeChanged()), SIGNAL(volumeChanged()));
-    connect(d, SIGNAL(mutedChanged()), SIGNAL(mutedChanged()));
-}
-
-QSoundEffect::~QSoundEffect()
-{
-    d->deleteLater();
-}
-
-QUrl QSoundEffect::source() const
-{
-    return d->source();
-}
-
-void QSoundEffect::setSource(const QUrl &url)
-{
-    if (d->source() == url)
-        return;
-
-    d->setSource(url);
-
-    emit sourceChanged();
-}
-
-int QSoundEffect::loops() const
-{
-    return d->loopCount();
-}
-
-void QSoundEffect::setLoops(int loopCount)
-{
-    if (d->loopCount() == loopCount)
-        return;
-
-    d->setLoopCount(loopCount);
-    emit loopsChanged();
-}
-
-int QSoundEffect::volume() const
-{
-    return d->volume();
-}
-
-void QSoundEffect::setVolume(int volume)
-{
-    if (d->volume() == volume)
-        return;
-
-    d->setVolume(volume);
-    emit volumeChanged();
-}
-
-bool QSoundEffect::isMuted() const
-{
-    return d->isMuted();
-}
-
-void QSoundEffect::setMuted(bool muted)
-{
-    if (d->isMuted() == muted)
-        return;
-
-    d->setMuted(muted);
-    emit mutedChanged();
-}
-
-void QSoundEffect::play()
-{
-    d->play();
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/effects/qsoundeffect_p.h b/src/multimedia/effects/qsoundeffect_p.h
deleted file mode 100644
index 05207a0..0000000
--- a/src/multimedia/effects/qsoundeffect_p.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_H
-#define QSOUNDEFFECT_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include <QtCore/qobject.h>
-#include <QtCore/qurl.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QSoundEffectPrivate;
-class Q_MULTIMEDIA_EXPORT QSoundEffect : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
-    Q_PROPERTY(int loops READ loops WRITE setLoops NOTIFY loopsChanged)
-    Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged)
-    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
-
-public:
-    explicit QSoundEffect(QObject *parent = 0);
-    ~QSoundEffect();
-
-    QUrl source() const;
-    void setSource(const QUrl &url);
-
-    int loops() const;
-    void setLoops(int loopCount);
-
-    int volume() const;
-    void setVolume(int volume);
-
-    bool isMuted() const;
-    void setMuted(bool muted);
-
-Q_SIGNALS:
-    void sourceChanged();
-    void loopsChanged();
-    void volumeChanged();
-    void mutedChanged();
-
-public Q_SLOTS:
-    void play();
-
-private:
-    Q_DISABLE_COPY(QSoundEffect)
-    QSoundEffectPrivate* d;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-
-#endif // QSOUNDEFFECT_H
diff --git a/src/multimedia/effects/qsoundeffect_pulse_p.cpp b/src/multimedia/effects/qsoundeffect_pulse_p.cpp
deleted file mode 100644
index e379259..0000000
--- a/src/multimedia/effects/qsoundeffect_pulse_p.cpp
+++ /dev/null
@@ -1,499 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qcoreapplication.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtNetwork>
-#include <QTime>
-
-#include "wavedecoder_p.h"
-
-#include "qsoundeffect_pulse_p.h"
-
-#if defined(Q_WS_MAEMO_5)
-#include <pulse/ext-stream-restore.h>
-#endif
-
-#include <unistd.h>
-
-// Less than ideal
-#define PA_SCACHE_ENTRY_SIZE_MAX (1024*1024*16)
-
-QT_BEGIN_NAMESPACE
-
-namespace
-{
-inline pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format)
-{
-    pa_sample_spec  spec;
-
-    spec.rate = format.frequency();
-    spec.channels = format.channels();
-
-    if (format.sampleSize() == 8)
-        spec.format = PA_SAMPLE_U8;
-    else if (format.sampleSize() == 16) {
-        switch (format.byteOrder()) {
-            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S16BE; break;
-            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S16LE; break;
-        }
-    }
-    else if (format.sampleSize() == 32) {
-        switch (format.byteOrder()) {
-            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S32BE; break;
-            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S32LE; break;
-        }
-    }
-
-    return spec;
-}
-
-class PulseDaemon
-{
-public:
-    PulseDaemon():m_prepared(false)
-    {
-        prepare();
-    }
-
-    ~PulseDaemon()
-    {
-        if (m_prepared)
-            release();
-    }
-
-    inline void lock()
-    {
-        pa_threaded_mainloop_lock(m_mainLoop);
-    }
-
-    inline void unlock()
-    {
-        pa_threaded_mainloop_unlock(m_mainLoop);
-    }
-
-    inline pa_context *context() const
-    {
-        return m_context;
-    }
-
-    int volume()
-    {
-        return m_vol;
-    }
-
-private:
-    void prepare()
-    {
-        m_vol = 100;
-
-        m_mainLoop = pa_threaded_mainloop_new();
-        if (m_mainLoop == 0) {
-            qWarning("PulseAudioService: unable to create pulseaudio mainloop");
-            return;
-        }
-
-        if (pa_threaded_mainloop_start(m_mainLoop) != 0) {
-            qWarning("PulseAudioService: unable to start pulseaudio mainloop");
-            pa_threaded_mainloop_free(m_mainLoop);
-            return;
-        }
-
-        m_mainLoopApi = pa_threaded_mainloop_get_api(m_mainLoop);
-
-        lock();
-        m_context = pa_context_new(m_mainLoopApi, QString(QLatin1String("QtPulseAudio:%1")).arg(::getpid()).toAscii().constData());
-
-#if defined(Q_WS_MAEMO_5)
-        pa_context_set_state_callback(m_context, context_state_callback, this);
-#endif
-        if (m_context == 0) {
-            qWarning("PulseAudioService: Unable to create new pulseaudio context");
-            pa_threaded_mainloop_free(m_mainLoop);
-            return;
-        }
-
-        if (pa_context_connect(m_context, NULL, (pa_context_flags_t)0, NULL) < 0) {
-            qWarning("PulseAudioService: pa_context_connect() failed");
-            pa_context_unref(m_context);
-            pa_threaded_mainloop_free(m_mainLoop);
-            return;
-        }
-        unlock();
-
-        m_prepared = true;
-    }
-
-    void release()
-    {
-        if (!m_prepared) return;
-        pa_threaded_mainloop_stop(m_mainLoop);
-        pa_threaded_mainloop_free(m_mainLoop);
-        m_prepared = false;
-    }
-
-#if defined(Q_WS_MAEMO_5)
-    static void context_state_callback(pa_context *c, void *userdata)
-    {
-        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
-        switch (pa_context_get_state(c)) {
-            case PA_CONTEXT_CONNECTING:
-            case PA_CONTEXT_AUTHORIZING:
-            case PA_CONTEXT_SETTING_NAME:
-                break;
-            case PA_CONTEXT_READY:
-                pa_ext_stream_restore_set_subscribe_cb(c, &stream_restore_monitor_callback, self);
-                pa_ext_stream_restore_subscribe(c, 1, NULL, self);
-                break;
-            default:
-                break;
-        }
-    }
-    static void stream_restore_monitor_callback(pa_context *c, void *userdata)
-    {
-        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
-        pa_ext_stream_restore2_read(c, &stream_restore_info_callback, self);
-    }
-    static void stream_restore_info_callback(pa_context *c, const pa_ext_stream_restore2_info *info,
-            int eol, void *userdata)
-    {
-        Q_UNUSED(c)
-
-        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
-
-        if (!eol) {
-            if (QString(info->name).startsWith(QLatin1String("sink-input-by-media-role:x-maemo"))) {
-                const unsigned str_length = 256;
-                char str[str_length];
-                pa_cvolume_snprint(str, str_length, &info->volume);
-                self->m_vol = QString(str).replace(" ","").replace("%","").mid(2).toInt();
-            }
-        }
-    }
-#endif
-
-    int  m_vol;
-    bool m_prepared;
-    pa_context *m_context;
-    pa_threaded_mainloop *m_mainLoop;
-    pa_mainloop_api *m_mainLoopApi;
-};
-}
-
-Q_GLOBAL_STATIC(PulseDaemon, daemon)
-
-
-QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
-    QObject(parent),
-    m_retry(false),
-    m_muted(false),
-    m_playQueued(false),
-    m_sampleLoaded(false),
-    m_volume(100),
-    m_duration(0),
-    m_dataUploaded(0),
-    m_loopCount(1),
-    m_runningCount(0),
-    m_reply(0),
-    m_stream(0),
-    m_networkAccessManager(0)
-{
-}
-
-QSoundEffectPrivate::~QSoundEffectPrivate()
-{
-    m_reply->deleteLater();
-    unloadSample();
-}
-
-QUrl QSoundEffectPrivate::source() const
-{
-    return m_source;
-}
-
-void QSoundEffectPrivate::setSource(const QUrl &url)
-{
-    if (url.isEmpty()) {
-        m_source = QUrl();
-        unloadSample();
-        return;
-    }
-
-    m_source = url;
-
-    if (m_networkAccessManager == 0)
-        m_networkAccessManager = new QNetworkAccessManager(this);
-
-    m_stream = m_networkAccessManager->get(QNetworkRequest(m_source));
-
-    unloadSample();
-    loadSample();
-}
-
-int QSoundEffectPrivate::loopCount() const
-{
-    return m_loopCount;
-}
-
-void QSoundEffectPrivate::setLoopCount(int loopCount)
-{
-    m_loopCount = loopCount;
-}
-
-int QSoundEffectPrivate::volume() const
-{
-    return m_volume;
-}
-
-void QSoundEffectPrivate::setVolume(int volume)
-{
-    m_volume = volume;
-}
-
-bool QSoundEffectPrivate::isMuted() const
-{
-    return m_muted;
-}
-
-void QSoundEffectPrivate::setMuted(bool muted)
-{
-    m_muted = muted;
-}
-
-void QSoundEffectPrivate::play()
-{
-    if (m_retry) {
-        m_retry = false;
-        setSource(m_source);
-        return;
-    }
-
-    if (!m_sampleLoaded) {
-        m_playQueued = true;
-        return;
-    }
-
-    m_runningCount += m_loopCount;
-
-    playSample();
-}
-
-void QSoundEffectPrivate::decoderReady()
-{
-    if (m_waveDecoder->size() >= PA_SCACHE_ENTRY_SIZE_MAX) {
-        m_waveDecoder->deleteLater();
-        qWarning("QSoundEffect(pulseaudio): Attempting to load to large a sample");
-        return;
-    }
-
-    if (m_name.isNull())
-        m_name = QString(QLatin1String("QtPulseSample-%1-%2")).arg(::getpid()).arg(quintptr(this)).toUtf8();
-
-    pa_sample_spec spec = audioFormatToSampleSpec(m_waveDecoder->audioFormat());
-
-    daemon()->lock();
-    pa_stream *stream = pa_stream_new(daemon()->context(), m_name.constData(), &spec, 0);
-    pa_stream_set_state_callback(stream, stream_state_callback, this);
-    pa_stream_set_write_callback(stream, stream_write_callback, this);
-    pa_stream_connect_upload(stream, (size_t)m_waveDecoder->size());
-    m_pulseStream = stream;
-    daemon()->unlock();
-}
-
-void QSoundEffectPrivate::decoderError()
-{
-    qWarning("QSoundEffect(pulseaudio): Error decoding source");
-}
-
-void QSoundEffectPrivate::checkPlayTime()
-{
-    int elapsed = m_playbackTime.elapsed();
-
-    if (elapsed < m_duration)
-        startTimer(m_duration - elapsed);
-}
-
-void QSoundEffectPrivate::loadSample()
-{
-    m_sampleLoaded = false;
-    m_dataUploaded = 0;
-    m_waveDecoder = new WaveDecoder(m_stream);
-    connect(m_waveDecoder, SIGNAL(formatKnown()), SLOT(decoderReady()));
-    connect(m_waveDecoder, SIGNAL(invalidFormat()), SLOT(decoderError()));
-}
-
-void QSoundEffectPrivate::unloadSample()
-{
-    if (!m_sampleLoaded)
-        return;
-
-    daemon()->lock();
-    pa_context_remove_sample(daemon()->context(), m_name.constData(), NULL, NULL);
-    daemon()->unlock();
-
-    m_duration = 0;
-    m_dataUploaded = 0;
-    m_sampleLoaded = false;
-}
-
-void QSoundEffectPrivate::uploadSample()
-{
-    daemon()->lock();
-
-    size_t bufferSize = qMin(pa_stream_writable_size(m_pulseStream),
-            size_t(m_waveDecoder->bytesAvailable()));
-    char buffer[bufferSize];
-
-    size_t len = 0;
-    while (len < (m_waveDecoder->size())) {
-        qint64 read = m_waveDecoder->read(buffer, qMin((int)bufferSize,
-                      (int)(m_waveDecoder->size()-len)));
-        if (read > 0) {
-            if (pa_stream_write(m_pulseStream, buffer, size_t(read), 0, 0, PA_SEEK_RELATIVE) == 0)
-                len += size_t(read);
-            else
-                break;
-        }
-    }
-
-    m_dataUploaded += len;
-    pa_stream_set_write_callback(m_pulseStream, NULL, NULL);
-
-    if (m_waveDecoder->size() == m_dataUploaded) {
-        int err = pa_stream_finish_upload(m_pulseStream);
-        if(err != 0) {
-            qWarning("pa_stream_finish_upload() err=%d",err);
-            pa_stream_disconnect(m_pulseStream);
-            m_retry = true;
-            m_playQueued = false;
-            QMetaObject::invokeMethod(this, "play");
-            daemon()->unlock();
-            return;
-        }
-        m_duration = m_waveDecoder->duration();
-        m_waveDecoder->deleteLater();
-        m_stream->deleteLater();
-        m_sampleLoaded = true;
-        if (m_playQueued) {
-            m_playQueued = false;
-            QMetaObject::invokeMethod(this, "play");
-        }
-    }
-    daemon()->unlock();
-}
-
-void QSoundEffectPrivate::playSample()
-{
-    pa_volume_t volume = PA_VOLUME_NORM;
-
-    daemon()->lock();
-#ifdef Q_WS_MAEMO_5
-    volume = PA_VOLUME_NORM / 100 * ((daemon()->volume() + m_volume) / 2);
-#endif
-    pa_operation_unref(
-            pa_context_play_sample(daemon()->context(),
-                m_name.constData(),
-                0,
-                volume,
-                play_callback,
-                this)
-            );
-    daemon()->unlock();
-
-    m_playbackTime.start();
-}
-
-void QSoundEffectPrivate::timerEvent(QTimerEvent *event)
-{
-    if (m_runningCount > 0)
-        playSample();
-
-    killTimer(event->timerId());
-}
-
-void QSoundEffectPrivate::stream_write_callback(pa_stream *s, size_t length, void *userdata)
-{
-    Q_UNUSED(length);
-
-    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
-
-    QMetaObject::invokeMethod(self, "uploadSample", Qt::QueuedConnection);
-}
-
-void QSoundEffectPrivate::stream_state_callback(pa_stream *s, void *userdata)
-{
-    switch (pa_stream_get_state(s)) {
-        case PA_STREAM_CREATING:
-        case PA_STREAM_READY:
-        case PA_STREAM_TERMINATED:
-            break;
-
-        case PA_STREAM_FAILED:
-        default:
-            qWarning("QSoundEffect(pulseaudio): Error in pulse audio stream");
-            break;
-    }
-}
-
-void QSoundEffectPrivate::play_callback(pa_context *c, int success, void *userdata)
-{
-    Q_UNUSED(c);
-
-    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
-
-    if (success == 1) {
-        self->m_runningCount--;
-        QMetaObject::invokeMethod(self, "checkPlayTime", Qt::QueuedConnection);
-    }
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/effects/qsoundeffect_pulse_p.h b/src/multimedia/effects/qsoundeffect_pulse_p.h
deleted file mode 100644
index aff729c..0000000
--- a/src/multimedia/effects/qsoundeffect_pulse_p.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_PULSE_H
-#define QSOUNDEFFECT_PULSE_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include "qsoundeffect_p.h"
-
-#include <QtCore/qobject.h>
-#include <QtCore/qdatetime.h>
-#include <QtMultimedia/qmediaplayer.h>
-#include <pulse/pulseaudio.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QNetworkReply;
-class QNetworkAccessManager;
-class WaveDecoder;
-
-class QSoundEffectPrivate : public QObject
-{
-    Q_OBJECT
-public:
-    explicit QSoundEffectPrivate(QObject* parent);
-    ~QSoundEffectPrivate();
-
-    QUrl source() const;
-    void setSource(const QUrl &url);
-    int loopCount() const;
-    void setLoopCount(int loopCount);
-    int volume() const;
-    void setVolume(int volume);
-    bool isMuted() const;
-    void setMuted(bool muted);
-
-public Q_SLOTS:
-    void play();
-
-Q_SIGNALS:
-    void volumeChanged();
-    void mutedChanged();
-
-private Q_SLOTS:
-    void decoderReady();
-    void decoderError();
-    void checkPlayTime();
-    void uploadSample();
-
-private:
-    void loadSample();
-    void unloadSample();
-    void playSample();
-
-    void timerEvent(QTimerEvent *event);
-
-    static void stream_write_callback(pa_stream *s, size_t length, void *userdata);
-    static void stream_state_callback(pa_stream *s, void *userdata);
-    static void play_callback(pa_context *c, int success, void *userdata);
-
-    pa_stream *m_pulseStream;
-
-    bool    m_retry;
-    bool    m_muted;
-    bool    m_playQueued;
-    bool    m_sampleLoaded;
-    int     m_volume;
-    int     m_duration;
-    int     m_dataUploaded;
-    int     m_loopCount;
-    int     m_runningCount;
-    QUrl    m_source;
-    QTime  m_playbackTime;
-    QByteArray m_name;
-    QNetworkReply *m_reply;
-    WaveDecoder *m_waveDecoder;
-    QIODevice *m_stream;
-    QNetworkAccessManager *m_networkAccessManager;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QSOUNDEFFECT_PULSE_H
diff --git a/src/multimedia/effects/qsoundeffect_qmedia_p.cpp b/src/multimedia/effects/qsoundeffect_qmedia_p.cpp
deleted file mode 100644
index 36c36dd..0000000
--- a/src/multimedia/effects/qsoundeffect_qmedia_p.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qsoundeffect_qmedia_p.h"
-
-#include <QtCore/qcoreapplication.h>
-
-#include <QtMultimedia/qmediacontent.h>
-#include <QtMultimedia/qmediaplayer.h>
-
-
-QT_BEGIN_NAMESPACE
-
-QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
-    QObject(parent),
-    m_loopCount(1),
-    m_runningCount(0),
-    m_player(0)
-{
-    m_player = new QMediaPlayer(this, QMediaPlayer::LowLatency);
-    connect(m_player, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(stateChanged(QMediaPlayer::State)));
-}
-
-QSoundEffectPrivate::~QSoundEffectPrivate()
-{
-}
-
-QUrl QSoundEffectPrivate::source() const
-{
-    return m_player->media().canonicalUrl();
-}
-
-void QSoundEffectPrivate::setSource(const QUrl &url)
-{
-    m_player->setMedia(url);
-}
-
-int QSoundEffectPrivate::loopCount() const
-{
-    return m_loopCount;
-}
-
-void QSoundEffectPrivate::setLoopCount(int loopCount)
-{
-    m_loopCount = loopCount;
-}
-
-int QSoundEffectPrivate::volume() const
-{
-    return m_player->volume();
-}
-
-void QSoundEffectPrivate::setVolume(int volume)
-{
-    m_player->setVolume(volume);
-}
-
-bool QSoundEffectPrivate::isMuted() const
-{
-    return m_player->isMuted();
-}
-
-void QSoundEffectPrivate::setMuted(bool muted)
-{
-    m_player->setMuted(muted);
-}
-
-void QSoundEffectPrivate::play()
-{
-    m_runningCount += m_loopCount;
-    m_player->play();
-}
-
-void QSoundEffectPrivate::stateChanged(QMediaPlayer::State state)
-{
-    if (state == QMediaPlayer::StoppedState) {
-        if (--m_runningCount > 0)
-            m_player->play();
-    }
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/effects/qsoundeffect_qmedia_p.h b/src/multimedia/effects/qsoundeffect_qmedia_p.h
deleted file mode 100644
index 6ad9d79..0000000
--- a/src/multimedia/effects/qsoundeffect_qmedia_p.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_QMEDIA_H
-#define QSOUNDEFFECT_QMEDIA_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include <QtCore/qobject.h>
-#include <QtCore/qurl.h>
-#include <QtMultimedia/qmediaplayer.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QSoundEffectPrivate : public QObject
-{
-    Q_OBJECT
-public:
-    explicit QSoundEffectPrivate(QObject* parent);
-    ~QSoundEffectPrivate();
-
-    QUrl source() const;
-    void setSource(const QUrl &url);
-    int loopCount() const;
-    void setLoopCount(int loopCount);
-    int volume() const;
-    void setVolume(int volume);
-    bool isMuted() const;
-    void setMuted(bool muted);
-
-public Q_SLOTS:
-    void play();
-
-Q_SIGNALS:
-    void volumeChanged();
-    void mutedChanged();
-
-private Q_SLOTS:
-    void stateChanged(QMediaPlayer::State);
-
-private:
-    int m_loopCount;
-    int m_runningCount;
-    QMediaPlayer *m_player;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QSOUNDEFFECT_QMEDIA_H
diff --git a/src/multimedia/effects/qsoundeffect_qsound_p.cpp b/src/multimedia/effects/qsoundeffect_qsound_p.cpp
deleted file mode 100644
index ff30f67..0000000
--- a/src/multimedia/effects/qsoundeffect_qsound_p.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qsoundeffect_qsound_p.h"
-
-#include <QtCore/qcoreapplication.h>
-#include <QtGui/qsound.h>
-
-
-QT_BEGIN_NAMESPACE
-
-QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
-    QObject(parent),
-    m_muted(false),
-    m_loopCount(1),
-    m_volume(100),
-    m_sound(0)
-{
-}
-
-QSoundEffectPrivate::~QSoundEffectPrivate()
-{
-}
-
-QUrl QSoundEffectPrivate::source() const
-{
-    return m_source;
-}
-
-void QSoundEffectPrivate::setSource(const QUrl &url)
-{
-    if (url.isEmpty() || url.scheme() != QLatin1String("file")) {
-        m_source = QUrl();
-        return;
-    }
-
-    if (m_sound != 0)
-        delete m_sound;
-
-    m_source = url;
-    m_sound = new QSound(m_source.toLocalFile(), this);
-    m_sound->setLoops(m_loopCount);
-}
-
-int QSoundEffectPrivate::loopCount() const
-{
-    return m_loopCount;
-}
-
-void QSoundEffectPrivate::setLoopCount(int lc)
-{
-    m_loopCount = lc;
-    if (m_sound)
-        m_sound->setLoops(lc);
-}
-
-int QSoundEffectPrivate::volume() const
-{
-    return m_volume;
-}
-
-void QSoundEffectPrivate::setVolume(int v)
-{
-    m_volume = v;
-}
-
-bool QSoundEffectPrivate::isMuted() const
-{
-    return m_muted;
-}
-
-void QSoundEffectPrivate::setMuted(bool muted)
-{
-    m_muted = muted;
-}
-
-void QSoundEffectPrivate::play()
-{
-    m_sound->play();
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/effects/qsoundeffect_qsound_p.h b/src/multimedia/effects/qsoundeffect_qsound_p.h
deleted file mode 100644
index 6fb3cfa..0000000
--- a/src/multimedia/effects/qsoundeffect_qsound_p.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QSOUNDEFFECT_QSOUND_H
-#define QSOUNDEFFECT_QSOUND_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-
-#include <QtCore/qobject.h>
-#include <QtCore/qurl.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QSound;
-
-class QSoundEffectPrivate : public QObject
-{
-    Q_OBJECT
-public:
-    explicit QSoundEffectPrivate(QObject* parent);
-    ~QSoundEffectPrivate();
-
-    QUrl source() const;
-    void setSource(const QUrl &url);
-    int loopCount() const;
-    void setLoopCount(int loopCount);
-    int volume() const;
-    void setVolume(int volume);
-    bool isMuted() const;
-    void setMuted(bool muted);
-
-public Q_SLOTS:
-    void play();
-
-Q_SIGNALS:
-    void volumeChanged();
-    void mutedChanged();
-
-private:
-    bool m_muted;
-    int m_loopCount;
-    int m_volume;
-    QSound *m_sound;
-    QUrl m_source;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QSOUNDEFFECT_QSOUND_H
diff --git a/src/multimedia/effects/wavedecoder_p.cpp b/src/multimedia/effects/wavedecoder_p.cpp
deleted file mode 100644
index b534ded..0000000
--- a/src/multimedia/effects/wavedecoder_p.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "wavedecoder_p.h"
-
-#include <QtCore/qtimer.h>
-#include <QtCore/qendian.h>
-
-QT_BEGIN_NAMESPACE
-
-WaveDecoder::WaveDecoder(QIODevice *s, QObject *parent):
-    QIODevice(parent),
-    haveFormat(false),
-    dataSize(0),
-    remaining(0),
-    source(s)
-{
-    open(QIODevice::ReadOnly | QIODevice::Unbuffered);
-
-    if (source->bytesAvailable() >= qint64(sizeof(CombinedHeader) + sizeof(DATAHeader) + sizeof(quint16)))
-        QTimer::singleShot(0, this, SLOT(handleData()));
-    else
-        connect(source, SIGNAL(readyRead()), SLOT(handleData()));
-}
-
-WaveDecoder::~WaveDecoder()
-{
-}
-
-QAudioFormat WaveDecoder::audioFormat() const
-{
-    return format;
-}
-
-int WaveDecoder::duration() const
-{
-    return size() * 1000 / (format.sampleSize() / 8) / format.channels() / format.frequency();
-}
-
-qint64 WaveDecoder::size() const
-{
-    return haveFormat ? dataSize : 0;
-}
-
-bool WaveDecoder::isSequential() const
-{
-    return source->isSequential();
-}
-
-qint64 WaveDecoder::bytesAvailable() const
-{
-    return haveFormat ? source->bytesAvailable() : 0;
-}
-
-qint64 WaveDecoder::readData(char *data, qint64 maxlen)
-{
-    return haveFormat ? source->read(data, maxlen) : 0;
-}
-
-qint64 WaveDecoder::writeData(const char *data, qint64 len)
-{
-    Q_UNUSED(data);
-    Q_UNUSED(len);
-
-    return -1;
-}
-
-void WaveDecoder::handleData()
-{
-    if (source->bytesAvailable() < qint64(sizeof(CombinedHeader) + sizeof(DATAHeader) + sizeof(quint16)))
-        return;
-
-    source->disconnect(SIGNAL(readyRead()), this, SLOT(handleData()));
-    source->read((char*)&header, sizeof(CombinedHeader));
-
-    if (qstrncmp(header.riff.descriptor.id, "RIFF", 4) != 0 ||
-        qstrncmp(header.riff.type, "WAVE", 4) != 0 ||
-        qstrncmp(header.wave.descriptor.id, "fmt ", 4) != 0 ||
-        (header.wave.audioFormat != 0 && header.wave.audioFormat != 1)) {
-
-        emit invalidFormat();
-    }
-    else {
-        DATAHeader dataHeader;
-
-        if (qFromLittleEndian<quint32>(header.wave.descriptor.size) > sizeof(WAVEHeader)) {
-            // Extended data available
-            quint16 extraFormatBytes;
-            source->peek((char*)&extraFormatBytes, sizeof(quint16));
-            extraFormatBytes = qFromLittleEndian<quint16>(extraFormatBytes);
-            source->read(sizeof(quint16) + extraFormatBytes);   // dump it all
-        }
-
-        source->read((char*)&dataHeader, sizeof(DATAHeader));
-
-        int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
-
-        format.setCodec(QLatin1String("audio/pcm"));
-        format.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt);
-        format.setByteOrder(QAudioFormat::LittleEndian);
-        format.setFrequency(qFromLittleEndian<quint32>(header.wave.sampleRate));
-        format.setSampleSize(bps);
-        format.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
-
-        dataSize = qFromLittleEndian<quint32>(dataHeader.descriptor.size);
-
-        haveFormat = true;
-        connect(source, SIGNAL(readyRead()), SIGNAL(readyRead()));
-        emit formatKnown();
-    }
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/effects/wavedecoder_p.h b/src/multimedia/effects/wavedecoder_p.h
deleted file mode 100644
index c1892bb..0000000
--- a/src/multimedia/effects/wavedecoder_p.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef WAVEDECODER_H
-#define WAVEDECODER_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists for the convenience
-// of other Qt classes.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qiodevice.h>
-#include <QtMultimedia/qaudioformat.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class WaveDecoder : public QIODevice
-{
-    Q_OBJECT
-
-public:
-    explicit WaveDecoder(QIODevice *source, QObject *parent = 0);
-    ~WaveDecoder();
-
-    QAudioFormat audioFormat() const;
-    int duration() const;
-
-    qint64 size() const;
-    bool isSequential() const;
-    qint64 bytesAvailable() const;
-
-Q_SIGNALS:
-    void formatKnown();
-    void invalidFormat();
-
-private Q_SLOTS:
-    void handleData();
-
-private:
-    qint64 readData(char *data, qint64 maxlen);
-    qint64 writeData(const char *data, qint64 len);
-
-    struct chunk
-    {
-        char        id[4];
-        quint32     size;
-    };
-    struct RIFFHeader
-    {
-        chunk       descriptor;
-        char        type[4];
-    };
-    struct WAVEHeader
-    {
-        chunk       descriptor;
-        quint16     audioFormat;
-        quint16     numChannels;
-        quint32     sampleRate;
-        quint32     byteRate;
-        quint16     blockAlign;
-        quint16     bitsPerSample;
-    };
-    struct DATAHeader
-    {
-        chunk       descriptor;
-    };
-    struct CombinedHeader
-    {
-        RIFFHeader  riff;
-        WAVEHeader  wave;
-    };
-
-    bool haveFormat;
-    qint64 dataSize;
-    qint64 remaining;
-    QAudioFormat format;
-    QIODevice *source;
-    CombinedHeader header;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // WAVEDECODER_H
diff --git a/src/multimedia/mediaservices/base/base.pri b/src/multimedia/mediaservices/base/base.pri
new file mode 100644
index 0000000..49eca49
--- /dev/null
+++ b/src/multimedia/mediaservices/base/base.pri
@@ -0,0 +1,69 @@
+
+QT += network
+contains(QT_CONFIG, opengl):QT += opengl
+
+HEADERS += \
+    $$PWD/qmediaresource.h \
+    $$PWD/qmediacontent.h \
+    $$PWD/qmediaobject.h \
+    $$PWD/qmediaobject_p.h \
+    $$PWD/qmediapluginloader_p.h \
+    $$PWD/qmediaservice.h \
+    $$PWD/qmediaservice_p.h \
+    $$PWD/qmediaserviceprovider.h \
+    $$PWD/qmediaserviceproviderplugin.h \
+    $$PWD/qmediacontrol.h \
+    $$PWD/qmediacontrol_p.h \
+    $$PWD/qmetadatacontrol.h \
+    $$PWD/qvideooutputcontrol.h \
+    $$PWD/qvideowindowcontrol.h \
+    $$PWD/qvideorenderercontrol.h \
+    $$PWD/qvideodevicecontrol.h \
+    $$PWD/qvideowidgetcontrol.h \
+    $$PWD/qvideowidget.h \
+    $$PWD/qvideowidget_p.h \
+    $$PWD/qgraphicsvideoitem.h \
+    $$PWD/qmediaplaylistcontrol.h \
+    $$PWD/qmediaplaylist.h \
+    $$PWD/qmediaplaylist_p.h \
+    $$PWD/qmediaplaylistprovider.h \
+    $$PWD/qmediaplaylistprovider_p.h \
+    $$PWD/qmediaplaylistioplugin.h \
+    $$PWD/qlocalmediaplaylistprovider.h \
+    $$PWD/qmediaplaylistnavigator.h \
+    $$PWD/qpaintervideosurface_p.h \
+    $$PWD/qmediatimerange.h \
+    $$PWD/qtmedianamespace.h
+
+SOURCES += \
+    $$PWD/qmediaresource.cpp \
+    $$PWD/qmediacontent.cpp \
+    $$PWD/qmediaobject.cpp \
+    $$PWD/qmediapluginloader.cpp \
+    $$PWD/qmediaservice.cpp \
+    $$PWD/qmediaserviceprovider.cpp \
+    $$PWD/qmediacontrol.cpp \
+    $$PWD/qmetadatacontrol.cpp \
+    $$PWD/qvideooutputcontrol.cpp \
+    $$PWD/qvideowindowcontrol.cpp \
+    $$PWD/qvideorenderercontrol.cpp \
+    $$PWD/qvideodevicecontrol.cpp \
+    $$PWD/qvideowidgetcontrol.cpp \
+    $$PWD/qvideowidget.cpp \
+    $$PWD/qgraphicsvideoitem.cpp \
+    $$PWD/qmediaplaylistcontrol.cpp \
+    $$PWD/qmediaplaylist.cpp \
+    $$PWD/qmediaplaylistprovider.cpp \
+    $$PWD/qmediaplaylistioplugin.cpp \
+    $$PWD/qlocalmediaplaylistprovider.cpp \
+    $$PWD/qmediaplaylistnavigator.cpp \
+    $$PWD/qpaintervideosurface.cpp \
+    $$PWD/qmediatimerange.cpp
+
+mac {
+    HEADERS += $$PWD/qpaintervideosurface_mac_p.h
+    OBJECTIVE_SOURCES += $$PWD/qpaintervideosurface_mac.mm
+
+    LIBS += -framework AppKit -framework QuartzCore -framework QTKit
+
+}
diff --git a/src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp b/src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp
new file mode 100644
index 0000000..05070f8
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp
@@ -0,0 +1,437 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservies module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qgraphicsvideoitem.h>
+
+#include <QtMediaservices/qmediaobject.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/private/qpaintervideosurface_p.h>
+#include <QtMediaservices/qvideooutputcontrol.h>
+#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMultimedia/qvideosurfaceformat.h>
+
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+#include <QtOpenGL/qgl.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+
+class QGraphicsVideoItemPrivate
+{
+public:
+    QGraphicsVideoItemPrivate()
+        : q_ptr(0)
+        , surface(0)
+        , mediaObject(0)
+        , service(0)
+        , outputControl(0)
+        , rendererControl(0)
+        , aspectRatioMode(Qt::KeepAspectRatio)
+        , updatePaintDevice(true)
+        , rect(0.0, 0.0, 320, 240)
+    {
+    }
+
+    QGraphicsVideoItem *q_ptr;
+
+    QPainterVideoSurface *surface;
+    QMediaObject *mediaObject;
+    QMediaService *service;
+    QVideoOutputControl *outputControl;
+    QVideoRendererControl *rendererControl;
+    Qt::AspectRatioMode aspectRatioMode;
+    bool updatePaintDevice;
+    QRectF rect;
+    QRectF boundingRect;
+    QRectF sourceRect;
+    QSizeF nativeSize;
+
+    void clearService();
+    void updateRects();
+
+    void _q_present();
+    void _q_formatChanged(const QVideoSurfaceFormat &format);
+    void _q_serviceDestroyed();
+    void _q_mediaObjectDestroyed();
+};
+
+void QGraphicsVideoItemPrivate::clearService()
+{
+    if (outputControl) {
+        outputControl->setOutput(QVideoOutputControl::NoOutput);
+        outputControl = 0;
+    }
+    if (rendererControl) {
+        surface->stop();
+        rendererControl->setSurface(0);
+        rendererControl = 0;
+    }
+    if (service) {
+        QObject::disconnect(service, SIGNAL(destroyed()), q_ptr, SLOT(_q_serviceDestroyed()));
+        service = 0;
+    }
+}
+
+void QGraphicsVideoItemPrivate::updateRects()
+{
+    q_ptr->prepareGeometryChange();
+
+    if (nativeSize.isEmpty()) {
+        boundingRect = QRectF();
+    } else if (aspectRatioMode == Qt::IgnoreAspectRatio) {
+        boundingRect = rect;
+        sourceRect = QRectF(0, 0, 1, 1);
+    } else if (aspectRatioMode == Qt::KeepAspectRatio) {
+        QSizeF size = nativeSize;
+        size.scale(rect.size(), Qt::KeepAspectRatio);
+
+        boundingRect = QRectF(0, 0, size.width(), size.height());
+        boundingRect.moveCenter(rect.center());
+
+        sourceRect = QRectF(0, 0, 1, 1);
+    } else if (aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
+        boundingRect = rect;
+
+        QSizeF size = rect.size();
+        size.scale(nativeSize, Qt::KeepAspectRatio);
+
+        sourceRect = QRectF(
+                0, 0, size.width() / nativeSize.width(), size.height() / nativeSize.height());
+        sourceRect.moveCenter(QPointF(0.5, 0.5));
+    }
+}
+
+void QGraphicsVideoItemPrivate::_q_present()
+{
+    if (q_ptr->isObscured()) {
+        q_ptr->update(boundingRect);
+        surface->setReady(true);
+    } else {
+        q_ptr->update(boundingRect);
+    }
+}
+
+void QGraphicsVideoItemPrivate::_q_formatChanged(const QVideoSurfaceFormat &format)
+{
+    nativeSize = format.sizeHint();
+
+    updateRects();
+
+    emit q_ptr->nativeSizeChanged(nativeSize);
+}
+
+void QGraphicsVideoItemPrivate::_q_serviceDestroyed()
+{
+    rendererControl = 0;
+    outputControl = 0;
+    service = 0;
+
+    surface->stop();
+}
+
+void QGraphicsVideoItemPrivate::_q_mediaObjectDestroyed()
+{
+    mediaObject = 0;
+
+    clearService();
+}
+
+/*!
+    \class QGraphicsVideoItem
+    \brief The QGraphicsVideoItem class provides a graphics item which display video produced by a QMediaObject.
+
+    \since 4.7
+
+    \ingroup multimedia
+
+    Attaching a QGraphicsVideoItem to a QMediaObject allows it to display
+    the video or image output of that media object.  A QGraphicsVideoItem
+    is attached to a media object by passing a pointer to the QMediaObject
+    to the setMediaObject() function.
+
+    \code
+    player = new QMediaPlayer(this);
+
+    QGraphicsVideoItem *item = new QGraphicsVideoItem;
+    item->setMediaObject(player);
+    graphicsView->scence()->addItem(item);
+    graphicsView->show();
+
+    player->setMedia(video);
+    player->play();
+    \endcode
+
+    \bold {Note}: Only a single display output can be attached to a media
+    object at one time.
+
+    \sa QMediaObject, QMediaPlayer, QVideoWidget
+*/
+
+/*!
+    Constructs a graphics item that displays video.
+
+    The \a parent is passed to QGraphicsItem.
+*/
+QGraphicsVideoItem::QGraphicsVideoItem(QGraphicsItem *parent)
+    : QGraphicsObject(parent)
+    , d_ptr(new QGraphicsVideoItemPrivate)
+{
+    d_ptr->q_ptr = this;
+    d_ptr->surface = new QPainterVideoSurface;
+
+    connect(d_ptr->surface, SIGNAL(frameChanged()), this, SLOT(_q_present()));
+    connect(d_ptr->surface, SIGNAL(surfaceFormatChanged(QVideoSurfaceFormat)),
+            this, SLOT(_q_formatChanged(QVideoSurfaceFormat)));
+}
+
+/*!
+    Destroys a video graphics item.
+*/
+QGraphicsVideoItem::~QGraphicsVideoItem()
+{
+    if (d_ptr->outputControl)
+        d_ptr->outputControl->setOutput(QVideoOutputControl::NoOutput);
+
+    if (d_ptr->rendererControl)
+        d_ptr->rendererControl->setSurface(0);
+
+    delete d_ptr->surface;
+    delete d_ptr;
+}
+
+/*!
+    \property QGraphicsVideoItem::mediaObject
+    \brief the media object which provides the video displayed by a graphics
+    item.
+*/
+
+QMediaObject *QGraphicsVideoItem::mediaObject() const
+{
+    return d_func()->mediaObject;
+}
+
+void QGraphicsVideoItem::setMediaObject(QMediaObject *object)
+{
+    Q_D(QGraphicsVideoItem);
+
+    if (object == d->mediaObject)
+        return;
+
+    d->clearService();
+
+    if (d->mediaObject) {
+        disconnect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
+        d->mediaObject->unbind(this);
+    }
+
+    d->mediaObject = object;
+
+    if (d->mediaObject) {
+        d->mediaObject->bind(this);
+
+        connect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
+
+        d->service = d->mediaObject->service();
+
+        if (d->service) {
+            connect(d->service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed()));
+
+            d->outputControl = qobject_cast<QVideoOutputControl *>(
+                    d->service->control(QVideoOutputControl_iid));
+            d->rendererControl = qobject_cast<QVideoRendererControl *>(
+                    d->service->control(QVideoRendererControl_iid));
+
+            if (d->outputControl != 0 && d->rendererControl != 0) {
+                d->rendererControl->setSurface(d->surface);
+
+                if (isVisible())
+                    d->outputControl->setOutput(QVideoOutputControl::RendererOutput);
+            }
+        }
+    }
+}
+
+/*!
+    \property QGraphicsVideoItem::aspectRatioMode
+    \brief how a video is scaled to fit the graphics item's size.
+*/
+
+Qt::AspectRatioMode QGraphicsVideoItem::aspectRatioMode() const
+{
+    return d_func()->aspectRatioMode;
+}
+
+void QGraphicsVideoItem::setAspectRatioMode(Qt::AspectRatioMode mode)
+{
+    Q_D(QGraphicsVideoItem);
+
+    d->aspectRatioMode = mode;
+    d->updateRects();
+}
+
+/*!
+    \property QGraphicsVideoItem::offset
+    \brief the video item's offset.
+
+    QGraphicsVideoItem will draw video using the offset for its top left
+    corner.
+*/
+
+QPointF QGraphicsVideoItem::offset() const
+{
+    return d_func()->rect.topLeft();
+}
+
+void QGraphicsVideoItem::setOffset(const QPointF &offset)
+{
+    Q_D(QGraphicsVideoItem);
+
+    d->rect.moveTo(offset);
+    d->updateRects();
+}
+
+/*!
+    \property QGraphicsVideoItem::size
+    \brief the video item's size.
+
+    QGraphicsVideoItem will draw video scaled to fit size according to its
+    fillMode.
+*/
+
+QSizeF QGraphicsVideoItem::size() const
+{
+    return d_func()->rect.size();
+}
+
+void QGraphicsVideoItem::setSize(const QSizeF &size)
+{
+    Q_D(QGraphicsVideoItem);
+
+    d->rect.setSize(size.isValid() ? size : QSizeF(0, 0));
+    d->updateRects();
+}
+
+/*!
+    \property QGraphicsVideoItem::nativeSize
+    \brief the native size of the video.
+*/
+
+QSizeF QGraphicsVideoItem::nativeSize() const
+{
+    return d_func()->nativeSize;
+}
+
+/*!
+    \fn QGraphicsVideoItem::nativeSizeChanged(const QSizeF &size)
+
+    Signals that the native \a size of the video has changed.
+*/
+
+/*!
+    \reimp
+*/
+QRectF QGraphicsVideoItem::boundingRect() const
+{
+    return d_func()->boundingRect;
+}
+
+/*!
+    \reimp
+*/
+void QGraphicsVideoItem::paint(
+        QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+    Q_D(QGraphicsVideoItem);
+
+    Q_UNUSED(option);
+    Q_UNUSED(widget);
+
+    if (d->surface && d->surface->isActive()) {
+        d->surface->paint(painter, d->boundingRect, d->sourceRect);
+        d->surface->setReady(true);
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+    } else if (d->updatePaintDevice && (painter->paintEngine()->type() == QPaintEngine::OpenGL
+            || painter->paintEngine()->type() == QPaintEngine::OpenGL2)) {
+        d->updatePaintDevice = false;
+
+        d->surface->setGLContext(const_cast<QGLContext *>(QGLContext::currentContext()));
+        if (d->surface->supportedShaderTypes() & QPainterVideoSurface::GlslShader) {
+            d->surface->setShaderType(QPainterVideoSurface::GlslShader);
+        } else {
+            d->surface->setShaderType(QPainterVideoSurface::FragmentProgramShader);
+        }
+#endif
+    }
+}
+
+/*!
+    \reimp
+
+    \internal
+*/
+QVariant QGraphicsVideoItem::itemChange(GraphicsItemChange change, const QVariant &value)
+{
+    return QGraphicsObject::itemChange(change, value);
+}
+
+/*!
+    \reimp
+
+    \internal
+*/
+bool QGraphicsVideoItem::event(QEvent *event)
+{
+    return QGraphicsObject::event(event);
+}
+
+/*!
+    \reimp
+
+    \internal
+*/
+bool QGraphicsVideoItem::sceneEvent(QEvent *event)
+{
+    return QGraphicsObject::sceneEvent(event);
+}
+
+QT_END_NAMESPACE
+#include "moc_qgraphicsvideoitem.cpp"
diff --git a/src/multimedia/mediaservices/base/qgraphicsvideoitem.h b/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
new file mode 100644
index 0000000..c0d8f7a
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGRAPHICSVIDEOITEM_H
+#define QGRAPHICSVIDEOITEM_H
+
+#include <QtGui/qgraphicsitem.h>
+
+#include <QtMediaservices/qvideowidget.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QVideoSurfaceFormat;
+
+class QGraphicsVideoItemPrivate;
+class Q_MULTIMEDIA_EXPORT QGraphicsVideoItem : public QGraphicsObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QMediaObject* mediaObject READ mediaObject WRITE setMediaObject)
+    Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode WRITE setAspectRatioMode)
+    Q_PROPERTY(QPointF offset READ offset WRITE setOffset)
+    Q_PROPERTY(QSizeF size READ size WRITE setSize)
+    Q_PROPERTY(QSizeF nativeSize READ nativeSize NOTIFY nativeSizeChanged)
+public:
+    QGraphicsVideoItem(QGraphicsItem *parent = 0);
+    ~QGraphicsVideoItem();
+
+    QMediaObject *mediaObject() const;
+    void setMediaObject(QMediaObject *object);
+
+    Qt::AspectRatioMode aspectRatioMode() const;
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+
+    QPointF offset() const;
+    void setOffset(const QPointF &offset);
+
+    QSizeF size() const;
+    void setSize(const QSizeF &size);
+
+    QSizeF nativeSize() const;
+
+    QRectF boundingRect() const;
+
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+
+Q_SIGNALS:
+    void nativeSizeChanged(const QSizeF &size);
+
+protected:
+    bool event(QEvent *event);
+    bool sceneEvent(QEvent *event);
+
+    QVariant itemChange(GraphicsItemChange change, const QVariant &value);
+
+    QGraphicsVideoItemPrivate *d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(QGraphicsVideoItem)
+    Q_PRIVATE_SLOT(d_func(), void _q_present())
+    Q_PRIVATE_SLOT(d_func(), void _q_formatChanged(const QVideoSurfaceFormat &))
+    Q_PRIVATE_SLOT(d_func(), void _q_serviceDestroyed())
+    Q_PRIVATE_SLOT(d_func(), void _q_mediaObjectDestroyed())
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp
new file mode 100644
index 0000000..818b285
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices  module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qlocalmediaplaylistprovider.h>
+#include "qmediaplaylistprovider_p.h"
+#include <QtMediaservices/qmediacontent.h>
+
+
+QT_BEGIN_NAMESPACE
+
+class QLocalMediaPlaylistProviderPrivate: public QMediaPlaylistProviderPrivate
+{
+public:
+    QList<QMediaContent> resources;
+};
+
+QLocalMediaPlaylistProvider::QLocalMediaPlaylistProvider(QObject *parent)
+    :QMediaPlaylistProvider(*new QLocalMediaPlaylistProviderPrivate, parent)
+{
+}
+
+QLocalMediaPlaylistProvider::~QLocalMediaPlaylistProvider()
+{
+}
+
+bool QLocalMediaPlaylistProvider::isReadOnly() const
+{
+    return false;
+}
+
+int QLocalMediaPlaylistProvider::mediaCount() const
+{
+    return d_func()->resources.size();
+}
+
+QMediaContent QLocalMediaPlaylistProvider::media(int pos) const
+{
+    return d_func()->resources.value(pos);
+}
+
+bool QLocalMediaPlaylistProvider::addMedia(const QMediaContent &content)
+{
+    Q_D(QLocalMediaPlaylistProvider);
+
+    int pos = d->resources.count();
+
+    emit mediaAboutToBeInserted(pos, pos);
+    d->resources.append(content);
+    emit mediaInserted(pos, pos);
+
+    return true;
+}
+
+bool QLocalMediaPlaylistProvider::addMedia(const QList<QMediaContent> &items)
+{
+    Q_D(QLocalMediaPlaylistProvider);
+
+    if (items.isEmpty())
+        return true;
+
+    int pos = d->resources.count();
+    int end = pos+items.count()-1;
+
+    emit mediaAboutToBeInserted(pos, end);
+    d->resources.append(items);
+    emit mediaInserted(pos, end);
+
+    return true;
+}
+
+
+bool QLocalMediaPlaylistProvider::insertMedia(int pos, const QMediaContent &content)
+{
+    Q_D(QLocalMediaPlaylistProvider);
+
+    emit mediaAboutToBeInserted(pos, pos);
+    d->resources.insert(pos, content);
+    emit mediaInserted(pos,pos);
+
+    return true;
+}
+
+bool QLocalMediaPlaylistProvider::insertMedia(int pos, const QList<QMediaContent> &items)
+{
+    Q_D(QLocalMediaPlaylistProvider);
+
+    if (items.isEmpty())
+        return true;
+
+    const int last = pos+items.count()-1;
+
+    emit mediaAboutToBeInserted(pos, last);
+    for (int i=0; i<items.count(); i++)
+        d->resources.insert(pos+i, items.at(i));
+    emit mediaInserted(pos, last);
+
+    return true;
+}
+
+bool QLocalMediaPlaylistProvider::removeMedia(int fromPos, int toPos)
+{
+    Q_D(QLocalMediaPlaylistProvider);
+
+    Q_ASSERT(fromPos >= 0);
+    Q_ASSERT(fromPos <= toPos);
+    Q_ASSERT(toPos < mediaCount());
+
+    emit mediaAboutToBeRemoved(fromPos, toPos);
+    d->resources.erase(d->resources.begin()+fromPos, d->resources.begin()+toPos+1);
+    emit mediaRemoved(fromPos, toPos);
+
+    return true;
+}
+
+bool QLocalMediaPlaylistProvider::removeMedia(int pos)
+{
+    Q_D(QLocalMediaPlaylistProvider);
+
+    emit mediaAboutToBeRemoved(pos, pos);
+    d->resources.removeAt(pos);
+    emit mediaRemoved(pos, pos);
+
+    return true;
+}
+
+bool QLocalMediaPlaylistProvider::clear()
+{
+    Q_D(QLocalMediaPlaylistProvider);
+    if (!d->resources.isEmpty()) {
+        int lastPos = mediaCount()-1;
+        emit mediaAboutToBeRemoved(0, lastPos);
+        d->resources.clear();
+        emit mediaRemoved(0, lastPos);
+    }
+
+    return true;
+}
+
+void QLocalMediaPlaylistProvider::shuffle()
+{
+    Q_D(QLocalMediaPlaylistProvider);
+    if (!d->resources.isEmpty()) {
+        QList<QMediaContent> resources;
+
+        while (!d->resources.isEmpty()) {
+            resources.append(d->resources.takeAt(qrand() % d->resources.size()));
+        }
+
+        d->resources = resources;
+        emit mediaChanged(0, mediaCount()-1);
+    }
+
+}
+
+#include "moc_qlocalmediaplaylistprovider.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
new file mode 100644
index 0000000..73ff82d
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLOCALMEDIAPAYLISTPROVIDER_H
+#define QLOCALMEDIAPAYLISTPROVIDER_H
+
+#include <QtMediaservices/qmediaplaylistprovider.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QLocalMediaPlaylistProviderPrivate;
+class Q_MULTIMEDIA_EXPORT QLocalMediaPlaylistProvider : public QMediaPlaylistProvider
+{
+    Q_OBJECT
+
+public:
+    QLocalMediaPlaylistProvider(QObject *parent=0);
+    virtual ~QLocalMediaPlaylistProvider();
+
+    virtual int mediaCount() const;
+    virtual QMediaContent media(int pos) const;
+
+    virtual bool isReadOnly() const;
+
+    virtual bool addMedia(const QMediaContent &content);
+    virtual bool addMedia(const QList<QMediaContent> &items);
+    virtual bool insertMedia(int pos, const QMediaContent &content);
+    virtual bool insertMedia(int pos, const QList<QMediaContent> &items);
+    virtual bool removeMedia(int pos);
+    virtual bool removeMedia(int start, int end);
+    virtual bool clear();
+
+public Q_SLOTS:
+    virtual void shuffle();
+
+private:
+    Q_DECLARE_PRIVATE(QLocalMediaPlaylistProvider)
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QLOCALMEDIAPAYLISTSOURCE_H
diff --git a/src/multimedia/mediaservices/base/qmediacontent.cpp b/src/multimedia/mediaservices/base/qmediacontent.cpp
new file mode 100644
index 0000000..f89e901
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediacontent.cpp
@@ -0,0 +1,242 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qurl.h>
+#include <QtCore/qvariant.h>
+
+#include <QtMediaservices/qmediacontent.h>
+
+
+QT_BEGIN_NAMESPACE
+
+
+class QMediaContentPrivate : public QSharedData
+{
+public:
+    QMediaContentPrivate() {}
+    QMediaContentPrivate(const QMediaResourceList &r):
+        resources(r) {}
+
+    QMediaContentPrivate(const QMediaContentPrivate &other):
+        QSharedData(other),
+        resources(other.resources)
+    {}
+
+    bool operator==(const QMediaContentPrivate &other) const
+    {
+        return resources == other.resources;
+    }
+
+    QMediaResourceList  resources;
+
+private:
+    QMediaContentPrivate& operator=(const QMediaContentPrivate &other);
+};
+
+
+/*!
+    \class QMediaContent
+    \preliminary
+    \brief The QMediaContent class provides access to the resources relating to a media content.
+    \since 4.7
+
+    \ingroup multimedia
+
+    QMediaContent is used within the multimedia framework as the logical handle
+    to media content.  A QMediaContent object is composed of one or more
+    \l {QMediaResource}s where each resource provides the URL and format
+    information of a different encoding of the content.
+
+    A non-null QMediaContent will always have a primary or canonical reference to
+    the content available through the canonicalUrl() or canonicalResource()
+    methods, any additional resources are optional.
+*/
+
+
+/*!
+    Constructs a null QMediaContent.
+*/
+
+QMediaContent::QMediaContent()
+{
+}
+
+/*!
+    Constructs a media content with \a url providing a reference to the content.
+*/
+
+QMediaContent::QMediaContent(const QUrl &url):
+    d(new QMediaContentPrivate)
+{
+    d->resources << QMediaResource(url);
+}
+
+/*!
+    Constructs a media content with \a request providing a reference to the content.
+
+    This constructor can be used to reference media content via network protocols such as HTTP.
+    This may include additional information required to obtain the resource, such as Cookies or HTTP headers.
+*/
+
+QMediaContent::QMediaContent(const QNetworkRequest &request):
+    d(new QMediaContentPrivate)
+{
+    d->resources << QMediaResource(request);
+}
+
+/*!
+    Constructs a media content with \a resource providing a reference to the content.
+*/
+
+QMediaContent::QMediaContent(const QMediaResource &resource):
+    d(new QMediaContentPrivate)
+{
+    d->resources << resource;
+}
+
+/*!
+    Constructs a media content with \a resources providing a reference to the content.
+*/
+
+QMediaContent::QMediaContent(const QMediaResourceList &resources):
+    d(new QMediaContentPrivate(resources))
+{
+}
+
+/*!
+    Constructs a copy of the media content \a other.
+*/
+
+QMediaContent::QMediaContent(const QMediaContent &other):
+    d(other.d)
+{
+}
+
+/*!
+    Destroys the media content object.
+*/
+
+QMediaContent::~QMediaContent()
+{
+}
+
+/*!
+    Assigns the value of \a other to this media content.
+*/
+
+QMediaContent& QMediaContent::operator=(const QMediaContent &other)
+{
+    d = other.d;
+    return *this;
+}
+
+/*!
+    Returns true if \a other is equivalent to this media content; false otherwise.
+*/
+
+bool QMediaContent::operator==(const QMediaContent &other) const
+{
+    return (d.constData() == 0 && other.d.constData() == 0) ||
+            (d.constData() != 0 && other.d.constData() != 0 &&
+             *d.constData() == *other.d.constData());
+}
+
+/*!
+    Returns true if \a other is not equivalent to this media content; false otherwise.
+*/
+
+bool QMediaContent::operator!=(const QMediaContent &other) const
+{
+    return !(*this == other);
+}
+
+/*!
+    Returns true if this media content is null (uninitialized); false otherwise.
+*/
+
+bool QMediaContent::isNull() const
+{
+    return d.constData() == 0;
+}
+
+/*!
+    Returns a QUrl that represents that canonical resource for this media content.
+*/
+
+QUrl QMediaContent::canonicalUrl() const
+{
+    return canonicalResource().url();
+}
+
+/*!
+    Returns a QNetworkRequest that represents that canonical resource for this media content.
+*/
+
+QNetworkRequest QMediaContent::canonicalRequest() const
+{
+    return canonicalResource().request();
+}
+
+/*!
+    Returns a QMediaResource that represents that canonical resource for this media content.
+*/
+
+QMediaResource QMediaContent::canonicalResource() const
+{
+    return d.constData() != 0
+            ?  d->resources.value(0)
+            : QMediaResource();
+}
+
+/*!
+    Returns a list of alternative resources for this media content.  The first item in this list
+    is always the canonical resource.
+*/
+
+QMediaResourceList QMediaContent::resources() const
+{
+    return d.constData() != 0
+            ? d->resources
+            : QMediaResourceList();
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediacontent.h b/src/multimedia/mediaservices/base/qmediacontent.h
new file mode 100644
index 0000000..20f0525
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediacontent.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIACONTENT_H
+#define QMEDIACONTENT_H
+
+#include <QtCore/qmetatype.h>
+#include <QtCore/qshareddata.h>
+
+#include <QtMediaservices/qmediaresource.h>
+#include <QtNetwork/qnetworkrequest.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMediaContentPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaContent
+{
+public:
+    QMediaContent();
+    QMediaContent(const QUrl &contentUrl);
+    QMediaContent(const QNetworkRequest &contentRequest);
+    QMediaContent(const QMediaResource &contentResource);
+    QMediaContent(const QMediaResourceList &resources);
+    QMediaContent(const QMediaContent &other);
+    ~QMediaContent();
+
+    QMediaContent& operator=(const QMediaContent &other);
+
+    bool operator==(const QMediaContent &other) const;
+    bool operator!=(const QMediaContent &other) const;
+
+    bool isNull() const;
+
+    QUrl canonicalUrl() const;
+    QNetworkRequest canonicalRequest() const;
+    QMediaResource canonicalResource() const;
+
+    QMediaResourceList resources() const;
+
+private:
+    QSharedDataPointer<QMediaContentPrivate> d;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QMediaContent)
+
+QT_END_HEADER
+
+#endif  // QMEDIACONTENT_H
diff --git a/src/multimedia/mediaservices/base/qmediacontrol.cpp b/src/multimedia/mediaservices/base/qmediacontrol.cpp
new file mode 100644
index 0000000..98db9fe
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediacontrol.cpp
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qtimer.h>
+
+#include <QtMediaservices//qmediacontrol.h>
+#include <QtMediaservices/private/qmediacontrol_p.h>
+
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QMediaControl
+    \ingroup multimedia-serv
+    \since 4.7
+
+    \preliminary
+    \brief The QMediaControl class provides a base interface for media service controls.
+
+    Media controls provide an interface to individual features provided by a media service.  Most
+    services implement a principal control which exposes the core functionality of the service and
+    a number optional controls which expose any additional functionality.
+
+    A pointer to a control implemented by a media service can be obtained using the
+    \l {QMediaService::control()}{control()} member of QMediaService.  If the service doesn't
+    implement a control it will instead return a null pointer.
+
+    \code
+    QMediaPlayerControl *control = qobject_cast<QMediaPlayerControl *>(
+            service->control("com.nokia.Qt.QMediaPlayerControl/1.0"));
+    \endcode
+
+    Alternatively if the IId of the control has been declared using Q_MEDIA_DECLARE_CONTROL
+    the template version of QMediaService::control() can be used to request the service without
+    explicitly passing the IId.
+
+    \code
+    QMediaPlayerControl *control = service->control<QMediaPlayerControl *>();
+    \endcode
+
+    Most application code will not interface directly with a media service's controls, instead the
+    QMediaObject which owns the service acts as an intermeditary between one or more controls and
+    the application.
+
+    \sa QMediaService, QMediaObject
+*/
+
+/*!
+    \macro Q_MEDIA_DECLARE_CONTROL(Class, IId)
+    \relates QMediaControl
+
+    The Q_MEDIA_DECLARE_CONTROL macro declares an \a IId for a \a Class that inherits from
+    QMediaControl.
+
+    Declaring an IId for a QMediaControl allows an instance of that control to be requested from
+    QMediaService::control() without explicitly passing the IId.
+
+    \code
+    QMediaPlayerControl *control = service->control<QMediaPlayerControl *>();
+    \endcode
+
+    \sa QMediaService::control()
+*/
+
+/*!
+    Destroys a media control.
+*/
+
+QMediaControl::~QMediaControl()
+{
+    delete d_ptr;
+}
+
+/*!
+    Constructs a media control with the given \a parent.
+*/
+
+QMediaControl::QMediaControl(QObject *parent)
+    : QObject(parent)
+    , d_ptr(new QMediaControlPrivate)
+{
+    d_ptr->q_ptr = this;
+}
+
+/*!
+    \internal
+*/
+
+QMediaControl::QMediaControl(QMediaControlPrivate &dd, QObject *parent)
+    : QObject(parent)
+    , d_ptr(&dd)
+
+{
+    d_ptr->q_ptr = this;
+}
+
+#include "moc_qmediacontrol.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediacontrol.h b/src/multimedia/mediaservices/base/qmediacontrol.h
new file mode 100644
index 0000000..be5d95d
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediacontrol.h
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTMEDIACONTROL_H
+#define QABSTRACTMEDIACONTROL_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qvariant.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMediaControlPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaControl : public QObject
+{
+    Q_OBJECT
+
+public:
+    ~QMediaControl();
+
+protected:
+    QMediaControl(QObject *parent = 0);
+    QMediaControl(QMediaControlPrivate &dd, QObject *parent = 0);
+
+    QMediaControlPrivate *d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(QMediaControl)
+};
+
+template <typename T> const char *qmediacontrol_iid() { return 0; }
+
+#define Q_MEDIA_DECLARE_CONTROL(Class, IId) \
+    template <> inline const char *qmediacontrol_iid<Class *>() { return IId; }
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QABSTRACTMEDIACONTROL_H
diff --git a/src/multimedia/mediaservices/base/qmediacontrol_p.h b/src/multimedia/mediaservices/base/qmediacontrol_p.h
new file mode 100644
index 0000000..ad7e947
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediacontrol_p.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTMEDIACONTROL_P_H
+#define QABSTRACTMEDIACONTROL_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMediaControl;
+
+class QMediaControlPrivate
+{
+public:
+    virtual ~QMediaControlPrivate() {}
+
+    QMediaControl *q_ptr;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qmediaobject.cpp b/src/multimedia/mediaservices/base/qmediaobject.cpp
new file mode 100644
index 0000000..3d92b12
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaobject.cpp
@@ -0,0 +1,419 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservics module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qmetaobject.h>
+
+#include "qmediaobject_p.h"
+
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qmetadatacontrol.h>
+
+
+QT_BEGIN_NAMESPACE
+
+void QMediaObjectPrivate::_q_notify()
+{
+    Q_Q(QMediaObject);
+
+    const QMetaObject* m = q->metaObject();
+
+    foreach (int pi, notifyProperties) {
+        QMetaProperty p = m->property(pi);
+        p.notifySignal().invoke(
+            q, QGenericArgument(QMetaType::typeName(p.userType()), p.read(q).data()));
+    }
+}
+
+
+/*!
+    \class QMediaObject
+    \preliminary
+    \brief The QMediaObject class provides a common base for multimedia objects.
+    \since 4.7
+
+    \ingroup multimedia
+
+    QMediaObject derived classes provide access to the functionality of a
+    QMediaService.  Each media object hosts a QMediaService and uses the
+    QMediaControl interfaces implemented by the service to implement its
+    API.  Most media objects when constructed will request a new
+    QMediaService instance from a QMediaServiceProvider, but some like
+    QMediaRecorder will share a service with another object.
+
+    QMediaObject itself provides an API for accessing a media service's \l {metaData()}{meta-data} and a means of connecting other media objects,
+    and peripheral classes like QVideoWidget and QMediaPlaylist.
+
+    \sa QMediaService, QMediaControl
+*/
+
+/*!
+    Destroys a media object.
+*/
+
+QMediaObject::~QMediaObject()
+{
+    delete d_ptr;
+}
+
+/*!
+    Returns the service availability error state.
+*/
+
+QtMediaservices::AvailabilityError QMediaObject::availabilityError() const
+{
+    return QtMediaservices::ServiceMissingError;
+}
+
+/*!
+    Returns true if the service is available for use.
+*/
+
+bool QMediaObject::isAvailable() const
+{
+    return false;
+}
+
+/*!
+    Returns the media service that provides the functionality of a multimedia object.
+*/
+
+QMediaService* QMediaObject::service() const
+{
+    return d_func()->service;
+}
+
+int QMediaObject::notifyInterval() const
+{
+    return d_func()->notifyTimer->interval();
+}
+
+void QMediaObject::setNotifyInterval(int milliSeconds)
+{
+    Q_D(QMediaObject);
+
+    if (d->notifyTimer->interval() != milliSeconds) {
+        d->notifyTimer->setInterval(milliSeconds);
+
+        emit notifyIntervalChanged(milliSeconds);
+    }
+}
+
+/*!
+  \internal
+*/
+void QMediaObject::bind(QObject*)
+{
+}
+
+/*!
+  \internal
+*/
+void QMediaObject::unbind(QObject*)
+{
+}
+
+
+/*!
+    Constructs a media object which uses the functionality provided by a media \a service.
+
+    The \a parent is passed to QObject.
+
+    This class is meant as a base class for Multimedia objects so this
+    constructor is protected.
+*/
+
+QMediaObject::QMediaObject(QObject *parent, QMediaService *service):
+    QObject(parent),
+    d_ptr(new QMediaObjectPrivate)
+
+{
+    Q_D(QMediaObject);
+
+    d->q_ptr = this;
+
+    d->notifyTimer = new QTimer(this);
+    d->notifyTimer->setInterval(1000);
+    connect(d->notifyTimer, SIGNAL(timeout()), SLOT(_q_notify()));
+
+    d->service = service;
+
+    setupMetaData();
+}
+
+/*!
+    \internal
+*/
+
+QMediaObject::QMediaObject(QMediaObjectPrivate &dd, QObject *parent,
+                                            QMediaService *service):
+    QObject(parent),
+    d_ptr(&dd)
+{
+    Q_D(QMediaObject);
+    d->q_ptr = this;
+
+    d->notifyTimer = new QTimer(this);
+    d->notifyTimer->setInterval(1000);
+    connect(d->notifyTimer, SIGNAL(timeout()), SLOT(_q_notify()));
+
+    d->service = service;
+
+    setupMetaData();
+}
+
+/*!
+    Watch the property \a name. The property's notify signal will be emitted
+    once every notifyInterval milliseconds.
+
+    \sa notifyInterval
+*/
+
+void QMediaObject::addPropertyWatch(QByteArray const &name)
+{
+    Q_D(QMediaObject);
+
+    const QMetaObject* m = metaObject();
+
+    int index = m->indexOfProperty(name.constData());
+
+    if (index != -1 && m->property(index).hasNotifySignal()) {
+        d->notifyProperties.insert(index);
+
+        if (!d->notifyTimer->isActive())
+            d->notifyTimer->start();
+    }
+}
+
+/*!
+    Remove property \a name from the list of properties whose changes are
+    regularly signaled.
+
+    \sa notifyInterval
+*/
+
+void QMediaObject::removePropertyWatch(QByteArray const &name)
+{
+    Q_D(QMediaObject);
+
+    int index = metaObject()->indexOfProperty(name.constData());
+
+    if (index != -1) {
+        d->notifyProperties.remove(index);
+
+        if (d->notifyProperties.isEmpty())
+            d->notifyTimer->stop();
+    }
+}
+
+/*!
+    \property QMediaObject::notifyInterval
+
+    The interval at which notifiable properties will update.
+
+    The interval is expressed in milliseconds, the default value is 1000.
+
+    \sa addPropertyWatch(), removePropertyWatch()
+*/
+
+/*!
+    \fn void QMediaObject::notifyIntervalChanged(int milliseconds)
+
+    Signal a change in the notify interval period to \a milliseconds.
+*/
+
+/*!
+    \property QMediaObject::metaDataAvailable
+    \brief whether access to a media object's meta-data is available.
+
+    If this is true there is meta-data available, otherwise there is no meta-data available.
+*/
+
+bool QMediaObject::isMetaDataAvailable() const
+{
+    Q_D(const QMediaObject);
+
+    return d->metaDataControl
+            ? d->metaDataControl->isMetaDataAvailable()
+            : false;
+}
+
+/*!
+    \fn QMediaObject::metaDataAvailableChanged(bool available)
+
+    Signals that the \a available state of a media object's meta-data has changed.
+*/
+
+/*!
+    \property QMediaObject::metaDataWritable
+    \brief whether a media object's meta-data is writable.
+
+    If this is true the meta-data is writable, otherwise the meta-data is read-only.
+*/
+
+bool QMediaObject::isMetaDataWritable() const
+{
+    Q_D(const QMediaObject);
+
+    return d->metaDataControl
+            ? d->metaDataControl->isWritable()
+            : false;
+}
+
+/*!
+    \fn QMediaObject::metaDataWritableChanged(bool writable)
+
+    Signals that the \a writable state of a media object's meta-data has changed.
+*/
+
+/*!
+    Returns the value associated with a meta-data \a key.
+*/
+QVariant QMediaObject::metaData(QtMediaservices::MetaData key) const
+{
+    Q_D(const QMediaObject);
+
+    return d->metaDataControl
+            ? d->metaDataControl->metaData(key)
+            : QVariant();
+}
+
+/*!
+    Sets a \a value for a meta-data \a key.
+*/
+void QMediaObject::setMetaData(QtMediaservices::MetaData key, const QVariant &value)
+{
+    Q_D(QMediaObject);
+
+    if (d->metaDataControl)
+        d->metaDataControl->setMetaData(key, value);
+}
+
+/*!
+    Returns a list of keys there is meta-data available for.
+*/
+QList<QtMediaservices::MetaData> QMediaObject::availableMetaData() const
+{
+    Q_D(const QMediaObject);
+
+    return d->metaDataControl
+            ? d->metaDataControl->availableMetaData()
+            : QList<QtMediaservices::MetaData>();
+}
+
+/*!
+    \fn QMediaObject::metaDataChanged()
+
+    Signals that a media object's meta-data has changed.
+*/
+
+/*!
+    Returns the value associated with a meta-data \a key.
+
+    The naming and type of extended meta-data is not standardized, so the values and meaning
+    of keys may vary between backends.
+*/
+QVariant QMediaObject::extendedMetaData(const QString &key) const
+{
+    Q_D(const QMediaObject);
+
+    return d->metaDataControl
+            ? d->metaDataControl->extendedMetaData(key)
+            : QVariant();
+}
+
+/*!
+    Sets a \a value for a meta-data \a key.
+
+    The naming and type of extended meta-data is not standardized, so the values and meaning
+    of keys may vary between backends.
+*/
+void QMediaObject::setExtendedMetaData(const QString &key, const QVariant &value)
+{
+    Q_D(QMediaObject);
+
+    if (d->metaDataControl)
+        d->metaDataControl->setExtendedMetaData(key, value);
+}
+
+/*!
+    Returns a list of keys there is extended meta-data available for.
+*/
+QStringList QMediaObject::availableExtendedMetaData() const
+{
+    Q_D(const QMediaObject);
+
+    return d->metaDataControl
+            ? d->metaDataControl->availableExtendedMetaData()
+            : QStringList();
+}
+
+
+void QMediaObject::setupMetaData()
+{
+    Q_D(QMediaObject);
+
+    if (d->service != 0) {
+        d->metaDataControl =
+            qobject_cast<QMetaDataControl*>(d->service->control(QMetaDataControl_iid));
+
+        if (d->metaDataControl) {
+            connect(d->metaDataControl, SIGNAL(metaDataChanged()), SIGNAL(metaDataChanged()));
+            connect(d->metaDataControl,
+                    SIGNAL(metaDataAvailableChanged(bool)),
+                    SIGNAL(metaDataAvailableChanged(bool)));
+            connect(d->metaDataControl,
+                    SIGNAL(writableChanged(bool)),
+                    SIGNAL(metaDataWritableChanged(bool)));
+        }
+    }
+}
+
+/*!
+    \fn QMediaObject::availabilityChanged(bool available)
+
+    Signal emitted when the availability state has changed to \a available
+*/
+
+
+#include "moc_qmediaobject.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediaobject.h b/src/multimedia/mediaservices/base/qmediaobject.h
new file mode 100644
index 0000000..461e056
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaobject.h
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTMEDIAOBJECT_H
+#define QABSTRACTMEDIAOBJECT_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qstringlist.h>
+
+#include <QtMediaservices/qtmedianamespace.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMediaService;
+
+class QMediaObjectPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaObject : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(int notifyInterval READ notifyInterval WRITE setNotifyInterval NOTIFY notifyIntervalChanged)
+    Q_PROPERTY(bool metaDataAvailable READ isMetaDataAvailable NOTIFY metaDataAvailableChanged)
+    Q_PROPERTY(bool metaDataWritable READ isMetaDataWritable NOTIFY metaDataWritableChanged)
+
+public:
+    ~QMediaObject();
+
+    virtual bool isAvailable() const;
+    virtual QtMediaservices::AvailabilityError availabilityError() const;
+
+    virtual QMediaService* service() const;
+
+    int notifyInterval() const;
+    void setNotifyInterval(int milliSeconds);
+
+    virtual void bind(QObject*);
+    virtual void unbind(QObject*);
+
+    bool isMetaDataAvailable() const;
+    bool isMetaDataWritable() const;
+
+    QVariant metaData(QtMediaservices::MetaData key) const;
+    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
+    QList<QtMediaservices::MetaData> availableMetaData() const;
+
+    QVariant extendedMetaData(const QString &key) const;
+    void setExtendedMetaData(const QString &key, const QVariant &value);
+    QStringList availableExtendedMetaData() const;
+
+Q_SIGNALS:
+    void notifyIntervalChanged(int milliSeconds);
+
+    void metaDataAvailableChanged(bool available);
+    void metaDataWritableChanged(bool writable);
+    void metaDataChanged();
+
+    void availabilityChanged(bool available);
+
+protected:
+    QMediaObject(QObject *parent, QMediaService *service);
+    QMediaObject(QMediaObjectPrivate &dd, QObject *parent, QMediaService *service);
+
+    void addPropertyWatch(QByteArray const &name);
+    void removePropertyWatch(QByteArray const &name);
+
+    QMediaObjectPrivate *d_ptr;
+
+private:
+    void setupMetaData();
+
+    Q_DECLARE_PRIVATE(QMediaObject)
+    Q_PRIVATE_SLOT(d_func(), void _q_notify())
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+
+#endif  // QABSTRACTMEDIAOBJECT_H
diff --git a/src/multimedia/mediaservices/base/qmediaobject_p.h b/src/multimedia/mediaservices/base/qmediaobject_p.h
new file mode 100644
index 0000000..4589f03
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaobject_p.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTMEDIAOBJECT_P_H
+#define QABSTRACTMEDIAOBJECT_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qbytearray.h>
+#include <QtCore/qset.h>
+#include <QtCore/qtimer.h>
+
+#include <QtMediaservices/qmediaobject.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMetaDataControl;
+
+#define Q_DECLARE_NON_CONST_PUBLIC(Class) \
+    inline Class* q_func() { return static_cast<Class *>(q_ptr); } \
+    friend class Class;
+
+
+class QMediaObjectPrivate
+{
+    Q_DECLARE_PUBLIC(QMediaObject)
+
+public:
+    QMediaObjectPrivate():metaDataControl(0), notifyTimer(0) {}
+    virtual ~QMediaObjectPrivate() {}
+
+    void _q_notify();
+
+    QMediaService *service;
+    QMetaDataControl *metaDataControl;
+    QTimer* notifyTimer;
+    QSet<int> notifyProperties;
+
+    QMediaObject *q_ptr;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qmediaplaylist.cpp b/src/multimedia/mediaservices/base/qmediaplaylist.cpp
new file mode 100644
index 0000000..174a8ac
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylist.cpp
@@ -0,0 +1,724 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qlist.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qcoreevent.h>
+#include <QtCore/qcoreapplication.h>
+
+#include <QtMediaservices/qmediaplaylist.h>
+#include "qmediaplaylist_p.h"
+#include <QtMediaservices/qmediaplaylistprovider.h>
+#include <QtMediaservices/qlocalmediaplaylistprovider.h>
+#include <QtMediaservices/qmediaplaylistioplugin.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qmediaplaylistcontrol.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
+
+#include "qmediapluginloader_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, playlistIOLoader,
+        (QMediaPlaylistIOInterface_iid, QLatin1String("/playlistformats"), Qt::CaseInsensitive))
+
+
+/*!
+    \class QMediaPlaylist
+    \ingroup multimedia
+    \since 4.7
+
+    \preliminary
+    \brief The QMediaPlaylist class provides a list of media content to play.
+
+    QMediaPlaylist is intended to be used with other media objects,
+    like QMediaPlayer or QMediaImageViewer.
+    QMediaPlaylist allows to access the service intrinsic playlist functionality
+    if available, otherwise it provides the the local memory playlist implementation.
+
+\code
+    player = new QMediaPlayer;
+
+    playlist = new QMediaPlaylist;
+    playlist->setMediaObject(player);
+    playlist->append(QUrl("http://example.com/movie1.mp4"));
+    playlist->append(QUrl("http://example.com/movie2.mp4"));
+    playlist->append(QUrl("http://example.com/movie3.mp4"));
+
+    playlist->setCurrentIndex(1);
+
+    player->play();
+\endcode
+
+    Depending on playlist source implementation,
+    most of playlist modifcation operations can be asynchronous.
+
+    \sa QMediaContent
+*/
+
+
+/*!
+    \enum QMediaPlaylist::PlaybackMode
+
+    The QMediaPlaylist::PlaybackMode describes the order items in playlist are played.
+
+    \value CurrentItemOnce    The current item is played only once.
+
+    \value CurrentItemInLoop  The current item is played in the loop.
+
+    \value Linear             Playback starts from the first to the last items and stops.
+                              next item is a null item when the last one is currently playing.
+
+    \value Loop               Playback continues from the first item after the last one finished playing.
+
+    \value Random             Play items in random order.
+*/
+
+
+
+/*!
+  Create a new playlist object for with the given \a parent.  
+*/
+
+QMediaPlaylist::QMediaPlaylist(QObject *parent)
+    : QObject(parent)
+    , d_ptr(new QMediaPlaylistPrivate)
+{
+    Q_D(QMediaPlaylist);
+
+    d->q_ptr = this;
+    d->localPlaylistControl = new QLocalMediaPlaylistControl(this);
+
+    setMediaObject(0);
+}
+
+/*!
+  Destroys the playlist.
+  */
+
+QMediaPlaylist::~QMediaPlaylist()
+{
+    Q_D(QMediaPlaylist);
+
+    if (d->mediaObject)
+        d->mediaObject->unbind(this);
+
+    delete d_ptr;
+}
+
+/*!
+    Returns the QMediaObject that is being used to play the contents of this playlist.
+*/
+
+QMediaObject *QMediaPlaylist::mediaObject() const
+{
+    return d_func()->mediaObject;
+}
+
+/*!
+  If \a mediaObject is null or doesn't have an intrinsic playlist,
+  internal local memory playlist source will be created.
+*/
+void QMediaPlaylist::setMediaObject(QMediaObject *mediaObject)
+{
+    Q_D(QMediaPlaylist);
+
+    if (mediaObject && mediaObject == d->mediaObject)
+        return;
+
+    QMediaService *service = mediaObject
+            ? mediaObject->service() : 0;
+
+    QMediaPlaylistControl *newControl = 0;
+
+    if (service)
+        newControl = qobject_cast<QMediaPlaylistControl*>(service->control(QMediaPlaylistControl_iid));
+
+    if (!newControl)
+        newControl = d->localPlaylistControl;
+
+    if (d->control != newControl) {
+        int oldSize = 0;
+        if (d->control) {
+            QMediaPlaylistProvider *playlist = d->control->playlistProvider();
+            oldSize = playlist->mediaCount();
+            disconnect(playlist, SIGNAL(loadFailed(QMediaPlaylist::Error,QString)),
+                    this, SLOT(_q_loadFailed(QMediaPlaylist::Error,QString)));
+
+            disconnect(playlist, SIGNAL(mediaChanged(int,int)), this, SIGNAL(mediaChanged(int,int)));
+            disconnect(playlist, SIGNAL(mediaAboutToBeInserted(int,int)), this, SIGNAL(mediaAboutToBeInserted(int,int)));
+            disconnect(playlist, SIGNAL(mediaInserted(int,int)), this, SIGNAL(mediaInserted(int,int)));
+            disconnect(playlist, SIGNAL(mediaAboutToBeRemoved(int,int)), this, SIGNAL(mediaAboutToBeRemoved(int,int)));
+            disconnect(playlist, SIGNAL(mediaRemoved(int,int)), this, SIGNAL(mediaRemoved(int,int)));
+
+            disconnect(playlist, SIGNAL(loaded()), this, SIGNAL(loaded()));
+
+            disconnect(d->control, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)),
+                    this, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
+            disconnect(d->control, SIGNAL(currentIndexChanged(int)),
+                    this, SIGNAL(currentIndexChanged(int)));
+            disconnect(d->control, SIGNAL(currentMediaChanged(QMediaContent)),
+                    this, SIGNAL(currentMediaChanged(QMediaContent)));
+        }
+
+        d->control = newControl;
+        QMediaPlaylistProvider *playlist = d->control->playlistProvider();
+        connect(playlist, SIGNAL(loadFailed(QMediaPlaylist::Error,QString)),
+                this, SLOT(_q_loadFailed(QMediaPlaylist::Error,QString)));
+
+        connect(playlist, SIGNAL(mediaChanged(int,int)), this, SIGNAL(mediaChanged(int,int)));
+        connect(playlist, SIGNAL(mediaAboutToBeInserted(int,int)), this, SIGNAL(mediaAboutToBeInserted(int,int)));
+        connect(playlist, SIGNAL(mediaInserted(int,int)), this, SIGNAL(mediaInserted(int,int)));
+        connect(playlist, SIGNAL(mediaAboutToBeRemoved(int,int)), this, SIGNAL(mediaAboutToBeRemoved(int,int)));
+        connect(playlist, SIGNAL(mediaRemoved(int,int)), this, SIGNAL(mediaRemoved(int,int)));
+
+        connect(playlist, SIGNAL(loaded()), this, SIGNAL(loaded()));
+
+        connect(d->control, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)),
+                this, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
+        connect(d->control, SIGNAL(currentIndexChanged(int)),
+                this, SIGNAL(currentIndexChanged(int)));
+        connect(d->control, SIGNAL(currentMediaChanged(QMediaContent)),
+                this, SIGNAL(currentMediaChanged(QMediaContent)));
+
+        if (oldSize)
+            emit mediaRemoved(0, oldSize-1);
+
+        if (playlist->mediaCount()) {
+            emit mediaAboutToBeInserted(0,playlist->mediaCount()-1);
+            emit mediaInserted(0,playlist->mediaCount()-1);
+        }
+    }
+
+    if (d->mediaObject)
+        d->mediaObject->unbind(this);
+
+    d->mediaObject = mediaObject;
+    if (d->mediaObject)
+        d->mediaObject->bind(this);
+}
+
+/*!
+  \property QMediaPlaylist::playbackMode
+
+  This property defines the order, items in playlist are played.
+
+  \sa QMediaPlaylist::PlaybackMode
+*/
+
+QMediaPlaylist::PlaybackMode QMediaPlaylist::playbackMode() const
+{
+    return d_func()->control->playbackMode();
+}
+
+void QMediaPlaylist::setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
+{
+    Q_D(QMediaPlaylist);
+    d->control->setPlaybackMode(mode);
+}
+
+/*!
+  Returns position of the current media source in the playlist.
+*/
+int QMediaPlaylist::currentIndex() const
+{
+    return d_func()->control->currentIndex();
+}
+
+/*!
+  Returns the current media content.
+*/
+
+QMediaContent QMediaPlaylist::currentMedia() const
+{
+    return d_func()->playlist()->media(currentIndex());
+}
+
+/*!
+  Returns the index of item, which were current after calling next()
+  \a steps times.
+
+  Returned value depends on the size of playlist, current position
+  and playback mode.
+
+  \sa QMediaPlaylist::playbackMode
+*/
+int QMediaPlaylist::nextIndex(int steps) const
+{
+    return d_func()->control->nextIndex(steps);
+}
+
+/*!
+  Returns the index of item, which were current after calling previous()
+  \a steps times.
+
+  \sa QMediaPlaylist::playbackMode
+*/
+
+int QMediaPlaylist::previousIndex(int steps) const
+{
+    return d_func()->control->previousIndex(steps);
+}
+
+
+/*!
+  Returns the number of items in the playlist.
+
+  \sa isEmpty()
+  */
+int QMediaPlaylist::mediaCount() const
+{
+    return d_func()->playlist()->mediaCount();
+}
+
+/*!
+  Returns true if the playlist contains no items; otherwise returns false.
+  \sa mediaCount()
+  */
+bool QMediaPlaylist::isEmpty() const
+{
+    return mediaCount() == 0;
+}
+
+/*!
+  Returns true if the playlist can be modified; otherwise returns false.
+  \sa mediaCount()
+  */
+bool QMediaPlaylist::isReadOnly() const
+{
+    return d_func()->playlist()->isReadOnly();
+}
+
+/*!
+  Returns the media content at \a index in the playlist.
+*/
+
+QMediaContent QMediaPlaylist::media(int index) const
+{
+    return d_func()->playlist()->media(index);
+}
+
+/*!
+  Append the media \a content to the playlist.
+
+  Returns true if the operation is successfull, other wise return false.
+  */
+bool QMediaPlaylist::addMedia(const QMediaContent &content)
+{
+    return d_func()->control->playlistProvider()->addMedia(content);
+}
+
+/*!
+  Append multiple media content \a items to the playlist.
+
+  Returns true if the operation is successfull, other wise return false.
+  */
+bool QMediaPlaylist::addMedia(const QList<QMediaContent> &items)
+{
+    return d_func()->control->playlistProvider()->addMedia(items);
+}
+
+/*!
+  Insert the media \a content to the playlist at position \a pos.
+
+  Returns true if the operation is successful, otherwise false.
+*/
+
+bool QMediaPlaylist::insertMedia(int pos, const QMediaContent &content)
+{
+    return d_func()->playlist()->insertMedia(pos, content);
+}
+
+/*!
+  Insert multiple media content \a items to the playlist at position \a pos.
+
+  Returns true if the operation is successful, otherwise false.
+*/
+
+bool QMediaPlaylist::insertMedia(int pos, const QList<QMediaContent> &items)
+{
+    return d_func()->playlist()->insertMedia(pos, items);
+}
+
+/*!
+  Remove the item from the playlist at position \a pos.
+
+  Returns true if the operation is successfull, other wise return false.
+  */
+bool QMediaPlaylist::removeMedia(int pos)
+{
+    Q_D(QMediaPlaylist);
+    return d->playlist()->removeMedia(pos);
+}
+
+/*!
+  Remove the items from the playlist from position \a start to \a end inclusive.
+
+  Returns true if the operation is successfull, other wise return false.
+  */
+bool QMediaPlaylist::removeMedia(int start, int end)
+{
+    Q_D(QMediaPlaylist);
+    return d->playlist()->removeMedia(start, end);
+}
+
+/*!
+  Remove all the items from the playlist.
+
+  Returns true if the operation is successfull, other wise return false.
+  */
+bool QMediaPlaylist::clear()
+{
+    Q_D(QMediaPlaylist);
+    return d->playlist()->clear();
+}
+
+bool QMediaPlaylistPrivate::readItems(QMediaPlaylistReader *reader)
+{
+    while (!reader->atEnd())
+        playlist()->addMedia(reader->readItem());
+
+    return true;
+}
+
+bool QMediaPlaylistPrivate::writeItems(QMediaPlaylistWriter *writer)
+{
+    for (int i=0; i<playlist()->mediaCount(); i++) {
+        if (!writer->writeItem(playlist()->media(i)))
+            return false;
+    }
+    writer->close();
+    return true;
+}
+
+/*!
+  Load playlist from \a location. If \a format is specified, it is used,
+  otherwise format is guessed from location name and data.
+
+  New items are appended to playlist.
+
+  QMediaPlaylist::loaded() signal is emited if playlist was loaded succesfully,
+  otherwise the playlist emits loadFailed().
+*/
+void QMediaPlaylist::load(const QUrl &location, const char *format)
+{
+    Q_D(QMediaPlaylist);
+
+    d->error = NoError;
+    d->errorString.clear();
+
+    if (d->playlist()->load(location,format))
+        return;
+
+    if (isReadOnly()) {
+        d->error = AccessDeniedError;
+        d->errorString = tr("Could not add items to read only playlist.");
+        emit loadFailed();
+        return;
+    }
+
+    foreach (QString const& key, playlistIOLoader()->keys()) {
+        QMediaPlaylistIOInterface* plugin = qobject_cast<QMediaPlaylistIOInterface*>(playlistIOLoader()->instance(key));
+        if (plugin && plugin->canRead(location,format)) {
+            QMediaPlaylistReader *reader = plugin->createReader(location,QByteArray(format));
+            if (reader && d->readItems(reader)) {
+                delete reader;
+                emit loaded();
+                return;
+            }
+            delete reader;
+        }
+    }
+
+    d->error = FormatNotSupportedError;
+    d->errorString = tr("Playlist format is not supported");
+    emit loadFailed();
+
+    return;
+}
+
+/*!
+  Load playlist from QIODevice \a device. If \a format is specified, it is used,
+  otherwise format is guessed from device data.
+
+  New items are appended to playlist.
+
+  QMediaPlaylist::loaded() signal is emited if playlist was loaded succesfully,
+  otherwise the playlist emits loadFailed().
+*/
+void QMediaPlaylist::load(QIODevice * device, const char *format)
+{
+    Q_D(QMediaPlaylist);
+
+    d->error = NoError;
+    d->errorString.clear();
+
+    if (d->playlist()->load(device,format))
+        return;
+
+    if (isReadOnly()) {
+        d->error = AccessDeniedError;
+        d->errorString = tr("Could not add items to read only playlist.");
+        emit loadFailed();
+        return;
+    }
+
+    foreach (QString const& key, playlistIOLoader()->keys()) {
+        QMediaPlaylistIOInterface* plugin = qobject_cast<QMediaPlaylistIOInterface*>(playlistIOLoader()->instance(key));
+        if (plugin && plugin->canRead(device,format)) {
+            QMediaPlaylistReader *reader = plugin->createReader(device,QByteArray(format));
+            if (reader && d->readItems(reader)) {
+                delete reader;
+                emit loaded();
+                return;
+            }
+            delete reader;
+        }
+    }
+
+    d->error = FormatNotSupportedError;
+    d->errorString = tr("Playlist format is not supported");
+    emit loadFailed();
+
+    return;
+}
+
+/*!
+  Save playlist to \a location. If \a format is specified, it is used,
+  otherwise format is guessed from location name.
+
+  Returns true if playlist was saved succesfully, otherwise returns false.
+  */
+bool QMediaPlaylist::save(const QUrl &location, const char *format)
+{
+    Q_D(QMediaPlaylist);
+
+    d->error = NoError;
+    d->errorString.clear();
+
+    if (d->playlist()->save(location,format))
+        return true;
+
+    QFile file(location.toLocalFile());
+
+    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
+        d->error = AccessDeniedError;
+        d->errorString = tr("The file could not be accessed.");
+        return false;
+    }
+
+    return save(&file, format);
+}
+
+/*!
+  Save playlist to QIODevice \a device using format \a format.
+
+  Returns true if playlist was saved succesfully, otherwise returns false.
+*/
+bool QMediaPlaylist::save(QIODevice * device, const char *format)
+{
+    Q_D(QMediaPlaylist);
+
+    d->error = NoError;
+    d->errorString.clear();
+
+    if (d->playlist()->save(device,format))
+        return true;
+
+    foreach (QString const& key, playlistIOLoader()->keys()) {
+        QMediaPlaylistIOInterface* plugin = qobject_cast<QMediaPlaylistIOInterface*>(playlistIOLoader()->instance(key));
+        if (plugin && plugin->canWrite(device,format)) {
+            QMediaPlaylistWriter *writer = plugin->createWriter(device,QByteArray(format));
+            if (writer && d->writeItems(writer)) {
+                delete writer;
+                return true;
+            }
+            delete writer;
+        }
+    }
+
+    d->error = FormatNotSupportedError;
+    d->errorString = tr("Playlist format is not supported.");
+
+    return false;
+}
+
+/*!
+    Returns the last error condition.
+*/
+QMediaPlaylist::Error QMediaPlaylist::error() const
+{
+    return d_func()->error;
+}
+
+/*!
+    Returns the string describing the last error condition.
+*/
+QString QMediaPlaylist::errorString() const
+{
+    return d_func()->errorString;
+}
+
+/*!
+  Shuffle items in the playlist.
+*/
+void QMediaPlaylist::shuffle()
+{
+    d_func()->playlist()->shuffle();
+}
+
+
+/*!
+    Advance to the next media content in playlist.
+*/
+void QMediaPlaylist::next()
+{
+    d_func()->control->next();
+}
+
+/*!
+    Return to the previous media content in playlist.
+*/
+void QMediaPlaylist::previous()
+{
+    d_func()->control->previous();
+}
+
+/*!
+    Activate media content from playlist at position \a playlistPosition.
+*/
+
+void QMediaPlaylist::setCurrentIndex(int playlistPosition)
+{
+    d_func()->control->setCurrentIndex(playlistPosition);
+}
+
+/*!
+    \fn void QMediaPlaylist::mediaInserted(int start, int end)
+
+    This signal is emitted after media has been inserted into the playlist.
+    The new items are those between \a start and \a end inclusive.
+ */
+
+/*!
+    \fn void QMediaPlaylist::mediaRemoved(int start, int end)
+
+    This signal is emitted after media has been removed from the playlist.
+    The removed items are those between \a start and \a end inclusive.
+ */
+
+/*!
+    \fn void QMediaPlaylist::mediaChanged(int start, int end)
+
+    This signal is emitted after media has been changed in the playlist
+    between \a start and \a end positions inclusive.
+ */
+
+/*!
+    \fn void QMediaPlaylist::currentIndexChanged(int position)
+
+    Signal emitted when playlist position changed to \a position.
+*/
+
+/*!
+    \fn void QMediaPlaylist::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)
+
+    Signal emitted when playback mode changed to \a mode.
+*/
+
+/*!
+    \fn void QMediaPlaylist::mediaAboutToBeInserted(int start, int end)
+
+    Signal emitted when item to be inserted at \a start and ending at \a end.
+*/
+
+/*!
+    \fn void QMediaPlaylist::mediaAboutToBeRemoved(int start, int end)
+
+    Signal emitted when item to de deleted ar \a start and ending at \a end.
+*/
+
+/*!
+    \fn void QMediaPlaylist::currentMediaChanged(const QMediaContent &content)
+
+    Signal emitted when current media changes to \a content.
+*/
+
+/*!
+    \property QMediaPlaylist::currentIndex
+    \brief Current position.
+*/
+
+/*!
+    \property QMediaPlaylist::currentMedia
+    \brief Current media content.
+*/
+
+/*!
+    \fn QMediaPlaylist::loaded()
+
+    Signal emitted when playlist finished loading.
+*/
+
+/*!
+    \fn QMediaPlaylist::loadFailed()
+
+    Signal emitted if failed to load playlist.
+*/
+
+/*!
+    \enum QMediaPlaylist::Error
+
+    This enum describes the QMediaPlaylist error codes.
+
+    \value NoError                 No errors.
+    \value FormatError             Format error.
+    \value FormatNotSupportedError Format not supported.
+    \value NetworkError            Network error.
+    \value AccessDeniedError       Access denied error.
+*/
+
+QT_END_NAMESPACE
+
+#include "moc_qmediaplaylist.cpp"
+#include "moc_qmediaplaylist_p.cpp"
diff --git a/src/multimedia/mediaservices/base/qmediaplaylist.h b/src/multimedia/mediaservices/base/qmediaplaylist.h
new file mode 100644
index 0000000..132b58c
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylist.h
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYLIST_H
+#define QMEDIAPLAYLIST_H
+
+#include <QtCore/qobject.h>
+
+#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaservices/qmediaobject.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMediaPlaylistProvider;
+
+class QMediaPlaylistPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaPlaylist : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode NOTIFY playbackModeChanged)
+    Q_PROPERTY(QMediaContent currentMedia READ currentMedia NOTIFY currentMediaChanged)
+    Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
+    Q_ENUMS(PlaybackMode Error)
+
+public:
+    enum PlaybackMode { CurrentItemOnce, CurrentItemInLoop, Linear, Loop, Random };
+    enum Error { NoError, FormatError, FormatNotSupportedError, NetworkError, AccessDeniedError };
+
+    QMediaPlaylist(QObject *parent = 0);
+    virtual ~QMediaPlaylist();
+
+    QMediaObject *mediaObject() const;
+    void setMediaObject(QMediaObject *object);
+
+    PlaybackMode playbackMode() const;
+    void setPlaybackMode(PlaybackMode mode);
+
+    int currentIndex() const;
+    QMediaContent currentMedia() const;
+
+    int nextIndex(int steps = 1) const;
+    int previousIndex(int steps = 1) const;
+
+    QMediaContent media(int index) const;
+
+    int mediaCount() const;
+    bool isEmpty() const;
+    bool isReadOnly() const;
+
+    bool addMedia(const QMediaContent &content);
+    bool addMedia(const QList<QMediaContent> &items);
+    bool insertMedia(int index, const QMediaContent &content);
+    bool insertMedia(int index, const QList<QMediaContent> &items);
+    bool removeMedia(int pos);
+    bool removeMedia(int start, int end);
+    bool clear();
+
+    void load(const QUrl &location, const char *format = 0);
+    void load(QIODevice * device, const char *format = 0);
+
+    bool save(const QUrl &location, const char *format = 0);
+    bool save(QIODevice * device, const char *format);
+
+    Error error() const;
+    QString errorString() const;
+
+public Q_SLOTS:
+    void shuffle();
+
+    void next();
+    void previous();
+
+    void setCurrentIndex(int index);
+
+Q_SIGNALS:
+    void currentIndexChanged(int index);
+    void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
+    void currentMediaChanged(const QMediaContent&);
+
+    void mediaAboutToBeInserted(int start, int end);
+    void mediaInserted(int start, int end);
+    void mediaAboutToBeRemoved(int start, int end);
+    void mediaRemoved(int start, int end);
+    void mediaChanged(int start, int end);
+
+    void loaded();
+    void loadFailed();
+
+protected:
+    QMediaPlaylistPrivate *d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(QMediaPlaylist)
+    Q_PRIVATE_SLOT(d_func(), void _q_loadFailed(QMediaPlaylist::Error, const QString &))
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QMediaPlaylist::PlaybackMode)
+Q_DECLARE_METATYPE(QMediaPlaylist::Error)
+
+QT_END_HEADER
+
+#endif  // QMEDIAPLAYLIST_H
diff --git a/src/multimedia/mediaservices/base/qmediaplaylist_p.h b/src/multimedia/mediaservices/base/qmediaplaylist_p.h
new file mode 100644
index 0000000..57c2723
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylist_p.h
@@ -0,0 +1,172 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYLIST_P_H
+#define QMEDIAPLAYLIST_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaservices/qmediaplaylistcontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaservices/qlocalmediaplaylistprovider.h>
+#include "qmediaobject_p.h"
+
+#include <QtCore/qdebug.h>
+
+#ifdef Q_MOC_RUN
+# pragma Q_MOC_EXPAND_MACROS
+#endif
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMediaPlaylistControl;
+class QMediaPlaylistProvider;
+class QMediaPlaylistReader;
+class QMediaPlaylistWriter;
+class QMediaPlayerControl;
+
+class QMediaPlaylistPrivate
+{
+    Q_DECLARE_PUBLIC(QMediaPlaylist)
+public:
+    QMediaPlaylistPrivate()
+        :mediaObject(0),
+        control(0),
+        localPlaylistControl(0),
+        error(QMediaPlaylist::NoError)
+    {
+    }
+
+    virtual ~QMediaPlaylistPrivate() {}
+
+    void _q_loadFailed(QMediaPlaylist::Error error, const QString &errorString)
+    {
+        this->error = error;
+        this->errorString = errorString;
+
+        emit q_ptr->loadFailed();
+    }
+
+    void _q_mediaObjectDeleted()
+    {
+        Q_Q(QMediaPlaylist);
+        mediaObject = 0;
+        if (control != localPlaylistControl)
+            control = 0;
+        q->setMediaObject(0);
+    }
+
+    QMediaObject *mediaObject;
+
+    QMediaPlaylistControl *control;
+    QMediaPlaylistProvider *playlist() const { return control->playlistProvider(); }
+
+    QMediaPlaylistControl *localPlaylistControl;
+
+    bool readItems(QMediaPlaylistReader *reader);
+    bool writeItems(QMediaPlaylistWriter *writer);
+
+    QMediaPlaylist::Error error;
+    QString errorString;
+
+    QMediaPlaylist *q_ptr;
+};
+
+
+class QLocalMediaPlaylistControl : public QMediaPlaylistControl
+{
+    Q_OBJECT
+public:
+    QLocalMediaPlaylistControl(QObject *parent)
+        :QMediaPlaylistControl(parent)
+    {
+        QMediaPlaylistProvider *playlist = new QLocalMediaPlaylistProvider(this);
+        m_navigator = new QMediaPlaylistNavigator(playlist,this);
+        m_navigator->setPlaybackMode(QMediaPlaylist::Linear);
+
+        connect(m_navigator, SIGNAL(currentIndexChanged(int)), SIGNAL(currentIndexChanged(int)));
+        connect(m_navigator, SIGNAL(activated(QMediaContent)), SIGNAL(currentMediaChanged(QMediaContent)));
+    }
+
+    virtual ~QLocalMediaPlaylistControl() {};
+
+    QMediaPlaylistProvider* playlistProvider() const { return m_navigator->playlist(); }
+    bool setPlaylistProvider(QMediaPlaylistProvider *mediaPlaylist)
+    {
+        m_navigator->setPlaylist(mediaPlaylist);
+        emit playlistProviderChanged();
+        return true;
+    }
+
+    int currentIndex() const { return m_navigator->currentIndex(); }
+    void setCurrentIndex(int position) { m_navigator->jump(position); }
+    int nextIndex(int steps) const { return m_navigator->nextIndex(steps); }
+    int previousIndex(int steps) const { return m_navigator->previousIndex(steps); }
+
+    void next() { m_navigator->next(); }
+    void previous() { m_navigator->previous(); }
+
+    QMediaPlaylist::PlaybackMode playbackMode() const { return m_navigator->playbackMode(); }
+    void setPlaybackMode(QMediaPlaylist::PlaybackMode mode) { m_navigator->setPlaybackMode(mode); }
+
+private:
+    QMediaPlaylistNavigator *m_navigator;
+};
+
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QMEDIAPLAYLIST_P_H
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp
new file mode 100644
index 0000000..6f3b2fe
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp
@@ -0,0 +1,204 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtMediaservices/qmediaplaylistcontrol.h>
+#include "qmediacontrol_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QMediaPlaylistControl
+    \ingroup multimedia-serv
+    \since 4.7
+
+    \preliminary
+    \brief The QMediaPlaylistControl class provides access to the playlist functionality of a
+    QMediaService.
+
+    If a QMediaService contains an internal playlist it will implement QMediaPlaylistControl.  This
+    control provides access to the contents of the \l {playlistProvider()}{playlist}, as well as the
+    \l {currentIndex()}{position} of the current media, and a means of navigating to the
+    \l {next()}{next} and \l {previous()}{previous} media.
+
+    The functionality provided by the control is exposed to application code through the
+    QMediaPlaylist class.
+
+    The interface name of QMediaPlaylistControl is \c com.nokia.Qt.QMediaPlaylistControl/1.0 as
+    defined in QMediaPlaylistControl_iid.
+
+    \sa QMediaService::control(), QMediaPlayer
+*/
+
+/*!
+    \macro QMediaPlaylistControl_iid
+
+    \c com.nokia.Qt.QMediaPlaylistControl/1.0
+
+    Defines the interface name of the QMediaPlaylistControl class.
+
+    \relates QMediaPlaylistControl
+*/
+
+/*!
+  Create a new playlist control object with the given \a parent.
+*/
+QMediaPlaylistControl::QMediaPlaylistControl(QObject *parent):
+    QMediaControl(*new QMediaControlPrivate, parent)
+{
+}
+
+/*!
+  Destroys the playlist control.
+*/
+QMediaPlaylistControl::~QMediaPlaylistControl()
+{
+}
+
+
+/*!
+  \fn QMediaPlaylistControl::playlistProvider() const
+
+  Returns the playlist used by this media player.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::setPlaylistProvider(QMediaPlaylistProvider *playlist)
+
+  Set the playlist of this media player to \a playlist.
+
+  In many cases it is possible just to use the playlist
+  constructed by player, but sometimes replacing the whole
+  playlist allows to avoid copyting of all the items bettween playlists.
+
+  Returns true if player can use this passed playlist; otherwise returns false.
+
+*/
+
+/*!
+  \fn QMediaPlaylistControl::currentIndex() const
+
+  Returns position of the current media source in the playlist.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::setCurrentIndex(int position)
+
+  Jump to the item at the given \a position.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::nextIndex(int step) const
+
+  Returns the index of item, which were current after calling next()
+  \a step times.
+
+  Returned value depends on the size of playlist, current position
+  and playback mode.
+
+  \sa QMediaPlaylist::playbackMode
+*/
+
+/*!
+  \fn QMediaPlaylistControl::previousIndex(int step) const
+
+  Returns the index of item, which were current after calling previous()
+  \a step times.
+
+  \sa QMediaPlaylist::playbackMode
+*/
+
+/*!
+  \fn QMediaPlaylistControl::next()
+
+  Moves to the next item in playlist.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::previous()
+
+  Returns to the previous item in playlist.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::playbackMode() const
+
+  Returns the playlist navigation mode.
+
+  \sa QMediaPlaylist::PlaybackMode
+*/
+
+/*!
+  \fn QMediaPlaylistControl::setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
+
+  Sets the playback \a mode.
+
+  \sa QMediaPlaylist::PlaybackMode
+*/
+
+/*!
+  \fn QMediaPlaylistControl::playlistProviderChanged()
+
+  Signal emited when the playlist provider has changed.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::currentIndexChanged(int position)
+
+  Signal emited when the playlist \a position is changed.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)
+
+  Signal emited when the playback \a mode is changed.
+*/
+
+/*!
+  \fn QMediaPlaylistControl::currentMediaChanged(const QMediaContent& content)
+
+  Signal emitted when current media changes to \a content.
+*/
+
+#include "moc_qmediaplaylistcontrol.cpp"
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
new file mode 100644
index 0000000..cf489e3
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QMEDIAPLAYLISTCONTROL_H
+#define QMEDIAPLAYLISTCONTROL_H
+
+#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaservices/qmediaplaylistnavigator.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QMediaPlaylistProvider;
+
+class Q_MULTIMEDIA_EXPORT QMediaPlaylistControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    virtual ~QMediaPlaylistControl();
+
+    virtual QMediaPlaylistProvider* playlistProvider() const = 0;
+    virtual bool setPlaylistProvider(QMediaPlaylistProvider *playlist) = 0;
+
+    virtual int currentIndex() const = 0;
+    virtual void setCurrentIndex(int position) = 0;
+    virtual int nextIndex(int steps) const = 0;
+    virtual int previousIndex(int steps) const = 0;
+
+    virtual void next() = 0;
+    virtual void previous() = 0;
+
+    virtual QMediaPlaylist::PlaybackMode playbackMode() const = 0;
+    virtual void setPlaybackMode(QMediaPlaylist::PlaybackMode mode) = 0;
+
+Q_SIGNALS:
+    void playlistProviderChanged();
+    void currentIndexChanged(int position);
+    void currentMediaChanged(const QMediaContent&);
+    void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
+
+protected:
+    QMediaPlaylistControl(QObject* parent = 0);
+};
+
+#define QMediaPlaylistControl_iid "com.nokia.Qt.QMediaPlaylistControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QMediaPlaylistControl, QMediaPlaylistControl_iid)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QMEDIAPLAYLISTCONTROL_H
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp
new file mode 100644
index 0000000..ba5dc81
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp
@@ -0,0 +1,192 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qmediaplaylistioplugin.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QMediaPlaylistReader
+    \preliminary
+    \since 4.7
+    \brief The QMediaPlaylistReader class provides an interface for reading a playlist file.
+
+    \sa QMediaPlaylistIOPlugin
+*/
+
+/*!
+    Destroys a media playlist reader.
+*/
+QMediaPlaylistReader::~QMediaPlaylistReader()
+{
+}
+
+/*!
+    \fn QMediaPlaylistReader::atEnd() const
+
+    Identifies if a playlist reader has reached the end of its input.
+
+    Returns true if the reader has reached the end; and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlaylistReader::readItem()
+
+    Reads an item of media from a playlist file.
+
+    Returns the read media, or a null QMediaContent if no more media is available.
+*/
+
+/*!
+    \fn QMediaPlaylistReader::close()
+
+    Closes a playlist reader's input device.
+*/
+
+/*!
+    \class QMediaPlaylistWriter
+    \preliminary
+    \since 4.7
+    \brief The QMediaPlaylistWriter class provides an interface for writing a playlist file.
+
+    \sa QMediaPlaylistIOPlugin
+*/
+
+/*!
+    Destroys a media playlist writer.
+*/
+QMediaPlaylistWriter::~QMediaPlaylistWriter()
+{
+}
+
+/*!
+    \fn QMediaPlaylistWriter::writeItem(const QMediaContent &media)
+
+    Writes an item of \a media to a playlist file.
+
+    Returns true if the media was written succesfully; and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlaylistWriter::close()
+
+    Finalizes the writing of a playlist and closes the output device.
+*/
+
+/*!
+    \class QMediaPlaylistIOPlugin
+    \since 4.7
+    \brief The QMediaPlaylistIOPlugin class provides an interface for media playlist I/O plug-ins.
+*/
+
+/*!
+    Constructs a media playlist I/O plug-in with the given \a parent.
+*/
+QMediaPlaylistIOPlugin::QMediaPlaylistIOPlugin(QObject *parent)
+    :QObject(parent)
+{
+}
+
+/*!
+    Destroys a media playlist I/O plug-in.
+*/
+QMediaPlaylistIOPlugin::~QMediaPlaylistIOPlugin()
+{
+}
+
+/*!
+    \fn QMediaPlaylistIOPlugin::canRead(QIODevice *device, const QByteArray &format) const
+
+    Identifies if plug-in can read \a format data from an I/O \a device.
+
+    Returns true if the data can be read; and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlaylistIOPlugin::canRead(const QUrl& location, const QByteArray &format) const
+
+    Identifies if a plug-in can read \a format data from a URL \a location.
+
+    Returns true if the data can be read; and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlaylistIOPlugin::canWrite(QIODevice *device, const QByteArray &format) const
+
+    Identifies if a plug-in can write \a format data to an I/O \a device.
+
+    Returns true if the data can be written; and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlaylistIOPlugin::keys() const
+
+    Returns a list of format keys supported by a plug-in.
+*/
+
+/*!
+    \fn QMediaPlaylistIOPlugin::createReader(QIODevice *device, const QByteArray &format)
+
+    Returns a new QMediaPlaylistReader which reads \a format data from an I/O \a device.
+
+    If the device is invalid or the format is unsupported this will return a null pointer.
+*/
+
+/*!
+    \fn QMediaPlaylistIOPlugin::createReader(const QUrl& location, const QByteArray &format)
+
+    Returns a new QMediaPlaylistReader which reads \a format data from a URL \a location.
+
+    If the location or the format is unsupported this will return a null pointer.
+*/
+
+/*!
+    \fn QMediaPlaylistIOPlugin::createWriter(QIODevice *device, const QByteArray &format)
+
+    Returns a new QMediaPlaylistWriter which writes \a format data to an I/O \a device.
+
+    If the device is invalid or the format is unsupported this will return a null pointer.
+*/
+
+QT_END_NAMESPACE
+
+#include "moc_qmediaplaylistioplugin.cpp"
+
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
new file mode 100644
index 0000000..6bc0418
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYLISTIOPLUGIN_H
+#define QMEDIAPLAYLISTIOPLUGIN_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qplugin.h>
+#include <QtCore/qfactoryinterface.h>
+
+#include <QtMediaservices/qmediacontent.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QString;
+class QUrl;
+class QByteArray;
+class QIODevice;
+class QStringList;
+
+class Q_MULTIMEDIA_EXPORT QMediaPlaylistReader
+{
+public:
+    virtual ~QMediaPlaylistReader();
+
+    virtual bool atEnd() const = 0;
+    virtual QMediaContent readItem() = 0;
+    virtual void close() = 0;
+};
+
+class Q_MULTIMEDIA_EXPORT QMediaPlaylistWriter
+{
+public:
+    virtual ~QMediaPlaylistWriter();
+
+    virtual bool writeItem(const QMediaContent &content) = 0;
+    virtual void close() = 0;
+};
+
+struct Q_MULTIMEDIA_EXPORT QMediaPlaylistIOInterface : public QFactoryInterface
+{
+    virtual bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const = 0;
+    virtual bool canRead(const QUrl& location, const QByteArray &format = QByteArray()) const = 0;
+
+    virtual bool canWrite(QIODevice *device, const QByteArray &format) const = 0;
+
+    virtual QMediaPlaylistReader *createReader(QIODevice *device, const QByteArray &format = QByteArray()) = 0;
+    virtual QMediaPlaylistReader *createReader(const QUrl& location, const QByteArray &format = QByteArray()) = 0;
+
+    virtual QMediaPlaylistWriter *createWriter(QIODevice *device, const QByteArray &format) = 0;
+};
+
+#define QMediaPlaylistIOInterface_iid "com.nokia.Qt.QMediaPlaylistIOInterface"
+Q_DECLARE_INTERFACE(QMediaPlaylistIOInterface, QMediaPlaylistIOInterface_iid);
+
+class Q_MULTIMEDIA_EXPORT QMediaPlaylistIOPlugin : public QObject, public QMediaPlaylistIOInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(QMediaPlaylistIOInterface:QFactoryInterface)
+
+public:
+    explicit QMediaPlaylistIOPlugin(QObject *parent = 0);
+    virtual ~QMediaPlaylistIOPlugin();
+
+    virtual bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const = 0;
+    virtual bool canRead(const QUrl& location, const QByteArray &format = QByteArray()) const = 0;
+
+    virtual bool canWrite(QIODevice *device, const QByteArray &format) const = 0;
+
+    virtual QStringList keys() const = 0;
+
+    virtual QMediaPlaylistReader *createReader(QIODevice *device, const QByteArray &format = QByteArray()) = 0;
+    virtual QMediaPlaylistReader *createReader(const QUrl& location, const QByteArray &format = QByteArray()) = 0;
+
+    virtual QMediaPlaylistWriter *createWriter(QIODevice *device, const QByteArray &format) = 0;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QMEDIAPLAYLISTIOPLUGIN_H
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp
new file mode 100644
index 0000000..134ae77
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp
@@ -0,0 +1,545 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qmediaplaylistnavigator.h>
+#include <QtMediaservices/qmediaplaylistprovider.h>
+#include <QtMediaservices/qmediaplaylist.h>
+#include "qmediaobject_p.h"
+
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+class QMediaPlaylistNullProvider : public QMediaPlaylistProvider
+{
+public:
+    QMediaPlaylistNullProvider() :QMediaPlaylistProvider() {}
+    virtual ~QMediaPlaylistNullProvider() {}
+    virtual int mediaCount() const {return 0;}
+    virtual QMediaContent media(int) const { return QMediaContent(); }
+};
+
+Q_GLOBAL_STATIC(QMediaPlaylistNullProvider, _q_nullMediaPlaylist)
+
+class QMediaPlaylistNavigatorPrivate
+{
+    Q_DECLARE_NON_CONST_PUBLIC(QMediaPlaylistNavigator)
+public:
+    QMediaPlaylistNavigatorPrivate()
+        :playlist(0),
+        currentPos(-1),
+        lastValidPos(-1),
+        playbackMode(QMediaPlaylist::Linear),
+        randomPositionsOffset(-1)
+    {
+    }
+
+    QMediaPlaylistProvider *playlist;
+    int currentPos;
+    int lastValidPos; //to be used with CurrentItemOnce playback mode
+    QMediaPlaylist::PlaybackMode playbackMode;
+    QMediaContent currentItem;
+
+    mutable QList<int> randomModePositions;
+    mutable int randomPositionsOffset;
+
+    int nextItemPos(int steps = 1) const;
+    int previousItemPos(int steps = 1) const;
+
+    void _q_mediaInserted(int start, int end);
+    void _q_mediaRemoved(int start, int end);
+    void _q_mediaChanged(int start, int end);
+
+    QMediaPlaylistNavigator *q_ptr;
+};
+
+
+int QMediaPlaylistNavigatorPrivate::nextItemPos(int steps) const
+{
+    if (playlist->mediaCount() == 0)
+        return -1;
+
+    if (steps == 0)
+        return currentPos;
+
+    switch (playbackMode) {
+        case QMediaPlaylist::CurrentItemOnce:
+            return /*currentPos == -1 ? lastValidPos :*/ -1;
+        case QMediaPlaylist::CurrentItemInLoop:
+            return currentPos;
+        case QMediaPlaylist::Linear:
+            {
+                int nextPos = currentPos+steps;
+                return nextPos < playlist->mediaCount() ? nextPos : -1;
+            }
+        case QMediaPlaylist::Loop:
+            return (currentPos+steps) % playlist->mediaCount();
+        case QMediaPlaylist::Random:
+            {
+                //TODO: limit the history size
+
+                if (randomPositionsOffset == -1) {
+                    randomModePositions.clear();
+                    randomModePositions.append(currentPos);
+                    randomPositionsOffset = 0;
+                }
+
+                while (randomModePositions.size() < randomPositionsOffset+steps+1)
+                    randomModePositions.append(-1);
+                int res = randomModePositions[randomPositionsOffset+steps];
+                if (res<0 || res >= playlist->mediaCount()) {
+                    res = qrand() % playlist->mediaCount();
+                    randomModePositions[randomPositionsOffset+steps] = res;
+                }
+
+                return res;
+            }
+    }
+
+    return -1;
+}
+
+int QMediaPlaylistNavigatorPrivate::previousItemPos(int steps) const
+{
+    if (playlist->mediaCount() == 0)
+        return -1;
+
+    if (steps == 0)
+        return currentPos;
+
+    switch (playbackMode) {
+        case QMediaPlaylist::CurrentItemOnce:
+            return /*currentPos == -1 ? lastValidPos :*/ -1;
+        case QMediaPlaylist::CurrentItemInLoop:
+            return currentPos;
+        case QMediaPlaylist::Linear:
+            {
+                int prevPos = currentPos == -1 ? playlist->mediaCount() - steps : currentPos - steps;
+                return prevPos>=0 ? prevPos : -1;
+            }
+        case QMediaPlaylist::Loop:
+            {
+                int prevPos = currentPos - steps;
+                while (prevPos<0)
+                    prevPos += playlist->mediaCount();
+                return prevPos;
+            }
+        case QMediaPlaylist::Random:
+            {
+                //TODO: limit the history size
+
+                if (randomPositionsOffset == -1) {
+                    randomModePositions.clear();
+                    randomModePositions.append(currentPos);
+                    randomPositionsOffset = 0;
+                }
+
+                while (randomPositionsOffset-steps < 0) {
+                    randomModePositions.prepend(-1);
+                    randomPositionsOffset++;
+                }
+
+                int res = randomModePositions[randomPositionsOffset-steps];
+                if (res<0 || res >= playlist->mediaCount()) {
+                    res = qrand() % playlist->mediaCount();
+                    randomModePositions[randomPositionsOffset-steps] = res;
+                }
+
+                return res;
+            }
+    }
+
+    return -1;
+}
+
+/*!
+    \class QMediaPlaylistNavigator
+    \preliminary
+    \since 4.7
+    \brief The QMediaPlaylistNavigator class provides navigation for a media playlist.
+
+    \sa QMediaPlaylist, QMediaPlaylistProvider
+*/
+
+
+/*!
+    Constructs a media playlist navigator for a \a playlist.
+
+    The \a parent is passed to QObject.
+ */
+QMediaPlaylistNavigator::QMediaPlaylistNavigator(QMediaPlaylistProvider *playlist, QObject *parent)
+    : QObject(parent)
+    , d_ptr(new QMediaPlaylistNavigatorPrivate)
+{
+    d_ptr->q_ptr = this;
+
+    setPlaylist(playlist ? playlist : _q_nullMediaPlaylist());
+}
+
+/*!
+    Destroys a media playlist navigator.
+ */
+
+QMediaPlaylistNavigator::~QMediaPlaylistNavigator()
+{
+    delete d_ptr;
+}
+
+
+/*! \property QMediaPlaylistNavigator::playbackMode
+    Contains the playback mode.
+ */
+QMediaPlaylist::PlaybackMode QMediaPlaylistNavigator::playbackMode() const
+{
+    return d_func()->playbackMode;
+}
+
+/*!
+    Sets the playback \a mode.
+ */
+void QMediaPlaylistNavigator::setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
+{
+    Q_D(QMediaPlaylistNavigator);
+    if (d->playbackMode == mode)
+        return;
+
+    if (mode == QMediaPlaylist::Random) {
+        d->randomPositionsOffset = 0;
+        d->randomModePositions.append(d->currentPos);
+    } else if (d->playbackMode == QMediaPlaylist::Random) {
+        d->randomPositionsOffset = -1;
+        d->randomModePositions.clear();
+    }
+
+    d->playbackMode = mode;
+
+    emit playbackModeChanged(mode);
+    emit surroundingItemsChanged();
+}
+
+/*!
+    Returns the playlist being navigated.
+*/
+
+QMediaPlaylistProvider *QMediaPlaylistNavigator::playlist() const
+{
+    return d_func()->playlist;
+}
+
+/*!
+    Sets the \a playlist to navigate.
+*/
+void QMediaPlaylistNavigator::setPlaylist(QMediaPlaylistProvider *playlist)
+{
+    Q_D(QMediaPlaylistNavigator);
+
+    if (d->playlist == playlist)
+        return;
+
+    if (d->playlist) {
+        d->playlist->disconnect(this);
+    }
+
+    if (playlist) {
+        d->playlist = playlist;
+    } else {
+        //assign to shared readonly null playlist
+        d->playlist = _q_nullMediaPlaylist();
+    }
+
+    connect(d->playlist, SIGNAL(mediaInserted(int,int)), SLOT(_q_mediaInserted(int,int)));
+    connect(d->playlist, SIGNAL(mediaRemoved(int,int)), SLOT(_q_mediaRemoved(int,int)));
+    connect(d->playlist, SIGNAL(mediaChanged(int,int)), SLOT(_q_mediaChanged(int,int)));
+
+    d->randomPositionsOffset = -1;
+    d->randomModePositions.clear();
+
+    if (d->currentPos != -1) {
+        d->currentPos = -1;
+        emit currentIndexChanged(-1);
+    }
+
+    if (!d->currentItem.isNull()) {
+        d->currentItem = QMediaContent();
+        emit activated(d->currentItem); //stop playback
+    }
+}
+
+/*! \property QMediaPlaylistNavigator::currentItem
+
+  Contains the media at the current position in the playlist.
+
+  \sa currentIndex()
+*/
+
+QMediaContent QMediaPlaylistNavigator::currentItem() const
+{
+    return itemAt(d_func()->currentPos);
+}
+
+/*! \fn QMediaContent QMediaPlaylistNavigator::nextItem(int steps) const
+
+  Returns the media that is \a steps positions ahead of the current
+  position in the playlist.
+
+  \sa nextIndex()
+*/
+QMediaContent QMediaPlaylistNavigator::nextItem(int steps) const
+{
+    return itemAt(nextIndex(steps));
+}
+
+/*!
+  Returns the media that is \a steps positions behind the current
+  position in the playlist.
+
+  \sa previousIndex()
+ */
+QMediaContent QMediaPlaylistNavigator::previousItem(int steps) const
+{
+    return itemAt(previousIndex(steps));
+}
+
+/*!
+    Returns the media at a \a position in the playlist.
+ */
+QMediaContent QMediaPlaylistNavigator::itemAt(int position) const
+{
+    return d_func()->playlist->media(position);
+}
+
+/*! \property QMediaPlaylistNavigator::currentIndex
+
+  Contains the position of the current media.
+
+  If no media is current, the property contains -1.
+
+  \sa nextIndex(), previousIndex()
+*/
+
+int QMediaPlaylistNavigator::currentIndex() const
+{
+    return d_func()->currentPos;
+}
+
+/*!
+  Returns a position \a steps ahead of the current position
+  accounting for the playbackMode().
+
+  If the position is beyond the end of the playlist, this value
+  returned is -1.
+
+  \sa currentIndex(), previousIndex(), playbackMode()
+*/
+
+int QMediaPlaylistNavigator::nextIndex(int steps) const
+{
+    return d_func()->nextItemPos(steps);
+}
+
+/*!
+
+  Returns a position \a steps behind the current position accounting
+  for the playbackMode().
+
+  If the position is prior to the beginning of the playlist this will
+  return -1.
+
+  \sa currentIndex(), nextIndex(), playbackMode()
+*/
+int QMediaPlaylistNavigator::previousIndex(int steps) const
+{
+    return d_func()->previousItemPos(steps);
+}
+
+/*!
+  Advances to the next item in the playlist.
+
+  \sa previous(), jump(), playbackMode()
+ */
+void QMediaPlaylistNavigator::next()
+{
+    Q_D(QMediaPlaylistNavigator);
+
+    int nextPos = d->nextItemPos();
+
+    if ( playbackMode() == QMediaPlaylist::Random )
+            d->randomPositionsOffset++;
+
+    jump(nextPos);
+}
+
+/*!
+  Returns to the previous item in the playlist,
+
+  \sa next(), jump(), playbackMode()
+ */
+void QMediaPlaylistNavigator::previous()
+{
+    Q_D(QMediaPlaylistNavigator);
+
+    int prevPos = d->previousItemPos();
+    if ( playbackMode() == QMediaPlaylist::Random )
+        d->randomPositionsOffset--;
+
+    jump(prevPos);
+}
+
+/*!
+  Jumps to a new \a position in the playlist.
+ */
+void QMediaPlaylistNavigator::jump(int position)
+{
+    Q_D(QMediaPlaylistNavigator);
+
+    if (position<-1 || position>=d->playlist->mediaCount()) {
+        qWarning() << "QMediaPlaylistNavigator: Jump outside playlist range";
+        position = -1;
+    }
+
+    if (position != -1)
+        d->lastValidPos = position;
+
+    if (playbackMode() == QMediaPlaylist::Random) {
+        if (d->randomModePositions[d->randomPositionsOffset] != position) {
+            d->randomModePositions.clear();
+            d->randomModePositions.append(position);
+            d->randomPositionsOffset = 0;
+        }
+    }
+
+    if (position != -1)
+        d->currentItem = d->playlist->media(position);
+    else
+        d->currentItem = QMediaContent();
+
+    if (position != d->currentPos) {
+        d->currentPos = position;
+        emit currentIndexChanged(d->currentPos);
+        emit surroundingItemsChanged();
+    }
+
+    emit activated(d->currentItem);
+}
+
+/*!
+    \internal
+*/
+void QMediaPlaylistNavigatorPrivate::_q_mediaInserted(int start, int end)
+{
+    Q_Q(QMediaPlaylistNavigator);
+
+    if (currentPos >= start) {
+        currentPos = end-start+1;
+        q->jump(currentPos);
+    }
+
+    //TODO: check if they really changed
+    emit q->surroundingItemsChanged();
+}
+
+/*!
+    \internal
+*/
+void QMediaPlaylistNavigatorPrivate::_q_mediaRemoved(int start, int end)
+{
+    Q_Q(QMediaPlaylistNavigator);
+
+    if (currentPos > end) {
+        currentPos = currentPos - end-start+1;
+        q->jump(currentPos);
+    } else if (currentPos >= start) {
+        //current item was removed
+        currentPos = qMin(start, playlist->mediaCount()-1);
+        q->jump(currentPos);
+    }
+
+    //TODO: check if they really changed
+    emit q->surroundingItemsChanged();
+}
+
+/*!
+    \internal
+*/
+void QMediaPlaylistNavigatorPrivate::_q_mediaChanged(int start, int end)
+{
+    Q_Q(QMediaPlaylistNavigator);
+
+    if (currentPos >= start && currentPos<=end) {
+        QMediaContent src = playlist->media(currentPos);
+        if (src != currentItem) {
+            currentItem = src;
+            emit q->activated(src);
+        }
+    }
+
+    //TODO: check if they really changed
+    emit q->surroundingItemsChanged();
+}
+
+/*!
+    \fn QMediaPlaylistNavigator::activated(const QMediaContent &media)
+
+    Signals that the current \a media has changed.
+*/
+
+/*!
+    \fn QMediaPlaylistNavigator::currentIndexChanged(int position)
+
+    Signals the \a position of the current media has changed.
+*/
+
+/*!
+    \fn QMediaPlaylistNavigator::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)
+
+    Signals that the playback \a mode has changed.
+*/
+
+/*!
+    \fn QMediaPlaylistNavigator::surroundingItemsChanged()
+
+    Signals that media immediately surrounding the current position has changed.
+*/
+
+#include "moc_qmediaplaylistnavigator.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
new file mode 100644
index 0000000..b6d3d96
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYLISTNAVIGATOR_H
+#define QMEDIAPLAYLISTNAVIGATOR_H
+
+#include <QtCore/qobject.h>
+
+#include <QtMediaservices/qmediaplaylistprovider.h>
+#include <QtMediaservices/qmediaplaylist.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QMediaPlaylistNavigatorPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaPlaylistNavigator : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode NOTIFY playbackModeChanged)
+    Q_PROPERTY(int currentIndex READ currentIndex WRITE jump NOTIFY currentIndexChanged)
+    Q_PROPERTY(QMediaContent currentItem READ currentItem NOTIFY currentItemChanged)
+
+public:
+    QMediaPlaylistNavigator(QMediaPlaylistProvider *playlist, QObject *parent = 0);
+    virtual ~QMediaPlaylistNavigator();
+
+    QMediaPlaylistProvider *playlist() const;
+    void setPlaylist(QMediaPlaylistProvider *playlist);
+
+    QMediaPlaylist::PlaybackMode playbackMode() const;
+
+    QMediaContent currentItem() const;
+    QMediaContent nextItem(int steps = 1) const;
+    QMediaContent previousItem(int steps = 1) const;
+
+    QMediaContent itemAt(int position) const;
+
+    int currentIndex() const;
+    int nextIndex(int steps = 1) const;
+    int previousIndex(int steps = 1) const;
+
+public Q_SLOTS:
+    void next();
+    void previous();
+
+    void jump(int);
+
+    void setPlaybackMode(QMediaPlaylist::PlaybackMode mode);
+
+Q_SIGNALS:
+    void activated(const QMediaContent &content);
+    void currentIndexChanged(int);
+    void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
+
+    void surroundingItemsChanged();
+
+protected:
+    QMediaPlaylistNavigatorPrivate *d_ptr;
+
+private:
+    Q_DISABLE_COPY(QMediaPlaylistNavigator)
+    Q_DECLARE_PRIVATE(QMediaPlaylistNavigator)
+
+    Q_PRIVATE_SLOT(d_func(), void _q_mediaInserted(int start, int end))
+    Q_PRIVATE_SLOT(d_func(), void _q_mediaRemoved(int start, int end))
+    Q_PRIVATE_SLOT(d_func(), void _q_mediaChanged(int start, int end))
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QMEDIAPLAYLISTNAVIGATOR_H
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp b/src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp
new file mode 100644
index 0000000..c546899
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp
@@ -0,0 +1,308 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qurl.h>
+
+#include <QtMediaservices/qmediaplaylistprovider.h>
+#include "qmediaplaylistprovider_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QMediaPlaylistProvider
+    \preliminary
+    \since 4.7
+    \brief The QMediaPlaylistProvider class provides an abstract list of media.
+
+    \sa QMediaPlaylist
+*/
+
+/*!
+    Constructs a playlist provider with the given \a parent.
+*/
+QMediaPlaylistProvider::QMediaPlaylistProvider(QObject *parent)
+    :QObject(parent), d_ptr(new QMediaPlaylistProviderPrivate)
+{
+}
+
+/*!
+    \internal
+*/
+QMediaPlaylistProvider::QMediaPlaylistProvider(QMediaPlaylistProviderPrivate &dd, QObject *parent)
+    :QObject(parent), d_ptr(&dd)
+{
+}
+
+/*!
+    Destroys a playlist provider.
+*/
+QMediaPlaylistProvider::~QMediaPlaylistProvider()
+{
+    delete d_ptr;
+}
+
+/*!
+    \fn QMediaPlaylistProvider::mediaCount() const;
+
+    Returns the size of playlist.
+*/
+
+/*!
+    \fn QMediaPlaylistProvider::media(int index) const;
+
+    Returns the media at \a index in the playlist.
+
+    If the index is invalid this will return a null media content.
+*/
+
+
+/*!
+    Loads a playlist from from a URL \a location. If no playlist \a format is specified the loader
+    will inspect the URL or probe the headers to guess the format.
+
+    New items are appended to playlist.
+
+    Returns true if the provider supports the format and loading from the locations URL protocol,
+    otherwise this will return false.
+*/
+bool QMediaPlaylistProvider::load(const QUrl &location, const char *format)
+{
+    Q_UNUSED(location);
+    Q_UNUSED(format);
+    return false;
+}
+
+/*!
+    Loads a playlist from from an I/O \a device. If no playlist \a format is specified the loader
+    will probe the headers to guess the format.
+
+    New items are appended to playlist.
+
+    Returns true if the provider supports the format and loading from an I/O device, otherwise this
+    will return false.
+*/
+bool QMediaPlaylistProvider::load(QIODevice * device, const char *format)
+{
+    Q_UNUSED(device);
+    Q_UNUSED(format);
+    return false;
+}
+
+/*!
+    Saves the contents of a playlist to a URL \a location.  If no playlist \a format is specified
+    the writer will inspect the URL to guess the format.
+
+    Returns true if the playlist was saved succesfully; and false otherwise.
+  */
+bool QMediaPlaylistProvider::save(const QUrl &location, const char *format)
+{
+    Q_UNUSED(location);
+    Q_UNUSED(format);
+    return false;
+}
+
+/*!
+    Saves the contents of a playlist to an I/O \a device in the specified \a format.
+
+    Returns true if the playlist was saved succesfully; and false otherwise.
+*/
+bool QMediaPlaylistProvider::save(QIODevice * device, const char *format)
+{
+    Q_UNUSED(device);
+    Q_UNUSED(format);
+    return false;
+}
+
+/*!
+    Returns true if a playlist is read-only; otherwise returns false.
+*/
+bool QMediaPlaylistProvider::isReadOnly() const
+{
+    return true;
+}
+
+/*!
+    Append \a media to a playlist.
+
+    Returns true if the media was appended; and false otherwise.
+*/
+bool QMediaPlaylistProvider::addMedia(const QMediaContent &media)
+{
+    Q_UNUSED(media);
+    return false;
+}
+
+/*!
+    Append multiple media \a items to a playlist.
+
+    Returns true if the media items were appended; and false otherwise.
+*/
+bool QMediaPlaylistProvider::addMedia(const QList<QMediaContent> &items)
+{
+    foreach(const QMediaContent &item, items) {
+        if (!addMedia(item))
+            return false;
+    }
+
+    return true;
+}
+
+/*!
+    Inserts \a media into a playlist at \a position.
+
+    Returns true if the media was inserted; and false otherwise.
+*/
+bool QMediaPlaylistProvider::insertMedia(int position, const QMediaContent &media)
+{
+    Q_UNUSED(position);
+    Q_UNUSED(media);
+    return false;
+}
+
+/*!
+    Inserts multiple media \a items into a playlist at \a position.
+
+    Returns true if the media \a items were inserted; and false otherwise.
+*/
+bool QMediaPlaylistProvider::insertMedia(int position, const QList<QMediaContent> &items)
+{
+    for (int i=0; i<items.count(); i++) {
+        if (!insertMedia(position+i,items.at(i)))
+            return false;
+    }
+
+    return true;
+}
+
+
+/*!
+    Removes the media at \a position from a playlist.
+
+    Returns true if the media was removed; and false otherwise.
+*/
+bool QMediaPlaylistProvider::removeMedia(int position)
+{
+    Q_UNUSED(position);
+    return false;
+}
+
+/*!
+    Removes the media between the given \a start and \a end positions from a playlist.
+
+    Returns true if the media was removed; and false otherwise.
+  */
+bool QMediaPlaylistProvider::removeMedia(int start, int end)
+{
+    for (int pos=start; pos<=end; pos++) {
+        if (!removeMedia(pos))
+            return false;
+    }
+
+    return true;
+}
+
+/*!
+    Removes all media from a playlist.
+
+    Returns true if the media was removed; and false otherwise.
+*/
+bool QMediaPlaylistProvider::clear()
+{
+    return removeMedia(0, mediaCount()-1);
+}
+
+/*!
+    Shuffles the contents of a playlist.
+*/
+void QMediaPlaylistProvider::shuffle()
+{
+}
+
+/*!
+    \fn void QMediaPlaylistProvider::mediaAboutToBeInserted(int start, int end);
+
+    Signals that new media is about to be inserted into a playlist between the \a start and \a end
+    positions.
+*/
+
+/*!
+    \fn void QMediaPlaylistProvider::mediaInserted(int start, int end);
+
+    Signals that new media has been inserted into a playlist between the \a start and \a end
+    positions.
+*/
+
+/*!
+    \fn void QMediaPlaylistProvider::mediaAboutToBeRemoved(int start, int end);
+
+    Signals that media is about to be removed from a playlist between the \a start and \a end
+    positions.
+*/
+
+/*!
+    \fn void QMediaPlaylistProvider::mediaRemoved(int start, int end);
+
+    Signals that media has been removed from a playlist between the \a start and \a end positions.
+*/
+
+/*!
+    \fn void QMediaPlaylistProvider::mediaChanged(int start, int end);
+
+    Signals that media in playlist between the \a start and \a end positions inclusive has changed.
+*/
+
+/*!
+    \fn void QMediaPlaylistProvider::loaded()
+
+    Signals that a load() finished successfully.
+*/
+
+/*!
+    \fn void QMediaPlaylistProvider::loadFailed(QMediaPlaylist::Error error, const QString& errorMessage)
+
+    Signals that a load failed() due to an \a error.  The \a errorMessage provides more information.
+*/
+
+#include "moc_qmediaplaylistprovider.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistprovider.h b/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
new file mode 100644
index 0000000..4929287
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYLISTPROVIDER_H
+#define QMEDIAPLAYLISTPROVIDER_H
+
+#include <QtCore/qobject.h>
+
+#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaservices/qmediaplaylist.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QString;
+
+
+class QMediaPlaylistProviderPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaPlaylistProvider : public QObject
+{
+    Q_OBJECT
+
+public:
+    QMediaPlaylistProvider(QObject *parent=0);
+    virtual ~QMediaPlaylistProvider();
+
+    virtual bool load(const QUrl &location, const char *format = 0);
+    virtual bool load(QIODevice * device, const char *format = 0);
+    virtual bool save(const QUrl &location, const char *format = 0);
+    virtual bool save(QIODevice * device, const char *format);
+
+    virtual int mediaCount() const = 0;
+    virtual QMediaContent media(int index) const = 0;
+
+    virtual bool isReadOnly() const;
+
+    virtual bool addMedia(const QMediaContent &content);
+    virtual bool addMedia(const QList<QMediaContent> &contentList);
+    virtual bool insertMedia(int index, const QMediaContent &content);
+    virtual bool insertMedia(int index, const QList<QMediaContent> &content);
+    virtual bool removeMedia(int pos);
+    virtual bool removeMedia(int start, int end);
+    virtual bool clear();
+
+public Q_SLOTS:
+    virtual void shuffle();
+
+Q_SIGNALS:
+    void mediaAboutToBeInserted(int start, int end);
+    void mediaInserted(int start, int end);
+
+    void mediaAboutToBeRemoved(int start, int end);
+    void mediaRemoved(int start, int end);
+
+    void mediaChanged(int start, int end);
+
+    void loaded();
+    void loadFailed(QMediaPlaylist::Error, const QString& errorMessage);
+
+protected:
+    QMediaPlaylistProviderPrivate *d_ptr;
+    QMediaPlaylistProvider(QMediaPlaylistProviderPrivate &dd, QObject *parent);
+
+private:
+    Q_DECLARE_PRIVATE(QMediaPlaylistProvider)
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QMEDIAPLAYLISTPROVIDER_H
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h b/src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h
new file mode 100644
index 0000000..03f72ac
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYLISTPROVIDER_P_H
+#define QMEDIAPLAYLISTPROVIDER_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtMediaservices/qmediaplaylist.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMediaPlaylistProviderPrivate
+{
+public:
+    QMediaPlaylistProviderPrivate()
+    {}
+    virtual ~QMediaPlaylistProviderPrivate()
+    {}
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QMEDIAPLAYLISTSOURCE_P_H
diff --git a/src/multimedia/mediaservices/base/qmediapluginloader.cpp b/src/multimedia/mediaservices/base/qmediapluginloader.cpp
new file mode 100644
index 0000000..a1975ab
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediapluginloader.cpp
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmediapluginloader_p.h"
+#include <QtCore/qcoreapplication.h>
+#include <QtCore/qpluginloader.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qdebug.h>
+
+#include <QtMediaservices/qmediaserviceproviderplugin.h>
+
+
+QT_BEGIN_NAMESPACE
+
+
+typedef QMap<QString,QObjectList> ObjectListMap;
+Q_GLOBAL_STATIC(ObjectListMap, staticMediaPlugins);
+
+QMediaPluginLoader::QMediaPluginLoader(const char *iid, const QString &location, Qt::CaseSensitivity):
+    m_iid(iid)
+{
+    m_location = location + QLatin1String("/");
+    load();
+}
+
+QStringList QMediaPluginLoader::keys() const
+{
+    return m_instances.keys();
+}
+
+QObject* QMediaPluginLoader::instance(QString const &key)
+{
+    return m_instances.value(key);
+}
+
+QList<QObject*> QMediaPluginLoader::instances(QString const &key)
+{
+    return m_instances.values(key);
+}
+
+//to be used for testing purposes only
+void QMediaPluginLoader::setStaticPlugins(const QString &location, const QObjectList& objects)
+{
+    staticMediaPlugins()->insert(location + QLatin1String("/"), objects);
+}
+
+void QMediaPluginLoader::load()
+{
+    if (!m_instances.isEmpty())
+        return;
+
+    if (staticMediaPlugins() && staticMediaPlugins()->contains(m_location)) {
+        foreach(QObject *o, staticMediaPlugins()->value(m_location)) {
+            if (o != 0 && o->qt_metacast(m_iid) != 0) {
+                QFactoryInterface* p = qobject_cast<QFactoryInterface*>(o);
+                if (p != 0) {
+                    foreach (QString const &key, p->keys())
+                        m_instances.insertMulti(key, o);
+                }
+            }
+        }
+    } else {
+#ifndef QT_NO_LIBRARY
+        QStringList     paths = QCoreApplication::libraryPaths();
+
+        foreach (QString const &path, paths) {
+            QString     pluginPathName(path + m_location);
+            QDir        pluginDir(pluginPathName);
+
+            if (!pluginDir.exists())
+                continue;
+
+            foreach (QString pluginLib, pluginDir.entryList(QDir::Files)) {
+                QPluginLoader   loader(pluginPathName + pluginLib);
+
+                QObject *o = loader.instance();
+                if (o != 0 && o->qt_metacast(m_iid) != 0) {
+                    QFactoryInterface* p = qobject_cast<QFactoryInterface*>(o);
+                    if (p != 0) {
+                        foreach (QString const &key, p->keys())
+                            m_instances.insertMulti(key, o);
+                    }
+
+                    continue;
+                } else {
+                    qWarning() << "QMediaPluginLoader: Failed to load plugin: " << pluginLib << loader.errorString();
+                }
+                delete o;
+                loader.unload();
+            }
+        }
+#endif
+    }
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediapluginloader_p.h b/src/multimedia/mediaservices/base/qmediapluginloader_p.h
new file mode 100644
index 0000000..194f6ee
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediapluginloader_p.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLUGINLOADER_H
+#define QMEDIAPLUGINLOADER_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qobject.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qmap.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QMediaServiceProviderPlugin;
+
+class Q_AUTOTEST_EXPORT QMediaPluginLoader
+{
+public:
+    QMediaPluginLoader(const char *iid,
+                   const QString &suffix = QString(),
+                   Qt::CaseSensitivity = Qt::CaseSensitive);
+
+    QStringList keys() const;
+    QObject* instance(QString const &key);
+    QList<QObject*> instances(QString const &key);
+
+    static void setStaticPlugins(const QString &location, const QObjectList& objects);
+
+private:
+    void load();
+
+    QByteArray  m_iid;
+    QString     m_location;
+    QMap<QString, QObject*> m_instances;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QMEDIAPLUGINLOADER_H
diff --git a/src/multimedia/mediaservices/base/qmediaresource.cpp b/src/multimedia/mediaservices/base/qmediaresource.cpp
new file mode 100644
index 0000000..9577092
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaresource.cpp
@@ -0,0 +1,399 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qsize.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qvariant.h>
+
+#include <QtMediaservices/qmediaresource.h>
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QMediaResource
+    \preliminary
+    \since 4.7
+    \brief The QMediaResource class provides a description of a media resource.
+    \ingroup multimedia
+
+    A media resource is composed of a \l {url()}{URL} containing the
+    location of the resource and a set of properties that describe the
+    format of the resource.  The properties provide a means to assess a
+    resource without first attempting to load it, and in situations where
+    media be represented by multiple alternative representations provide a
+    means to select the appropriate resource.
+
+    Media made available by a remote services can often be available in
+    multiple encodings or quality levels, this allows a client to select
+    an appropriate resource based on considerations such as codecs supported,
+    network bandwidth, and display constraints.  QMediaResource includes
+    information such as the \l {mimeType()}{MIME type}, \l {audioCodec()}{audio}
+    and \l {videoCodec()}{video} codecs, \l {audioBitRate()}{audio} and
+    \l {videoBitRate()}{video} bit rates, and \l {resolution()}{resolution}
+    so these constraints and others can be evaluated.
+
+    The only mandatory property of a QMediaResource is the url().
+
+    \sa QMediaContent
+*/
+
+/*!
+    \typedef QMediaResourceList
+
+    Synonym for \c QList<QMediaResource>
+*/
+
+/*!
+    Constructs a null media resource.
+*/
+QMediaResource::QMediaResource()
+{
+}
+
+/*!
+    Constructs a media resource with the given \a mimeType from a \a url.
+*/
+QMediaResource::QMediaResource(const QUrl &url, const QString &mimeType)
+{
+    values.insert(Url, url);
+    values.insert(MimeType, mimeType);
+}
+
+/*!
+    Constructs a media resource with the given \a mimeType from a network \a request.
+*/
+QMediaResource::QMediaResource(const QNetworkRequest &request, const QString &mimeType)
+{
+    values.insert(Request, QVariant::fromValue(request));
+    values.insert(Url, request.url());
+    values.insert(MimeType, mimeType);
+}
+
+/*!
+    Constructs a copy of a media resource \a other.
+*/
+QMediaResource::QMediaResource(const QMediaResource &other)
+    : values(other.values)
+{
+}
+
+/*!
+    Assigns the value of \a other to a media resource.
+*/
+QMediaResource &QMediaResource::operator =(const QMediaResource &other)
+{
+    values = other.values;
+
+    return *this;
+}
+
+/*!
+    Destroys a media resource.
+*/
+QMediaResource::~QMediaResource()
+{
+}
+
+
+/*!
+    Compares a media resource to \a other.
+
+    Returns true if the resources are identical, and false otherwise.
+*/
+bool QMediaResource::operator ==(const QMediaResource &other) const
+{
+    return values == other.values;
+}
+
+/*!
+    Compares a media resource to \a other.
+
+    Returns true if they are different, and false otherwise.
+*/
+bool QMediaResource::operator !=(const QMediaResource &other) const
+{
+    return values != other.values;
+}
+
+/*!
+    Identifies if a media resource is null.
+
+    Returns true if the resource is null, and false otherwise.
+*/
+bool QMediaResource::isNull() const
+{
+    return values.isEmpty();
+}
+
+/*!
+    Returns the URL of a media resource.
+*/
+QUrl QMediaResource::url() const
+{
+    return qvariant_cast<QUrl>(values.value(Url));
+}
+
+/*!
+    Returns the network request associated with this media resource.
+*/
+QNetworkRequest QMediaResource::request() const
+{
+    if(values.contains(Request))
+        return qvariant_cast<QNetworkRequest>(values.value(Request));
+
+    return QNetworkRequest(url());
+}
+
+/*!
+    Returns the MIME type of a media resource.
+
+    This may be null if the MIME type is unknown.
+*/
+QString QMediaResource::mimeType() const
+{
+    return qvariant_cast<QString>(values.value(MimeType));
+}
+
+/*!
+    Returns the language of a media resource as an ISO 639-2 code.
+
+    This may be null if the language is unknown.
+*/
+QString QMediaResource::language() const
+{
+    return qvariant_cast<QString>(values.value(Language));
+}
+
+/*!
+    Sets the \a language of a media resource.
+*/
+void QMediaResource::setLanguage(const QString &language)
+{
+    if (!language.isNull())
+        values.insert(Language, language);
+    else
+        values.remove(Language);
+}
+
+/*!
+    Returns the audio codec of a media resource.
+
+    This may be null if the media resource does not contain an audio stream, or the codec is
+    unknown.
+*/
+QString QMediaResource::audioCodec() const
+{
+    return qvariant_cast<QString>(values.value(AudioCodec));
+}
+
+/*!
+    Sets the audio \a codec of a media resource.
+*/
+void QMediaResource::setAudioCodec(const QString &codec)
+{
+    if (!codec.isNull())
+        values.insert(AudioCodec, codec);
+    else
+        values.remove(AudioCodec);
+}
+
+/*!
+    Returns the video codec of a media resource.
+
+    This may be null if the media resource does not contain a video stream, or the codec is
+    unknonwn.
+*/
+QString QMediaResource::videoCodec() const
+{
+    return qvariant_cast<QString>(values.value(VideoCodec));
+}
+
+/*!
+    Sets the video \a codec of media resource.
+*/
+void QMediaResource::setVideoCodec(const QString &codec)
+{
+    if (!codec.isNull())
+        values.insert(VideoCodec, codec);
+    else
+        values.remove(VideoCodec);
+}
+
+/*!
+    Returns the size in bytes of a media resource.
+
+    This may be zero if the size is unknown.
+*/
+qint64 QMediaResource::dataSize() const
+{
+    return qvariant_cast<qint64>(values.value(DataSize));
+}
+
+/*!
+    Sets the \a size in bytes of a media resource.
+*/
+void QMediaResource::setDataSize(const qint64 size)
+{
+    if (size != 0)
+        values.insert(DataSize, size);
+    else
+        values.remove(DataSize);
+}
+
+/*!
+    Returns the bit rate in bits per second of a media resource's audio stream.
+
+    This may be zero if the bit rate is unknown, or the resource contains no audio stream.
+*/
+int QMediaResource::audioBitRate() const
+{
+    return values.value(AudioBitRate).toInt();
+}
+
+/*!
+    Sets the bit \a rate in bits per second of a media resource's video stream.
+*/
+void QMediaResource::setAudioBitRate(int rate)
+{
+    if (rate != 0)
+        values.insert(AudioBitRate, rate);
+    else
+        values.remove(AudioBitRate);
+}
+
+/*!
+    Returns the audio sample rate of a media resource.
+
+    This may be zero if the sample size is unknown, or the resource contains no audio stream.
+*/
+int QMediaResource::sampleRate() const
+{
+    return qvariant_cast<int>(values.value(SampleRate));
+}
+
+/*!
+    Sets the audio \a sampleRate of a media resource.
+*/
+void QMediaResource::setSampleRate(int sampleRate)
+{
+    if (sampleRate != 0)
+        values.insert(SampleRate, sampleRate);
+    else
+        values.remove(SampleRate);
+}
+
+/*!
+    Returns the number of audio channels in a media resource.
+
+    This may be zero if the sample size is unknown, or the resource contains no audio stream.
+*/
+int QMediaResource::channelCount() const
+{
+    return qvariant_cast<int>(values.value(ChannelCount));
+}
+
+/*!
+    Sets the number of audio \a channels in a media resource.
+*/
+void QMediaResource::setChannelCount(int channels)
+{
+    if (channels != 0)
+        values.insert(ChannelCount, channels);
+    else
+        values.remove(ChannelCount);
+}
+
+/*!
+    Returns the bit rate in bits per second of a media resource's video stream.
+
+    This may be zero if the bit rate is unknown, or the resource contains no video stream.
+*/
+int QMediaResource::videoBitRate() const
+{
+    return values.value(VideoBitRate).toInt();
+}
+
+/*!
+    Sets the bit \a rate in bits per second of a media resource's video stream.
+*/
+void QMediaResource::setVideoBitRate(int rate)
+{
+    if (rate != 0)
+        values.insert(VideoBitRate, rate);
+    else
+        values.remove(VideoBitRate);
+}
+
+/*!
+    Returns the resolution in pixels of a media resource.
+
+    This may be null is the resolution is unknown, or the resource contains no pixel data (i.e. the
+    resource is an audio stream.
+*/
+QSize QMediaResource::resolution() const
+{
+    return qvariant_cast<QSize>(values.value(Resolution));
+}
+
+/*!
+    Sets the \a resolution in pixels of a media resource.
+*/
+void QMediaResource::setResolution(const QSize &resolution)
+{
+    if (resolution.width() != -1 || resolution.height() != -1)
+        values.insert(Resolution, resolution);
+    else
+        values.remove(Resolution);
+}
+
+/*!
+    Sets the \a width and \a height in pixels of a media resource.
+*/
+void QMediaResource::setResolution(int width, int height)
+{
+    if (width != -1 || height != -1)
+        values.insert(Resolution, QSize(width, height));
+    else
+        values.remove(Resolution);
+}
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediaresource.h b/src/multimedia/mediaservices/base/qmediaresource.h
new file mode 100644
index 0000000..69078cc
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaresource.h
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIARESOURCE_H
+#define QMEDIARESOURCE_H
+
+#include <QtCore/qmap.h>
+#include <QtCore/qmetatype.h>
+#include <QtNetwork/qnetworkrequest.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class Q_MULTIMEDIA_EXPORT QMediaResource
+{
+public:
+    QMediaResource();
+    QMediaResource(const QUrl &url, const QString &mimeType = QString());
+    QMediaResource(const QNetworkRequest &request, const QString &mimeType = QString());
+    QMediaResource(const QMediaResource &other);
+    QMediaResource &operator =(const QMediaResource &other);
+    ~QMediaResource();
+
+    bool isNull() const;
+
+    bool operator ==(const QMediaResource &other) const;
+    bool operator !=(const QMediaResource &other) const;
+
+    QUrl url() const;
+    QNetworkRequest request() const;
+    QString mimeType() const;
+
+    QString language() const;
+    void setLanguage(const QString &language);
+
+    QString audioCodec() const;
+    void setAudioCodec(const QString &codec);
+
+    QString videoCodec() const;
+    void setVideoCodec(const QString &codec);
+
+    qint64 dataSize() const;
+    void setDataSize(const qint64 size);
+
+    int audioBitRate() const;
+    void setAudioBitRate(int rate);
+
+    int sampleRate() const;
+    void setSampleRate(int frequency);
+
+    int channelCount() const;
+    void setChannelCount(int channels);
+
+    int videoBitRate() const;
+    void setVideoBitRate(int rate);
+
+    QSize resolution() const;
+    void setResolution(const QSize &resolution);
+    void setResolution(int width, int height);
+
+
+private:
+    enum Property
+    {
+        Url,
+        Request,
+        MimeType,
+        Language,
+        AudioCodec,
+        VideoCodec,
+        DataSize,
+        AudioBitRate,
+        VideoBitRate,
+        SampleRate,
+        ChannelCount,
+        Resolution
+    };
+    QMap<int, QVariant> values;
+};
+
+typedef QList<QMediaResource> QMediaResourceList;
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QMediaResource)
+Q_DECLARE_METATYPE(QMediaResourceList)
+
+QT_END_HEADER
+
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qmediaservice.cpp b/src/multimedia/mediaservices/base/qmediaservice.cpp
new file mode 100644
index 0000000..5d522dc
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaservice.cpp
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qtimer.h>
+
+#include <QtMediaservices/qmediaservice.h>
+#include "qmediaservice_p.h"
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+/*!
+    \class QMediaService
+    \brief The QMediaService class provides a common base class for media
+    service implementations.
+    \ingroup multimedia-serv
+    \preliminary
+    \since 4.7
+
+    Media services provide implementations of the functionality promised
+    by media objects, and allow multiple providers to implement a QMediaObject.
+
+    To provide the functionality of a QMediaObject media services implement
+    QMediaControl interfaces.  Services typically implement one core media
+    control which provides the core feature of a media object, and some
+    number of additional controls which provide either optional features of
+    the media object, or features of a secondary media object or peripheral
+    object.
+
+    A pointer to media service's QMediaControl implementation can be
+    obtained by passing the control's interface name to the control() function.
+
+    \code
+    QMediaPlayerControl *control = qobject_cast<QMediaPlayerControl *>(
+            service->control("com.nokia.Qt.QMediaPlayerControl/1.0"));
+    \endcode
+
+    Media objects can use services loaded dynamically from plug-ins or
+    implemented statically within an applications.  Plug-in based services
+    should also implement the QMediaServiceProviderPlugin interface.  Static
+    services should implement the QMediaServiceProvider interface.
+
+    \sa QMediaObject, QMediaControl, QMediaServiceProvider, QMediaServiceProviderPlugin
+*/
+
+/*!
+    Construct a media service with the given \a parent. This class is meant as a
+    base class for Multimedia services so this constructor is protected.
+*/
+
+QMediaService::QMediaService(QObject *parent)
+    : QObject(parent)
+    , d_ptr(new QMediaServicePrivate)
+{
+    d_ptr->q_ptr = this;
+}
+
+/*!
+    \internal
+*/
+QMediaService::QMediaService(QMediaServicePrivate &dd, QObject *parent)
+    : QObject(parent)
+    , d_ptr(&dd)
+{
+    d_ptr->q_ptr = this;
+}
+
+/*!
+    Destroys a media service.
+*/
+
+QMediaService::~QMediaService()
+{
+    delete d_ptr;
+}
+
+/*!
+    \fn QMediaService::control(const char *interface) const
+
+    Returns a pointer to the media control implementing \a interface.
+
+    If the service does not implement the control a null pointer is returned instead.
+*/
+
+/*!
+    \fn QMediaService::control() const
+
+    Returns a pointer to the media control of type T implemented by a media service.
+
+    If the service does not implment the control a null pointer is returned instead.
+*/
+
+#include "moc_qmediaservice.cpp"
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
diff --git a/src/multimedia/mediaservices/base/qmediaservice.h b/src/multimedia/mediaservices/base/qmediaservice.h
new file mode 100644
index 0000000..060019b
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaservice.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTMEDIASERVICE_H
+#define QABSTRACTMEDIASERVICE_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qstringlist.h>
+
+#include <QtMediaservices/qmediacontrol.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMediaServicePrivate;
+class Q_MULTIMEDIA_EXPORT QMediaService : public QObject
+{
+    Q_OBJECT
+
+public:
+    ~QMediaService();
+
+    virtual QMediaControl* control(const char *name) const = 0;
+
+#ifndef QT_NO_MEMBER_TEMPLATES
+    template <typename T> inline T control() const {
+        if (QObject *object = control(qmediacontrol_iid<T>())) {
+            return qobject_cast<T>(object);
+        }
+        return 0;
+    }
+#endif
+
+protected:
+    QMediaService(QObject* parent);
+    QMediaService(QMediaServicePrivate &dd, QObject *parent);
+
+    QMediaServicePrivate *d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(QMediaService)
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QABSTRACTMEDIASERVICE_H
+
diff --git a/src/multimedia/mediaservices/base/qmediaservice_p.h b/src/multimedia/mediaservices/base/qmediaservice_p.h
new file mode 100644
index 0000000..e60e669
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaservice_p.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTMEDIASERVICE_P_H
+#define QABSTRACTMEDIASERVICE_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QAudioDeviceControl;
+
+class QMediaServicePrivate
+{
+public:
+    QMediaServicePrivate(): q_ptr(0) {}
+    virtual ~QMediaServicePrivate() {}
+
+    QMediaService *q_ptr;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qmediaserviceprovider.cpp b/src/multimedia/mediaservices/base/qmediaserviceprovider.cpp
new file mode 100644
index 0000000..48d245d
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaserviceprovider.cpp
@@ -0,0 +1,738 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qmap.h>
+
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qmediaserviceprovider.h>
+#include <QtMediaservices/qmediaserviceproviderplugin.h>
+#include "qmediapluginloader_p.h"
+#include <QtMediaservices/qmediaplayer.h>
+
+QT_BEGIN_NAMESPACE
+
+class QMediaServiceProviderHintPrivate : public QSharedData
+{
+public:
+    QMediaServiceProviderHintPrivate(QMediaServiceProviderHint::Type type)
+        :type(type), features(0)
+    {
+    }
+
+    QMediaServiceProviderHintPrivate(const QMediaServiceProviderHintPrivate &other)
+        :QSharedData(other),
+        type(other.type),
+        device(other.device),
+        mimeType(other.mimeType),
+        codecs(other.codecs),
+        features(other.features)
+    {
+    }
+
+    ~QMediaServiceProviderHintPrivate()
+    {
+    }
+
+    QMediaServiceProviderHint::Type type;
+    QByteArray device;
+    QString mimeType;
+    QStringList codecs;
+    QMediaServiceProviderHint::Features features;
+};
+
+/*!
+    \class QMediaServiceProviderHint
+    \preliminary
+    \since 4.7
+    \brief The QMediaServiceProviderHint class describes what is required of a QMediaService.
+    
+    \ingroup multimedia-serv
+
+    The QMediaServiceProvider class uses hints to select an appropriate media service.
+*/
+
+/*!
+    \enum QMediaServiceProviderHint::Feature
+
+    Enumerates features a media service may provide.
+
+    \value LowLatencyPlayback
+            The service is expected to play simple audio formats,
+            but playback should start without significant delay.
+            Such playback service can be used for beeps, ringtones, etc.
+
+    \value RecordingSupport
+            The service provides audio or video recording functions.
+
+    \value StreamPlayback
+            The service is capable of playing QIODevice based streams.
+*/
+
+/*!
+    \enum QMediaServiceProviderHint::Type
+
+    Enumerates the possible types of media service provider hint.
+
+    \value Null               En empty hint, use the default service.
+    \value ContentType        Select media service most suitable for certain content type.
+    \value Device             Select media service which supports certain device.
+    \value SupportedFeatures  Select media service supporting the set of optional features.
+*/
+
+
+/*!
+    Constructs an empty media service provider hint.
+*/
+QMediaServiceProviderHint::QMediaServiceProviderHint()
+    :d(new QMediaServiceProviderHintPrivate(Null))
+{
+}
+
+/*!
+    Constructs a ContentType media service provider hint.
+
+    This type of hint describes a service that is able to play content of a specific MIME \a type
+    encoded with one or more of the listed \a codecs.
+*/
+QMediaServiceProviderHint::QMediaServiceProviderHint(const QString &type, const QStringList& codecs)
+    :d(new QMediaServiceProviderHintPrivate(ContentType))
+{
+    d->mimeType = type;
+    d->codecs = codecs;
+}
+
+/*!
+  Constructs a Device media service provider hint.
+
+  This type of hint describes a media service that utilizes a specific \a device.
+*/
+QMediaServiceProviderHint::QMediaServiceProviderHint(const QByteArray &device)
+    :d(new QMediaServiceProviderHintPrivate(Device))
+{
+    d->device = device;
+}
+
+/*!
+    Constructs a SupportedFeatures media service provider hint.
+
+    This type of hint describes a service which supports a specific set of \a features.
+*/
+QMediaServiceProviderHint::QMediaServiceProviderHint(QMediaServiceProviderHint::Features features)
+    :d(new QMediaServiceProviderHintPrivate(SupportedFeatures))
+{
+    d->features = features;
+}
+
+/*!
+    Constructs a copy of the media service provider hint \a other.
+*/
+QMediaServiceProviderHint::QMediaServiceProviderHint(const QMediaServiceProviderHint &other)
+    :d(other.d)
+{
+}
+
+/*!
+    Destroys a media service provider hint.
+*/
+QMediaServiceProviderHint::~QMediaServiceProviderHint()
+{
+}
+
+/*!
+    Assigns the value \a other to a media service provider hint.
+*/
+QMediaServiceProviderHint& QMediaServiceProviderHint::operator=(const QMediaServiceProviderHint &other)
+{
+    d = other.d;
+    return *this;
+}
+
+/*!
+    Identifies if \a other is of equal value to a media service provider hint.
+
+    Returns true if the hints are equal, and false if they are not.
+*/
+bool QMediaServiceProviderHint::operator == (const QMediaServiceProviderHint &other) const
+{
+    return (d == other.d) ||
+           (d->type == other.d->type &&
+            d->device == other.d->device &&
+            d->mimeType == other.d->mimeType &&
+            d->codecs == other.d->codecs &&
+            d->features == other.d->features);
+}
+
+/*!
+    Identifies if \a other is not of equal value to a media service provider hint.
+
+    Returns true if the hints are not equal, and false if they are.
+*/
+bool QMediaServiceProviderHint::operator != (const QMediaServiceProviderHint &other) const
+{
+    return !(*this == other);
+}
+
+/*!
+    Returns true if a media service provider is null.
+*/
+bool QMediaServiceProviderHint::isNull() const
+{
+    return d->type == Null;
+}
+
+/*!
+    Returns the type of a media service provider hint.
+*/
+QMediaServiceProviderHint::Type QMediaServiceProviderHint::type() const
+{
+    return d->type;
+}
+
+/*!
+    Returns the mime type of the media a service is expected to be able play.
+*/
+QString QMediaServiceProviderHint::mimeType() const
+{
+    return d->mimeType;
+}
+
+/*!
+    Returns a list of codes a media service is expected to be able to decode.
+*/
+QStringList QMediaServiceProviderHint::codecs() const
+{
+    return d->codecs;
+}
+
+/*!
+    Returns the name of a device a media service is expected to utilize.
+*/
+QByteArray QMediaServiceProviderHint::device() const
+{
+    return d->device;
+}
+
+/*!
+    Returns a set of features a media service is expected to provide.
+*/
+QMediaServiceProviderHint::Features QMediaServiceProviderHint::features() const
+{
+    return d->features;
+}
+
+
+Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, loader,
+        (QMediaServiceProviderFactoryInterface_iid, QLatin1String("/mediaservices"), Qt::CaseInsensitive))
+
+
+class QPluginServiceProvider : public QMediaServiceProvider
+{
+    QMap<QMediaService*, QMediaServiceProviderPlugin*> pluginMap;
+
+public:
+    QMediaService* requestService(const QByteArray &type, const QMediaServiceProviderHint &hint)
+    {
+        QString key(QString::fromLatin1(type.constData(),type.length()));
+
+        QList<QMediaServiceProviderPlugin *>plugins;
+        foreach (QObject *obj, loader()->instances(key)) {
+            QMediaServiceProviderPlugin *plugin =
+                qobject_cast<QMediaServiceProviderPlugin*>(obj);
+            if (plugin)
+                plugins << plugin;
+        }
+
+        if (!plugins.isEmpty()) {
+            QMediaServiceProviderPlugin *plugin = 0;
+
+            switch (hint.type()) {
+            case QMediaServiceProviderHint::Null:
+                plugin = plugins[0];
+                //special case for media player, if low latency was not asked,
+                //prefer services not offering it, since they are likely to support
+                //more formats
+                if (type == QByteArray(Q_MEDIASERVICE_MEDIAPLAYER)) {
+                    foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
+                        QMediaServiceFeaturesInterface *iface =
+                                qobject_cast<QMediaServiceFeaturesInterface*>(currentPlugin);
+
+                        if (!iface || !(iface->supportedFeatures(type) &
+                                        QMediaServiceProviderHint::LowLatencyPlayback)) {
+                            plugin = currentPlugin;
+                            break;
+                        }
+
+                    }
+                }
+                break;
+            case QMediaServiceProviderHint::SupportedFeatures:
+                plugin = plugins[0];
+                foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
+                    QMediaServiceFeaturesInterface *iface =
+                            qobject_cast<QMediaServiceFeaturesInterface*>(currentPlugin);
+
+                    if (iface) {
+                        if ((iface->supportedFeatures(type) & hint.features()) == hint.features()) {
+                            plugin = currentPlugin;
+                            break;
+                        }
+                    }
+                }
+                break;
+            case QMediaServiceProviderHint::Device: {
+                    foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
+                        QMediaServiceSupportedDevicesInterface *iface =
+                                qobject_cast<QMediaServiceSupportedDevicesInterface*>(currentPlugin);
+
+                        if (!iface) {
+                            // the plugin may support the device,
+                            // but this choice still can be overridden
+                            plugin = currentPlugin;
+                        } else {
+                            if (iface->devices(type).contains(hint.device())) {
+                                plugin = currentPlugin;
+                                break;
+                            }
+                        }
+                    }
+                }
+                break;
+            case QMediaServiceProviderHint::ContentType: {
+                    QtMediaservices::SupportEstimate estimate = QtMediaservices::NotSupported;
+                    foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
+                        QtMediaservices::SupportEstimate currentEstimate = QtMediaservices::MaybeSupported;
+                        QMediaServiceSupportedFormatsInterface *iface =
+                                qobject_cast<QMediaServiceSupportedFormatsInterface*>(currentPlugin);
+
+                        if (iface)
+                            currentEstimate = iface->hasSupport(hint.mimeType(), hint.codecs());
+
+                        if (currentEstimate > estimate) {
+                            estimate = currentEstimate;
+                            plugin = currentPlugin;
+
+                            if (currentEstimate == QtMediaservices::PreferredService)
+                                break;
+                        }
+                    }
+                }
+                break;
+            }
+
+            if (plugin != 0) {
+                QMediaService *service = plugin->create(key);
+                if (service != 0)
+                    pluginMap.insert(service, plugin);
+
+                return service;
+            }
+        }
+
+        qWarning() << "defaultServiceProvider::requestService(): no service found for -" << key;
+        return 0;
+    }
+
+    void releaseService(QMediaService *service)
+    {
+        if (service != 0) {
+            QMediaServiceProviderPlugin *plugin = pluginMap.take(service);
+
+            if (plugin != 0)
+                plugin->release(service);
+        }
+    }
+
+    QtMediaservices::SupportEstimate hasSupport(const QByteArray &serviceType,
+                                     const QString &mimeType,
+                                     const QStringList& codecs,
+                                     int flags) const
+    {
+        QList<QObject*> instances = loader()->instances(
+                QString::fromLatin1(serviceType.constData(),serviceType.length()));
+
+        if (instances.isEmpty())
+            return QtMediaservices::NotSupported;
+
+        bool allServicesProvideInterface = true;
+        QtMediaservices::SupportEstimate supportEstimate = QtMediaservices::NotSupported;
+
+        foreach(QObject *obj, instances) {
+            QMediaServiceSupportedFormatsInterface *iface =
+                    qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
+
+
+            if (flags) {
+                QMediaServiceFeaturesInterface *iface =
+                        qobject_cast<QMediaServiceFeaturesInterface*>(obj);
+
+                if (iface) {
+                    QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
+
+                    //if low latency playback was asked, skip services known
+                    //not to provide low latency playback
+                    if ((flags & QMediaPlayer::LowLatency) &&
+                        !(features & QMediaServiceProviderHint::LowLatencyPlayback))
+                            continue;
+
+                    //the same for QIODevice based streams support
+                    if ((flags & QMediaPlayer::StreamPlayback) &&
+                        !(features & QMediaServiceProviderHint::StreamPlayback))
+                            continue;
+                }
+            }
+
+            if (iface)
+                supportEstimate = qMax(supportEstimate, iface->hasSupport(mimeType, codecs));
+            else
+                allServicesProvideInterface = false;
+        }
+
+        //don't return PreferredService
+        supportEstimate = qMin(supportEstimate, QtMediaservices::ProbablySupported);
+
+        //Return NotSupported only if no services are available of serviceType
+        //or all the services returned NotSupported, otherwise return at least MaybeSupported
+        if (!allServicesProvideInterface)
+            supportEstimate = qMax(QtMediaservices::MaybeSupported, supportEstimate);
+
+        return supportEstimate;
+    }
+
+    QStringList supportedMimeTypes(const QByteArray &serviceType, int flags) const
+    {
+        QList<QObject*> instances = loader()->instances(
+                QString::fromLatin1(serviceType.constData(),serviceType.length()));
+
+        QStringList supportedTypes;
+
+        foreach(QObject *obj, instances) {
+            QMediaServiceSupportedFormatsInterface *iface =
+                    qobject_cast<QMediaServiceSupportedFormatsInterface*>(obj);
+
+
+            if (flags & QMediaPlayer::LowLatency) {
+                QMediaServiceFeaturesInterface *iface =
+                        qobject_cast<QMediaServiceFeaturesInterface*>(obj);
+
+                if (iface) {
+                    QMediaServiceProviderHint::Features features = iface->supportedFeatures(serviceType);
+
+                    // If low latency playback was asked for, skip MIME types from services known
+                    // not to provide low latency playback
+                    if ((flags & QMediaPlayer::LowLatency) &&
+                        !(features & QMediaServiceProviderHint::LowLatencyPlayback))
+                        continue;
+
+                    //the same for QIODevice based streams support
+                    if ((flags & QMediaPlayer::StreamPlayback) &&
+                        !(features & QMediaServiceProviderHint::StreamPlayback))
+                            continue;
+                }
+            }
+
+            if (iface) {
+                supportedTypes << iface->supportedMimeTypes();
+            }
+        }
+
+        // Multiple services may support the same MIME type
+        supportedTypes.removeDuplicates();
+
+        return supportedTypes;
+    }
+
+    QList<QByteArray> devices(const QByteArray &serviceType) const
+    {
+        QList<QByteArray> res;
+
+        foreach(QObject *obj, loader()->instances(
+                    QString::fromLatin1(serviceType.constData(),serviceType.length()))) {
+            QMediaServiceSupportedDevicesInterface *iface =
+                    qobject_cast<QMediaServiceSupportedDevicesInterface*>(obj);
+
+            if (iface) {
+                res.append(iface->devices(serviceType));
+            }
+        }
+
+        return res;
+    }
+
+    QString deviceDescription(const QByteArray &serviceType, const QByteArray &device)
+    {
+        foreach(QObject *obj, loader()->instances(
+                    QString::fromLatin1(serviceType.constData(),serviceType.length()))) {
+            QMediaServiceSupportedDevicesInterface *iface =
+                    qobject_cast<QMediaServiceSupportedDevicesInterface*>(obj);
+
+            if (iface) {
+                if (iface->devices(serviceType).contains(device))
+                    return iface->deviceDescription(serviceType, device);
+            }
+        }
+
+        return QString();
+    }
+};
+
+Q_GLOBAL_STATIC(QPluginServiceProvider, pluginProvider);
+
+/*!
+    \class QMediaServiceProvider
+    \preliminary
+    \since 4.7
+    \brief The QMediaServiceProvider class provides an abstract allocator for media services.
+*/
+
+/*!
+    \fn QMediaServiceProvider::requestService(const QByteArray &type, const QMediaServiceProviderHint &hint)
+
+    Requests an instance of a \a type service which best matches the given \a hint.
+
+    Returns a pointer to the requested service, or a null pointer if there is no suitable service.
+
+    The returned service must be released with releaseService when it is finished with.
+*/
+
+/*!
+    \fn QMediaServiceProvider::releaseService(QMediaService *service)
+
+    Releases a media \a service requested with requestService().
+*/
+
+/*!
+    \fn QtMediaservices::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType, const QString &mimeType, const QStringList& codecs, int flags) const
+
+    Returns how confident a media service provider is that is can provide a \a serviceType
+    service that is able to play media of a specific \a mimeType that is encoded using the listed
+    \a codecs while adhearing to constraints identified in \a flags.
+*/
+QtMediaservices::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType,
+                                                        const QString &mimeType,
+                                                        const QStringList& codecs,
+                                                        int flags) const
+{
+    Q_UNUSED(serviceType);
+    Q_UNUSED(mimeType);
+    Q_UNUSED(codecs);
+    Q_UNUSED(flags);
+
+    return QtMediaservices::MaybeSupported;
+}
+
+/*!
+    \fn QStringList QMediaServiceProvider::supportedMimeTypes(const QByteArray &serviceType, int flags) const
+
+    Returns a list of MIME types supported by the service provider for the specified \a serviceType.
+
+    The resultant list is restricted to MIME types which can be supported given the constraints in \a flags.
+*/
+QStringList QMediaServiceProvider::supportedMimeTypes(const QByteArray &serviceType, int flags) const
+{
+    Q_UNUSED(serviceType);
+    Q_UNUSED(flags);
+
+    return QStringList();
+}
+
+/*!
+  Returns the list of devices related to \a service type.
+*/
+QList<QByteArray> QMediaServiceProvider::devices(const QByteArray &service) const
+{
+    Q_UNUSED(service);
+    return QList<QByteArray>();
+}
+
+/*!
+    Returns the description of \a device related to \a serviceType,
+    suitable to be displayed to user.
+*/
+QString QMediaServiceProvider::deviceDescription(const QByteArray &serviceType, const QByteArray &device)
+{
+    Q_UNUSED(serviceType);
+    Q_UNUSED(device);
+    return QString();
+}
+
+
+#ifdef QT_BUILD_INTERNAL
+
+static QMediaServiceProvider *qt_defaultMediaServiceProvider = 0;
+
+/*!
+    Sets a media service \a provider as the default.
+
+    \internal
+*/
+void QMediaServiceProvider::setDefaultServiceProvider(QMediaServiceProvider *provider)
+{
+    qt_defaultMediaServiceProvider = provider;
+}
+
+#endif
+
+/*!
+    Returns a default provider of media services.
+*/
+QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
+{
+#ifdef QT_BUILD_INTERNAL
+    return qt_defaultMediaServiceProvider != 0
+            ? qt_defaultMediaServiceProvider
+            : static_cast<QMediaServiceProvider *>(pluginProvider());
+#else
+    return pluginProvider();
+#endif
+}
+
+/*!
+    \class QMediaServiceProviderPlugin
+    \preliminary
+    \since 4.7
+    \brief The QMediaServiceProviderPlugin class interface provides an interface for QMediaService
+    plug-ins.
+
+    A media service provider plug-in may implement one or more of
+    QMediaServiceSupportedFormatsInterface, QMediaServiceSupportedDevicesInterface,
+    and QMediaServiceFeaturesInterface to identify the features it supports.
+*/
+
+/*!
+    \fn QMediaServiceProviderPlugin::keys() const
+
+    Returns a list of keys for media services a plug-in can create.
+*/
+
+/*!
+    \fn QMediaServiceProviderPlugin::create(const QString &key)
+
+    Constructs a new instance of the QMediaService identified by \a key.
+
+    The QMediaService returned must be destroyed with release().
+*/
+
+/*!
+    \fn QMediaServiceProviderPlugin::release(QMediaService *service)
+
+    Destroys a media \a service constructed with create().
+*/
+
+
+/*!
+    \class QMediaServiceSupportedFormatsInterface
+    \brief The QMediaServiceSupportedFormatsInterface class interface
+    identifies if a media service plug-in supports a media format.
+    \since 4.7
+
+    A QMediaServiceProviderPlugin may implement this interface.
+*/
+
+/*!
+    \fn QMediaServiceSupportedFormatsInterface::~QMediaServiceSupportedFormatsInterface()
+
+    Destroys a media service supported formats interface.
+*/
+
+/*!
+    \fn QMediaServiceSupportedFormatsInterface::hasSupport(const QString &mimeType, const QStringList& codecs) const
+
+    Returns the level of support a media service plug-in has for a \a mimeType and set of \a codecs.
+*/
+
+/*!
+    \fn QMediaServiceSupportedFormatsInterface::supportedMimeTypes() const
+
+    Returns a list of MIME types supported by the media service plug-in.
+*/
+
+/*!
+    \class QMediaServiceSupportedDevicesInterface
+    \brief The QMediaServiceSupportedDevicesInterface class interface
+    identifies the devices supported by a media service plug-in.
+    \since 4.7
+
+    A QMediaServiceProviderPlugin may implement this interface.
+*/
+
+/*!
+    \fn QMediaServiceSupportedDevicesInterface::~QMediaServiceSupportedDevicesInterface()
+
+    Destroys a media service supported devices interface.
+*/
+
+/*!
+    \fn QMediaServiceSupportedDevicesInterface::devices(const QByteArray &service) const
+
+    Returns a list of devices supported by a plug-in \a service.
+*/
+
+/*!
+    \fn QMediaServiceSupportedDevicesInterface::deviceDescription(const QByteArray &service, const QByteArray &device)
+
+    Returns a description of a \a device supported by a plug-in \a service.
+*/
+
+/*!
+    \class QMediaServiceFeaturesInterface
+    \brief The QMediaServiceFeaturesInterface class interface identifies
+    features supported by a media service plug-in.
+    \since 4.7
+
+    A QMediaServiceProviderPlugin may implement this interface.
+*/
+
+/*!
+    \fn QMediaServiceFeaturesInterface::~QMediaServiceFeaturesInterface()
+
+    Destroys a media service features interface.
+*/
+/*!
+    \fn QMediaServiceFeaturesInterface::supportedFeatures(const QByteArray &service) const
+
+    Returns a set of features supported by a plug-in \a service.
+*/
+
+QT_END_NAMESPACE
+
+#include "moc_qmediaserviceprovider.cpp"
+#include "moc_qmediaserviceproviderplugin.cpp"
diff --git a/src/multimedia/mediaservices/base/qmediaserviceprovider.h b/src/multimedia/mediaservices/base/qmediaserviceprovider.h
new file mode 100644
index 0000000..45021c7
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaserviceprovider.h
@@ -0,0 +1,174 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIASERVICEPROVIDER_H
+#define QMEDIASERVICEPROVIDER_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qshareddata.h>
+
+#include <QtMediaservices/qtmedianamespace.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QMediaService;
+
+class QMediaServiceProviderHintPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaServiceProviderHint
+{
+public:
+    enum Type { Null, ContentType, Device, SupportedFeatures };
+
+    enum Feature {
+        LowLatencyPlayback = 0x01,
+        RecordingSupport = 0x02,
+        StreamPlayback = 0x04
+    };
+    Q_DECLARE_FLAGS(Features, Feature)
+
+    QMediaServiceProviderHint();
+    QMediaServiceProviderHint(const QString &mimeType, const QStringList& codecs);
+    QMediaServiceProviderHint(const QByteArray &device);
+    QMediaServiceProviderHint(Features features);
+    QMediaServiceProviderHint(const QMediaServiceProviderHint &other);
+    ~QMediaServiceProviderHint();
+
+    QMediaServiceProviderHint& operator=(const QMediaServiceProviderHint &other);
+
+    bool operator == (const QMediaServiceProviderHint &other) const;
+    bool operator != (const QMediaServiceProviderHint &other) const;
+
+    bool isNull() const;
+
+    Type type() const;
+
+    QString mimeType() const;
+    QStringList codecs() const;
+
+    QByteArray device() const;
+
+    Features features() const;
+
+    //to be extended, if necessary
+
+private:
+    QSharedDataPointer<QMediaServiceProviderHintPrivate> d;
+};
+
+class Q_MULTIMEDIA_EXPORT QMediaServiceProvider : public QObject
+{
+    Q_OBJECT
+
+public:
+    virtual QMediaService* requestService(const QByteArray &type, const QMediaServiceProviderHint &hint = QMediaServiceProviderHint()) = 0;
+    virtual void releaseService(QMediaService *service) = 0;
+
+    virtual QtMediaservices::SupportEstimate hasSupport(const QByteArray &serviceType,
+                                             const QString &mimeType,
+                                             const QStringList& codecs,
+                                             int flags = 0) const;
+    virtual QStringList supportedMimeTypes(const QByteArray &serviceType, int flags = 0) const;
+
+    virtual QList<QByteArray> devices(const QByteArray &serviceType) const;
+    virtual QString deviceDescription(const QByteArray &serviceType, const QByteArray &device);
+
+    static QMediaServiceProvider* defaultServiceProvider();
+
+#ifdef QT_BUILD_INTERNAL
+    static void setDefaultServiceProvider(QMediaServiceProvider *provider);
+#endif
+};
+
+/*!
+    Service with support for media playback
+    Required Controls: QMediaPlayerControl
+    Optional Controls: QMediaPlaylistControl, QAudioDeviceControl
+    Video Output Controls (used by QWideoWidget and QGraphicsVideoItem):
+                        Required: QVideoOutputControl
+                        Optional: QVideoWindowControl, QVideoRendererControl, QVideoWidgetControl
+*/
+#define Q_MEDIASERVICE_MEDIAPLAYER "com.nokia.qt.mediaplayer"
+
+/*!
+   Service with support for recording from audio sources
+   Required Controls: QAudioDeviceControl
+   Recording Controls (QMediaRecorder):
+                        Required: QMediaRecorderControl
+                        Recommended: QAudioEncoderControl
+                        Optional: QMediaContainerControl
+*/
+#define Q_MEDIASERVICE_AUDIOSOURCE "com.nokia.qt.audiosource"
+
+/*!
+    Service with support for camera use.
+    Required Controls: QCameraControl
+    Optional Controls: QCameraExposureControl, QCameraFocusControl, QImageProcessingControl
+    Still Capture Controls: QImageCaptureControl
+    Recording Controls (QMediaRecorder):
+                        Required: QMediaRecorderControl
+                        Recommended: QAudioEncoderControl, QVideoEncoderControl, QMediaContainerControl
+    Viewfinder Video Output Controls (used by QWideoWidget and QGraphicsVideoItem):
+                        Required: QVideoOutputControl
+                        Optional: QVideoWindowControl, QVideoRendererControl, QVideoWidgetControl
+*/
+#define Q_MEDIASERVICE_CAMERA "com.nokia.qt.camera"
+
+/*!
+    Service with support for radio tuning.
+    Required Controls: QRadioTunerControl
+    Recording Controls (Optional, used by QMediaRecorder):
+                        Required: QMediaRecorderControl
+                        Recommended: QAudioEncoderControl
+                        Optional: QMediaContainerControl
+*/
+#define Q_MEDIASERVICE_RADIO "com.nokia.qt.radio"
+
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QMEDIASERVICEPROVIDER_H
diff --git a/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h b/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
new file mode 100644
index 0000000..bc41845
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
@@ -0,0 +1,125 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIASERVICEPROVIDERPLUGIN_H
+#define QMEDIASERVICEPROVIDERPLUGIN_H
+
+#include <QtCore/qstringlist.h>
+#include <QtCore/qplugin.h>
+#include <QtCore/qfactoryinterface.h>
+
+#include <QtMediaservices/qmediaserviceprovider.h>
+
+#ifdef Q_MOC_RUN
+# pragma Q_MOC_EXPAND_MACROS
+#endif
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMediaService;
+
+
+struct Q_MULTIMEDIA_EXPORT QMediaServiceProviderFactoryInterface : public QFactoryInterface
+{
+    virtual QStringList keys() const = 0;
+    virtual QMediaService* create(QString const& key) = 0;
+    virtual void release(QMediaService *service) = 0;
+};
+
+#define QMediaServiceProviderFactoryInterface_iid \
+    "com.nokia.Qt.QMediaServiceProviderFactoryInterface/1.0"
+Q_DECLARE_INTERFACE(QMediaServiceProviderFactoryInterface, QMediaServiceProviderFactoryInterface_iid)
+
+
+struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedFormatsInterface
+{
+    virtual ~QMediaServiceSupportedFormatsInterface() {}
+    virtual QtMediaservices::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const = 0;
+    virtual QStringList supportedMimeTypes() const = 0;
+};
+
+#define QMediaServiceSupportedFormatsInterface_iid \
+    "com.nokia.Qt.QMediaServiceSupportedFormatsInterface/1.0"
+Q_DECLARE_INTERFACE(QMediaServiceSupportedFormatsInterface, QMediaServiceSupportedFormatsInterface_iid)
+
+
+struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedDevicesInterface
+{
+    virtual ~QMediaServiceSupportedDevicesInterface() {}
+    virtual QList<QByteArray> devices(const QByteArray &service) const = 0;
+    virtual QString deviceDescription(const QByteArray &service, const QByteArray &device) = 0;
+};
+
+#define QMediaServiceSupportedDevicesInterface_iid \
+    "com.nokia.Qt.QMediaServiceSupportedDevicesInterface/1.0"
+Q_DECLARE_INTERFACE(QMediaServiceSupportedDevicesInterface, QMediaServiceSupportedDevicesInterface_iid)
+
+
+struct Q_MULTIMEDIA_EXPORT QMediaServiceFeaturesInterface
+{
+    virtual ~QMediaServiceFeaturesInterface() {}
+    virtual QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const = 0;
+};
+
+#define QMediaServiceFeaturesInterface_iid \
+    "com.nokia.Qt.QMediaServiceFeaturesInterface/1.0"
+Q_DECLARE_INTERFACE(QMediaServiceFeaturesInterface, QMediaServiceFeaturesInterface_iid)
+
+class Q_MULTIMEDIA_EXPORT QMediaServiceProviderPlugin : public QObject, public QMediaServiceProviderFactoryInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(QMediaServiceProviderFactoryInterface:QFactoryInterface)
+
+public:
+    virtual QStringList keys() const = 0;
+    virtual QMediaService* create(const QString& key) = 0;
+    virtual void release(QMediaService *service) = 0;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QMEDIASERVICEPROVIDERPLUGIN_H
diff --git a/src/multimedia/mediaservices/base/qmediatimerange.cpp b/src/multimedia/mediaservices/base/qmediatimerange.cpp
new file mode 100644
index 0000000..74f54dd
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediatimerange.cpp
@@ -0,0 +1,708 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qmediatimerange.h>
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QMediaTimeInterval
+    \brief The QMediaTimeInterval class represents a time interval with integer precision.
+    \ingroup multimedia
+    \since 4.7
+
+    An interval is specified by an inclusive start() and end() time.
+    These must be set in the constructor, as this is an immutable class.
+    The specific units of time represented by the class have not been defined -
+    it is suitable for any times which can be represented by a signed 64 bit integer.
+
+    The isNormal() method determines if a time interval is normal
+    (a normal time interval has start() <= end()). An abnormal interval can be converted
+    in to a normal interval by calling the normalized() method.
+
+    The contains() method determines if a specified time lies within
+    the time interval.
+
+    The translated() method returns a time interval which has been translated
+    forwards or backwards through time by a specified offset.
+
+    \sa QMediaTimeRange
+*/
+
+/*!
+    \fn QMediaTimeInterval::QMediaTimeInterval()
+
+    Constructs an empty interval.
+*/
+QMediaTimeInterval::QMediaTimeInterval()
+    : s(0)
+    , e(0)
+{
+
+}
+
+/*!
+    \fn QMediaTimeInterval::QMediaTimeInterval(qint64 start, qint64 end)
+
+    Constructs an interval with the specified \a start and \a end times.
+*/
+QMediaTimeInterval::QMediaTimeInterval(qint64 start, qint64 end)
+    : s(start)
+    , e(end)
+{
+
+}
+
+/*!
+    \fn QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
+
+    Constructs an interval by taking a copy of \a other.
+*/
+QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
+    : s(other.s)
+    , e(other.e)
+{
+
+}
+
+/*!
+    \fn QMediaTimeInterval::start() const
+
+    Returns the start time of the interval.
+
+    \sa end()
+*/
+qint64 QMediaTimeInterval::start() const
+{
+    return s;
+}
+
+/*!
+    \fn QMediaTimeInterval::end() const
+
+    Returns the end time of the interval.
+
+    \sa start()
+*/
+qint64 QMediaTimeInterval::end() const
+{
+    return e;
+}
+
+/*!
+    \fn QMediaTimeInterval::contains(qint64 time) const
+
+    Returns true if the time interval contains the specified \a time.
+    That is, start() <= time <= end().
+*/
+bool QMediaTimeInterval::contains(qint64 time) const
+{
+    return isNormal() ? (s <= time && time <= e)
+        : (e <= time && time <= s);
+}
+
+/*!
+    \fn QMediaTimeInterval::isNormal() const
+
+    Returns true if this time interval is normal.
+    A normal time interval has start() <= end().
+
+    \sa normalized()
+*/
+bool QMediaTimeInterval::isNormal() const
+{
+    return s <= e;
+}
+
+/*!
+    \fn QMediaTimeInterval::normalized() const
+
+    Returns a normalized version of this interval.
+
+    If the start() time of the interval is greater than the end() time,
+    then the returned interval has the start and end times swapped.
+*/
+QMediaTimeInterval QMediaTimeInterval::normalized() const
+{
+    if(s > e)
+        return QMediaTimeInterval(e, s);
+
+    return *this;
+}
+
+/*!
+    \fn QMediaTimeInterval::translated(qint64 offset) const
+
+    Returns a copy of this time interval, translated by a value of \a offset.
+    An interval can be moved forward through time with a positive offset, or backward
+    through time with a negative offset.
+*/
+QMediaTimeInterval QMediaTimeInterval::translated(qint64 offset) const
+{
+    return QMediaTimeInterval(s + offset, e + offset);
+}
+
+/*!
+    \fn operator==(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
+    \relates QMediaTimeRange
+
+    Returns true if \a a is exactly equal to \a b.
+*/
+bool operator==(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
+{
+    return a.start() == b.start() && a.end() == b.end();
+}
+
+/*!
+    \fn operator!=(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
+    \relates QMediaTimeRange
+
+    Returns true if \a a is not exactly equal to \a b.
+*/
+bool operator!=(const QMediaTimeInterval &a, const QMediaTimeInterval &b)
+{
+    return a.start() != b.start() || a.end() != b.end();
+}
+
+class QMediaTimeRangePrivate : public QSharedData
+{
+public:
+
+    QMediaTimeRangePrivate();
+    QMediaTimeRangePrivate(const QMediaTimeRangePrivate &other);
+    QMediaTimeRangePrivate(const QMediaTimeInterval &interval);
+
+    QList<QMediaTimeInterval> intervals;
+
+    void addInterval(const QMediaTimeInterval &interval);
+    void removeInterval(const QMediaTimeInterval &interval);
+};
+
+QMediaTimeRangePrivate::QMediaTimeRangePrivate()
+    : QSharedData()
+{
+
+}
+
+QMediaTimeRangePrivate::QMediaTimeRangePrivate(const QMediaTimeRangePrivate &other)
+    : QSharedData()
+    , intervals(other.intervals)
+{
+
+}
+
+QMediaTimeRangePrivate::QMediaTimeRangePrivate(const QMediaTimeInterval &interval)
+    : QSharedData()
+{
+    if(interval.isNormal())
+        intervals << interval;
+}
+
+void QMediaTimeRangePrivate::addInterval(const QMediaTimeInterval &interval)
+{    
+    // Handle normalized intervals only
+    if(!interval.isNormal())
+        return;
+
+    // Find a place to insert the interval
+    int i;
+    for (i = 0; i < intervals.count(); i++) {
+        // Insert before this element
+        if(interval.s < intervals[i].s) {
+            intervals.insert(i, interval);
+            break;
+        }
+    }
+
+    // Interval needs to be added to the end of the list
+    if (i == intervals.count())
+        intervals.append(interval);
+
+    // Do we need to correct the element before us?
+    if(i > 0 && intervals[i - 1].e >= interval.s - 1)
+        i--;
+
+    // Merge trailing ranges
+    while (i < intervals.count() - 1
+          && intervals[i].e >= intervals[i + 1].s - 1) {
+        intervals[i].e = qMax(intervals[i].e, intervals[i + 1].e);
+        intervals.removeAt(i + 1);
+    }
+}
+
+void QMediaTimeRangePrivate::removeInterval(const QMediaTimeInterval &interval)
+{
+    // Handle normalized intervals only
+    if(!interval.isNormal())
+        return;
+
+    for (int i = 0; i < intervals.count(); i++) {
+        QMediaTimeInterval r = intervals[i];
+
+        if (r.e < interval.s) {
+            // Before the removal interval
+            continue;
+        } else if (interval.e < r.s) {
+            // After the removal interval - stop here
+            break;
+        } else if (r.s < interval.s && interval.e < r.e) {
+            // Split case - a single range has a chunk removed
+            intervals[i].e = interval.s -1;
+            addInterval(QMediaTimeInterval(interval.e + 1, r.e));
+            break;
+        } else if (r.s < interval.s) {
+            // Trimming Tail Case
+            intervals[i].e = interval.s - 1;
+        } else if (interval.e < r.e) {
+            // Trimming Head Case - we can stop after this
+            intervals[i].s = interval.e + 1;
+            break;
+        } else {
+            // Complete coverage case
+            intervals.removeAt(i);
+            --i;
+        }
+    }
+}
+
+/*!
+    \class QMediaTimeRange
+    \brief The QMediaTimeRange class represents a set of zero or more disjoint
+    time intervals.
+    \ingroup multimedia
+    \since 4.7
+
+    \reentrant
+
+    The earliestTime(), latestTime(), intervals() and isEmpty()
+    methods are used to get information about the current time range.
+
+    The addInterval(), removeInterval() and clear() methods are used to modify
+    the current time range.
+
+    When adding or removing intervals from the time range, existing intervals
+    within the range may be expanded, trimmed, deleted, merged or split to ensure
+    that all intervals within the time range remain distinct and disjoint. As a
+    consequence, all intervals added or removed from a time range must be
+    \l{QMediaTimeInterval::isNormal()}{normal}.
+
+    \sa QMediaTimeInterval
+*/
+
+/*!
+    \fn QMediaTimeRange::QMediaTimeRange()
+
+    Constructs an empty time range.
+*/
+QMediaTimeRange::QMediaTimeRange()
+    : d(new QMediaTimeRangePrivate)
+{
+
+}
+
+/*!
+    \fn QMediaTimeRange::QMediaTimeRange(qint64 start, qint64 end)
+
+    Constructs a time range that contains an initial interval from
+    \a start to \a end inclusive.
+
+    If the interval is not \l{QMediaTimeInterval::isNormal()}{normal},
+    the resulting time range will be empty.
+
+    \sa addInterval()
+*/
+QMediaTimeRange::QMediaTimeRange(qint64 start, qint64 end)
+    : d(new QMediaTimeRangePrivate(QMediaTimeInterval(start, end)))
+{
+
+}
+
+/*!
+    \fn QMediaTimeRange::QMediaTimeRange(const QMediaTimeInterval &interval)
+
+    Constructs a time range that contains an intitial interval, \a interval.
+
+    If \a interval is not \l{QMediaTimeInterval::isNormal()}{normal},
+    the resulting time range will be empty.
+
+    \sa addInterval()
+*/
+QMediaTimeRange::QMediaTimeRange(const QMediaTimeInterval &interval)
+    : d(new QMediaTimeRangePrivate(interval))
+{
+
+}
+
+/*!
+    \fn QMediaTimeRange::QMediaTimeRange(const QMediaTimeRange &range)
+
+    Constructs a time range by copying another time \a range.
+*/
+QMediaTimeRange::QMediaTimeRange(const QMediaTimeRange &range)
+    : d(range.d)
+{
+
+}
+
+/*!
+    \fn QMediaTimeRange::~QMediaTimeRange()
+
+    Destructor.
+*/
+QMediaTimeRange::~QMediaTimeRange()
+{
+
+}
+
+/*!
+    \fn QMediaTimeRange::operator=(const QMediaTimeRange &other)
+
+    Takes a copy of the \a other time range and returns itself.
+*/
+QMediaTimeRange &QMediaTimeRange::operator=(const QMediaTimeRange &other)
+{
+    d = other.d;
+    return *this;
+}
+
+/*!
+    \fn QMediaTimeRange::operator=(const QMediaTimeInterval &interval)
+
+    Sets the time range to a single continuous interval, \a interval.
+*/
+QMediaTimeRange &QMediaTimeRange::operator=(const QMediaTimeInterval &interval)
+{
+    d = new QMediaTimeRangePrivate(interval);
+    return *this;
+}
+
+/*!
+    \fn QMediaTimeRange::earliestTime() const
+
+    Returns the earliest time within the time range.
+
+    For empty time ranges, this value is equal to zero.
+
+    \sa latestTime()
+*/
+qint64 QMediaTimeRange::earliestTime() const
+{
+    if (!d->intervals.isEmpty())
+        return d->intervals[0].s;
+
+    return 0;
+}
+
+/*!
+    \fn QMediaTimeRange::latestTime() const
+
+    Returns the latest time within the time range.
+
+    For empty time ranges, this value is equal to zero.
+
+    \sa earliestTime()
+*/
+qint64 QMediaTimeRange::latestTime() const
+{
+    if (!d->intervals.isEmpty())
+        return d->intervals[d->intervals.count() - 1].e;
+
+    return 0;
+}
+
+/*!
+    \fn QMediaTimeRange::addInterval(qint64 start, qint64 end)
+    \overload
+
+    Adds the interval specified by \a start and \a end
+    to the time range.
+
+    \sa addInterval()
+*/
+void QMediaTimeRange::addInterval(qint64 start, qint64 end)
+{
+    d->addInterval(QMediaTimeInterval(start, end));
+}
+
+/*!
+    \fn QMediaTimeRange::addInterval(const QMediaTimeInterval &interval)
+
+    Adds the specified \a interval to the time range.
+
+    Adding intervals which are not \l{QMediaTimeInterval::isNormal()}{normal}
+    is invalid, and will be ignored.
+
+    If the specified interval is adjacent to, or overlaps existing
+    intervals within the time range, these intervals will be merged.
+
+    This operation takes \l{linear time}
+
+    \sa removeInterval()
+*/
+void QMediaTimeRange::addInterval(const QMediaTimeInterval &interval)
+{
+    d->addInterval(interval);
+}
+
+/*!
+    \fn QMediaTimeRange::addTimeRange(const QMediaTimeRange &range)
+
+    Adds each of the intervals in \a range to this time range.
+
+    Equivalent to calling addInterval() for each interval in \a range.
+*/
+void QMediaTimeRange::addTimeRange(const QMediaTimeRange &range)
+{
+    foreach(const QMediaTimeInterval &i, range.intervals()) {
+        d->addInterval(i);
+    }
+}
+
+/*!
+    \fn QMediaTimeRange::removeInterval(qint64 start, qint64 end)
+    \overload
+
+    Removes the interval specified by \a start and \a end
+    from the time range.
+
+    \sa removeInterval()
+*/
+void QMediaTimeRange::removeInterval(qint64 start, qint64 end)
+{
+    d->removeInterval(QMediaTimeInterval(start, end));
+}
+
+/*!
+    \fn QMediaTimeRange::removeInterval(const QMediaTimeInterval &interval)
+
+    Removes the specified \a interval from the time range.
+
+    Removing intervals which are not \l{QMediaTimeInterval::isNormal()}{normal}
+    is invalid, and will be ignored.
+
+    Intervals within the time range will be trimmed, split or deleted
+    such that no intervals within the time range include any part of the
+    target interval.
+
+    This operation takes \l{linear time}
+
+    \sa addInterval()
+*/
+void QMediaTimeRange::removeInterval(const QMediaTimeInterval &interval)
+{
+    d->removeInterval(interval);
+}
+
+/*!
+    \fn QMediaTimeRange::removeTimeRange(const QMediaTimeRange &range)
+
+    Removes each of the intervals in \a range from this time range.
+
+    Equivalent to calling removeInterval() for each interval in \a range.
+*/
+void QMediaTimeRange::removeTimeRange(const QMediaTimeRange &range)
+{
+    foreach(const QMediaTimeInterval &i, range.intervals()) {
+        d->removeInterval(i);
+    }
+}
+
+/*!
+    \fn QMediaTimeRange::operator+=(const QMediaTimeRange &other)
+
+    Adds each interval in \a other to the time range and returns the result.
+*/
+QMediaTimeRange& QMediaTimeRange::operator+=(const QMediaTimeRange &other)
+{
+    addTimeRange(other);
+    return *this;
+}
+
+/*!
+    \fn QMediaTimeRange::operator+=(const QMediaTimeInterval &interval)
+
+    Adds the specified \a interval to the time range and returns the result.
+*/
+QMediaTimeRange& QMediaTimeRange::operator+=(const QMediaTimeInterval &interval)
+{
+    addInterval(interval);
+    return *this;
+}
+
+/*!
+    \fn QMediaTimeRange::operator-=(const QMediaTimeRange &other)
+
+    Removes each interval in \a other from the time range and returns the result.
+*/
+QMediaTimeRange& QMediaTimeRange::operator-=(const QMediaTimeRange &other)
+{
+    removeTimeRange(other);
+    return *this;
+}
+
+/*!
+    \fn QMediaTimeRange::operator-=(const QMediaTimeInterval &interval)
+
+    Removes the specified \a interval from the time range and returns the result.
+*/
+QMediaTimeRange& QMediaTimeRange::operator-=(const QMediaTimeInterval &interval)
+{
+    removeInterval(interval);
+    return *this;
+}
+
+/*!
+    \fn QMediaTimeRange::clear()
+
+    Removes all intervals from the time range.
+
+    \sa removeInterval()
+*/
+void QMediaTimeRange::clear()
+{
+    d->intervals.clear();
+}
+
+/*!
+    \fn QMediaTimeRange::intervals() const
+
+    Returns the list of intervals covered by this time range.
+*/
+QList<QMediaTimeInterval> QMediaTimeRange::intervals() const
+{
+    return d->intervals;
+}
+
+/*!
+    \fn QMediaTimeRange::isEmpty() const
+
+    Returns true if there are no intervals within the time range.
+
+    \sa intervals()
+*/
+bool QMediaTimeRange::isEmpty() const
+{
+    return d->intervals.isEmpty();
+}
+
+/*!
+    \fn QMediaTimeRange::isContinuous() const
+
+    Returns true if the time range consists of a continuous interval.
+    That is, there is one or fewer disjoint intervals within the time range.
+*/
+bool QMediaTimeRange::isContinuous() const
+{
+    return (d->intervals.count() <= 1);
+}
+
+/*!
+    \fn QMediaTimeRange::contains(qint64 time) const
+
+    Returns true if the specified \a time lies within the time range.
+*/
+bool QMediaTimeRange::contains(qint64 time) const
+{
+    for (int i = 0; i < d->intervals.count(); i++) {
+        if (d->intervals[i].contains(time))
+            return true;
+
+        if (time < d->intervals[i].s)
+            break;
+    }
+
+    return false;
+}
+
+/*!
+    \fn operator==(const QMediaTimeRange &a, const QMediaTimeRange &b)
+    \relates QMediaTimeRange
+
+    Returns true if all intervals in \a a are present in \a b.
+*/
+bool operator==(const QMediaTimeRange &a, const QMediaTimeRange &b)
+{
+    if (a.intervals().count() != b.intervals().count())
+        return false;
+
+    for (int i = 0; i < a.intervals().count(); i++)
+    {
+        if(a.intervals()[i] != b.intervals()[i])
+            return false;
+    }
+
+    return true;
+}
+
+/*!
+    \fn operator!=(const QMediaTimeRange &a, const QMediaTimeRange &b)
+    \relates QMediaTimeRange
+
+    Returns true if one or more intervals in \a a are not present in \a b.
+*/
+bool operator!=(const QMediaTimeRange &a, const QMediaTimeRange &b)
+{
+    return !(a == b);
+}
+
+/*!
+    \fn operator+(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
+
+    Returns a time range containing the union between \a r1 and \a r2.
+ */
+QMediaTimeRange operator+(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
+{
+    return (QMediaTimeRange(r1) += r2);
+}
+
+/*!
+    \fn operator-(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
+
+    Returns a time range containing \a r2 subtracted from \a r1.
+ */
+QMediaTimeRange operator-(const QMediaTimeRange &r1, const QMediaTimeRange &r2)
+{
+    return (QMediaTimeRange(r1) -= r2);
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmediatimerange.h b/src/multimedia/mediaservices/base/qmediatimerange.h
new file mode 100644
index 0000000..94beaad
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmediatimerange.h
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIATIMERANGE_H
+#define QMEDIATIMERANGE_H
+
+#include <QtCore/qshareddata.h>
+#include <QtMediaservices/qtmedianamespace.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMediaTimeRangePrivate;
+
+class Q_MULTIMEDIA_EXPORT QMediaTimeInterval
+{
+public:
+    QMediaTimeInterval();
+    QMediaTimeInterval(qint64 start, qint64 end);
+    QMediaTimeInterval(const QMediaTimeInterval&);
+
+    qint64 start() const;
+    qint64 end() const;
+
+    bool contains(qint64 time) const;
+
+    bool isNormal() const;
+    QMediaTimeInterval normalized() const;
+    QMediaTimeInterval translated(qint64 offset) const;
+
+private:
+    friend class QMediaTimeRangePrivate;
+    friend class QMediaTimeRange;
+
+    qint64 s;
+    qint64 e;
+};
+
+Q_MULTIMEDIA_EXPORT bool operator==(const QMediaTimeInterval&, const QMediaTimeInterval&);
+Q_MULTIMEDIA_EXPORT bool operator!=(const QMediaTimeInterval&, const QMediaTimeInterval&);
+
+class Q_MULTIMEDIA_EXPORT QMediaTimeRange
+{
+public:
+
+    QMediaTimeRange();
+    QMediaTimeRange(qint64 start, qint64 end);
+    QMediaTimeRange(const QMediaTimeInterval&);
+    QMediaTimeRange(const QMediaTimeRange &range);
+    ~QMediaTimeRange();
+
+    QMediaTimeRange &operator=(const QMediaTimeRange&);
+    QMediaTimeRange &operator=(const QMediaTimeInterval&);
+
+    qint64 earliestTime() const;
+    qint64 latestTime() const;
+
+    QList<QMediaTimeInterval> intervals() const;
+    bool isEmpty() const;
+    bool isContinuous() const;
+
+    bool contains(qint64 time) const;
+
+    void addInterval(qint64 start, qint64 end);
+    void addInterval(const QMediaTimeInterval &interval);
+    void addTimeRange(const QMediaTimeRange&);
+
+    void removeInterval(qint64 start, qint64 end);
+    void removeInterval(const QMediaTimeInterval &interval);
+    void removeTimeRange(const QMediaTimeRange&);
+
+    QMediaTimeRange& operator+=(const QMediaTimeRange&);
+    QMediaTimeRange& operator+=(const QMediaTimeInterval&);
+    QMediaTimeRange& operator-=(const QMediaTimeRange&);
+    QMediaTimeRange& operator-=(const QMediaTimeInterval&);
+
+    void clear();
+
+private:
+    QSharedDataPointer<QMediaTimeRangePrivate> d;
+};
+
+Q_MULTIMEDIA_EXPORT bool operator==(const QMediaTimeRange&, const QMediaTimeRange&);
+Q_MULTIMEDIA_EXPORT bool operator!=(const QMediaTimeRange&, const QMediaTimeRange&);
+Q_MULTIMEDIA_EXPORT QMediaTimeRange operator+(const QMediaTimeRange&, const QMediaTimeRange&);
+Q_MULTIMEDIA_EXPORT QMediaTimeRange operator-(const QMediaTimeRange&, const QMediaTimeRange&);
+
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QMEDIATIMERANGE_H
diff --git a/src/multimedia/mediaservices/base/qmetadatacontrol.cpp b/src/multimedia/mediaservices/base/qmetadatacontrol.cpp
new file mode 100644
index 0000000..32be987
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmetadatacontrol.cpp
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qmetadatacontrol.h>
+#include "qmediacontrol_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+
+/*!
+    \class QMetaDataControl
+    \ingroup multimedia-serv
+    \since 4.7
+    \preliminary
+    \brief The QMetaDataControl class provides access to the meta-data of a
+    QMediaService's media.
+
+    If a QMediaService can provide read or write access to the meta-data of
+    its current media it will implement QMetaDataControl.  This control
+    provides functions for both retrieving and setting meta-data values.
+    Meta-data may be addressed by the well defined keys in the
+    QtMediaservices::MetaData enumeration using the metaData() functions, or by
+    string keys using the extendedMetaData() functions.
+
+    The functionality provided by this control is exposed to application
+    code by the meta-data members of QMediaObject, and so meta-data access
+    is potentially available in any of the media object classes.  Any media
+    service may implement QMetaDataControl.
+
+    The interface name of QMetaDataControl is \c com.nokia.Qt.QMetaDataControl/1.0 as
+    defined in QMetaDataControl_iid.
+
+    \sa QMediaService::control(), QMediaObject
+*/
+
+/*!
+    \macro QMetaDataControl_iid
+
+    \c com.nokia.Qt.QMetaDataControl/1.0
+
+    Defines the interface name of the QMetaDataControl class.
+
+    \relates QMetaDataControl
+*/
+
+/*!
+    Construct a QMetaDataControl with \a parent. This class is meant as a base class
+    for service specific meta data providers so this constructor is protected.
+*/
+
+QMetaDataControl::QMetaDataControl(QObject *parent):
+    QMediaControl(*new QMediaControlPrivate, parent)
+{
+}
+
+/*!
+    Destroy the meta-data object.
+*/
+
+QMetaDataControl::~QMetaDataControl()
+{
+}
+
+/*!
+    \fn bool QMetaDataControl::isMetaDataAvailable() const
+
+    Identifies if meta-data is available from a media service.
+
+    Returns true if the meta-data is available and false otherwise.
+*/
+
+/*!
+    \fn bool QMetaDataControl::isWritable() const
+
+    Identifies if a media service's meta-data can be edited.
+
+    Returns true if the meta-data is writable and false otherwise.
+*/
+
+/*!
+    \fn QVariant QMetaDataControl::metaData(QtMediaservices::MetaData key) const
+
+    Returns the meta-data for the given \a key.
+*/
+
+/*!
+    \fn void QMetaDataControl::setMetaData(QtMediaservices::MetaData key, const QVariant &value)
+
+    Sets the \a value of the meta-data element with the given \a key.
+*/
+
+/*!
+    \fn QMetaDataControl::availableMetaData() const
+
+    Returns a list of keys there is meta-data available for.
+*/
+
+/*!
+    \fn QMetaDataControl::extendedMetaData(const QString &key) const
+
+    Returns the metaData for an abitrary string \a key.
+
+    The valid selection of keys for extended meta-data is determined by the provider and the meaning
+    and type may differ between providers.
+*/
+
+/*!
+    \fn QMetaDataControl::setExtendedMetaData(const QString &key, const QVariant &value)
+
+    Change the value of the meta-data element with an abitrary string \a key to \a value.
+
+    The valid selection of keys for extended meta-data is determined by the provider and the meaning
+    and type may differ between providers.
+*/
+
+/*!
+    \fn QMetaDataControl::availableExtendedMetaData() const
+
+    Returns a list of keys there is extended meta-data available for.
+*/
+
+
+/*!
+    \fn void QMetaDataControl::metaDataChanged()
+
+    Signal the changes of meta-data.
+*/
+
+/*!
+    \fn void QMetaDataControl::metaDataAvailableChanged(bool available)
+
+    Signal the availability of meta-data has changed, \a available will
+    be true if the multimedia object has meta-data.
+*/
+
+/*!
+    \fn void QMetaDataControl::writableChanged(bool writable)
+
+    Signal a change in the writable status of meta-data, \a writable will be
+    true if meta-data elements can be added or adjusted.
+*/
+
+#include "moc_qmetadatacontrol.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qmetadatacontrol.h b/src/multimedia/mediaservices/base/qmetadatacontrol.h
new file mode 100644
index 0000000..cf4a0d3
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qmetadatacontrol.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMETADATACONTROL_H
+#define QMETADATACONTROL_H
+
+#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaservices/qmediaobject.h>
+#include <QtMediaservices/qmediaresource.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class Q_MULTIMEDIA_EXPORT QMetaDataControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    ~QMetaDataControl();
+
+    virtual bool isWritable() const = 0;
+    virtual bool isMetaDataAvailable() const = 0;
+
+    virtual QVariant metaData(QtMediaservices::MetaData key) const = 0;
+    virtual void setMetaData(QtMediaservices::MetaData key, const QVariant &value) = 0;
+    virtual QList<QtMediaservices::MetaData> availableMetaData() const = 0;
+
+    virtual QVariant extendedMetaData(const QString &key) const = 0;
+    virtual void setExtendedMetaData(const QString &key, const QVariant &value) = 0;
+    virtual QStringList availableExtendedMetaData() const = 0;
+
+Q_SIGNALS:
+    void metaDataChanged();
+
+    void writableChanged(bool writable);
+    void metaDataAvailableChanged(bool available);
+
+protected:
+    QMetaDataControl(QObject *parent = 0);
+};
+
+#define QMetaDataControl_iid "com.nokia.Qt.QMetaDataControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QMetaDataControl, QMetaDataControl_iid)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+
+#endif  // QMETADATAPROVIDER_H
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface.cpp b/src/multimedia/mediaservices/base/qpaintervideosurface.cpp
new file mode 100644
index 0000000..b3e0dd5
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface.cpp
@@ -0,0 +1,1565 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qpaintervideosurface_p.h"
+#include "qpaintervideosurface_mac_p.h"
+
+#include <qmath.h>
+
+#include <qpainter.h>
+#include <qvariant.h>
+#include <QtMultimedia/qvideosurfaceformat.h>
+
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+#include <qglshaderprogram.h>
+#endif
+
+#include <QtDebug>
+
+
+QT_BEGIN_NAMESPACE
+
+QVideoSurfacePainter::~QVideoSurfacePainter()
+{
+}
+
+class QVideoSurfaceRasterPainter : public QVideoSurfacePainter
+{
+public:
+    QVideoSurfaceRasterPainter();
+
+    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
+            QAbstractVideoBuffer::HandleType handleType) const;
+
+    bool isFormatSupported(
+            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const;
+
+    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
+    void stop();
+
+    QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame);
+
+    QAbstractVideoSurface::Error paint(
+            const QRectF &target, QPainter *painter, const QRectF &source);
+
+    void updateColors(int brightness, int contrast, int hue, int saturation);
+
+private:
+    QList<QVideoFrame::PixelFormat> m_imagePixelFormats;
+    QVideoFrame m_frame;
+    QSize m_imageSize;
+    QImage::Format m_imageFormat;
+    QVideoSurfaceFormat::Direction m_scanLineDirection;
+};
+
+QVideoSurfaceRasterPainter::QVideoSurfaceRasterPainter()
+    : m_imageFormat(QImage::Format_Invalid)
+    , m_scanLineDirection(QVideoSurfaceFormat::TopToBottom)
+{
+    m_imagePixelFormats
+        << QVideoFrame::Format_RGB32
+#ifndef QT_OPENGL_ES // The raster formats should be a subset of the GL formats.
+        << QVideoFrame::Format_RGB24
+#endif
+        << QVideoFrame::Format_ARGB32
+        << QVideoFrame::Format_RGB565;
+}
+
+QList<QVideoFrame::PixelFormat> QVideoSurfaceRasterPainter::supportedPixelFormats(
+        QAbstractVideoBuffer::HandleType handleType) const
+{
+    return handleType == QAbstractVideoBuffer::NoHandle
+        ? m_imagePixelFormats
+        : QList<QVideoFrame::PixelFormat>();
+}
+
+bool QVideoSurfaceRasterPainter::isFormatSupported(
+        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *) const
+{
+    return format.handleType() == QAbstractVideoBuffer::NoHandle
+            && m_imagePixelFormats.contains(format.pixelFormat())
+            && !format.frameSize().isEmpty();
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceRasterPainter::start(const QVideoSurfaceFormat &format)
+{
+    m_frame = QVideoFrame();
+    m_imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
+    m_imageSize = format.frameSize();
+    m_scanLineDirection = format.scanLineDirection();
+
+    return format.handleType() == QAbstractVideoBuffer::NoHandle
+            && m_imageFormat != QImage::Format_Invalid
+            && !m_imageSize.isEmpty()
+            ? QAbstractVideoSurface::NoError
+            : QAbstractVideoSurface::UnsupportedFormatError;
+}
+
+void QVideoSurfaceRasterPainter::stop()
+{
+    m_frame = QVideoFrame();
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceRasterPainter::setCurrentFrame(const QVideoFrame &frame)
+{
+    m_frame = frame;
+
+    return QAbstractVideoSurface::NoError;
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceRasterPainter::paint(
+            const QRectF &target, QPainter *painter, const QRectF &source)
+{
+    if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
+        QImage image(
+                m_frame.bits(),
+                m_imageSize.width(),
+                m_imageSize.height(),
+                m_frame.bytesPerLine(),
+                m_imageFormat);
+
+        if (m_scanLineDirection == QVideoSurfaceFormat::BottomToTop) {
+            const QTransform oldTransform = painter->transform();
+
+            painter->scale(1, -1);
+            painter->translate(0, -target.bottom());
+            painter->drawImage(
+                QRectF(target.x(), 0, target.width(), target.height()), image, source);
+            painter->setTransform(oldTransform);
+        } else {
+            painter->drawImage(target, image, source);
+        }
+
+        m_frame.unmap();
+    } else if (m_frame.isValid()) {
+        return QAbstractVideoSurface::IncorrectFormatError;
+    } else {
+        painter->fillRect(target, Qt::black);
+    }
+    return QAbstractVideoSurface::NoError;
+}
+
+void QVideoSurfaceRasterPainter::updateColors(int, int, int, int)
+{
+}
+
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+
+#ifndef Q_WS_MAC
+# ifndef APIENTRYP
+#   ifdef APIENTRY
+#     define APIENTRYP APIENTRY *
+#   else
+#     define APIENTRY
+#     define APIENTRYP *
+#   endif
+# endif
+#else
+# define APIENTRY
+# define APIENTRYP *
+#endif
+
+#ifndef GL_TEXTURE0
+#  define GL_TEXTURE0    0x84C0
+#  define GL_TEXTURE1    0x84C1
+#  define GL_TEXTURE2    0x84C2
+#endif
+#ifndef GL_PROGRAM_ERROR_STRING_ARB
+#  define GL_PROGRAM_ERROR_STRING_ARB       0x8874
+#endif
+
+#ifndef GL_UNSIGNED_SHORT_5_6_5
+#  define GL_UNSIGNED_SHORT_5_6_5 33635
+#endif
+
+class QVideoSurfaceGLPainter : public QVideoSurfacePainter
+{
+public:
+    QVideoSurfaceGLPainter(QGLContext *context);
+    ~QVideoSurfaceGLPainter();
+    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
+            QAbstractVideoBuffer::HandleType handleType) const;
+
+    bool isFormatSupported(
+            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const;
+
+    QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame);
+
+    void updateColors(int brightness, int contrast, int hue, int saturation);
+
+protected:
+    void initRgbTextureInfo(GLenum internalFormat, GLuint format, GLenum type, const QSize &size);
+    void initYuv420PTextureInfo(const QSize &size);
+    void initYv12TextureInfo(const QSize &size);
+
+#ifndef QT_OPENGL_ES
+    typedef void (APIENTRY *_glActiveTexture) (GLenum);
+    _glActiveTexture glActiveTexture;
+#endif
+
+    QList<QVideoFrame::PixelFormat> m_imagePixelFormats;
+    QList<QVideoFrame::PixelFormat> m_glPixelFormats;
+    QMatrix4x4 m_colorMatrix;
+    QVideoFrame m_frame;
+
+    QGLContext *m_context;
+    QAbstractVideoBuffer::HandleType m_handleType;
+    QVideoSurfaceFormat::Direction m_scanLineDirection;
+    GLenum m_textureFormat;
+    GLuint m_textureInternalFormat;
+    GLenum m_textureType;
+    int m_textureCount;
+    GLuint m_textureIds[3];
+    int m_textureWidths[3];
+    int m_textureHeights[3];
+    int m_textureOffsets[3];
+    bool m_yuv;
+};
+
+QVideoSurfaceGLPainter::QVideoSurfaceGLPainter(QGLContext *context)
+    : m_context(context)
+    , m_handleType(QAbstractVideoBuffer::NoHandle)
+    , m_scanLineDirection(QVideoSurfaceFormat::TopToBottom)
+    , m_textureFormat(0)
+    , m_textureInternalFormat(0)
+    , m_textureType(0)
+    , m_textureCount(0)
+    , m_yuv(false)
+{
+#ifndef QT_OPENGL_ES
+    glActiveTexture = (_glActiveTexture)m_context->getProcAddress(QLatin1String("glActiveTexture"));
+#endif
+}
+
+QVideoSurfaceGLPainter::~QVideoSurfaceGLPainter()
+{
+}
+
+QList<QVideoFrame::PixelFormat> QVideoSurfaceGLPainter::supportedPixelFormats(
+        QAbstractVideoBuffer::HandleType handleType) const
+{
+    switch (handleType) {
+    case QAbstractVideoBuffer::NoHandle:
+        return m_imagePixelFormats;
+    case QAbstractVideoBuffer::GLTextureHandle:
+        return m_glPixelFormats;
+    default:
+        return QList<QVideoFrame::PixelFormat>();
+    }
+}
+
+bool QVideoSurfaceGLPainter::isFormatSupported(
+        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *) const
+{
+    if (format.frameSize().isEmpty()) {
+        return false;
+    } else {
+        switch (format.handleType()) {
+        case QAbstractVideoBuffer::NoHandle:
+            return m_imagePixelFormats.contains(format.pixelFormat());
+        case QAbstractVideoBuffer::GLTextureHandle:
+            return m_glPixelFormats.contains(format.pixelFormat());
+        default:
+            return false;
+        }
+    }
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceGLPainter::setCurrentFrame(const QVideoFrame &frame)
+{
+    m_frame = frame;
+
+    if (m_handleType == QAbstractVideoBuffer::GLTextureHandle) {
+        m_textureIds[0] = frame.handle().toInt();
+    } else if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
+        m_context->makeCurrent();
+
+        for (int i = 0; i < m_textureCount; ++i) {
+            glBindTexture(GL_TEXTURE_2D, m_textureIds[i]);
+            glTexImage2D(
+                    GL_TEXTURE_2D,
+                    0,
+                    m_textureInternalFormat,
+                    m_textureWidths[i],
+                    m_textureHeights[i],
+                    0,
+                    m_textureFormat,
+                    m_textureType,
+                    m_frame.bits() + m_textureOffsets[i]);
+            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+        }
+        m_frame.unmap();
+    } else if (m_frame.isValid()) {
+        return QAbstractVideoSurface::IncorrectFormatError;
+    }
+
+    return QAbstractVideoSurface::NoError;
+}
+
+void QVideoSurfaceGLPainter::updateColors(int brightness, int contrast, int hue, int saturation)
+{
+    const qreal b = brightness / 200.0;
+    const qreal c = contrast / 100.0 + 1.0;
+    const qreal h = hue / 100.0;
+    const qreal s = saturation / 100.0 + 1.0;
+
+    const qreal cosH = qCos(M_PI * h);
+    const qreal sinH = qSin(M_PI * h);
+
+    const qreal h11 =  0.787 * cosH - 0.213 * sinH + 0.213;
+    const qreal h21 = -0.213 * cosH + 0.143 * sinH + 0.213;
+    const qreal h31 = -0.213 * cosH - 0.787 * sinH + 0.213;
+
+    const qreal h12 = -0.715 * cosH - 0.715 * sinH + 0.715;
+    const qreal h22 =  0.285 * cosH + 0.140 * sinH + 0.715;
+    const qreal h32 = -0.715 * cosH + 0.715 * sinH + 0.715;
+
+    const qreal h13 = -0.072 * cosH + 0.928 * sinH + 0.072;
+    const qreal h23 = -0.072 * cosH - 0.283 * sinH + 0.072;
+    const qreal h33 =  0.928 * cosH + 0.072 * sinH + 0.072;
+
+    const qreal sr = (1.0 - s) * 0.3086;
+    const qreal sg = (1.0 - s) * 0.6094;
+    const qreal sb = (1.0 - s) * 0.0820;
+
+    const qreal sr_s = sr + s;
+    const qreal sg_s = sg + s;
+    const qreal sb_s = sr + s;
+
+    const float m4 = (s + sr + sg + sb) * (0.5 - 0.5 * c + b);
+
+    m_colorMatrix(0, 0) = c * (sr_s * h11 + sg * h21 + sb * h31);
+    m_colorMatrix(0, 1) = c * (sr_s * h12 + sg * h22 + sb * h32);
+    m_colorMatrix(0, 2) = c * (sr_s * h13 + sg * h23 + sb * h33);
+    m_colorMatrix(0, 3) = m4;
+
+    m_colorMatrix(1, 0) = c * (sr * h11 + sg_s * h21 + sb * h31);
+    m_colorMatrix(1, 1) = c * (sr * h12 + sg_s * h22 + sb * h32);
+    m_colorMatrix(1, 2) = c * (sr * h13 + sg_s * h23 + sb * h33);
+    m_colorMatrix(1, 3) = m4;
+
+    m_colorMatrix(2, 0) = c * (sr * h11 + sg * h21 + sb_s * h31);
+    m_colorMatrix(2, 1) = c * (sr * h12 + sg * h22 + sb_s * h32);
+    m_colorMatrix(2, 2) = c * (sr * h13 + sg * h23 + sb_s * h33);
+    m_colorMatrix(2, 3) = m4;
+
+    m_colorMatrix(3, 0) = 0.0;
+    m_colorMatrix(3, 1) = 0.0;
+    m_colorMatrix(3, 2) = 0.0;
+    m_colorMatrix(3, 3) = 1.0;
+
+    if (m_yuv) {
+        m_colorMatrix = m_colorMatrix * QMatrix4x4(
+                1.0,  0.000,  1.140, -0.5700,
+                1.0, -0.394, -0.581,  0.4875,
+                1.0,  2.028,  0.000, -1.0140,
+                0.0,  0.000,  0.000,  1.0000);
+    }
+}
+
+void QVideoSurfaceGLPainter::initRgbTextureInfo(
+        GLenum internalFormat, GLuint format, GLenum type, const QSize &size)
+{
+    m_yuv = false;
+    m_textureInternalFormat = internalFormat;
+    m_textureFormat = format;
+    m_textureType = type;
+    m_textureCount = 1;
+    m_textureWidths[0] = size.width();
+    m_textureHeights[0] = size.height();
+    m_textureOffsets[0] = 0;
+}
+
+void QVideoSurfaceGLPainter::initYuv420PTextureInfo(const QSize &size)
+{
+    int w = (size.width() + 3) & ~3;
+    int w2 = (size.width()/2 + 3) & ~3;
+
+    m_yuv = true;
+    m_textureInternalFormat = GL_LUMINANCE;
+    m_textureFormat = GL_LUMINANCE;
+    m_textureType = GL_UNSIGNED_BYTE;
+    m_textureCount = 3;
+    m_textureWidths[0] = size.width();
+    m_textureHeights[0] = size.height();
+    m_textureOffsets[0] = 0;
+    m_textureWidths[1] = size.width() / 2;
+    m_textureHeights[1] = size.height() / 2;
+    m_textureOffsets[1] = w * size.height();
+    m_textureWidths[2] = size.width() / 2;
+    m_textureHeights[2] = size.height() / 2;
+    m_textureOffsets[2] = w * size.height() + w2 * (size.height() / 2);
+}
+
+void QVideoSurfaceGLPainter::initYv12TextureInfo(const QSize &size)
+{
+    int w = (size.width() + 3) & ~3;
+    int w2 = (size.width()/2 + 3) & ~3;
+
+    m_yuv = true;
+    m_textureInternalFormat = GL_LUMINANCE;
+    m_textureFormat = GL_LUMINANCE;
+    m_textureType = GL_UNSIGNED_BYTE;
+    m_textureCount = 3;
+    m_textureWidths[0] = size.width();
+    m_textureHeights[0] = size.height();
+    m_textureOffsets[0] = 0;
+    m_textureWidths[1] = size.width() / 2;
+    m_textureHeights[1] = size.height() / 2;
+    m_textureOffsets[1] = w * size.height() + w2 * (size.height() / 2);
+    m_textureWidths[2] = size.width() / 2;
+    m_textureHeights[2] = size.height() / 2;
+    m_textureOffsets[2] = w * size.height();
+}
+
+#ifndef QT_OPENGL_ES
+
+# ifndef GL_FRAGMENT_PROGRAM_ARB
+#  define GL_FRAGMENT_PROGRAM_ARB           0x8804
+#  define GL_PROGRAM_FORMAT_ASCII_ARB       0x8875
+# endif
+
+// Paints an RGB32 frame
+static const char *qt_arbfp_xrgbShaderProgram =
+    "!!ARBfp1.0\n"
+    "PARAM matrix[4] = { program.local[0..2],"
+    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
+    "TEMP xrgb;\n"
+    "TEX xrgb.xyz, fragment.texcoord[0], texture[0], 2D;\n"
+    "MOV xrgb.w, matrix[3].w;\n"
+    "DP4 result.color.x, xrgb.zyxw, matrix[0];\n"
+    "DP4 result.color.y, xrgb.zyxw, matrix[1];\n"
+    "DP4 result.color.z, xrgb.zyxw, matrix[2];\n"
+    "END";
+
+// Paints an ARGB frame.
+static const char *qt_arbfp_argbShaderProgram =
+    "!!ARBfp1.0\n"
+    "PARAM matrix[4] = { program.local[0..2],"
+    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
+    "TEMP argb;\n"
+    "TEX argb, fragment.texcoord[0], texture[0], 2D;\n"
+    "MOV argb.w, matrix[3].w;\n"
+    "DP4 result.color.x, argb.zyxw, matrix[0];\n"
+    "DP4 result.color.y, argb.zyxw, matrix[1];\n"
+    "DP4 result.color.z, argb.zyxw, matrix[2];\n"
+    "TEX result.color.w, fragment.texcoord[0], texture, 2D;\n"
+    "END";
+
+// Paints an RGB(A) frame.
+static const char *qt_arbfp_rgbShaderProgram =
+    "!!ARBfp1.0\n"
+    "PARAM matrix[4] = { program.local[0..2],"
+    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
+    "TEMP rgb;\n"
+    "TEX rgb, fragment.texcoord[0], texture[0], 2D;\n"
+    "MOV rgb.w, matrix[3].w;\n"
+    "DP4 result.color.x, rgb, matrix[0];\n"
+    "DP4 result.color.y, rgb, matrix[1];\n"
+    "DP4 result.color.z, rgb, matrix[2];\n"
+    "TEX result.color.w, fragment.texcoord[0], texture, 2D;\n"
+    "END";
+
+// Paints a YUV420P or YV12 frame.
+static const char *qt_arbfp_yuvPlanarShaderProgram =
+    "!!ARBfp1.0\n"
+    "PARAM matrix[4] = { program.local[0..2],"
+    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
+    "TEMP yuv;\n"
+    "TEX yuv.x, fragment.texcoord[0], texture[0], 2D;\n"
+    "TEX yuv.y, fragment.texcoord[0], texture[1], 2D;\n"
+    "TEX yuv.z, fragment.texcoord[0], texture[2], 2D;\n"
+    "MOV yuv.w, matrix[3].w;\n"
+    "DP4 result.color.x, yuv, matrix[0];\n"
+    "DP4 result.color.y, yuv, matrix[1];\n"
+    "DP4 result.color.z, yuv, matrix[2];\n"
+    "END";
+
+// Paints a YUV444 frame.
+static const char *qt_arbfp_xyuvShaderProgram =
+    "!!ARBfp1.0\n"
+    "PARAM matrix[4] = { program.local[0..2],"
+    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
+    "TEMP ayuv;\n"
+    "TEX ayuv, fragment.texcoord[0], texture[0], 2D;\n"
+    "MOV ayuv.x, matrix[3].w;\n"
+    "DP4 result.color.x, ayuv.yzwx, matrix[0];\n"
+    "DP4 result.color.y, ayuv.yzwx, matrix[1];\n"
+    "DP4 result.color.z, ayuv.yzwx, matrix[2];\n"
+    "END";
+
+// Paints a AYUV444 frame.
+static const char *qt_arbfp_ayuvShaderProgram =
+    "!!ARBfp1.0\n"
+    "PARAM matrix[4] = { program.local[0..2],"
+    "{ 0.0, 0.0, 0.0, 1.0 } };\n"
+    "TEMP ayuv;\n"
+    "TEX ayuv, fragment.texcoord[0], texture[0], 2D;\n"
+    "MOV ayuv.x, matrix[3].w;\n"
+    "DP4 result.color.x, ayuv.yzwx, matrix[0];\n"
+    "DP4 result.color.y, ayuv.yzwx, matrix[1];\n"
+    "DP4 result.color.z, ayuv.yzwx, matrix[2];\n"
+    "TEX result.color.w, fragment.texcoord[0], texture, 2D;\n"
+    "END";
+
+class QVideoSurfaceArbFpPainter : public QVideoSurfaceGLPainter
+{
+public:
+    QVideoSurfaceArbFpPainter(QGLContext *context);
+
+    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
+    void stop();
+
+    QAbstractVideoSurface::Error paint(
+            const QRectF &target, QPainter *painter, const QRectF &source);
+
+private:
+    typedef void (APIENTRY *_glProgramStringARB) (GLenum, GLenum, GLsizei, const GLvoid *);
+    typedef void (APIENTRY *_glBindProgramARB) (GLenum, GLuint);
+    typedef void (APIENTRY *_glDeleteProgramsARB) (GLsizei, const GLuint *);
+    typedef void (APIENTRY *_glGenProgramsARB) (GLsizei, GLuint *);
+    typedef void (APIENTRY *_glProgramLocalParameter4fARB) (
+            GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+    typedef void (APIENTRY *_glActiveTexture) (GLenum);
+
+    _glProgramStringARB glProgramStringARB;
+    _glBindProgramARB glBindProgramARB;
+    _glDeleteProgramsARB glDeleteProgramsARB;
+    _glGenProgramsARB glGenProgramsARB;
+    _glProgramLocalParameter4fARB glProgramLocalParameter4fARB;
+
+    GLuint m_programId;
+    QSize m_frameSize;
+};
+
+QVideoSurfaceArbFpPainter::QVideoSurfaceArbFpPainter(QGLContext *context)
+    : QVideoSurfaceGLPainter(context)
+    , m_programId(0)
+{
+    glProgramStringARB = (_glProgramStringARB) m_context->getProcAddress(
+                QLatin1String("glProgramStringARB"));
+    glBindProgramARB = (_glBindProgramARB) m_context->getProcAddress(
+                QLatin1String("glBindProgramARB"));
+    glDeleteProgramsARB = (_glDeleteProgramsARB) m_context->getProcAddress(
+                QLatin1String("glDeleteProgramsARB"));
+    glGenProgramsARB = (_glGenProgramsARB) m_context->getProcAddress(
+                QLatin1String("glGenProgramsARB"));
+    glProgramLocalParameter4fARB = (_glProgramLocalParameter4fARB) m_context->getProcAddress(
+                QLatin1String("glProgramLocalParameter4fARB"));
+
+    m_imagePixelFormats
+            << QVideoFrame::Format_RGB32
+            << QVideoFrame::Format_BGR32
+            << QVideoFrame::Format_ARGB32
+            << QVideoFrame::Format_RGB24
+            << QVideoFrame::Format_BGR24
+            << QVideoFrame::Format_RGB565
+            << QVideoFrame::Format_AYUV444
+            << QVideoFrame::Format_YUV444
+            << QVideoFrame::Format_YV12
+            << QVideoFrame::Format_YUV420P;
+    m_glPixelFormats
+            << QVideoFrame::Format_RGB32
+            << QVideoFrame::Format_ARGB32;
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceArbFpPainter::start(const QVideoSurfaceFormat &format)
+{
+    Q_ASSERT(m_textureCount == 0);
+
+    QAbstractVideoSurface::Error error = QAbstractVideoSurface::NoError;
+
+    m_context->makeCurrent();
+
+    const char *program = 0;
+
+    if (format.handleType() == QAbstractVideoBuffer::NoHandle) {
+        switch (format.pixelFormat()) {
+        case QVideoFrame::Format_RGB32:
+            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            program = qt_arbfp_xrgbShaderProgram;
+            break;
+        case QVideoFrame::Format_BGR32:
+            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            program = qt_arbfp_rgbShaderProgram;
+            break;
+        case QVideoFrame::Format_ARGB32:
+            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            program = qt_arbfp_argbShaderProgram;
+            break;
+        case QVideoFrame::Format_RGB24:
+            initRgbTextureInfo(GL_RGB8, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            program = qt_arbfp_rgbShaderProgram;
+            break;
+        case QVideoFrame::Format_BGR24:
+            initRgbTextureInfo(GL_RGB8, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            program = qt_arbfp_xrgbShaderProgram;
+            break;
+        case QVideoFrame::Format_RGB565:
+            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, format.frameSize());
+            program = qt_arbfp_rgbShaderProgram;
+            break;
+        case QVideoFrame::Format_YUV444:
+            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
+            program = qt_arbfp_xyuvShaderProgram;
+            m_yuv = true;
+            break;
+        case QVideoFrame::Format_AYUV444:
+            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            program = qt_arbfp_ayuvShaderProgram;
+            m_yuv = true;
+            break;
+        case QVideoFrame::Format_YV12:
+            initYv12TextureInfo(format.frameSize());
+            program = qt_arbfp_yuvPlanarShaderProgram;
+            break;
+        case QVideoFrame::Format_YUV420P:
+            initYuv420PTextureInfo(format.frameSize());
+            program = qt_arbfp_yuvPlanarShaderProgram;
+            break;
+        default:
+            break;
+        }
+    } else if (format.handleType() == QAbstractVideoBuffer::GLTextureHandle) {
+        switch (format.pixelFormat()) {
+        case QVideoFrame::Format_RGB32:
+        case QVideoFrame::Format_ARGB32:
+            m_yuv = false;
+            m_textureCount = 1;
+            program = qt_arbfp_rgbShaderProgram;
+            break;
+        default:
+            break;
+        }
+    }
+
+    if (!program) {
+        error = QAbstractVideoSurface::UnsupportedFormatError;
+    } else {
+        glGenProgramsARB(1, &m_programId);
+
+        GLenum glError = glGetError();
+        if (glError != GL_NO_ERROR) {
+            qWarning("QPainterVideoSurface: ARBfb Shader allocation error %x", int(glError));
+            m_textureCount = 0;
+            m_programId = 0;
+
+            error = QAbstractVideoSurface::ResourceError;
+        } else {
+            glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, m_programId);
+            glProgramStringARB(
+                    GL_FRAGMENT_PROGRAM_ARB,
+                    GL_PROGRAM_FORMAT_ASCII_ARB,
+                    qstrlen(program),
+                    reinterpret_cast<const GLvoid *>(program));
+
+            if ((glError = glGetError()) != GL_NO_ERROR) {
+                const GLubyte* errorString = glGetString(GL_PROGRAM_ERROR_STRING_ARB);
+
+                qWarning("QPainterVideoSurface: ARBfp Shader compile error %x, %s",
+                         int(glError),
+                         reinterpret_cast<const char *>(errorString));
+                glDeleteProgramsARB(1, &m_programId);
+
+                m_textureCount = 0;
+                m_programId = 0;
+
+                error = QAbstractVideoSurface::ResourceError;
+            } else {
+                m_handleType = format.handleType();
+                m_scanLineDirection = format.scanLineDirection();
+                m_frameSize = format.frameSize();
+
+                if (m_handleType == QAbstractVideoBuffer::NoHandle)
+                    glGenTextures(m_textureCount, m_textureIds);
+            }
+        }
+    }
+
+    return error;
+}
+
+void QVideoSurfaceArbFpPainter::stop()
+{
+    m_context->makeCurrent();
+
+    if (m_handleType != QAbstractVideoBuffer::GLTextureHandle)
+        glDeleteTextures(m_textureCount, m_textureIds);
+    glDeleteProgramsARB(1, &m_programId);
+
+    m_textureCount = 0;
+    m_programId = 0;
+    m_handleType = QAbstractVideoBuffer::NoHandle;
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceArbFpPainter::paint(
+        const QRectF &target, QPainter *painter, const QRectF &source)
+{
+    if (m_frame.isValid()) {
+        bool stencilTestEnabled = glIsEnabled(GL_STENCIL_TEST);
+        bool scissorTestEnabled = glIsEnabled(GL_SCISSOR_TEST);
+
+        painter->beginNativePainting();
+
+        if (stencilTestEnabled)
+            glEnable(GL_STENCIL_TEST);
+        if (scissorTestEnabled)
+            glEnable(GL_SCISSOR_TEST);
+
+        const float txLeft = source.left() / m_frameSize.width();
+        const float txRight = source.right() / m_frameSize.width();
+        const float txTop = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
+                ? source.top() / m_frameSize.height()
+                : source.bottom() / m_frameSize.height();
+        const float txBottom = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
+                ? source.bottom() / m_frameSize.height()
+                : source.top() / m_frameSize.height();
+
+
+        const float tx_array[] =
+        {
+            txLeft , txBottom,
+            txRight, txBottom,
+            txLeft , txTop,
+            txRight, txTop
+        };
+        const float v_array[] =
+        {
+            float(target.left())     , float(target.bottom() + 1),
+            float(target.right() + 1), float(target.bottom() + 1),
+            float(target.left())     , float(target.top()),
+            float(target.right() + 1), float(target.top())
+        };
+
+        glEnable(GL_FRAGMENT_PROGRAM_ARB);
+        glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, m_programId);
+
+        glProgramLocalParameter4fARB(
+                GL_FRAGMENT_PROGRAM_ARB,
+                0,
+                m_colorMatrix(0, 0),
+                m_colorMatrix(0, 1),
+                m_colorMatrix(0, 2),
+                m_colorMatrix(0, 3));
+        glProgramLocalParameter4fARB(
+                GL_FRAGMENT_PROGRAM_ARB,
+                1,
+                m_colorMatrix(1, 0),
+                m_colorMatrix(1, 1),
+                m_colorMatrix(1, 2),
+                m_colorMatrix(1, 3));
+        glProgramLocalParameter4fARB(
+                GL_FRAGMENT_PROGRAM_ARB,
+                2,
+                m_colorMatrix(2, 0),
+                m_colorMatrix(2, 1),
+                m_colorMatrix(2, 2),
+                m_colorMatrix(2, 3));
+
+        glActiveTexture(GL_TEXTURE0);
+        glBindTexture(GL_TEXTURE_2D, m_textureIds[0]);
+
+        if (m_textureCount == 3) {
+            glActiveTexture(GL_TEXTURE1);
+            glBindTexture(GL_TEXTURE_2D, m_textureIds[1]);
+            glActiveTexture(GL_TEXTURE2);
+            glBindTexture(GL_TEXTURE_2D, m_textureIds[2]);
+            glActiveTexture(GL_TEXTURE0);
+        }
+
+        glVertexPointer(2, GL_FLOAT, 0, v_array);
+        glTexCoordPointer(2, GL_FLOAT, 0, tx_array);
+
+        glEnableClientState(GL_VERTEX_ARRAY);
+        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+
+        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
+        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+        glDisableClientState(GL_VERTEX_ARRAY);
+        glDisable(GL_FRAGMENT_PROGRAM_ARB);
+
+        painter->endNativePainting();
+    }
+    return QAbstractVideoSurface::NoError;
+}
+
+#endif
+
+static const char *qt_glsl_vertexShaderProgram =
+        "attribute highp vec4 vertexCoordArray;\n"
+        "attribute highp vec2 textureCoordArray;\n"
+        "uniform highp mat4 positionMatrix;\n"
+        "varying highp vec2 textureCoord;\n"
+        "void main(void)\n"
+        "{\n"
+        "   gl_Position = positionMatrix * vertexCoordArray;\n"
+        "   textureCoord = textureCoordArray;\n"
+        "}\n";
+
+// Paints an RGB32 frame
+static const char *qt_glsl_xrgbShaderProgram =
+        "uniform sampler2D texRgb;\n"
+        "uniform mediump mat4 colorMatrix;\n"
+        "varying highp vec2 textureCoord;\n"
+        "void main(void)\n"
+        "{\n"
+        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).bgr, 1.0);\n"
+        "    gl_FragColor = colorMatrix * color;\n"
+        "}\n";
+
+// Paints an ARGB frame.
+static const char *qt_glsl_argbShaderProgram =
+        "uniform sampler2D texRgb;\n"
+        "uniform mediump mat4 colorMatrix;\n"
+        "varying highp vec2 textureCoord;\n"
+        "void main(void)\n"
+        "{\n"
+        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).bgr, 1.0);\n"
+        "    color = colorMatrix * color;\n"
+        "    gl_FragColor = vec4(color.rgb, texture2D(texRgb, textureCoord.st).a);\n"
+        "}\n";
+
+// Paints an RGB(A) frame.
+static const char *qt_glsl_rgbShaderProgram =
+        "uniform sampler2D texRgb;\n"
+        "uniform mediump mat4 colorMatrix;\n"
+        "varying highp vec2 textureCoord;\n"
+        "void main(void)\n"
+        "{\n"
+        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).rgb, 1.0);\n"
+        "    color = colorMatrix * color;\n"
+        "    gl_FragColor = vec4(color.rgb, texture2D(texRgb, textureCoord.st).a);\n"
+        "}\n";
+
+// Paints a YUV420P or YV12 frame.
+static const char *qt_glsl_yuvPlanarShaderProgram =
+        "uniform sampler2D texY;\n"
+        "uniform sampler2D texU;\n"
+        "uniform sampler2D texV;\n"
+        "uniform mediump mat4 colorMatrix;\n"
+        "varying highp vec2 textureCoord;\n"
+        "void main(void)\n"
+        "{\n"
+        "    highp vec4 color = vec4(\n"
+        "           texture2D(texY, textureCoord.st).r,\n"
+        "           texture2D(texU, textureCoord.st).r,\n"
+        "           texture2D(texV, textureCoord.st).r,\n"
+        "           1.0);\n"
+        "    gl_FragColor = colorMatrix * color;\n"
+        "}\n";
+
+// Paints a YUV444 frame.
+static const char *qt_glsl_xyuvShaderProgram =
+        "uniform sampler2D texRgb;\n"
+        "uniform mediump mat4 colorMatrix;\n"
+        "varying highp vec2 textureCoord;\n"
+        "void main(void)\n"
+        "{\n"
+        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).gba, 1.0);\n"
+        "    gl_FragColor = colorMatrix * color;\n"
+        "}\n";
+
+// Paints a AYUV444 frame.
+static const char *qt_glsl_ayuvShaderProgram =
+        "uniform sampler2D texRgb;\n"
+        "uniform mediump mat4 colorMatrix;\n"
+        "varying highp vec2 textureCoord;\n"
+        "void main(void)\n"
+        "{\n"
+        "    highp vec4 color = vec4(texture2D(texRgb, textureCoord.st).gba, 1.0);\n"
+        "    color = colorMatrix * color;\n"
+        "    gl_FragColor = vec4(color.rgb, texture2D(texRgb, textureCoord.st).r);\n"
+        "}\n";
+
+class QVideoSurfaceGlslPainter : public QVideoSurfaceGLPainter
+{
+public:
+    QVideoSurfaceGlslPainter(QGLContext *context);
+
+    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
+    void stop();
+
+    QAbstractVideoSurface::Error paint(
+            const QRectF &target, QPainter *painter, const QRectF &source);
+
+private:
+    QGLShaderProgram m_program;
+    QSize m_frameSize;
+};
+
+QVideoSurfaceGlslPainter::QVideoSurfaceGlslPainter(QGLContext *context)
+    : QVideoSurfaceGLPainter(context)
+    , m_program(context)
+{
+    m_imagePixelFormats
+            << QVideoFrame::Format_RGB32
+            << QVideoFrame::Format_BGR32
+            << QVideoFrame::Format_ARGB32
+#ifndef QT_OPENGL_ES
+            << QVideoFrame::Format_RGB24
+            << QVideoFrame::Format_BGR24
+#endif
+            << QVideoFrame::Format_RGB565
+            << QVideoFrame::Format_YUV444
+            << QVideoFrame::Format_AYUV444
+            << QVideoFrame::Format_YV12
+            << QVideoFrame::Format_YUV420P;
+    m_glPixelFormats
+            << QVideoFrame::Format_RGB32
+            << QVideoFrame::Format_ARGB32;
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceGlslPainter::start(const QVideoSurfaceFormat &format)
+{
+    Q_ASSERT(m_textureCount == 0);
+
+    QAbstractVideoSurface::Error error = QAbstractVideoSurface::NoError;
+
+    m_context->makeCurrent();
+
+    const char *fragmentProgram = 0;
+
+    if (format.handleType() == QAbstractVideoBuffer::NoHandle) {
+        switch (format.pixelFormat()) {
+        case QVideoFrame::Format_RGB32:
+            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            fragmentProgram = qt_glsl_xrgbShaderProgram;
+            break;
+        case QVideoFrame::Format_BGR32:
+            initRgbTextureInfo(GL_RGB, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            fragmentProgram = qt_glsl_rgbShaderProgram;
+            break;
+        case QVideoFrame::Format_ARGB32:
+            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            fragmentProgram = qt_glsl_argbShaderProgram;
+            break;
+#ifndef QT_OPENGL_ES
+        case QVideoFrame::Format_RGB24:
+            initRgbTextureInfo(GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
+            fragmentProgram = qt_glsl_rgbShaderProgram;
+            break;
+        case QVideoFrame::Format_BGR24:
+            initRgbTextureInfo(GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
+            fragmentProgram = qt_glsl_argbShaderProgram;
+            break;
+#endif
+        case QVideoFrame::Format_RGB565:
+            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, format.frameSize());
+            fragmentProgram = qt_glsl_rgbShaderProgram;
+            break;
+        case QVideoFrame::Format_YUV444:
+            initRgbTextureInfo(GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, format.frameSize());
+            fragmentProgram = qt_glsl_xyuvShaderProgram;
+            m_yuv = true;
+            break;
+        case QVideoFrame::Format_AYUV444:
+            initRgbTextureInfo(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, format.frameSize());
+            fragmentProgram = qt_glsl_ayuvShaderProgram;
+            m_yuv = true;
+            break;
+        case QVideoFrame::Format_YV12:
+            initYv12TextureInfo(format.frameSize());
+            fragmentProgram = qt_glsl_yuvPlanarShaderProgram;
+            break;
+        case QVideoFrame::Format_YUV420P:
+            initYuv420PTextureInfo(format.frameSize());
+            fragmentProgram = qt_glsl_yuvPlanarShaderProgram;
+            break;
+        default:
+            break;
+        }
+    } else if (format.handleType() == QAbstractVideoBuffer::GLTextureHandle) {
+        switch (format.pixelFormat()) {
+        case QVideoFrame::Format_RGB32:
+        case QVideoFrame::Format_ARGB32:
+            m_yuv = false;
+            m_textureCount = 1;
+            fragmentProgram = qt_glsl_rgbShaderProgram;
+            break;
+        default:
+            break;
+        }
+    }
+
+    if (!fragmentProgram) {
+        error = QAbstractVideoSurface::UnsupportedFormatError;
+    } else if (!m_program.addShaderFromSourceCode(QGLShader::Vertex, qt_glsl_vertexShaderProgram)) {
+        qWarning("QPainterVideoSurface: Vertex shader compile error %s",
+                 qPrintable(m_program.log()));
+        error = QAbstractVideoSurface::ResourceError;
+    } else if (!m_program.addShaderFromSourceCode(QGLShader::Fragment, fragmentProgram)) {
+        qWarning("QPainterVideoSurface: Shader compile error %s", qPrintable(m_program.log()));
+        error = QAbstractVideoSurface::ResourceError;
+        m_program.removeAllShaders();
+    } else if(!m_program.link()) {
+        qWarning("QPainterVideoSurface: Shader link error %s", qPrintable(m_program.log()));
+        m_program.removeAllShaders();
+        error = QAbstractVideoSurface::ResourceError;
+    } else {
+        m_handleType = format.handleType();
+        m_scanLineDirection = format.scanLineDirection();
+        m_frameSize = format.frameSize();
+
+        if (m_handleType == QAbstractVideoBuffer::NoHandle)
+            glGenTextures(m_textureCount, m_textureIds);
+    }
+
+    return error;
+}
+
+void QVideoSurfaceGlslPainter::stop()
+{
+    m_context->makeCurrent();
+
+    if (m_handleType != QAbstractVideoBuffer::GLTextureHandle)
+        glDeleteTextures(m_textureCount, m_textureIds);
+    m_program.removeAllShaders();
+
+    m_textureCount = 0;
+    m_handleType = QAbstractVideoBuffer::NoHandle;
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceGlslPainter::paint(
+        const QRectF &target, QPainter *painter, const QRectF &source)
+{
+    if (m_frame.isValid()) {
+        bool stencilTestEnabled = glIsEnabled(GL_STENCIL_TEST);
+        bool scissorTestEnabled = glIsEnabled(GL_SCISSOR_TEST);
+
+        painter->beginNativePainting();
+
+        if (stencilTestEnabled)
+            glEnable(GL_STENCIL_TEST);
+        if (scissorTestEnabled)
+            glEnable(GL_SCISSOR_TEST);
+
+        const int width = QGLContext::currentContext()->device()->width();
+        const int height = QGLContext::currentContext()->device()->height();
+
+        const QTransform transform = painter->deviceTransform();
+
+        const GLfloat wfactor = 2.0 / width;
+        const GLfloat hfactor = -2.0 / height;
+
+        const GLfloat positionMatrix[4][4] =
+        {
+            {
+                /*(0,0)*/ GLfloat(wfactor * transform.m11() - transform.m13()),
+                /*(0,1)*/ GLfloat(hfactor * transform.m12() + transform.m13()),
+                /*(0,2)*/ 0.0,
+                /*(0,3)*/ GLfloat(transform.m13())
+            }, {
+                /*(1,0)*/ GLfloat(wfactor * transform.m21() - transform.m23()),
+                /*(1,1)*/ GLfloat(hfactor * transform.m22() + transform.m23()),
+                /*(1,2)*/ 0.0,
+                /*(1,3)*/ GLfloat(transform.m23())
+            }, {
+                /*(2,0)*/ 0.0,
+                /*(2,1)*/ 0.0,
+                /*(2,2)*/ -1.0,
+                /*(2,3)*/ 0.0
+            }, {
+                /*(3,0)*/ GLfloat(wfactor * transform.dx() - transform.m33()),
+                /*(3,1)*/ GLfloat(hfactor * transform.dy() + transform.m33()),
+                /*(3,2)*/ 0.0,
+                /*(3,3)*/ GLfloat(transform.m33())
+            }
+        };
+
+        const GLfloat vertexCoordArray[] =
+        {
+            GLfloat(target.left())     , GLfloat(target.bottom() + 1),
+            GLfloat(target.right() + 1), GLfloat(target.bottom() + 1),
+            GLfloat(target.left())     , GLfloat(target.top()),
+            GLfloat(target.right() + 1), GLfloat(target.top())
+        };
+
+        const GLfloat txLeft = source.left() / m_frameSize.width();
+        const GLfloat txRight = source.right() / m_frameSize.width();
+        const GLfloat txTop = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
+                ? source.top() / m_frameSize.height()
+                : source.bottom() / m_frameSize.height();
+        const GLfloat txBottom = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
+                ? source.bottom() / m_frameSize.height()
+                : source.top() / m_frameSize.height();
+
+        const GLfloat textureCoordArray[] =
+        {
+            txLeft , txBottom,
+            txRight, txBottom,
+            txLeft , txTop,
+            txRight, txTop
+        };
+
+        m_program.bind();
+
+        m_program.enableAttributeArray("vertexCoordArray");
+        m_program.enableAttributeArray("textureCoordArray");
+        m_program.setAttributeArray("vertexCoordArray", vertexCoordArray, 2);
+        m_program.setAttributeArray("textureCoordArray", textureCoordArray, 2);
+        m_program.setUniformValue("positionMatrix", positionMatrix);
+
+        if (m_textureCount == 3) {
+            glActiveTexture(GL_TEXTURE0);
+            glBindTexture(GL_TEXTURE_2D, m_textureIds[0]);
+            glActiveTexture(GL_TEXTURE1);
+            glBindTexture(GL_TEXTURE_2D, m_textureIds[1]);
+            glActiveTexture(GL_TEXTURE2);
+            glBindTexture(GL_TEXTURE_2D, m_textureIds[2]);
+            glActiveTexture(GL_TEXTURE0);
+
+            m_program.setUniformValue("texY", GLint(0));
+            m_program.setUniformValue("texU", GLint(1));
+            m_program.setUniformValue("texV", GLint(2));
+        } else {
+            glActiveTexture(GL_TEXTURE0);
+            glBindTexture(GL_TEXTURE_2D, m_textureIds[0]);
+
+            m_program.setUniformValue("texRgb", GLint(0));
+        }
+        m_program.setUniformValue("colorMatrix", m_colorMatrix);
+
+        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
+        m_program.release();
+
+        painter->endNativePainting();
+    }
+    return QAbstractVideoSurface::NoError;
+}
+
+#endif
+
+/*!
+    \class QPainterVideoSurface
+    \internal
+*/
+
+/*!
+*/
+QPainterVideoSurface::QPainterVideoSurface(QObject *parent)
+    : QAbstractVideoSurface(parent)
+    , m_painter(0)
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+    , m_glContext(0)
+    , m_shaderTypes(NoShaders)
+    , m_shaderType(NoShaders)
+#endif
+    , m_brightness(0)
+    , m_contrast(0)
+    , m_hue(0)
+    , m_saturation(0)
+    , m_pixelFormat(QVideoFrame::Format_Invalid)
+    , m_colorsDirty(true)
+    , m_ready(false)
+{
+}
+
+/*!
+*/
+QPainterVideoSurface::~QPainterVideoSurface()
+{
+    if (isActive())
+        m_painter->stop();
+
+    delete m_painter;
+}
+
+/*!
+*/
+QList<QVideoFrame::PixelFormat> QPainterVideoSurface::supportedPixelFormats(
+        QAbstractVideoBuffer::HandleType handleType) const
+{
+    if (!m_painter)
+        const_cast<QPainterVideoSurface *>(this)->createPainter();
+
+    return m_painter->supportedPixelFormats(handleType);
+}
+
+/*!
+*/
+bool QPainterVideoSurface::isFormatSupported(
+        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const
+{
+    if (!m_painter)
+        const_cast<QPainterVideoSurface *>(this)->createPainter();
+
+    return m_painter->isFormatSupported(format, similar);
+}
+
+/*!
+*/
+bool QPainterVideoSurface::start(const QVideoSurfaceFormat &format)
+{
+    if (isActive())
+        m_painter->stop();
+
+    if (!m_painter)
+        createPainter();
+
+    if (format.frameSize().isEmpty()) {
+        setError(UnsupportedFormatError);
+    } else {
+        QAbstractVideoSurface::Error error = m_painter->start(format);
+
+        if (error != QAbstractVideoSurface::NoError) {
+            setError(error);
+        } else {
+            m_pixelFormat = format.pixelFormat();
+            m_frameSize = format.frameSize();
+            m_sourceRect = format.viewport();
+            m_colorsDirty = true;
+            m_ready = true;
+
+            return QAbstractVideoSurface::start(format);
+        }
+    }
+
+    QAbstractVideoSurface::stop();
+
+    return false;
+}
+
+/*!
+*/
+void QPainterVideoSurface::stop()
+{
+    if (isActive()) {
+        m_painter->stop();
+        m_ready = false;
+
+        QAbstractVideoSurface::stop();
+    }
+}
+
+/*!
+*/
+bool QPainterVideoSurface::present(const QVideoFrame &frame)
+{
+    if (!m_ready) {
+        if (!isActive())
+            setError(StoppedError);
+    } else if (frame.isValid() 
+            && (frame.pixelFormat() != m_pixelFormat || frame.size() != m_frameSize)) {
+        setError(IncorrectFormatError);
+
+        stop();
+    } else {
+        QAbstractVideoSurface::Error error = m_painter->setCurrentFrame(frame);
+
+        if (error != QAbstractVideoSurface::NoError) {
+            setError(error);
+
+            stop();
+        } else {
+            m_ready = false;
+
+            emit frameChanged();
+
+            return true;
+        }
+    }
+    return false;
+}
+
+/*!
+*/
+int QPainterVideoSurface::brightness() const
+{
+    return m_brightness;
+}
+
+/*!
+*/
+void QPainterVideoSurface::setBrightness(int brightness)
+{
+    m_brightness = brightness;
+
+    m_colorsDirty = true;
+}
+
+/*!
+*/
+int QPainterVideoSurface::contrast() const
+{
+    return m_contrast;
+}
+
+/*!
+*/
+void QPainterVideoSurface::setContrast(int contrast)
+{
+    m_contrast = contrast;
+
+    m_colorsDirty = true;
+}
+
+/*!
+*/
+int QPainterVideoSurface::hue() const
+{
+    return m_hue;
+}
+
+/*!
+*/
+void QPainterVideoSurface::setHue(int hue)
+{
+    m_hue = hue;
+
+    m_colorsDirty = true;
+}
+
+/*!
+*/
+int QPainterVideoSurface::saturation() const
+{
+    return m_saturation;
+}
+
+/*!
+*/
+void QPainterVideoSurface::setSaturation(int saturation)
+{
+    m_saturation = saturation;
+
+    m_colorsDirty = true;
+}
+
+/*!
+*/
+bool QPainterVideoSurface::isReady() const
+{
+    return m_ready;
+}
+
+/*!
+*/
+void QPainterVideoSurface::setReady(bool ready)
+{
+    m_ready = ready;
+}
+
+/*!
+*/
+void QPainterVideoSurface::paint(QPainter *painter, const QRectF &target, const QRectF &source)
+{
+    if (!isActive()) {
+        painter->fillRect(target, QBrush(Qt::black));
+    } else {
+        if (m_colorsDirty) {
+            m_painter->updateColors(m_brightness, m_contrast, m_hue, m_saturation);
+            m_colorsDirty = false;
+        }
+
+        const QRectF sourceRect(
+                m_sourceRect.x() + m_sourceRect.width() * source.x(),
+                m_sourceRect.y() + m_sourceRect.height() * source.y(),
+                m_sourceRect.width() * source.width(),
+                m_sourceRect.height() * source.height());
+
+        QAbstractVideoSurface::Error error = m_painter->paint(target, painter, sourceRect);
+
+        if (error != QAbstractVideoSurface::NoError) {
+            setError(error);
+
+            stop();
+        }
+    }
+}
+
+/*!
+    \fn QPainterVideoSurface::frameChanged()
+*/
+
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+
+/*!
+*/
+const QGLContext *QPainterVideoSurface::glContext() const
+{
+    return m_glContext;
+}
+
+/*!
+*/
+void QPainterVideoSurface::setGLContext(QGLContext *context)
+{
+    if (m_glContext == context)
+        return;
+
+    m_glContext = context;
+
+    m_shaderTypes = NoShaders;
+
+    if (m_glContext) {
+        m_glContext->makeCurrent();
+
+        const QByteArray extensions(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS)));
+#ifndef QT_OPENGL_ES
+
+        if (extensions.contains("ARB_fragment_program"))
+            m_shaderTypes |= FragmentProgramShader;
+#endif
+
+        if (QGLShaderProgram::hasOpenGLShaderPrograms(m_glContext)
+                && extensions.contains("ARB_shader_objects"))
+            m_shaderTypes |= GlslShader;
+    }
+
+    ShaderType type = (m_shaderType & m_shaderTypes)
+            ? m_shaderType
+            : NoShaders;
+
+    if (type != m_shaderType || type != NoShaders) {
+        m_shaderType = type;
+
+        if (isActive()) {
+            m_painter->stop();
+            delete m_painter;
+            m_painter = 0;
+            m_ready = false;
+
+            setError(ResourceError);
+            QAbstractVideoSurface::stop();
+        }
+        emit supportedFormatsChanged();
+    }
+}
+
+/*!
+    \enum QPainterVideoSurface::ShaderType
+
+    \value NoShaders
+    \value FragmentProgramShader
+    \value HlslShader
+*/
+
+/*!
+    \typedef QPainterVideoSurface::ShaderTypes
+*/
+
+/*!
+*/
+QPainterVideoSurface::ShaderTypes QPainterVideoSurface::supportedShaderTypes() const
+{
+    return m_shaderTypes;
+}
+
+/*!
+*/
+QPainterVideoSurface::ShaderType QPainterVideoSurface::shaderType() const
+{
+    return m_shaderType;
+}
+
+/*!
+*/
+void QPainterVideoSurface::setShaderType(ShaderType type)
+{
+    if (!(type & m_shaderTypes))
+        type = NoShaders;
+
+    if (type != m_shaderType) {
+        m_shaderType = type;
+
+        if (isActive()) {
+            m_painter->stop();
+            delete m_painter;
+            m_painter = 0;
+            m_ready = false;
+
+            setError(ResourceError);
+            QAbstractVideoSurface::stop();
+        } else {
+            delete m_painter;
+            m_painter = 0;
+        }
+        emit supportedFormatsChanged();
+    }
+}
+
+#endif
+
+void QPainterVideoSurface::createPainter()
+{
+    Q_ASSERT(!m_painter);
+
+#ifdef Q_WS_MAC
+    if (m_glContext)
+        m_glContext->makeCurrent();
+
+    m_painter = new QVideoSurfaceCoreGraphicsPainter(m_glContext != 0);
+    return;
+#endif
+
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+    switch (m_shaderType) {
+#ifndef QT_OPENGL_ES
+    case FragmentProgramShader:
+        Q_ASSERT(m_glContext);
+        m_glContext->makeCurrent();
+        m_painter = new QVideoSurfaceArbFpPainter(m_glContext);
+        break;
+#endif
+    case GlslShader:
+        Q_ASSERT(m_glContext);
+        m_glContext->makeCurrent();
+        m_painter = new QVideoSurfaceGlslPainter(m_glContext);
+        break;
+    default:
+        m_painter = new QVideoSurfaceRasterPainter;
+        break;
+    }
+#else
+    m_painter = new QVideoSurfaceRasterPainter;
+#endif
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qpaintervideosurface_p.cpp"
+
+
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface_mac.mm b/src/multimedia/mediaservices/base/qpaintervideosurface_mac.mm
new file mode 100644
index 0000000..1154f86
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface_mac.mm
@@ -0,0 +1,283 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qpaintervideosurface_mac_p.h"
+
+#include <QtCore/qdatetime.h>
+
+#include <qmath.h>
+
+#include <qpainter.h>
+#include <qvariant.h>
+#include <QtMultimedia/qvideosurfaceformat.h>
+
+#include <QtDebug>
+
+#include <QuartzCore/CIContext.h>
+#include <CGLCurrent.h>
+#include <gl.h>
+
+QT_BEGIN_NAMESPACE
+
+extern CGContextRef qt_mac_cg_context(const QPaintDevice *pdev); //qpaintdevice_mac.cpp
+
+QVideoSurfaceCoreGraphicsPainter::QVideoSurfaceCoreGraphicsPainter(bool glSupported)
+    : ciContext(0)
+    , m_imageFormat(QImage::Format_Invalid)
+    , m_scanLineDirection(QVideoSurfaceFormat::TopToBottom)
+{
+    //qDebug() << "QVideoSurfaceCoreGraphicsPainter, GL supported:" << glSupported;
+    ciContext = 0;
+    m_imagePixelFormats
+        << QVideoFrame::Format_RGB32;
+
+    m_supportedHandles
+            << QAbstractVideoBuffer::NoHandle
+            << QAbstractVideoBuffer::CoreImageHandle;
+
+    if (glSupported)
+            m_supportedHandles << QAbstractVideoBuffer::GLTextureHandle;
+}
+
+QVideoSurfaceCoreGraphicsPainter::~QVideoSurfaceCoreGraphicsPainter()
+{
+    [(CIContext*)ciContext release];
+}
+
+QList<QVideoFrame::PixelFormat> QVideoSurfaceCoreGraphicsPainter::supportedPixelFormats(
+        QAbstractVideoBuffer::HandleType handleType) const
+{
+    return m_supportedHandles.contains(handleType)
+        ? m_imagePixelFormats
+        : QList<QVideoFrame::PixelFormat>();
+}
+
+bool QVideoSurfaceCoreGraphicsPainter::isFormatSupported(
+        const QVideoSurfaceFormat &format, QVideoSurfaceFormat *) const
+{
+    return m_supportedHandles.contains(format.handleType())
+            && m_imagePixelFormats.contains(format.pixelFormat())
+            && !format.frameSize().isEmpty();
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceCoreGraphicsPainter::start(const QVideoSurfaceFormat &format)
+{
+    m_frame = QVideoFrame();
+    m_imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
+    m_imageSize = format.frameSize();
+    m_scanLineDirection = format.scanLineDirection();
+
+    return m_supportedHandles.contains(format.handleType())
+            && m_imageFormat != QImage::Format_Invalid
+            && !m_imageSize.isEmpty()
+            ? QAbstractVideoSurface::NoError
+            : QAbstractVideoSurface::UnsupportedFormatError;
+}
+
+void QVideoSurfaceCoreGraphicsPainter::stop()
+{
+    m_frame = QVideoFrame();
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceCoreGraphicsPainter::setCurrentFrame(const QVideoFrame &frame)
+{
+    m_frame = frame;
+
+    return QAbstractVideoSurface::NoError;
+}
+
+QAbstractVideoSurface::Error QVideoSurfaceCoreGraphicsPainter::paint(
+            const QRectF &target, QPainter *painter, const QRectF &source)
+{
+    if (m_frame.handleType() == QAbstractVideoBuffer::CoreImageHandle) {
+        if (painter->paintEngine()->type() == QPaintEngine::CoreGraphics ) {
+
+            CIImage *img = (CIImage*)(m_frame.handle().value<void*>());
+
+            if (img) {
+                CGContextRef cgContext = qt_mac_cg_context(painter->device());
+
+                if (cgContext) {
+                    painter->beginNativePainting();
+
+                    CGRect sRect = CGRectMake(source.x(), source.y(), source.width(), source.height());
+                    CGRect dRect = CGRectMake(target.x(), target.y(), target.width(), target.height());
+
+                    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCIImage:img];
+
+                    if (m_scanLineDirection == QVideoSurfaceFormat::TopToBottom) {
+                        CGContextSaveGState( cgContext );
+                        CGContextTranslateCTM(cgContext, 0, dRect.origin.y + CGRectGetMaxY(dRect));
+                        CGContextScaleCTM(cgContext, 1, -1);
+
+#if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4)
+    if (QSysInfo::MacintoshVersion > QSysInfo::MV_10_4) {
+                        CGContextDrawImage(cgContext, dRect, [bitmap CGImage]);
+    }
+#endif
+
+                        CGContextRestoreGState(cgContext);
+                    } else {
+#if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4)
+    if (QSysInfo::MacintoshVersion > QSysInfo::MV_10_4) {
+                        CGContextDrawImage(cgContext, dRect, [bitmap CGImage]);
+    }
+#endif
+                    }
+
+                    [bitmap release];
+
+                    painter->endNativePainting();
+
+                    return QAbstractVideoSurface::NoError;
+                }
+            }
+        } else if (painter->paintEngine()->type() == QPaintEngine::OpenGL2 ||
+                   painter->paintEngine()->type() == QPaintEngine::OpenGL) {
+            CIImage *img = (CIImage*)(m_frame.handle().value<void*>());
+
+            if (img) {
+                CGLContextObj cglContext = CGLGetCurrentContext();
+
+                if (cglContext) {
+
+                    if (!ciContext) {
+                        CGLContextObj cglContext = CGLGetCurrentContext();
+                        NSOpenGLPixelFormat *nsglPixelFormat = [NSOpenGLView defaultPixelFormat];
+                        CGLPixelFormatObj cglPixelFormat = static_cast<CGLPixelFormatObj>([nsglPixelFormat CGLPixelFormatObj]);
+
+                        ciContext = [CIContext contextWithCGLContext:cglContext
+                                     pixelFormat:cglPixelFormat
+                                         options:nil];
+
+                        [(CIContext*)ciContext retain];
+                    }
+
+                    CGRect sRect = CGRectMake(source.x(), source.y(), source.width(), source.height());
+                    CGRect dRect = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom ?
+                                   CGRectMake(target.x(), target.y()+target.height(), target.width(), -target.height()) :
+                                   CGRectMake(target.x(), target.y(), target.width(), target.height());
+
+
+                    painter->beginNativePainting();
+
+                    [(CIContext*)ciContext drawImage:img inRect:dRect fromRect:sRect];
+
+                    painter->endNativePainting();
+
+                    return QAbstractVideoSurface::NoError;
+                }
+            }
+        }
+    }
+
+    if (m_frame.handleType() == QAbstractVideoBuffer::GLTextureHandle &&
+               (painter->paintEngine()->type() == QPaintEngine::OpenGL2 ||
+                painter->paintEngine()->type() == QPaintEngine::OpenGL)) {
+
+        painter->beginNativePainting();
+            GLuint texture = m_frame.handle().toUInt();
+
+            glDisable(GL_CULL_FACE);
+            glEnable(GL_TEXTURE_2D);
+
+            glBindTexture(GL_TEXTURE_2D, texture);
+            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+            const float txLeft = source.left() / m_frame.width();
+            const float txRight = source.right() / m_frame.width();
+            const float txTop = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
+                    ? source.top() / m_frame.height()
+                    : source.bottom() / m_frame.height();
+            const float txBottom = m_scanLineDirection == QVideoSurfaceFormat::TopToBottom
+                    ? source.bottom() / m_frame.height()
+                    : source.top() / m_frame.height();
+
+            glBegin(GL_QUADS);
+                QRectF rect = target;
+                glTexCoord2f(txLeft, txBottom);
+                glVertex2f(rect.topLeft().x(), rect.topLeft().y());
+                glTexCoord2f(txRight, txBottom);
+                glVertex2f(rect.topRight().x() + 1, rect.topRight().y());
+                glTexCoord2f(txRight, txTop);
+                glVertex2f(rect.bottomRight().x() + 1, rect.bottomRight().y() + 1);
+                glTexCoord2f(txLeft, txTop);
+                glVertex2f(rect.bottomLeft().x(), rect.bottomLeft().y() + 1);
+            glEnd();
+        painter->endNativePainting();
+
+        return QAbstractVideoSurface::NoError;
+    }
+
+    //fallback case, software rendering
+    if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
+        QImage image(
+                m_frame.bits(),
+                m_imageSize.width(),
+                m_imageSize.height(),
+                m_frame.bytesPerLine(),
+                m_imageFormat);
+
+        if (m_scanLineDirection == QVideoSurfaceFormat::BottomToTop) {
+            const QTransform oldTransform = painter->transform();
+
+            painter->scale(1, -1);
+            painter->translate(0, -target.bottom());
+            painter->drawImage(
+                QRectF(target.x(), 0, target.width(), target.height()), image, source);
+            painter->setTransform(oldTransform);
+        } else {
+            painter->drawImage(target, image, source);
+        }
+
+        m_frame.unmap();
+    } else {
+        painter->fillRect(target, Qt::black);
+    }
+    return QAbstractVideoSurface::NoError;
+}
+
+void QVideoSurfaceCoreGraphicsPainter::updateColors(int, int, int, int)
+{
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h b/src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h
new file mode 100644
index 0000000..13c22c2
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPAINTERVIDEOSURFACE_MAC_P_H
+#define QPAINTERVIDEOSURFACE_MAC_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qpaintervideosurface_p.h"
+#include <QtMultimedia/qvideosurfaceformat.h>
+#include <QtMultimedia/qvideoframe.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QVideoSurfaceCoreGraphicsPainter : public QVideoSurfacePainter
+{
+public:
+    QVideoSurfaceCoreGraphicsPainter(bool glSupported);
+    ~QVideoSurfaceCoreGraphicsPainter();
+
+    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
+            QAbstractVideoBuffer::HandleType handleType) const;
+
+    bool isFormatSupported(
+            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const;
+
+    QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format);
+    void stop();
+
+    QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame);
+
+    QAbstractVideoSurface::Error paint(
+            const QRectF &target, QPainter *painter, const QRectF &source);
+
+    void updateColors(int brightness, int contrast, int hue, int saturation);
+
+private:
+    void* ciContext;
+    QList<QVideoFrame::PixelFormat> m_imagePixelFormats;
+    QVideoFrame m_frame;
+    QSize m_imageSize;
+    QImage::Format m_imageFormat;
+    QVector<QAbstractVideoBuffer::HandleType> m_supportedHandles;
+    QVideoSurfaceFormat::Direction m_scanLineDirection;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface_p.h b/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
new file mode 100644
index 0000000..de9c24a
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
@@ -0,0 +1,178 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPAINTERVIDEOSURFACE_P_H
+#define QPAINTERVIDEOSURFACE_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qsize.h>
+#include <QtGui/qimage.h>
+#include <QtGui/qmatrix4x4.h>
+#include <QtGui/qpaintengine.h>
+#include <QtMultimedia/qabstractvideosurface.h>
+#include <QtMultimedia/qvideoframe.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QGLContext;
+
+class QVideoSurfacePainter
+{
+public:
+    virtual ~QVideoSurfacePainter();
+
+    virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(
+            QAbstractVideoBuffer::HandleType handleType) const = 0;
+
+    virtual bool isFormatSupported(
+            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const = 0;
+
+    virtual QAbstractVideoSurface::Error start(const QVideoSurfaceFormat &format) = 0;
+    virtual void stop() = 0;
+
+    virtual QAbstractVideoSurface::Error setCurrentFrame(const QVideoFrame &frame) = 0;
+
+    virtual QAbstractVideoSurface::Error paint(
+            const QRectF &target, QPainter *painter, const QRectF &source) = 0;
+
+    virtual void updateColors(int brightness, int contrast, int hue, int saturation) = 0;
+};
+
+class Q_MULTIMEDIA_EXPORT QPainterVideoSurface : public QAbstractVideoSurface
+{
+    Q_OBJECT
+public:
+    explicit QPainterVideoSurface(QObject *parent = 0);
+    ~QPainterVideoSurface();
+
+    QList<QVideoFrame::PixelFormat> supportedPixelFormats(
+            QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const;
+
+    bool isFormatSupported(
+            const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar = 0) const;
+
+    bool start(const QVideoSurfaceFormat &format);
+    void stop();
+
+    bool present(const QVideoFrame &frame);
+
+    int brightness() const;
+    void setBrightness(int brightness);
+
+    int contrast() const;
+    void setContrast(int contrast);
+
+    int hue() const;
+    void setHue(int hue);
+
+    int saturation() const;
+    void setSaturation(int saturation);
+
+    bool isReady() const;
+    void setReady(bool ready);
+
+    void paint(QPainter *painter, const QRectF &target, const QRectF &source = QRectF(0, 0, 1, 1));
+
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+    const QGLContext *glContext() const;
+    void setGLContext(QGLContext *context);
+
+    enum ShaderType
+    {
+        NoShaders = 0x00,
+        FragmentProgramShader = 0x01,
+        GlslShader = 0x02
+    };
+
+    Q_DECLARE_FLAGS(ShaderTypes, ShaderType)
+
+    ShaderTypes supportedShaderTypes() const;
+
+    ShaderType shaderType() const;
+    void setShaderType(ShaderType type);
+#endif
+
+Q_SIGNALS:
+    void frameChanged();
+
+private:
+    void createPainter();
+
+    QVideoSurfacePainter *m_painter;
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+    QGLContext *m_glContext;
+    ShaderTypes m_shaderTypes;
+    ShaderType m_shaderType;
+#endif
+    int m_brightness;
+    int m_contrast;
+    int m_hue;
+    int m_saturation;
+
+    QVideoFrame::PixelFormat m_pixelFormat;
+    QSize m_frameSize;
+    QRect m_sourceRect;
+    bool m_colorsDirty;
+    bool m_ready;
+};
+
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QPainterVideoSurface::ShaderTypes)
+#endif
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qtmedianamespace.h b/src/multimedia/mediaservices/base/qtmedianamespace.h
new file mode 100644
index 0000000..7db7aa8
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qtmedianamespace.h
@@ -0,0 +1,194 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTMEDIANAMESPACE_H
+#define QTMEDIANAMESPACE_H
+
+#include <QtCore/qpair.h>
+#include <QtCore/qmetatype.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+namespace QtMediaservices
+{
+    enum MetaData
+    {
+        // Common
+        Title,
+        SubTitle,
+        Author,
+        Comment,
+        Description,
+        Category,
+        Genre,
+        Year,
+        Date,
+        UserRating,
+        Keywords,
+        Language,
+        Publisher,
+        Copyright,
+        ParentalRating,
+        RatingOrganisation,
+
+        // Media
+        Size,
+        MediaType,
+        Duration,
+
+        // Audio
+        AudioBitRate,
+        AudioCodec,
+        AverageLevel,
+        ChannelCount,
+        PeakValue,
+        SampleRate,
+
+        // Music
+        AlbumTitle,
+        AlbumArtist,
+        ContributingArtist,
+        Composer,
+        Conductor,
+        Lyrics,
+        Mood,
+        TrackNumber,
+        TrackCount,
+
+        CoverArtUrlSmall,
+        CoverArtUrlLarge,
+
+        // Image/Video
+        Resolution,
+        PixelAspectRatio,
+
+        // Video
+        VideoFrameRate,
+        VideoBitRate,
+        VideoCodec,
+
+        PosterUrl,
+
+        // Movie
+        ChapterNumber,
+        Director,
+        LeadPerformer,
+        Writer,
+
+        // Photos
+        CameraManufacturer,
+        CameraModel,
+        Event,
+        Subject,
+        Orientation,
+        ExposureTime,
+        FNumber,
+        ExposureProgram,
+        ISOSpeedRatings,
+        ExposureBiasValue,
+        DateTimeOriginal,
+        DateTimeDigitized,
+        SubjectDistance,
+        MeteringMode,
+        LightSource,
+        Flash,
+        FocalLength,
+        ExposureMode,
+        WhiteBalance,
+        DigitalZoomRatio,
+        FocalLengthIn35mmFilm,
+        SceneCaptureType,
+        GainControl,
+        Contrast,
+        Saturation,
+        Sharpness,
+        DeviceSettingDescription,
+
+        PosterImage,
+        CoverArtImage,
+        ThumbnailImage
+
+    };
+
+    enum SupportEstimate
+    {
+        NotSupported,
+        MaybeSupported,
+        ProbablySupported,
+        PreferredService
+    };
+
+    enum EncodingQuality
+    {
+        VeryLowQuality,
+        LowQuality,
+        NormalQuality,
+        HighQuality,
+        VeryHighQuality
+    };
+
+    enum EncodingMode
+    {
+        ConstantQualityEncoding,
+        ConstantBitRateEncoding,
+        AverageBitRateEncoding,
+        TwoPassEncoding
+    };
+
+    enum AvailabilityError
+    {
+        NoError,
+        ServiceMissingError,
+        BusyError,
+        ResourceError
+    };
+
+}
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qtmedianamespace.qdoc b/src/multimedia/mediaservices/base/qtmedianamespace.qdoc
new file mode 100644
index 0000000..277b1a5
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qtmedianamespace.qdoc
@@ -0,0 +1,214 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+    \namespace QtMultimedia
+    \ingroup multimedia
+
+    \brief The QtMultimedia namespace contains miscellaneous identifiers used
+    throughout the Qt Multimedia library.
+*/
+
+/*!
+    \enum QtMultimedia::MetaData
+
+    This enum provides identifiers for meta-data attributes.
+
+    Common attributes
+    \value Title The title of the media.  QString.
+    \value SubTitle The sub-title of the media. QString.
+    \value Author The authors of the media. QStringList.
+    \value Comment A user comment about the media. QString.
+    \value Description A description of the media.  QString
+    \value Category The category of the media.  QStringList.
+    \value Genre The genre of the media.  QStringList.
+    \value Year The year of release of the media.  int.
+    \value Date The date of the media. QDate.
+    \value UserRating A user rating of the media. int [0..100].
+    \value Keywords A list of keywords describing the media.  QStringList.
+    \value Language The language of media, as an ISO 639-2 code.
+
+    \value Publisher The publisher of the media.  QString.
+    \value Copyright The media's copyright notice.  QString.
+    \value ParentalRating  The parental rating of the media.  QString.
+    \value RatingOrganisation The organisation responsible for the parental rating of the media.
+    QString.
+
+    Media attributes
+    \value Size The size in bytes of the media. qint64
+    \value MediaType The type of the media (audio, video, etc).  QString.
+    \value Duration The duration in millseconds of the media.  qint64.
+
+    Audio attributes
+    \value AudioBitRate The bit rate of the media's audio stream in bits per second.  int.
+    \value AudioCodec The codec of the media's audio stream.  QString.
+    \value AverageLevel The average volume level of the media.  int.
+    \value ChannelCount The number of channels in the media's audio stream. int.
+    \value PeakValue The peak volume of the media's audio stream. int
+    \value SampleRate The sample rate of the media's audio stream in hertz. int
+
+    Music attributes
+    \value AlbumTitle The title of the album the media belongs to.  QString.
+    \value AlbumArtist The principal artist of the album the media belongs to.  QString.
+    \value ContributingArtist The artists contributing to the media.  QStringList.
+    \value Composer The composer of the media.  QStringList.
+    \value Conductor The conductor of the media. QString.
+    \value Lyrics The lyrics to the media. QString.
+    \value Mood The mood of the media.  QString.
+    \value TrackNumber The track number of the media.  int.
+    \value TrackCount The number of tracks on the album containing the media.  int.
+
+    \value CoverArtUrlSmall The URL of a small cover art image. QUrl.
+    \value CoverArtUrlLarge The URL of a large cover art image. QUrl.
+    \value CoverArtImage An embedded cover art image. QImage.
+
+    Image and video attributes
+    \value Resolution The dimensions of an image or video.  QSize.
+    \value PixelAspectRatio The pixel aspect ratio of an image or video.  QSize.
+
+    Video attributes
+    \value VideoFrameRate The frame rate of the media's video stream.  qreal.
+    \value VideoBitRate The bit rate of the media's video stream in bits per second.  int.
+    \value VideoCodec The codec of the media's video stream.  QString.
+
+    \value PosterUrl The URL of a poster image.  QUrl.
+    \value PosterImage An embedded poster image.  QImage.
+
+    Movie attributes
+    \value ChapterNumber The chapter number of the media.  int.
+    \value Director The director of the media.  QString.
+    \value LeadPerformer The lead performer in the media.  QStringList.
+    \value Writer The writer of the media.  QStringList.
+
+    Photo attributes.
+    \value CameraManufacturer The manufacturer of the camera used to capture the media.  QString.
+    \value CameraModel The model of the camera used to capture the media.  QString.
+    \value Event The event during which the media was captured.  QString.
+    \value Subject The subject of the media.  QString.
+    \value Orientation Orientation of image.
+    \value ExposureTime Exposure time, given in seconds.
+    \value FNumber The F Number.
+    \value ExposureProgram
+        The class of the program used by the camera to set exposure when the picture is taken.
+    \value ISOSpeedRatings
+        Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232.
+    \value ExposureBiasValue
+        The exposure bias.
+        The unit is the APEX (Additive System of Photographic Exposure) setting.
+    \value DateTimeOriginal The date and time when the original image data was generated.
+    \value DateTimeDigitized The date and time when the image was stored as digital data.
+    \value SubjectDistance The distance to the subject, given in meters.
+    \value MeteringMode The metering mode.
+    \value LightSource
+        The kind of light source.
+    \value Flash
+        Status of flash when the image was shot.
+    \value FocalLength
+        The actual focal length of the lens, in mm.
+    \value ExposureMode
+        Indicates the exposure mode set when the image was shot.
+    \value WhiteBalance
+        Indicates the white balance mode set when the image was shot.
+    \value DigitalZoomRatio
+        Indicates the digital zoom ratio when the image was shot.
+    \value FocalLengthIn35mmFilm
+        Indicates the equivalent focal length assuming a 35mm film camera, in mm.
+    \value SceneCaptureType
+        Indicates the type of scene that was shot.
+        It can also be used to record the mode in which the image was shot.
+    \value GainControl
+        Indicates the degree of overall image gain adjustment.
+    \value Contrast
+        Indicates the direction of contrast processing applied by the camera when the image was shot.
+    \value Saturation
+        Indicates the direction of saturation processing applied by the camera when the image was shot.
+    \value Sharpness
+        Indicates the direction of sharpness processing applied by the camera when the image was shot.
+    \value DeviceSettingDescription
+        Exif tag, indicates information on the picture-taking conditions of a particular camera model. QString
+
+    \value ThumbnailImage An embedded thumbnail image.  QImage.
+*/
+
+/*!
+    \enum QtMultimedia::SupportEstimate
+
+    Enumerates the levels of support a media service provider may have for a feature.
+
+    \value NotSupported The feature is not supported.
+    \value MaybeSupported The feature may be supported.
+    \value ProbablySupported The feature is probably supported.
+    \value PreferredService The service is the preferred provider of a service.
+*/
+
+/*!
+    \enum QtMultimedia::EncodingQuality
+
+    Enumerates quality encoding levels.
+
+    \value VeryLowQuality
+    \value LowQuality
+    \value NormalQuality
+    \value HighQuality
+    \value VeryHighQuality
+*/
+
+/*!
+    \enum QtMultimedia::EncodingMode
+
+    Enumerates encoding modes.
+
+    \value ConstantQualityEncoding
+    \value ConstantBitRateEncoding
+    \value AverageBitRateEncoding
+    \value TwoPassEncoding
+*/
+
+/*!
+    \enum QtMultimedia::AvailabilityError
+
+    Enumerates Service status errors.
+
+    \value NoError
+    \value ServiceMissingError
+    \value ResourceError
+    \value BusyError
+*/
diff --git a/src/multimedia/mediaservices/base/qvideodevicecontrol.cpp b/src/multimedia/mediaservices/base/qvideodevicecontrol.cpp
new file mode 100644
index 0000000..128cee9
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideodevicecontrol.cpp
@@ -0,0 +1,155 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qvideodevicecontrol.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QVideoDeviceControl
+    \preliminary
+    \since 4.7
+    \brief The QVideoDeviceControl class provides an video device selector media control.
+    \ingroup multimedia-serv
+
+    The QVideoDeviceControl class provides descriptions of the video devices
+    available on a system and allows one to be selected as the  endpoint of
+    a media service.
+
+    The interface name of QVideoDeviceControl is \c com.nokia.Qt.VideoDeviceControl as
+    defined in QVideoDeviceControl_iid.
+*/
+
+/*!
+    \macro QVideoDeviceControl_iid
+
+    \c com.nokia.Qt.VideoDeviceControl
+
+    Defines the interface name of the QVideoDeviceControl class.
+
+    \relates QVideoDeviceControl
+*/
+
+/*!
+    Constructs a video device control with the given \a parent.
+*/
+QVideoDeviceControl::QVideoDeviceControl(QObject *parent)
+    :QMediaControl(parent)
+{
+}
+
+/*!
+    Destroys a video device control.
+*/
+QVideoDeviceControl::~QVideoDeviceControl()
+{
+}
+
+/*!
+    \fn QVideoDeviceControl::deviceCount() const
+
+    Returns the number of available video devices;
+*/
+
+/*!
+    \fn QVideoDeviceControl::deviceName(int index) const
+
+    Returns the name of the video device at \a index.
+*/
+
+/*!
+    \fn QVideoDeviceControl::deviceDescription(int index) const
+
+    Returns a description of the video device at \a index.
+*/
+
+/*!
+    \fn QVideoDeviceControl::deviceIcon(int index) const
+
+    Returns an icon for the video device at \a index.
+*/
+
+/*!
+    \fn QVideoDeviceControl::defaultDevice() const
+
+    Returns the index of the default video device.
+*/
+
+/*!
+    \fn QVideoDeviceControl::selectedDevice() const
+
+    Returns the index of the selected video device.
+*/
+
+/*!
+    \fn QVideoDeviceControl::setSelectedDevice(int index)
+
+    Sets the selected video device \a index.
+*/
+
+/*!
+    \fn QVideoDeviceControl::devicesChanged()
+
+    Signals that the list of available video devices has changed.
+*/
+
+/*!
+    \fn QVideoDeviceControl::selectedDeviceChanged(int index)
+
+    Signals that the selected video device \a index has changed.
+*/
+
+/*!
+    \fn QVideoDeviceControl::selectedDeviceChanged(const QString &name)
+
+    Signals that the selected video device \a name has changed.
+*/
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#include "moc_qvideodevicecontrol.cpp"
+
+
diff --git a/src/multimedia/mediaservices/base/qvideodevicecontrol.h b/src/multimedia/mediaservices/base/qvideodevicecontrol.h
new file mode 100644
index 0000000..df1d4fa
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideodevicecontrol.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEODEVICECONTROL_H
+#define QVIDEODEVICECONTROL_H
+
+#include <QtMediaservices/qmediacontrol.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class Q_MULTIMEDIA_EXPORT QVideoDeviceControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    virtual ~QVideoDeviceControl();
+
+    virtual int deviceCount() const = 0;
+
+    virtual QString deviceName(int index) const = 0;
+    virtual QString deviceDescription(int index) const = 0;
+    virtual QIcon deviceIcon(int index) const = 0;
+
+    virtual int defaultDevice() const = 0;
+    virtual int selectedDevice() const = 0;
+
+public Q_SLOTS:
+    virtual void setSelectedDevice(int index) = 0;
+
+Q_SIGNALS:
+    void selectedDeviceChanged(int index);
+    void selectedDeviceChanged(const QString &deviceName);
+    void devicesChanged();
+
+protected:
+    QVideoDeviceControl(QObject *parent = 0);
+};
+
+#define QVideoDeviceControl_iid "com.nokia.Qt.QVideoDeviceControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QVideoDeviceControl, QVideoDeviceControl_iid)
+
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QVIDEODEVICECONTROL_H
diff --git a/src/multimedia/mediaservices/base/qvideooutputcontrol.cpp b/src/multimedia/mediaservices/base/qvideooutputcontrol.cpp
new file mode 100644
index 0000000..7d7ed4b
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideooutputcontrol.cpp
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qvideooutputcontrol.h>
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QVideoOutputControl
+    \preliminary
+    \since 4.7
+    \brief The QVideoOutputControl class provides a means of selecting the
+    active video output control.
+
+    \ingroup multimedia-serv
+
+    There are multiple controls which a QMediaService may use to output
+    video ony one of which may be active at one time, QVideoOutputControl
+    is the means by which this active control is selected.
+
+    The possible output controls are QVideoRendererControl,
+    QVideoWindowControl, and QVideoWidgetControl.
+
+    The interface name of QVideoOutputControl is \c com.nokia.Qt.QVideoOutputControl/1.0 as
+    defined in QVideoOutputControl_iid.
+
+    \sa QMediaService::control(), QVideoWidget, QVideoRendererControl,
+    QVideoWindowControl, QVideoWidgetControl
+*/
+
+/*!
+    \macro QVideoOutputControl_iid
+
+    \c com.nokia.Qt.QVideoOutputControl/1.0
+
+    Defines the interface name of the QVideoOutputControl class.
+
+    \relates QVideoOutputControl
+*/
+
+/*!
+    \enum QVideoOutputControl::Output
+
+    Identifies the possible render targets of a video output.
+
+    \value NoOutput Video is not rendered.
+    \value WindowOutput Video is rendered to the target of a QVideoWindowControl.
+    \value RendererOutput Video is rendered to the target of a QVideoRendererControl.
+    \value WidgetOutput Video is rendered to a QWidget provided by QVideoWidgetControl.
+    \value UserOutput Start value for user defined video targets.
+    \value MaxUserOutput End value for user defined video targets.
+*/
+
+/*!
+    Constructs a new video output control with the given \a parent.
+*/
+QVideoOutputControl::QVideoOutputControl(QObject *parent)
+    : QMediaControl(parent)
+{
+}
+
+/*!
+    Destroys a video output control.
+*/
+QVideoOutputControl::~QVideoOutputControl()
+{
+}
+
+/*!
+    \fn QList<QVideoOutputControl::Output> QVideoOutputControl::availableOutputs() const
+
+    Returns a list of available video output targets.
+*/
+
+/*!
+    \fn QVideoOutputControl::output() const
+
+    Returns the current video output target.
+*/
+
+/*!
+    \fn QVideoOutputControl::setOutput(Output output)
+
+    Sets the current video \a output target.
+*/
+
+/*!
+    \fn QVideoOutputControl::availableOutputsChanged(const QList<QVideoOutputControl::Output>  &outputs)
+
+    Signals that available set of video \a outputs has changed.
+*/
+
+#include "moc_qvideooutputcontrol.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qvideooutputcontrol.h b/src/multimedia/mediaservices/base/qvideooutputcontrol.h
new file mode 100644
index 0000000..05bc164
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideooutputcontrol.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEOOUTPUTCONTROL_H
+#define QVIDEOOUTPUTCONTROL_H
+
+#include <QtMediaservices/qmediacontrol.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class Q_MULTIMEDIA_EXPORT QVideoOutputControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    enum Output
+    {
+        NoOutput,
+        WindowOutput,
+        RendererOutput,
+        WidgetOutput,
+        UserOutput = 100,
+        MaxUserOutput = 1000
+    };
+
+    ~QVideoOutputControl();
+
+    virtual QList<Output> availableOutputs() const = 0;
+
+    virtual Output output() const = 0;
+    virtual void setOutput(Output output) = 0;
+
+Q_SIGNALS:
+    void availableOutputsChanged(const QList<QVideoOutputControl::Output> &outputs);
+
+protected:
+    QVideoOutputControl(QObject *parent = 0);
+};
+
+#define QVideoOutputControl_iid "com.nokia.Qt.QVideoOutputControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QVideoOutputControl, QVideoOutputControl_iid)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qvideorenderercontrol.cpp b/src/multimedia/mediaservices/base/qvideorenderercontrol.cpp
new file mode 100644
index 0000000..bd7c78d
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideorenderercontrol.cpp
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qvideorenderercontrol.h>
+
+#include "qmediacontrol_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QVideoRendererControl
+    \preliminary
+    \since 4.7
+    \brief The QVideoRendererControl class provides a control for rendering
+    to a video surface.
+
+    \ingroup multimedia-serv
+
+    Using the surface() property of QVideoRendererControl a QAbstractVideoSurface
+    may be set as the video render target of a QMediaService.
+
+    \code
+    QVideoRendererControl *rendererControl = mediaService->control<QVideoRendererControl *>();
+    rendererControl->setSurface(myVideoSurface);
+    \endcode
+
+    QVideoRendererControl is one of number of possible video output controls,
+    in order to receive video it must be made the active video output
+    control by setting the output property of QVideoOutputControl to
+    \l {QVideoOutputControl::RendererOutput}{RendererOutput}. Consequently any
+    QMediaService that implements QVideoRendererControl must also implement
+    QVideoOutputControl.
+
+    \code
+    QVideoOutputControl *outputControl = mediaService->control<QVideoOutputControl *>();
+    outputControl->setOutput(QVideoOutputControl::RendererOutput);
+    \endcode
+
+    The interface name of QVideoRendererControl is \c com.nokia.Qt.QVideoRendererControl/1.0 as
+    defined in QVideoRendererControl_iid.
+
+    \sa QMediaService::control(), QVideoOutputControl, QVideoWidget
+*/
+
+/*!
+    \macro QVideoRendererControl_iid
+
+    \c com.nokia.Qt.QVideoRendererControl/1.0
+
+    Defines the interface name of the QVideoRendererControl class.
+
+    \relates QVideoRendererControl
+*/
+
+/*!
+    Constructs a new video renderer media end point with the given \a parent.
+*/
+QVideoRendererControl::QVideoRendererControl(QObject *parent)
+    : QMediaControl(parent)
+{
+}
+
+/*!
+    Destroys a video renderer media end point.
+*/
+QVideoRendererControl::~QVideoRendererControl()
+{
+}
+
+/*!
+    \fn QVideoRendererControl::surface() const
+
+    Returns the surface a video producer renders to.
+*/
+
+/*!
+    \fn QVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
+
+    Sets the \a surface a video producer renders to.
+*/
+
+#include "moc_qvideorenderercontrol.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qvideorenderercontrol.h b/src/multimedia/mediaservices/base/qvideorenderercontrol.h
new file mode 100644
index 0000000..fd130ac
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideorenderercontrol.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEORENDERERCONTROL_H
+#define QVIDEORENDERERCONTROL_H
+
+#include <QtMediaservices/qmediacontrol.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QAbstractVideoSurface;
+
+class Q_MULTIMEDIA_EXPORT QVideoRendererControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    ~QVideoRendererControl();
+
+    virtual QAbstractVideoSurface *surface() const = 0;
+    virtual void setSurface(QAbstractVideoSurface *surface) = 0;
+
+protected:
+    QVideoRendererControl(QObject *parent = 0);
+};
+
+#define QVideoRendererControl_iid "com.nokia.Qt.QVideoRendererControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QVideoRendererControl, QVideoRendererControl_iid)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QVIDEORENDERERCONTROL_H
diff --git a/src/multimedia/mediaservices/base/qvideowidget.cpp b/src/multimedia/mediaservices/base/qvideowidget.cpp
new file mode 100644
index 0000000..52291b0
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideowidget.cpp
@@ -0,0 +1,944 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qvideowidget_p.h"
+
+#include <QtMediaservices/qmediaobject.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qvideooutputcontrol.h>
+#include <QtMediaservices/qvideowindowcontrol.h>
+#include <QtMediaservices/qvideowidgetcontrol.h>
+
+#include "qpaintervideosurface_p.h"
+#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMultimedia/qvideosurfaceformat.h>
+#include <qpainter.h>
+
+#include <qapplication.h>
+#include <qevent.h>
+#include <qdialog.h>
+#include <qboxlayout.h>
+#include <qnamespace.h>
+
+
+QT_BEGIN_NAMESPACE
+
+QVideoWidgetControlBackend::QVideoWidgetControlBackend(
+        QVideoWidgetControl *control, QWidget *widget)
+    : m_widgetControl(control)
+{
+    connect(control, SIGNAL(brightnessChanged(int)), widget, SLOT(_q_brightnessChanged(int)));
+    connect(control, SIGNAL(contrastChanged(int)), widget, SLOT(_q_contrastChanged(int)));
+    connect(control, SIGNAL(hueChanged(int)), widget, SLOT(_q_hueChanged(int)));
+    connect(control, SIGNAL(saturationChanged(int)), widget, SLOT(_q_saturationChanged(int)));
+    connect(control, SIGNAL(fullScreenChanged(bool)), widget, SLOT(_q_fullScreenChanged(bool)));
+
+    QBoxLayout *layout = new QVBoxLayout;
+    layout->setMargin(0);
+    layout->setSpacing(0);
+    layout->addWidget(control->videoWidget());
+
+    widget->setLayout(layout);
+}
+
+void QVideoWidgetControlBackend::setBrightness(int brightness)
+{
+    m_widgetControl->setBrightness(brightness);
+}
+
+void QVideoWidgetControlBackend::setContrast(int contrast)
+{
+    m_widgetControl->setContrast(contrast);
+}
+
+void QVideoWidgetControlBackend::setHue(int hue)
+{
+    m_widgetControl->setHue(hue);
+}
+
+void QVideoWidgetControlBackend::setSaturation(int saturation)
+{
+    m_widgetControl->setSaturation(saturation);
+}
+
+void QVideoWidgetControlBackend::setFullScreen(bool fullScreen)
+{
+    m_widgetControl->setFullScreen(fullScreen);
+}
+
+
+Qt::AspectRatioMode QVideoWidgetControlBackend::aspectRatioMode() const
+{
+    return m_widgetControl->aspectRatioMode();
+}
+
+void QVideoWidgetControlBackend::setAspectRatioMode(Qt::AspectRatioMode mode)
+{
+    m_widgetControl->setAspectRatioMode(mode);
+}
+
+QRendererVideoWidgetBackend::QRendererVideoWidgetBackend(
+        QVideoRendererControl *control, QWidget *widget)
+    : m_rendererControl(control)
+    , m_widget(widget)
+    , m_surface(new QPainterVideoSurface)
+    , m_aspectRatioMode(Qt::KeepAspectRatio)
+    , m_updatePaintDevice(true)
+{
+    connect(this, SIGNAL(brightnessChanged(int)), m_widget, SLOT(_q_brightnessChanged(int)));
+    connect(this, SIGNAL(contrastChanged(int)), m_widget, SLOT(_q_contrastChanged(int)));
+    connect(this, SIGNAL(hueChanged(int)), m_widget, SLOT(_q_hueChanged(int)));
+    connect(this, SIGNAL(saturationChanged(int)), m_widget, SLOT(_q_saturationChanged(int)));
+    connect(m_surface, SIGNAL(frameChanged()), this, SLOT(frameChanged()));
+    connect(m_surface, SIGNAL(surfaceFormatChanged(QVideoSurfaceFormat)),
+            this, SLOT(formatChanged(QVideoSurfaceFormat)));
+
+    m_rendererControl->setSurface(m_surface);
+}
+
+QRendererVideoWidgetBackend::~QRendererVideoWidgetBackend()
+{
+    delete m_surface;
+}
+
+void QRendererVideoWidgetBackend::clearSurface()
+{
+    m_rendererControl->setSurface(0);
+}
+
+void QRendererVideoWidgetBackend::setBrightness(int brightness)
+{
+    m_surface->setBrightness(brightness);
+
+    emit brightnessChanged(brightness);
+}
+
+void QRendererVideoWidgetBackend::setContrast(int contrast)
+{
+    m_surface->setContrast(contrast);
+
+    emit contrastChanged(contrast);
+}
+
+void QRendererVideoWidgetBackend::setHue(int hue)
+{
+    m_surface->setHue(hue);
+
+    emit hueChanged(hue);
+}
+
+void QRendererVideoWidgetBackend::setSaturation(int saturation)
+{
+    m_surface->setSaturation(saturation);
+
+    emit saturationChanged(saturation);
+}
+
+Qt::AspectRatioMode QRendererVideoWidgetBackend::aspectRatioMode() const
+{
+    return m_aspectRatioMode;
+}
+
+void QRendererVideoWidgetBackend::setAspectRatioMode(Qt::AspectRatioMode mode)
+{
+    m_aspectRatioMode = mode;
+
+    m_widget->updateGeometry();
+}
+
+void QRendererVideoWidgetBackend::setFullScreen(bool)
+{
+}
+
+QSize QRendererVideoWidgetBackend::sizeHint() const
+{
+    return m_surface->surfaceFormat().sizeHint();
+}
+
+void QRendererVideoWidgetBackend::showEvent()
+{
+}
+
+void QRendererVideoWidgetBackend::hideEvent(QHideEvent *)
+{
+#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+    m_updatePaintDevice = true;
+    m_surface->setGLContext(0);
+#endif
+}
+
+void QRendererVideoWidgetBackend::resizeEvent(QResizeEvent *)
+{
+    updateRects();
+}
+
+void QRendererVideoWidgetBackend::moveEvent(QMoveEvent *)
+{
+}
+
+void QRendererVideoWidgetBackend::paintEvent(QPaintEvent *event)
+{
+    QPainter painter(m_widget);
+
+    if (m_widget->testAttribute(Qt::WA_OpaquePaintEvent)) {
+        QRegion borderRegion = event->region();
+        borderRegion = borderRegion.subtracted(m_boundingRect);
+
+        QBrush brush = m_widget->palette().window();
+
+        QVector<QRect> rects = borderRegion.rects();
+        for (QVector<QRect>::iterator it = rects.begin(), end = rects.end(); it != end; ++it) {
+            painter.fillRect(*it, brush);
+        }
+    }
+
+    if (m_surface->isActive() && m_boundingRect.intersects(event->rect())) {
+        m_surface->paint(&painter, m_boundingRect, m_sourceRect);
+
+        m_surface->setReady(true);
+    } else {
+ #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
+        if (m_updatePaintDevice && (painter.paintEngine()->type() == QPaintEngine::OpenGL
+                || painter.paintEngine()->type() == QPaintEngine::OpenGL2)) {
+            m_updatePaintDevice = false;
+
+            m_surface->setGLContext(const_cast<QGLContext *>(QGLContext::currentContext()));
+            if (m_surface->supportedShaderTypes() & QPainterVideoSurface::GlslShader) {
+                m_surface->setShaderType(QPainterVideoSurface::GlslShader);
+            } else {
+                m_surface->setShaderType(QPainterVideoSurface::FragmentProgramShader);
+            }
+        }
+#endif
+    }
+
+}
+
+void QRendererVideoWidgetBackend::formatChanged(const QVideoSurfaceFormat &format)
+{
+    m_nativeSize = format.sizeHint();
+
+    updateRects();
+
+    m_widget->updateGeometry();
+    m_widget->update();
+}
+
+void QRendererVideoWidgetBackend::frameChanged()
+{
+    m_widget->update(m_boundingRect);
+}
+
+void QRendererVideoWidgetBackend::updateRects()
+{
+    QRect rect = m_widget->rect();
+
+    if (m_nativeSize.isEmpty()) {
+        m_boundingRect = QRect();
+    } else if (m_aspectRatioMode == Qt::IgnoreAspectRatio) {
+        m_boundingRect = rect;
+        m_sourceRect = QRectF(0, 0, 1, 1);
+    } else if (m_aspectRatioMode == Qt::KeepAspectRatio) {
+        QSize size = m_nativeSize;
+        size.scale(rect.size(), Qt::KeepAspectRatio);
+
+        m_boundingRect = QRect(0, 0, size.width(), size.height());
+        m_boundingRect.moveCenter(rect.center());
+
+        m_sourceRect = QRectF(0, 0, 1, 1);
+    } else if (m_aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
+        m_boundingRect = rect;
+
+        QSizeF size = rect.size();
+        size.scale(m_nativeSize, Qt::KeepAspectRatio);
+
+        m_sourceRect = QRectF(
+                0, 0, size.width() / m_nativeSize.width(), size.height() / m_nativeSize.height());
+        m_sourceRect.moveCenter(QPointF(0.5, 0.5));
+    }
+}
+
+QWindowVideoWidgetBackend::QWindowVideoWidgetBackend(QVideoWindowControl *control, QWidget *widget)
+    : m_windowControl(control)
+    , m_widget(widget)
+    , m_aspectRatioMode(Qt::KeepAspectRatio)
+{
+    connect(control, SIGNAL(brightnessChanged(int)), m_widget, SLOT(_q_brightnessChanged(int)));
+    connect(control, SIGNAL(contrastChanged(int)), m_widget, SLOT(_q_contrastChanged(int)));
+    connect(control, SIGNAL(hueChanged(int)), m_widget, SLOT(_q_hueChanged(int)));
+    connect(control, SIGNAL(saturationChanged(int)), m_widget, SLOT(_q_saturationChanged(int)));
+    connect(control, SIGNAL(fullScreenChanged(bool)), m_widget, SLOT(_q_fullScreenChanged(bool)));
+    connect(control, SIGNAL(nativeSizeChanged()), m_widget, SLOT(_q_dimensionsChanged()));
+}
+
+QWindowVideoWidgetBackend::~QWindowVideoWidgetBackend()
+{
+}
+
+void QWindowVideoWidgetBackend::setBrightness(int brightness)
+{
+    m_windowControl->setBrightness(brightness);
+}
+
+void QWindowVideoWidgetBackend::setContrast(int contrast)
+{
+    m_windowControl->setContrast(contrast);
+}
+
+void QWindowVideoWidgetBackend::setHue(int hue)
+{
+    m_windowControl->setHue(hue);
+}
+
+void QWindowVideoWidgetBackend::setSaturation(int saturation)
+{
+    m_windowControl->setSaturation(saturation);
+}
+
+void QWindowVideoWidgetBackend::setFullScreen(bool fullScreen)
+{
+    m_windowControl->setFullScreen(fullScreen);
+}
+
+Qt::AspectRatioMode QWindowVideoWidgetBackend::aspectRatioMode() const
+{
+    return m_windowControl->aspectRatioMode();
+}
+
+void QWindowVideoWidgetBackend::setAspectRatioMode(Qt::AspectRatioMode mode)
+{
+    m_windowControl->setAspectRatioMode(mode);
+}
+
+QSize QWindowVideoWidgetBackend::sizeHint() const
+{
+    return m_windowControl->nativeSize();
+}
+
+void QWindowVideoWidgetBackend::showEvent()
+{
+    m_windowControl->setWinId(m_widget->winId());
+
+    m_windowControl->setDisplayRect(m_widget->rect());
+}
+
+void QWindowVideoWidgetBackend::hideEvent(QHideEvent *)
+{
+}
+
+void QWindowVideoWidgetBackend::moveEvent(QMoveEvent *)
+{
+    m_windowControl->setDisplayRect(m_widget->rect());
+}
+
+void QWindowVideoWidgetBackend::resizeEvent(QResizeEvent *)
+{
+    m_windowControl->setDisplayRect(m_widget->rect());
+}
+
+void QWindowVideoWidgetBackend::paintEvent(QPaintEvent *event)
+{
+    if (m_widget->testAttribute(Qt::WA_OpaquePaintEvent)) {
+        QPainter painter(m_widget);
+
+        painter.fillRect(event->rect(), m_widget->palette().window());
+    }
+
+    m_windowControl->repaint();
+
+    event->accept();
+}
+
+void QVideoWidgetPrivate::setCurrentControl(QVideoWidgetControlInterface *control)
+{
+    if (currentControl != control) {
+        currentControl = control;
+
+        currentControl->setBrightness(brightness);
+        currentControl->setContrast(contrast);
+        currentControl->setHue(hue);
+        currentControl->setSaturation(saturation);
+        currentControl->setAspectRatioMode(aspectRatioMode);
+    }
+}
+
+void QVideoWidgetPrivate::show()
+{
+    if (outputControl) {
+        if (widgetBackend != 0) {
+            setCurrentControl(widgetBackend);
+            outputControl->setOutput(QVideoOutputControl::WidgetOutput);
+        } else if (windowBackend != 0 && (q_func()->window() == 0
+                || !q_func()->window()->testAttribute(Qt::WA_DontShowOnScreen))) {
+            windowBackend->showEvent();
+            currentBackend = windowBackend;
+            setCurrentControl(windowBackend);
+            outputControl->setOutput(QVideoOutputControl::WindowOutput);
+        } else if (rendererBackend != 0) {
+            rendererBackend->showEvent();
+            currentBackend = rendererBackend;
+            setCurrentControl(rendererBackend);
+            outputControl->setOutput(QVideoOutputControl::RendererOutput);
+        } else {
+            outputControl->setOutput(QVideoOutputControl::NoOutput);
+        }
+    }
+}
+
+void QVideoWidgetPrivate::clearService()
+{
+    if (service) {
+        QObject::disconnect(service, SIGNAL(destroyed()), q_func(), SLOT(_q_serviceDestroyed()));
+
+        if (outputControl)
+            outputControl->setOutput(QVideoOutputControl::NoOutput);
+
+        if (widgetBackend) {
+            QLayout *layout = q_func()->layout();
+
+            for (QLayoutItem *item = layout->takeAt(0); item; item = layout->takeAt(0)) {
+                item->widget()->setParent(0);
+                delete item;
+            }
+            delete layout;
+
+            delete widgetBackend;
+            widgetBackend = 0;
+        }
+
+        delete windowBackend;
+        windowBackend = 0;
+
+        if (rendererBackend) {
+            rendererBackend->clearSurface();
+
+            delete rendererBackend;
+            rendererBackend = 0;
+        }
+
+        currentBackend = 0;
+        currentControl = 0;
+        outputControl = 0;
+        service = 0;
+    }
+}
+
+void QVideoWidgetPrivate::_q_serviceDestroyed()
+{
+    if (widgetBackend) {
+        delete q_func()->layout();
+
+        delete widgetBackend;
+        widgetBackend = 0;
+    }
+
+    delete windowBackend;
+    windowBackend = 0;
+
+    delete rendererBackend;
+    rendererBackend = 0;
+
+    currentControl = 0;
+    currentBackend = 0;
+    outputControl = 0;
+    service = 0;
+}
+
+void QVideoWidgetPrivate::_q_mediaObjectDestroyed()
+{
+    mediaObject = 0;
+    clearService();
+}
+
+void QVideoWidgetPrivate::_q_brightnessChanged(int b)
+{
+    if (b != brightness)
+        emit q_func()->brightnessChanged(brightness = b);
+}
+
+void QVideoWidgetPrivate::_q_contrastChanged(int c)
+{
+    if (c != contrast)
+        emit q_func()->contrastChanged(contrast = c);
+}
+
+void QVideoWidgetPrivate::_q_hueChanged(int h)
+{
+    if (h != hue)
+        emit q_func()->hueChanged(hue = h);
+}
+
+void QVideoWidgetPrivate::_q_saturationChanged(int s)
+{
+    if (s != saturation)
+        emit q_func()->saturationChanged(saturation = s);
+}
+
+
+void QVideoWidgetPrivate::_q_fullScreenChanged(bool fullScreen)
+{
+    if (!fullScreen && q_func()->isFullScreen())
+        q_func()->showNormal();
+}
+
+void QVideoWidgetPrivate::_q_dimensionsChanged()
+{
+    q_func()->updateGeometry();
+    q_func()->update();
+}
+
+/*!
+    \class QVideoWidget
+    \preliminary
+    \since 4.7
+    \brief The QVideoWidget class provides a widget which presents video
+    produced by a media object.
+    \ingroup multimedia
+
+    Attaching a QVideoWidget to a QMediaObject allows it to display the
+    video or image output of that media object.  A QVideoWidget is attached
+    to media object by passing a pointer to the QMediaObject in its
+    constructor, and detached by destroying the QVideoWidget.
+
+    \code
+        player = new QMediaPlayer;
+
+        widget = new QVideoWidget(player);
+        widget->show();
+
+        player->setMedia(QUrl("http://example.com/movie.mp4"));
+        player->play();
+    \endcode
+
+    \bold {Note}: Only a single display output can be attached to a media
+    object at one time.
+
+    \sa QMediaObject, QMediaPlayer, QGraphicsVideoItem
+*/
+
+/*!
+    Constructs a new video widget.
+
+    The \a parent is passed to QWidget.
+*/
+QVideoWidget::QVideoWidget(QWidget *parent)
+    : QWidget(parent, 0)
+    , d_ptr(new QVideoWidgetPrivate)
+{
+    d_ptr->q_ptr = this;
+}
+
+/*!
+    Destroys a video widget.
+*/
+QVideoWidget::~QVideoWidget()
+{
+    setMediaObject(0);
+    delete d_ptr;
+}
+
+/*!
+    \property QVideoWidget::mediaObject
+    \brief the media object which provides the video displayed by a widget.
+*/
+
+QMediaObject *QVideoWidget::mediaObject() const
+{
+    return d_func()->mediaObject;
+}
+
+void QVideoWidget::setMediaObject(QMediaObject *object)
+{
+    Q_D(QVideoWidget);
+
+    if (object == d->mediaObject)
+        return;
+
+    if (d->mediaObject) {
+        disconnect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
+        d->mediaObject->unbind(this);
+    }
+
+    d->clearService();
+
+    d->mediaObject = object;
+
+    if (d->mediaObject) {
+        d->service = d->mediaObject->service();
+
+        connect(d->mediaObject, SIGNAL(destroyed()), this, SLOT(_q_mediaObjectDestroyed()));
+        d->mediaObject->bind(this);
+    }
+
+    if (d->service) {
+        connect(d->service, SIGNAL(destroyed()), SLOT(_q_serviceDestroyed()));
+
+        d->outputControl = qobject_cast<QVideoOutputControl *>(
+                d->service->control(QVideoOutputControl_iid));
+
+        QVideoWidgetControl *widgetControl = qobject_cast<QVideoWidgetControl *>(
+                d->service->control(QVideoWidgetControl_iid));
+
+        if (widgetControl != 0) {
+            d->widgetBackend = new QVideoWidgetControlBackend(widgetControl, this);
+        } else {
+            QVideoWindowControl *windowControl = qobject_cast<QVideoWindowControl *>(
+                    d->service->control(QVideoWindowControl_iid));
+
+            if (windowControl != 0)
+                d->windowBackend = new QWindowVideoWidgetBackend(windowControl, this);
+
+            QVideoRendererControl *rendererControl = qobject_cast<QVideoRendererControl *>(
+                    d->service->control(QVideoRendererControl_iid));
+
+            if (rendererControl != 0)
+                d->rendererBackend = new QRendererVideoWidgetBackend(rendererControl, this);
+        }
+
+        if (isVisible())
+            d->show();
+    }
+}
+
+/*!
+    \property QVideoWidget::aspectRatioMode
+    \brief how video is scaled with respect to its aspect ratio.
+*/
+
+Qt::AspectRatioMode QVideoWidget::aspectRatioMode() const
+{
+    return d_func()->aspectRatioMode;
+}
+
+void QVideoWidget::setAspectRatioMode(Qt::AspectRatioMode mode)
+{
+    Q_D(QVideoWidget);
+
+    if (d->currentControl) {
+        d->currentControl->setAspectRatioMode(mode);
+        d->aspectRatioMode = d->currentControl->aspectRatioMode();
+    } else {
+        d->aspectRatioMode = mode;
+    }
+}
+
+/*!
+    \property QVideoWidget::fullScreen
+    \brief whether video display is confined to a window or is fullScreen.
+*/
+
+void QVideoWidget::setFullScreen(bool fullScreen)
+{
+    Q_D(QVideoWidget);
+
+    if (fullScreen) {
+        Qt::WindowFlags flags = windowFlags();
+
+        d->nonFullScreenFlags = flags & (Qt::Window | Qt::SubWindow);
+        flags |= Qt::Window;
+        flags &= ~Qt::SubWindow;
+        setWindowFlags(flags);
+        
+        showFullScreen();
+    } else {
+        showNormal();
+    }
+}
+
+/*!
+    \fn QVideoWidget::fullScreenChanged(bool fullScreen)
+
+    Signals that the \a fullScreen mode of a video widget has changed.
+
+    \sa fullScreen
+*/
+
+/*!
+    \property QVideoWidget::brightness
+    \brief an adjustment to the brightness of displayed video.
+
+    Valid brightness values range between -100 and 100, the default is 0.
+*/
+
+int QVideoWidget::brightness() const
+{
+    return d_func()->brightness;
+}
+
+void QVideoWidget::setBrightness(int brightness)
+{
+    Q_D(QVideoWidget);
+
+    int boundedBrightness = qBound(-100, brightness, 100);
+
+    if (d->currentControl)
+        d->currentControl->setBrightness(boundedBrightness);
+    else if (d->brightness != boundedBrightness)
+        emit brightnessChanged(d->brightness = boundedBrightness);
+}
+
+/*!
+    \fn QVideoWidget::brightnessChanged(int brightness)
+
+    Signals that a video widgets's \a brightness adjustment has changed.
+
+    \sa brightness
+*/
+
+/*!
+    \property QVideoWidget::contrast
+    \brief an adjustment to the contrast of displayed video.
+
+    Valid contrast values range between -100 and 100, the default is 0.
+
+*/
+
+int QVideoWidget::contrast() const
+{
+    return d_func()->contrast;
+}
+
+void QVideoWidget::setContrast(int contrast)
+{
+    Q_D(QVideoWidget);
+
+    int boundedContrast = qBound(-100, contrast, 100);
+
+    if (d->currentControl)
+        d->currentControl->setContrast(boundedContrast);
+    else if (d->contrast != boundedContrast)
+        emit contrastChanged(d->contrast = boundedContrast);
+}
+
+/*!
+    \fn QVideoWidget::contrastChanged(int contrast)
+
+    Signals that a video widgets's \a contrast adjustment has changed.
+
+    \sa contrast
+*/
+
+/*!
+    \property QVideoWidget::hue
+    \brief an adjustment to the hue of displayed video.
+
+    Valid hue values range between -100 and 100, the default is 0.
+*/
+
+int QVideoWidget::hue() const
+{
+    return d_func()->hue;
+}
+
+void QVideoWidget::setHue(int hue)
+{
+    Q_D(QVideoWidget);
+
+    int boundedHue = qBound(-100, hue, 100);
+
+    if (d->currentControl)
+        d->currentControl->setHue(boundedHue);
+    else if (d->hue != boundedHue)
+        emit hueChanged(d->hue = boundedHue);
+}
+
+/*!
+    \fn QVideoWidget::hueChanged(int hue)
+
+    Signals that a video widgets's \a hue has changed.
+
+    \sa hue
+*/
+
+/*!
+    \property QVideoWidget::saturation
+    \brief an adjustment to the saturation of displayed video.
+
+    Valid saturation values range between -100 and 100, the default is 0.
+*/
+
+int QVideoWidget::saturation() const
+{
+    return d_func()->saturation;
+}
+
+void QVideoWidget::setSaturation(int saturation)
+{
+    Q_D(QVideoWidget);
+
+    int boundedSaturation = qBound(-100, saturation, 100);
+
+    if (d->currentControl)
+        d->currentControl->setSaturation(boundedSaturation);
+    else if (d->saturation != boundedSaturation)
+        emit saturationChanged(d->saturation = boundedSaturation);
+
+}
+
+/*!
+    \fn QVideoWidget::saturationChanged(int saturation)
+
+    Signals that a video widgets's \a saturation has changed.
+
+    \sa saturation
+*/
+
+/*!
+  Returns the size hint for the current back end,
+  if there is one, or else the size hint from QWidget.
+ */
+QSize QVideoWidget::sizeHint() const
+{
+    Q_D(const QVideoWidget);
+
+    if (d->currentBackend)
+        return d->currentBackend->sizeHint();
+    else
+        return QWidget::sizeHint();
+
+
+}
+
+/*!
+    \reimp
+    \internal
+ */
+bool QVideoWidget::event(QEvent *event)
+{
+    Q_D(QVideoWidget);
+
+    if (event->type() == QEvent::WindowStateChange) {
+        Qt::WindowFlags flags = windowFlags();
+
+        if (windowState() & Qt::WindowFullScreen) {
+            if (d->currentControl)
+                d->currentControl->setFullScreen(true);
+
+            if (!d->wasFullScreen)
+                emit fullScreenChanged(d->wasFullScreen = true);
+        } else {
+            if (d->currentControl)
+                d->currentControl->setFullScreen(false);
+
+            if (d->wasFullScreen) {
+                flags &= ~(Qt::Window | Qt::SubWindow); //clear the flags...
+                flags |= d->nonFullScreenFlags; //then we reset the flags (window and subwindow)
+                setWindowFlags(flags);
+
+                emit fullScreenChanged(d->wasFullScreen = false);
+            }
+        }
+    }
+    return QWidget::event(event);
+}
+
+/*!
+  Handles the show \a event.
+ */
+void QVideoWidget::showEvent(QShowEvent *event)
+{
+    Q_D(QVideoWidget);
+
+    QWidget::showEvent(event);
+
+    d->show();
+
+}
+
+/*!
+
+  Handles the hide \a event.
+*/
+void QVideoWidget::hideEvent(QHideEvent *event)
+{
+    Q_D(QVideoWidget);
+
+    if (d->currentBackend)
+        d->currentBackend->hideEvent(event);
+
+    QWidget::hideEvent(event);
+}
+
+/*!
+  Handles the resize \a event.
+ */
+void QVideoWidget::resizeEvent(QResizeEvent *event)
+{
+    Q_D(QVideoWidget);
+
+    QWidget::resizeEvent(event);
+
+    if (d->currentBackend)
+        d->currentBackend->resizeEvent(event);
+}
+
+/*!
+  Handles the move \a event.
+ */
+void QVideoWidget::moveEvent(QMoveEvent *event)
+{
+    Q_D(QVideoWidget);
+
+    if (d->currentBackend)
+        d->currentBackend->moveEvent(event);
+}
+
+/*!
+  Handles the paint \a event.
+ */
+void QVideoWidget::paintEvent(QPaintEvent *event)
+{
+    Q_D(QVideoWidget);
+
+    if (d->currentBackend) {
+        d->currentBackend->paintEvent(event);
+    } else if (testAttribute(Qt::WA_OpaquePaintEvent)) {
+        QPainter painter(this);
+
+        painter.fillRect(event->rect(), palette().window());
+    }
+}
+
+#include "moc_qvideowidget.cpp"
+#include "moc_qvideowidget_p.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qvideowidget.h b/src/multimedia/mediaservices/base/qvideowidget.h
new file mode 100644
index 0000000..080e19c
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideowidget.h
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEOWIDGET_H
+#define QVIDEOWIDGET_H
+
+#include <QtGui/qwidget.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QMediaObject;
+
+class QVideoWidgetPrivate;
+class Q_MULTIMEDIA_EXPORT QVideoWidget : public QWidget
+{
+    Q_OBJECT
+    Q_PROPERTY(QMediaObject* mediaObject READ mediaObject WRITE setMediaObject)
+    Q_PROPERTY(bool fullScreen READ isFullScreen WRITE setFullScreen NOTIFY fullScreenChanged)
+    Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode WRITE setAspectRatioMode NOTIFY aspectRatioModeChanged)
+    Q_PROPERTY(int brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged)
+    Q_PROPERTY(int contrast READ contrast WRITE setContrast NOTIFY contrastChanged)
+    Q_PROPERTY(int hue READ hue WRITE setHue NOTIFY hueChanged)
+    Q_PROPERTY(int saturation READ saturation WRITE setSaturation NOTIFY saturationChanged)
+
+public:
+    QVideoWidget(QWidget *parent = 0);
+    ~QVideoWidget();   
+
+    QMediaObject *mediaObject() const;
+    void setMediaObject(QMediaObject *object);
+
+#ifdef Q_QDOC
+    bool isFullScreen() const;
+#endif
+
+    Qt::AspectRatioMode aspectRatioMode() const;
+
+    int brightness() const;
+    int contrast() const;
+    int hue() const;
+    int saturation() const;
+
+    QSize sizeHint() const;
+
+public Q_SLOTS:
+    void setFullScreen(bool fullScreen);
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+    void setBrightness(int brightness);
+    void setContrast(int contrast);
+    void setHue(int hue);
+    void setSaturation(int saturation);
+
+Q_SIGNALS:
+    void fullScreenChanged(bool fullScreen);
+    void brightnessChanged(int brightness);
+    void contrastChanged(int contrast);
+    void hueChanged(int hue);
+    void saturationChanged(int saturation);
+
+protected:
+    bool event(QEvent *event);
+    void showEvent(QShowEvent *event);
+    void hideEvent(QHideEvent *event);
+    void resizeEvent(QResizeEvent *event);
+    void moveEvent(QMoveEvent *event);
+    void paintEvent(QPaintEvent *event);
+
+protected:
+    QVideoWidgetPrivate *d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(QVideoWidget)
+    Q_PRIVATE_SLOT(d_func(), void _q_serviceDestroyed())
+    Q_PRIVATE_SLOT(d_func(), void _q_mediaObjectDestroyed())
+    Q_PRIVATE_SLOT(d_func(), void _q_brightnessChanged(int))
+    Q_PRIVATE_SLOT(d_func(), void _q_contrastChanged(int))
+    Q_PRIVATE_SLOT(d_func(), void _q_hueChanged(int))
+    Q_PRIVATE_SLOT(d_func(), void _q_saturationChanged(int))
+    Q_PRIVATE_SLOT(d_func(), void _q_fullScreenChanged(bool))
+    Q_PRIVATE_SLOT(d_func(), void _q_dimensionsChanged());
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qvideowidget_p.h b/src/multimedia/mediaservices/base/qvideowidget_p.h
new file mode 100644
index 0000000..4f67117
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideowidget_p.h
@@ -0,0 +1,271 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEOWIDGET_P_H
+#define QVIDEOWIDGET_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtMediaservices/qvideowidget.h>
+
+#ifndef QT_NO_OPENGL
+#include <QGLWidget>
+#endif
+
+#include "qpaintervideosurface_p.h"
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+
+class QVideoWidgetControlInterface
+{
+public:
+    virtual ~QVideoWidgetControlInterface() {}
+
+    virtual void setBrightness(int brightness) = 0;
+    virtual void setContrast(int contrast) = 0;
+    virtual void setHue(int hue) = 0;
+    virtual void setSaturation(int saturation) = 0;
+
+    virtual void setFullScreen(bool fullScreen) = 0;
+
+    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
+    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
+};
+
+class QVideoWidgetBackend : public QObject, public QVideoWidgetControlInterface
+{
+    Q_OBJECT
+
+public:
+    virtual QSize sizeHint() const = 0;
+
+    virtual void showEvent() = 0;
+    virtual void hideEvent(QHideEvent *event) = 0;
+    virtual void resizeEvent(QResizeEvent *event) = 0;
+    virtual void moveEvent(QMoveEvent *event) = 0;
+    virtual void paintEvent(QPaintEvent *event) = 0;
+};
+
+class QVideoWidgetControl;
+
+class QVideoWidgetControlBackend : public QObject, public QVideoWidgetControlInterface
+{
+    Q_OBJECT
+public:
+    QVideoWidgetControlBackend(QVideoWidgetControl *control, QWidget *widget);
+
+    void setBrightness(int brightness);
+    void setContrast(int contrast);
+    void setHue(int hue);
+    void setSaturation(int saturation);
+
+    void setFullScreen(bool fullScreen);
+
+    Qt::AspectRatioMode aspectRatioMode() const;
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+
+private:
+    QVideoWidgetControl *m_widgetControl;
+};
+
+
+class QVideoRendererControl;
+
+class QRendererVideoWidgetBackend : public QVideoWidgetBackend
+{
+    Q_OBJECT
+public:
+    QRendererVideoWidgetBackend(QVideoRendererControl *control, QWidget *widget);
+    ~QRendererVideoWidgetBackend();
+
+    void clearSurface();
+
+    void setBrightness(int brightness);
+    void setContrast(int contrast);
+    void setHue(int hue);
+    void setSaturation(int saturation);
+
+    void setFullScreen(bool fullScreen);
+
+    Qt::AspectRatioMode aspectRatioMode() const;
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+
+    QSize sizeHint() const;
+
+    void showEvent();
+    void hideEvent(QHideEvent *event);
+    void resizeEvent(QResizeEvent *event);
+    void moveEvent(QMoveEvent *event);
+    void paintEvent(QPaintEvent *event);
+
+Q_SIGNALS:
+    void fullScreenChanged(bool fullScreen);
+    void brightnessChanged(int brightness);
+    void contrastChanged(int contrast);
+    void hueChanged(int hue);
+    void saturationChanged(int saturation);
+
+private Q_SLOTS:
+    void formatChanged(const QVideoSurfaceFormat &format);
+    void frameChanged();
+
+private:
+    void updateRects();
+
+    QVideoRendererControl *m_rendererControl;
+    QWidget *m_widget;
+    QPainterVideoSurface *m_surface;
+    Qt::AspectRatioMode m_aspectRatioMode;
+    QRect m_boundingRect;
+    QRectF m_sourceRect;
+    QSize m_nativeSize;
+    bool m_updatePaintDevice;
+};
+
+class QVideoWindowControl;
+
+class QWindowVideoWidgetBackend : public QVideoWidgetBackend
+{
+    Q_OBJECT
+public:
+    QWindowVideoWidgetBackend(QVideoWindowControl *control, QWidget *widget);
+    ~QWindowVideoWidgetBackend();
+
+    void setBrightness(int brightness);
+    void setContrast(int contrast);
+    void setHue(int hue);
+    void setSaturation(int saturation);
+
+   void setFullScreen(bool fullScreen);
+
+    Qt::AspectRatioMode aspectRatioMode() const;
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+
+    QSize sizeHint() const;
+
+    void showEvent();
+    void hideEvent(QHideEvent *event);
+    void resizeEvent(QResizeEvent *event);
+    void moveEvent(QMoveEvent *event);
+    void paintEvent(QPaintEvent *event);
+
+private:
+    QVideoWindowControl *m_windowControl;
+    QWidget *m_widget;
+    Qt::AspectRatioMode m_aspectRatioMode;
+    QSize m_pixelAspectRatio;
+};
+
+class QMediaService;
+class QVideoOutputControl;
+
+class QVideoWidgetPrivate
+{
+    Q_DECLARE_PUBLIC(QVideoWidget)
+public:
+    QVideoWidgetPrivate()
+        : q_ptr(0)
+        , mediaObject(0)
+        , service(0)
+        , outputControl(0)
+        , widgetBackend(0)
+        , windowBackend(0)
+        , rendererBackend(0)
+        , currentControl(0)
+        , currentBackend(0)
+        , brightness(0)
+        , contrast(0)
+        , hue(0)
+        , saturation(0)
+        , aspectRatioMode(Qt::KeepAspectRatio)
+        , nonFullScreenFlags(0)
+        , wasFullScreen(false)
+    {
+    }
+
+    QVideoWidget *q_ptr;
+    QMediaObject *mediaObject;
+    QMediaService *service;
+    QVideoOutputControl *outputControl;
+    QVideoWidgetControlBackend *widgetBackend;
+    QWindowVideoWidgetBackend *windowBackend;
+    QRendererVideoWidgetBackend *rendererBackend;
+    QVideoWidgetControlInterface *currentControl;
+    QVideoWidgetBackend *currentBackend;
+    int brightness;
+    int contrast;
+    int hue;
+    int saturation;
+    Qt::AspectRatioMode aspectRatioMode;
+    Qt::WindowFlags nonFullScreenFlags;
+    bool wasFullScreen;
+
+    void setCurrentControl(QVideoWidgetControlInterface *control);
+    void show();
+    void clearService();
+
+    void _q_serviceDestroyed();
+    void _q_mediaObjectDestroyed();
+    void _q_brightnessChanged(int brightness);
+    void _q_contrastChanged(int contrast);
+    void _q_hueChanged(int hue);
+    void _q_saturationChanged(int saturation);
+    void _q_fullScreenChanged(bool fullScreen);
+    void _q_dimensionsChanged();
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp b/src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp
new file mode 100644
index 0000000..1cc7eaf
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp
@@ -0,0 +1,235 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qvideowidgetcontrol.h>
+#include "qmediacontrol_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QVideoWidgetControl
+    \preliminary
+    \since 4.7
+    \brief The QVideoWidgetControl class provides a media control which
+    implements a video widget.
+
+    \ingroup multimedia-serv
+
+    The videoWidget() property of QVideoWidgetControl provides a pointer to
+    a video widget implemented by the control's media service.  This widget
+    is owned by the media service and so care should be taken not to delete it.
+
+    \code
+    QVideoWidgetControl *widgetControl = mediaService->control<QVideoWidgetControl *>();
+
+    layout->addWidget(widgetControl->widget());
+    \endcode
+
+    QVideoWidgetControl is one of number of possible video output controls,
+    in order to receive video it must be made the active video output
+    control by setting the output property of QVideoOutputControl to \l {QVideoOutputControl::WidgetOutput}{WidgetOutput}. Consequently any
+    QMediaService that implements QVideoWidgetControl must also implement
+    QVideoOutputControl.
+
+    The interface name of QVideoWidgetControl is \c com.nokia.Qt.QVideoWidgetControl/1.0 as
+    defined in QVideoWidgetControl_iid.
+
+    \sa QMediaService::control(), QVideoOutputControl, QVideoWidget
+*/
+
+/*!
+    \macro QVideoWidgetControl_iid
+
+    \c com.nokia.Qt.QVideoWidgetControl/1.0
+
+    Defines the interface name of the QVideoWidgetControl class.
+
+    \relates QVideoWidgetControl
+*/
+
+/*!
+    Constructs a new video widget control with the given \a parent.
+*/
+QVideoWidgetControl::QVideoWidgetControl(QObject *parent)
+    :QMediaControl(parent)
+{
+}
+
+/*!
+    Destroys a video widget control.
+*/
+QVideoWidgetControl::~QVideoWidgetControl()
+{
+}
+
+/*!
+    \fn QVideoWidgetControl::isFullScreen() const
+
+    Returns true if the video is shown using the complete screen.
+*/
+
+/*!
+    \fn QVideoWidgetControl::setFullScreen(bool fullScreen)
+
+    Sets whether a video widget is in \a fullScreen mode.
+*/
+
+/*!
+    \fn QVideoWidgetControl::fullScreenChanged(bool fullScreen)
+
+    Signals that the \a fullScreen state of a video widget has changed.
+*/
+
+/*!
+    \fn QVideoWidgetControl::aspectRatioMode() const
+
+    Returns how video is scaled to fit the widget with respect to its aspect ratio.
+*/
+
+/*!
+    \fn QVideoWidgetControl::setAspectRatioMode(Qt::AspectRatioMode mode)
+
+    Sets the aspect ratio \a mode which determines how video is scaled to the fit the widget with
+    respect to its aspect ratio.
+*/
+
+/*!
+    \fn QVideoWidgetControl::brightness() const
+
+    Returns the brightness adjustment applied to a video.
+
+    Valid brightness values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWidgetControl::setBrightness(int brightness)
+
+    Sets a \a brightness adjustment for a video.
+
+    Valid brightness values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWidgetControl::brightnessChanged(int brightness)
+
+    Signals that a video widget's \a brightness adjustment has changed.
+*/
+
+/*!
+    \fn QVideoWidgetControl::contrast() const
+
+    Returns the contrast adjustment applied to a video.
+
+    Valid contrast values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWidgetControl::setContrast(int contrast)
+
+    Sets the contrast adjustment for a video widget to \a contrast.
+
+    Valid contrast values range between -100 and 100, the default is 0.
+*/
+
+
+/*!
+    \fn QVideoWidgetControl::contrastChanged(int contrast)
+
+    Signals that a video widget's \a contrast adjustment has changed.
+*/
+
+/*!
+    \fn QVideoWidgetControl::hue() const
+
+    Returns the hue adjustment applied to a video widget.
+
+    Value hue values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWidgetControl::setHue(int hue)
+
+    Sets a \a hue adjustment for a video widget.
+
+    Valid hue values range between -100 and 100, the default is 0.
+*/
+
+
+/*!
+    \fn QVideoWidgetControl::hueChanged(int hue)
+
+    Signals that a video widget's \a hue adjustment has changed.
+*/
+
+/*!
+    \fn QVideoWidgetControl::saturation() const
+
+    Returns the saturation adjustment applied to a video widget.
+
+    Value saturation values range between -100 and 100, the default is 0.
+*/
+
+
+/*!
+    \fn QVideoWidgetControl::setSaturation(int saturation)
+
+    Sets a \a saturation adjustment for a video widget.
+
+    Valid saturation values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWidgetControl::saturationChanged(int saturation)
+
+    Signals that a video widget's \a saturation adjustment has changed.
+*/
+
+/*!
+    \fn QVideoWidgetControl::videoWidget()
+
+    Returns the QWidget.
+*/
+
+#include "moc_qvideowidgetcontrol.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qvideowidgetcontrol.h b/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
new file mode 100644
index 0000000..a8105ac
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEOWIDGETCONTROL_H
+#define QVIDEOWIDGETCONTROL_H
+
+#include <QtGui/qwidget.h>
+
+#include <QtMediaservices/qvideowidget.h>
+#include <QtMediaservices/qmediacontrol.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QVideoWidgetControlPrivate;
+
+class Q_MULTIMEDIA_EXPORT QVideoWidgetControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    virtual ~QVideoWidgetControl();
+
+    virtual QWidget *videoWidget() = 0;
+
+    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
+    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
+
+    virtual bool isFullScreen() const = 0;
+    virtual void setFullScreen(bool fullScreen) = 0;
+
+    virtual int brightness() const = 0;
+    virtual void setBrightness(int brightness) = 0;
+
+    virtual int contrast() const = 0;
+    virtual void setContrast(int contrast) = 0;
+
+    virtual int hue() const = 0;
+    virtual void setHue(int hue) = 0;
+
+    virtual int saturation() const = 0;
+    virtual void setSaturation(int saturation) = 0;
+
+Q_SIGNALS:
+    void fullScreenChanged(bool fullScreen);
+    void brightnessChanged(int brightness);
+    void contrastChanged(int contrast);
+    void hueChanged(int hue);
+    void saturationChanged(int saturation);
+
+protected:
+    QVideoWidgetControl(QObject *parent = 0);
+};
+
+#define QVideoWidgetControl_iid "com.nokia.Qt.QVideoWidgetControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QVideoWidgetControl, QVideoWidgetControl_iid)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/base/qvideowindowcontrol.cpp b/src/multimedia/mediaservices/base/qvideowindowcontrol.cpp
new file mode 100644
index 0000000..f73b187
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideowindowcontrol.cpp
@@ -0,0 +1,275 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qvideowindowcontrol.h>
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QVideoWindowControl
+    \preliminary
+    \since 4.7
+    \ingroup multimedia-serv
+    \brief The QVideoWindowControl class provides a media control for rendering video to a window.
+
+
+    The winId() property QVideoWindowControl allows a platform specific
+    window ID to be set as the video render target of a QMediaService.  The
+    displayRect() property is used to set the region of the window the
+    video should be rendered to, and the aspectRatioMode() property
+    indicates how the video should be scaled to fit the displayRect().
+
+    \code
+    QVideoWindowControl *windowControl = mediaService->control<QVideoWindowControl *>();
+    windowControl->setWinId(widget->winId());
+    windowControl->setDisplayRect(widget->rect());
+    windowControl->setAspectRatioMode(Qt::KeepAspectRatio);
+    \endcode
+
+    QVideoWindowControl is one of number of possible video output controls,
+    in order to receive video it must be made the active video output
+    control by setting the output property of QVideoOutputControl to \l {QVideoOutputControl::WindowOutput}{WindowOutput}.
+    Consequently any QMediaService that implements QVideoWindowControl must
+    also implement QVideoOutputControl.
+
+    \code
+    QVideoOutputControl *outputControl = mediaService->control<QVideoOutputControl *>();
+    outputControl->setOutput(QVideoOutputControl::WindowOutput);
+    \endcode
+
+    The interface name of QVideoWindowControl is \c com.nokia.Qt.QVideoWindowControl/1.0 as
+    defined in QVideoWindowControl_iid.
+
+    \sa QMediaService::control(), QVideoOutputControl, QVideoWidget
+*/
+
+/*!
+    \macro QVideoWindowControl_iid
+
+    \c com.nokia.Qt.QVideoWindowControl/1.0
+
+    Defines the interface name of the QVideoWindowControl class.
+
+    \relates QVideoWindowControl
+*/
+
+/*!
+    Constructs a new video window control with the given \a parent.
+*/
+QVideoWindowControl::QVideoWindowControl(QObject *parent)
+    : QMediaControl(parent)
+{
+}
+
+/*!
+    Destroys a video window control.
+*/
+QVideoWindowControl::~QVideoWindowControl()
+{
+}
+
+/*!
+    \fn QVideoWindowControl::winId() const
+
+    Returns the ID of the window a video overlay end point renders to.
+*/
+
+/*!
+    \fn QVideoWindowControl::setWinId(WId id)
+
+    Sets the \a id of the window a video overlay end point renders to.
+*/
+
+/*!
+    \fn QVideoWindowControl::displayRect() const
+    Returns the sub-rect of a window where video is displayed.
+*/
+
+/*!
+    \fn QVideoWindowControl::setDisplayRect(const QRect &rect)
+    Sets the sub-\a rect of a window where video is displayed.
+*/
+
+/*!
+    \fn QVideoWindowControl::isFullScreen() const
+
+    Identifies if a video overlay is a fullScreen overlay.
+
+    Returns true if the video overlay is fullScreen, and false otherwise.
+*/
+
+/*!
+    \fn QVideoWindowControl::setFullScreen(bool fullScreen)
+
+    Sets whether a video overlay is a \a fullScreen overlay.
+*/
+
+/*!
+    \fn QVideoWindowControl::fullScreenChanged(bool fullScreen)
+
+    Signals that the \a fullScreen state of a video overlay has changed.
+*/
+
+/*!
+    \fn QVideoWindowControl::repaint()
+
+    Repaints the last frame.
+*/
+
+/*!
+    \fn QVideoWindowControl::nativeSize() const
+
+    Returns a suggested size for the video display based on the resolution and aspect ratio of the
+    video.
+*/
+
+/*!
+    \fn QVideoWindowControl::nativeSizeChanged()
+
+    Signals that the native dimensions of the video have changed.
+*/
+
+
+/*!
+    \fn QVideoWindowControl::aspectRatioMode() const
+
+    Returns how video is scaled to fit the display region with respect to its aspect ratio.
+*/
+
+/*!
+    \fn QVideoWindowControl::setAspectRatioMode(Qt::AspectRatioMode mode)
+
+    Sets the aspect ratio \a mode which determines how video is scaled to the fit the display region
+    with respect to its aspect ratio.
+*/
+
+/*!
+    \fn QVideoWindowControl::brightness() const
+
+    Returns the brightness adjustment applied to a video overlay.
+
+    Valid brightness values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::setBrightness(int brightness)
+
+    Sets a \a brightness adjustment for a video overlay.
+
+    Valid brightness values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::brightnessChanged(int brightness)
+
+    Signals that a video overlay's \a brightness adjustment has changed.
+*/
+
+/*!
+    \fn QVideoWindowControl::contrast() const
+
+    Returns the contrast adjustment applied to a video overlay.
+
+    Valid contrast values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::setContrast(int contrast)
+
+    Sets the \a contrast adjustment for a video overlay.
+
+    Valid contrast values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::contrastChanged(int contrast)
+
+    Signals that a video overlay's \a contrast adjustment has changed.
+*/
+
+/*!
+    \fn QVideoWindowControl::hue() const
+
+    Returns the hue adjustment applied to a video overlay.
+
+    Value hue values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::setHue(int hue)
+
+    Sets a \a hue adjustment for a video overlay.
+
+    Valid hue values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::hueChanged(int hue)
+
+    Signals that a video overlay's \a hue adjustment has changed.
+*/
+
+/*!
+    \fn QVideoWindowControl::saturation() const
+
+    Returns the saturation adjustment applied to a video overlay.
+
+    Value saturation values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::setSaturation(int saturation)
+    Sets a \a saturation adjustment for a video overlay.
+
+    Valid saturation values range between -100 and 100, the default is 0.
+*/
+
+/*!
+    \fn QVideoWindowControl::saturationChanged(int saturation)
+
+    Signals that a video overlay's \a saturation adjustment has changed.
+*/
+
+#include "moc_qvideowindowcontrol.cpp"
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/base/qvideowindowcontrol.h b/src/multimedia/mediaservices/base/qvideowindowcontrol.h
new file mode 100644
index 0000000..0fabce9
--- /dev/null
+++ b/src/multimedia/mediaservices/base/qvideowindowcontrol.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEOWINDOWCONTROL_H
+#define QVIDEOWINDOWCONTROL_H
+
+#include <QtGui/qwidget.h>
+
+#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaservices/qvideowidget.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class Q_MULTIMEDIA_EXPORT QVideoWindowControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    ~QVideoWindowControl();
+
+    virtual WId winId() const = 0;
+    virtual void setWinId(WId id) = 0;
+
+    virtual QRect displayRect() const = 0;
+    virtual void setDisplayRect(const QRect &rect) = 0;
+
+    virtual bool isFullScreen() const = 0;
+    virtual void setFullScreen(bool fullScreen) = 0;
+
+    virtual void repaint() = 0;
+
+    virtual QSize nativeSize() const = 0;
+
+    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
+    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
+
+    virtual int brightness() const = 0;
+    virtual void setBrightness(int brightness) = 0;
+
+    virtual int contrast() const = 0;
+    virtual void setContrast(int contrast) = 0;
+
+    virtual int hue() const = 0;
+    virtual void setHue(int hue) = 0;
+
+    virtual int saturation() const = 0;
+    virtual void setSaturation(int saturation) = 0;
+
+Q_SIGNALS:
+    void fullScreenChanged(bool fullScreen);
+    void brightnessChanged(int brightness);
+    void contrastChanged(int contrast);
+    void hueChanged(int hue);
+    void saturationChanged(int saturation);
+    void nativeSizeChanged();
+
+protected:
+    QVideoWindowControl(QObject *parent = 0);
+};
+
+#define QVideoWindowControl_iid "com.nokia.Qt.QVideoWindowControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QVideoWindowControl, QVideoWindowControl_iid)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/mediaservices/effects/effects.pri b/src/multimedia/mediaservices/effects/effects.pri
new file mode 100644
index 0000000..6307255
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/effects.pri
@@ -0,0 +1,26 @@
+
+
+unix:!mac {
+   contains(QT_CONFIG, pulseaudio) {
+        DEFINES += QT_MULTIMEDIA_PULSEAUDIO
+        HEADERS += $$PWD/qsoundeffect_pulse_p.h
+        SOURCES += $$PWD/qsoundeffect_pulse_p.cpp
+        QMAKE_CXXFLAGS += $$QT_CFLAGS_PULSEAUDIO
+        LIBS += $$QT_LIBS_PULSEAUDIO
+    } else {
+        DEFINES += QT_MULTIMEDIA_QMEDIAPLAYER
+        HEADERS += $$PWD/qsoundeffect_qmedia_p.h
+        SOURCES += $$PWD/qsoundeffect_qmedia_p.cpp
+    }
+} else {
+    HEADERS += $$PWD/qsoundeffect_qsound_p.h
+    SOURCES += $$PWD/qsoundeffect_qsound_p.cpp
+}
+
+HEADERS += \
+    $$PWD/qsoundeffect_p.h \
+    $$PWD/wavedecoder_p.h
+
+SOURCES += \
+    $$PWD/qsoundeffect.cpp \
+    $$PWD/wavedecoder_p.cpp
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect.cpp b/src/multimedia/mediaservices/effects/qsoundeffect.cpp
new file mode 100644
index 0000000..8a38103
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect.cpp
@@ -0,0 +1,207 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qsoundeffect_p.h"
+
+#if defined(QT_MULTIMEDIA_PULSEAUDIO)
+#include "qsoundeffect_pulse_p.h"
+#elif(QT_MULTIMEDIA_QMEDIAPLAYER)
+#include "qsoundeffect_qmedia_p.h"
+#else
+#include "qsoundeffect_qsound_p.h"
+#endif
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \qmlclass SoundEffect QSoundEffect
+    \since 4.7
+    \brief The SoundEffect element provides a way to play sound effects in qml.
+
+    This element is part of the \bold{Qt.multimedia 4.7} module.
+
+    The following example plays a wav file on mouse click.
+
+    \qml
+    import Qt 4.6
+    import Qt.multimedia 4.7
+
+    Item {
+        SoundEffect {
+            id: playSound
+            source: "test.wav"
+        }
+        MouseArea {
+            id: playArea
+            anchors.fill: parent
+            onPressed: {
+                playSound.play()
+            }
+        }
+    }
+    \endqml
+*/
+
+/*!
+    \qmlproperty QUrl SoundEffect::source
+
+    This property provides a way to control the sound to play.
+*/
+
+/*!
+    \qmlproperty int SoundEffect::loops
+
+    This property provides a way to control the number of times to repeat the sound on each play().
+*/
+
+/*!
+    \qmlproperty int SoundEffect::volume
+
+    This property provides a way to control the volume for playback.
+*/
+
+/*!
+    \qmlproperty bool SoundEffect::muted
+
+    This property provides a way to control muting.
+*/
+
+/*!
+    \qmlsignal SoundEffect::sourceChanged()
+
+    This handler is called when the source has changed.
+*/
+
+/*!
+    \qmlsignal SoundEffect::loopsChanged()
+
+    This handler is called when the number of loops has changes.
+*/
+
+/*!
+    \qmlsignal SoundEffect::volumeChanged()
+
+    This handler is called when the volume has changed.
+*/
+
+/*!
+    \qmlsignal SoundEffect::mutedChanged()
+
+    This handler is called when the mute state has changed.
+*/
+
+
+QSoundEffect::QSoundEffect(QObject *parent) :
+    QObject(parent)
+{
+    d = new QSoundEffectPrivate(this);
+    connect(d, SIGNAL(volumeChanged()), SIGNAL(volumeChanged()));
+    connect(d, SIGNAL(mutedChanged()), SIGNAL(mutedChanged()));
+}
+
+QSoundEffect::~QSoundEffect()
+{
+    d->deleteLater();
+}
+
+QUrl QSoundEffect::source() const
+{
+    return d->source();
+}
+
+void QSoundEffect::setSource(const QUrl &url)
+{
+    if (d->source() == url)
+        return;
+
+    d->setSource(url);
+
+    emit sourceChanged();
+}
+
+int QSoundEffect::loops() const
+{
+    return d->loopCount();
+}
+
+void QSoundEffect::setLoops(int loopCount)
+{
+    if (d->loopCount() == loopCount)
+        return;
+
+    d->setLoopCount(loopCount);
+    emit loopsChanged();
+}
+
+int QSoundEffect::volume() const
+{
+    return d->volume();
+}
+
+void QSoundEffect::setVolume(int volume)
+{
+    if (d->volume() == volume)
+        return;
+
+    d->setVolume(volume);
+    emit volumeChanged();
+}
+
+bool QSoundEffect::isMuted() const
+{
+    return d->isMuted();
+}
+
+void QSoundEffect::setMuted(bool muted)
+{
+    if (d->isMuted() == muted)
+        return;
+
+    d->setMuted(muted);
+    emit mutedChanged();
+}
+
+void QSoundEffect::play()
+{
+    d->play();
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_p.h
new file mode 100644
index 0000000..8c8985a
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_p.h
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_H
+#define QSOUNDEFFECT_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QSoundEffectPrivate;
+class Q_MULTIMEDIA_EXPORT QSoundEffect : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
+    Q_PROPERTY(int loops READ loops WRITE setLoops NOTIFY loopsChanged)
+    Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged)
+    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
+
+public:
+    explicit QSoundEffect(QObject *parent = 0);
+    ~QSoundEffect();
+
+    QUrl source() const;
+    void setSource(const QUrl &url);
+
+    int loops() const;
+    void setLoops(int loopCount);
+
+    int volume() const;
+    void setVolume(int volume);
+
+    bool isMuted() const;
+    void setMuted(bool muted);
+
+Q_SIGNALS:
+    void sourceChanged();
+    void loopsChanged();
+    void volumeChanged();
+    void mutedChanged();
+
+public Q_SLOTS:
+    void play();
+
+private:
+    Q_DISABLE_COPY(QSoundEffect)
+    QSoundEffectPrivate* d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+
+#endif // QSOUNDEFFECT_H
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
new file mode 100644
index 0000000..e834280
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
@@ -0,0 +1,499 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qcoreapplication.h>
+#include <QtMediaservices/qaudioformat.h>
+#include <QtNetwork>
+#include <QTime>
+
+#include "wavedecoder_p.h"
+
+#include "qsoundeffect_pulse_p.h"
+
+#if defined(Q_WS_MAEMO_5)
+#include <pulse/ext-stream-restore.h>
+#endif
+
+#include <unistd.h>
+
+// Less than ideal
+#define PA_SCACHE_ENTRY_SIZE_MAX (1024*1024*16)
+
+QT_BEGIN_NAMESPACE
+
+namespace
+{
+inline pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format)
+{
+    pa_sample_spec  spec;
+
+    spec.rate = format.frequency();
+    spec.channels = format.channels();
+
+    if (format.sampleSize() == 8)
+        spec.format = PA_SAMPLE_U8;
+    else if (format.sampleSize() == 16) {
+        switch (format.byteOrder()) {
+            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S16BE; break;
+            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S16LE; break;
+        }
+    }
+    else if (format.sampleSize() == 32) {
+        switch (format.byteOrder()) {
+            case QAudioFormat::BigEndian: spec.format = PA_SAMPLE_S32BE; break;
+            case QAudioFormat::LittleEndian: spec.format = PA_SAMPLE_S32LE; break;
+        }
+    }
+
+    return spec;
+}
+
+class PulseDaemon
+{
+public:
+    PulseDaemon():m_prepared(false)
+    {
+        prepare();
+    }
+
+    ~PulseDaemon()
+    {
+        if (m_prepared)
+            release();
+    }
+
+    inline void lock()
+    {
+        pa_threaded_mainloop_lock(m_mainLoop);
+    }
+
+    inline void unlock()
+    {
+        pa_threaded_mainloop_unlock(m_mainLoop);
+    }
+
+    inline pa_context *context() const
+    {
+        return m_context;
+    }
+
+    int volume()
+    {
+        return m_vol;
+    }
+
+private:
+    void prepare()
+    {
+        m_vol = 100;
+
+        m_mainLoop = pa_threaded_mainloop_new();
+        if (m_mainLoop == 0) {
+            qWarning("PulseAudioService: unable to create pulseaudio mainloop");
+            return;
+        }
+
+        if (pa_threaded_mainloop_start(m_mainLoop) != 0) {
+            qWarning("PulseAudioService: unable to start pulseaudio mainloop");
+            pa_threaded_mainloop_free(m_mainLoop);
+            return;
+        }
+
+        m_mainLoopApi = pa_threaded_mainloop_get_api(m_mainLoop);
+
+        lock();
+        m_context = pa_context_new(m_mainLoopApi, QString(QLatin1String("QtPulseAudio:%1")).arg(::getpid()).toAscii().constData());
+
+#if defined(Q_WS_MAEMO_5)
+        pa_context_set_state_callback(m_context, context_state_callback, this);
+#endif
+        if (m_context == 0) {
+            qWarning("PulseAudioService: Unable to create new pulseaudio context");
+            pa_threaded_mainloop_free(m_mainLoop);
+            return;
+        }
+
+        if (pa_context_connect(m_context, NULL, (pa_context_flags_t)0, NULL) < 0) {
+            qWarning("PulseAudioService: pa_context_connect() failed");
+            pa_context_unref(m_context);
+            pa_threaded_mainloop_free(m_mainLoop);
+            return;
+        }
+        unlock();
+
+        m_prepared = true;
+    }
+
+    void release()
+    {
+        if (!m_prepared) return;
+        pa_threaded_mainloop_stop(m_mainLoop);
+        pa_threaded_mainloop_free(m_mainLoop);
+        m_prepared = false;
+    }
+
+#if defined(Q_WS_MAEMO_5)
+    static void context_state_callback(pa_context *c, void *userdata)
+    {
+        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
+        switch (pa_context_get_state(c)) {
+            case PA_CONTEXT_CONNECTING:
+            case PA_CONTEXT_AUTHORIZING:
+            case PA_CONTEXT_SETTING_NAME:
+                break;
+            case PA_CONTEXT_READY:
+                pa_ext_stream_restore_set_subscribe_cb(c, &stream_restore_monitor_callback, self);
+                pa_ext_stream_restore_subscribe(c, 1, NULL, self);
+                break;
+            default:
+                break;
+        }
+    }
+    static void stream_restore_monitor_callback(pa_context *c, void *userdata)
+    {
+        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
+        pa_ext_stream_restore2_read(c, &stream_restore_info_callback, self);
+    }
+    static void stream_restore_info_callback(pa_context *c, const pa_ext_stream_restore2_info *info,
+            int eol, void *userdata)
+    {
+        Q_UNUSED(c)
+
+        PulseDaemon *self = reinterpret_cast<PulseDaemon*>(userdata);
+
+        if (!eol) {
+            if (QString(info->name).startsWith(QLatin1String("sink-input-by-media-role:x-maemo"))) {
+                const unsigned str_length = 256;
+                char str[str_length];
+                pa_cvolume_snprint(str, str_length, &info->volume);
+                self->m_vol = QString(str).replace(" ","").replace("%","").mid(2).toInt();
+            }
+        }
+    }
+#endif
+
+    int  m_vol;
+    bool m_prepared;
+    pa_context *m_context;
+    pa_threaded_mainloop *m_mainLoop;
+    pa_mainloop_api *m_mainLoopApi;
+};
+}
+
+Q_GLOBAL_STATIC(PulseDaemon, daemon)
+
+
+QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
+    QObject(parent),
+    m_retry(false),
+    m_muted(false),
+    m_playQueued(false),
+    m_sampleLoaded(false),
+    m_volume(100),
+    m_duration(0),
+    m_dataUploaded(0),
+    m_loopCount(1),
+    m_runningCount(0),
+    m_reply(0),
+    m_stream(0),
+    m_networkAccessManager(0)
+{
+}
+
+QSoundEffectPrivate::~QSoundEffectPrivate()
+{
+    m_reply->deleteLater();
+    unloadSample();
+}
+
+QUrl QSoundEffectPrivate::source() const
+{
+    return m_source;
+}
+
+void QSoundEffectPrivate::setSource(const QUrl &url)
+{
+    if (url.isEmpty()) {
+        m_source = QUrl();
+        unloadSample();
+        return;
+    }
+
+    m_source = url;
+
+    if (m_networkAccessManager == 0)
+        m_networkAccessManager = new QNetworkAccessManager(this);
+
+    m_stream = m_networkAccessManager->get(QNetworkRequest(m_source));
+
+    unloadSample();
+    loadSample();
+}
+
+int QSoundEffectPrivate::loopCount() const
+{
+    return m_loopCount;
+}
+
+void QSoundEffectPrivate::setLoopCount(int loopCount)
+{
+    m_loopCount = loopCount;
+}
+
+int QSoundEffectPrivate::volume() const
+{
+    return m_volume;
+}
+
+void QSoundEffectPrivate::setVolume(int volume)
+{
+    m_volume = volume;
+}
+
+bool QSoundEffectPrivate::isMuted() const
+{
+    return m_muted;
+}
+
+void QSoundEffectPrivate::setMuted(bool muted)
+{
+    m_muted = muted;
+}
+
+void QSoundEffectPrivate::play()
+{
+    if (m_retry) {
+        m_retry = false;
+        setSource(m_source);
+        return;
+    }
+
+    if (!m_sampleLoaded) {
+        m_playQueued = true;
+        return;
+    }
+
+    m_runningCount += m_loopCount;
+
+    playSample();
+}
+
+void QSoundEffectPrivate::decoderReady()
+{
+    if (m_waveDecoder->size() >= PA_SCACHE_ENTRY_SIZE_MAX) {
+        m_waveDecoder->deleteLater();
+        qWarning("QSoundEffect(pulseaudio): Attempting to load to large a sample");
+        return;
+    }
+
+    if (m_name.isNull())
+        m_name = QString(QLatin1String("QtPulseSample-%1-%2")).arg(::getpid()).arg(quintptr(this)).toUtf8();
+
+    pa_sample_spec spec = audioFormatToSampleSpec(m_waveDecoder->audioFormat());
+
+    daemon()->lock();
+    pa_stream *stream = pa_stream_new(daemon()->context(), m_name.constData(), &spec, 0);
+    pa_stream_set_state_callback(stream, stream_state_callback, this);
+    pa_stream_set_write_callback(stream, stream_write_callback, this);
+    pa_stream_connect_upload(stream, (size_t)m_waveDecoder->size());
+    m_pulseStream = stream;
+    daemon()->unlock();
+}
+
+void QSoundEffectPrivate::decoderError()
+{
+    qWarning("QSoundEffect(pulseaudio): Error decoding source");
+}
+
+void QSoundEffectPrivate::checkPlayTime()
+{
+    int elapsed = m_playbackTime.elapsed();
+
+    if (elapsed < m_duration)
+        startTimer(m_duration - elapsed);
+}
+
+void QSoundEffectPrivate::loadSample()
+{
+    m_sampleLoaded = false;
+    m_dataUploaded = 0;
+    m_waveDecoder = new WaveDecoder(m_stream);
+    connect(m_waveDecoder, SIGNAL(formatKnown()), SLOT(decoderReady()));
+    connect(m_waveDecoder, SIGNAL(invalidFormat()), SLOT(decoderError()));
+}
+
+void QSoundEffectPrivate::unloadSample()
+{
+    if (!m_sampleLoaded)
+        return;
+
+    daemon()->lock();
+    pa_context_remove_sample(daemon()->context(), m_name.constData(), NULL, NULL);
+    daemon()->unlock();
+
+    m_duration = 0;
+    m_dataUploaded = 0;
+    m_sampleLoaded = false;
+}
+
+void QSoundEffectPrivate::uploadSample()
+{
+    daemon()->lock();
+
+    size_t bufferSize = qMin(pa_stream_writable_size(m_pulseStream),
+            size_t(m_waveDecoder->bytesAvailable()));
+    char buffer[bufferSize];
+
+    size_t len = 0;
+    while (len < (m_waveDecoder->size())) {
+        qint64 read = m_waveDecoder->read(buffer, qMin((int)bufferSize,
+                      (int)(m_waveDecoder->size()-len)));
+        if (read > 0) {
+            if (pa_stream_write(m_pulseStream, buffer, size_t(read), 0, 0, PA_SEEK_RELATIVE) == 0)
+                len += size_t(read);
+            else
+                break;
+        }
+    }
+
+    m_dataUploaded += len;
+    pa_stream_set_write_callback(m_pulseStream, NULL, NULL);
+
+    if (m_waveDecoder->size() == m_dataUploaded) {
+        int err = pa_stream_finish_upload(m_pulseStream);
+        if(err != 0) {
+            qWarning("pa_stream_finish_upload() err=%d",err);
+            pa_stream_disconnect(m_pulseStream);
+            m_retry = true;
+            m_playQueued = false;
+            QMetaObject::invokeMethod(this, "play");
+            daemon()->unlock();
+            return;
+        }
+        m_duration = m_waveDecoder->duration();
+        m_waveDecoder->deleteLater();
+        m_stream->deleteLater();
+        m_sampleLoaded = true;
+        if (m_playQueued) {
+            m_playQueued = false;
+            QMetaObject::invokeMethod(this, "play");
+        }
+    }
+    daemon()->unlock();
+}
+
+void QSoundEffectPrivate::playSample()
+{
+    pa_volume_t volume = PA_VOLUME_NORM;
+
+    daemon()->lock();
+#ifdef Q_WS_MAEMO_5
+    volume = PA_VOLUME_NORM / 100 * ((daemon()->volume() + m_volume) / 2);
+#endif
+    pa_operation_unref(
+            pa_context_play_sample(daemon()->context(),
+                m_name.constData(),
+                0,
+                volume,
+                play_callback,
+                this)
+            );
+    daemon()->unlock();
+
+    m_playbackTime.start();
+}
+
+void QSoundEffectPrivate::timerEvent(QTimerEvent *event)
+{
+    if (m_runningCount > 0)
+        playSample();
+
+    killTimer(event->timerId());
+}
+
+void QSoundEffectPrivate::stream_write_callback(pa_stream *s, size_t length, void *userdata)
+{
+    Q_UNUSED(length);
+
+    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
+
+    QMetaObject::invokeMethod(self, "uploadSample", Qt::QueuedConnection);
+}
+
+void QSoundEffectPrivate::stream_state_callback(pa_stream *s, void *userdata)
+{
+    switch (pa_stream_get_state(s)) {
+        case PA_STREAM_CREATING:
+        case PA_STREAM_READY:
+        case PA_STREAM_TERMINATED:
+            break;
+
+        case PA_STREAM_FAILED:
+        default:
+            qWarning("QSoundEffect(pulseaudio): Error in pulse audio stream");
+            break;
+    }
+}
+
+void QSoundEffectPrivate::play_callback(pa_context *c, int success, void *userdata)
+{
+    Q_UNUSED(c);
+
+    QSoundEffectPrivate *self = reinterpret_cast<QSoundEffectPrivate*>(userdata);
+
+    if (success == 1) {
+        self->m_runningCount--;
+        QMetaObject::invokeMethod(self, "checkPlayTime", Qt::QueuedConnection);
+    }
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h
new file mode 100644
index 0000000..ef6bff1
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_PULSE_H
+#define QSOUNDEFFECT_PULSE_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include "qsoundeffect_p.h"
+
+#include <QtCore/qobject.h>
+#include <QtCore/qdatetime.h>
+#include <QtMediaservices/qmediaplayer.h>
+#include <pulse/pulseaudio.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QNetworkReply;
+class QNetworkAccessManager;
+class WaveDecoder;
+
+class QSoundEffectPrivate : public QObject
+{
+    Q_OBJECT
+public:
+    explicit QSoundEffectPrivate(QObject* parent);
+    ~QSoundEffectPrivate();
+
+    QUrl source() const;
+    void setSource(const QUrl &url);
+    int loopCount() const;
+    void setLoopCount(int loopCount);
+    int volume() const;
+    void setVolume(int volume);
+    bool isMuted() const;
+    void setMuted(bool muted);
+
+public Q_SLOTS:
+    void play();
+
+Q_SIGNALS:
+    void volumeChanged();
+    void mutedChanged();
+
+private Q_SLOTS:
+    void decoderReady();
+    void decoderError();
+    void checkPlayTime();
+    void uploadSample();
+
+private:
+    void loadSample();
+    void unloadSample();
+    void playSample();
+
+    void timerEvent(QTimerEvent *event);
+
+    static void stream_write_callback(pa_stream *s, size_t length, void *userdata);
+    static void stream_state_callback(pa_stream *s, void *userdata);
+    static void play_callback(pa_context *c, int success, void *userdata);
+
+    pa_stream *m_pulseStream;
+
+    bool    m_retry;
+    bool    m_muted;
+    bool    m_playQueued;
+    bool    m_sampleLoaded;
+    int     m_volume;
+    int     m_duration;
+    int     m_dataUploaded;
+    int     m_loopCount;
+    int     m_runningCount;
+    QUrl    m_source;
+    QTime  m_playbackTime;
+    QByteArray m_name;
+    QNetworkReply *m_reply;
+    WaveDecoder *m_waveDecoder;
+    QIODevice *m_stream;
+    QNetworkAccessManager *m_networkAccessManager;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSOUNDEFFECT_PULSE_H
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp
new file mode 100644
index 0000000..8cc2675
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qsoundeffect_qmedia_p.h"
+
+#include <QtCore/qcoreapplication.h>
+
+#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaservices/qmediaplayer.h>
+
+
+QT_BEGIN_NAMESPACE
+
+QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
+    QObject(parent),
+    m_loopCount(1),
+    m_runningCount(0),
+    m_player(0)
+{
+    m_player = new QMediaPlayer(this, QMediaPlayer::LowLatency);
+    connect(m_player, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(stateChanged(QMediaPlayer::State)));
+}
+
+QSoundEffectPrivate::~QSoundEffectPrivate()
+{
+}
+
+QUrl QSoundEffectPrivate::source() const
+{
+    return m_player->media().canonicalUrl();
+}
+
+void QSoundEffectPrivate::setSource(const QUrl &url)
+{
+    m_player->setMedia(url);
+}
+
+int QSoundEffectPrivate::loopCount() const
+{
+    return m_loopCount;
+}
+
+void QSoundEffectPrivate::setLoopCount(int loopCount)
+{
+    m_loopCount = loopCount;
+}
+
+int QSoundEffectPrivate::volume() const
+{
+    return m_player->volume();
+}
+
+void QSoundEffectPrivate::setVolume(int volume)
+{
+    m_player->setVolume(volume);
+}
+
+bool QSoundEffectPrivate::isMuted() const
+{
+    return m_player->isMuted();
+}
+
+void QSoundEffectPrivate::setMuted(bool muted)
+{
+    m_player->setMuted(muted);
+}
+
+void QSoundEffectPrivate::play()
+{
+    m_runningCount += m_loopCount;
+    m_player->play();
+}
+
+void QSoundEffectPrivate::stateChanged(QMediaPlayer::State state)
+{
+    if (state == QMediaPlayer::StoppedState) {
+        if (--m_runningCount > 0)
+            m_player->play();
+    }
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h
new file mode 100644
index 0000000..5abdcad
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_QMEDIA_H
+#define QSOUNDEFFECT_QMEDIA_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+#include <QtMediaservices/qmediaplayer.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+
+class QSoundEffectPrivate : public QObject
+{
+    Q_OBJECT
+public:
+    explicit QSoundEffectPrivate(QObject* parent);
+    ~QSoundEffectPrivate();
+
+    QUrl source() const;
+    void setSource(const QUrl &url);
+    int loopCount() const;
+    void setLoopCount(int loopCount);
+    int volume() const;
+    void setVolume(int volume);
+    bool isMuted() const;
+    void setMuted(bool muted);
+
+public Q_SLOTS:
+    void play();
+
+Q_SIGNALS:
+    void volumeChanged();
+    void mutedChanged();
+
+private Q_SLOTS:
+    void stateChanged(QMediaPlayer::State);
+
+private:
+    int m_loopCount;
+    int m_runningCount;
+    QMediaPlayer *m_player;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSOUNDEFFECT_QMEDIA_H
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp
new file mode 100644
index 0000000..7746f0c
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qsoundeffect_qsound_p.h"
+
+#include <QtCore/qcoreapplication.h>
+#include <QtGui/qsound.h>
+
+
+QT_BEGIN_NAMESPACE
+
+QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
+    QObject(parent),
+    m_muted(false),
+    m_loopCount(1),
+    m_volume(100),
+    m_sound(0)
+{
+}
+
+QSoundEffectPrivate::~QSoundEffectPrivate()
+{
+}
+
+QUrl QSoundEffectPrivate::source() const
+{
+    return m_source;
+}
+
+void QSoundEffectPrivate::setSource(const QUrl &url)
+{
+    if (url.isEmpty() || url.scheme() != QLatin1String("file")) {
+        m_source = QUrl();
+        return;
+    }
+
+    if (m_sound != 0)
+        delete m_sound;
+
+    m_source = url;
+    m_sound = new QSound(m_source.toLocalFile(), this);
+    m_sound->setLoops(m_loopCount);
+}
+
+int QSoundEffectPrivate::loopCount() const
+{
+    return m_loopCount;
+}
+
+void QSoundEffectPrivate::setLoopCount(int lc)
+{
+    m_loopCount = lc;
+    if (m_sound)
+        m_sound->setLoops(lc);
+}
+
+int QSoundEffectPrivate::volume() const
+{
+    return m_volume;
+}
+
+void QSoundEffectPrivate::setVolume(int v)
+{
+    m_volume = v;
+}
+
+bool QSoundEffectPrivate::isMuted() const
+{
+    return m_muted;
+}
+
+void QSoundEffectPrivate::setMuted(bool muted)
+{
+    m_muted = muted;
+}
+
+void QSoundEffectPrivate::play()
+{
+    m_sound->play();
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h
new file mode 100644
index 0000000..133e6ec
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOUNDEFFECT_QSOUND_H
+#define QSOUNDEFFECT_QSOUND_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QSound;
+
+class QSoundEffectPrivate : public QObject
+{
+    Q_OBJECT
+public:
+    explicit QSoundEffectPrivate(QObject* parent);
+    ~QSoundEffectPrivate();
+
+    QUrl source() const;
+    void setSource(const QUrl &url);
+    int loopCount() const;
+    void setLoopCount(int loopCount);
+    int volume() const;
+    void setVolume(int volume);
+    bool isMuted() const;
+    void setMuted(bool muted);
+
+public Q_SLOTS:
+    void play();
+
+Q_SIGNALS:
+    void volumeChanged();
+    void mutedChanged();
+
+private:
+    bool m_muted;
+    int m_loopCount;
+    int m_volume;
+    QSound *m_sound;
+    QUrl m_source;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSOUNDEFFECT_QSOUND_H
diff --git a/src/multimedia/mediaservices/effects/wavedecoder_p.cpp b/src/multimedia/mediaservices/effects/wavedecoder_p.cpp
new file mode 100644
index 0000000..2208461
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/wavedecoder_p.cpp
@@ -0,0 +1,151 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "wavedecoder_p.h"
+
+#include <QtCore/qtimer.h>
+#include <QtCore/qendian.h>
+
+QT_BEGIN_NAMESPACE
+
+WaveDecoder::WaveDecoder(QIODevice *s, QObject *parent):
+    QIODevice(parent),
+    haveFormat(false),
+    dataSize(0),
+    remaining(0),
+    source(s)
+{
+    open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+
+    if (source->bytesAvailable() >= qint64(sizeof(CombinedHeader) + sizeof(DATAHeader) + sizeof(quint16)))
+        QTimer::singleShot(0, this, SLOT(handleData()));
+    else
+        connect(source, SIGNAL(readyRead()), SLOT(handleData()));
+}
+
+WaveDecoder::~WaveDecoder()
+{
+}
+
+QAudioFormat WaveDecoder::audioFormat() const
+{
+    return format;
+}
+
+int WaveDecoder::duration() const
+{
+    return size() * 1000 / (format.sampleSize() / 8) / format.channels() / format.frequency();
+}
+
+qint64 WaveDecoder::size() const
+{
+    return haveFormat ? dataSize : 0;
+}
+
+bool WaveDecoder::isSequential() const
+{
+    return source->isSequential();
+}
+
+qint64 WaveDecoder::bytesAvailable() const
+{
+    return haveFormat ? source->bytesAvailable() : 0;
+}
+
+qint64 WaveDecoder::readData(char *data, qint64 maxlen)
+{
+    return haveFormat ? source->read(data, maxlen) : 0;
+}
+
+qint64 WaveDecoder::writeData(const char *data, qint64 len)
+{
+    Q_UNUSED(data);
+    Q_UNUSED(len);
+
+    return -1;
+}
+
+void WaveDecoder::handleData()
+{
+    if (source->bytesAvailable() < qint64(sizeof(CombinedHeader) + sizeof(DATAHeader) + sizeof(quint16)))
+        return;
+
+    source->disconnect(SIGNAL(readyRead()), this, SLOT(handleData()));
+    source->read((char*)&header, sizeof(CombinedHeader));
+
+    if (qstrncmp(header.riff.descriptor.id, "RIFF", 4) != 0 ||
+        qstrncmp(header.riff.type, "WAVE", 4) != 0 ||
+        qstrncmp(header.wave.descriptor.id, "fmt ", 4) != 0 ||
+        (header.wave.audioFormat != 0 && header.wave.audioFormat != 1)) {
+
+        emit invalidFormat();
+    }
+    else {
+        DATAHeader dataHeader;
+
+        if (qFromLittleEndian<quint32>(header.wave.descriptor.size) > sizeof(WAVEHeader)) {
+            // Extended data available
+            quint16 extraFormatBytes;
+            source->peek((char*)&extraFormatBytes, sizeof(quint16));
+            extraFormatBytes = qFromLittleEndian<quint16>(extraFormatBytes);
+            source->read(sizeof(quint16) + extraFormatBytes);   // dump it all
+        }
+
+        source->read((char*)&dataHeader, sizeof(DATAHeader));
+
+        int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
+
+        format.setCodec(QLatin1String("audio/pcm"));
+        format.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt);
+        format.setByteOrder(QAudioFormat::LittleEndian);
+        format.setFrequency(qFromLittleEndian<quint32>(header.wave.sampleRate));
+        format.setSampleSize(bps);
+        format.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
+
+        dataSize = qFromLittleEndian<quint32>(dataHeader.descriptor.size);
+
+        haveFormat = true;
+        connect(source, SIGNAL(readyRead()), SIGNAL(readyRead()));
+        emit formatKnown();
+    }
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/mediaservices/effects/wavedecoder_p.h b/src/multimedia/mediaservices/effects/wavedecoder_p.h
new file mode 100644
index 0000000..bb22907
--- /dev/null
+++ b/src/multimedia/mediaservices/effects/wavedecoder_p.h
@@ -0,0 +1,133 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WAVEDECODER_H
+#define WAVEDECODER_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qiodevice.h>
+#include <QtMultimedia/qaudioformat.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+
+class WaveDecoder : public QIODevice
+{
+    Q_OBJECT
+
+public:
+    explicit WaveDecoder(QIODevice *source, QObject *parent = 0);
+    ~WaveDecoder();
+
+    QAudioFormat audioFormat() const;
+    int duration() const;
+
+    qint64 size() const;
+    bool isSequential() const;
+    qint64 bytesAvailable() const;
+
+Q_SIGNALS:
+    void formatKnown();
+    void invalidFormat();
+
+private Q_SLOTS:
+    void handleData();
+
+private:
+    qint64 readData(char *data, qint64 maxlen);
+    qint64 writeData(const char *data, qint64 len);
+
+    struct chunk
+    {
+        char        id[4];
+        quint32     size;
+    };
+    struct RIFFHeader
+    {
+        chunk       descriptor;
+        char        type[4];
+    };
+    struct WAVEHeader
+    {
+        chunk       descriptor;
+        quint16     audioFormat;
+        quint16     numChannels;
+        quint32     sampleRate;
+        quint32     byteRate;
+        quint16     blockAlign;
+        quint16     bitsPerSample;
+    };
+    struct DATAHeader
+    {
+        chunk       descriptor;
+    };
+    struct CombinedHeader
+    {
+        RIFFHeader  riff;
+        WAVEHeader  wave;
+    };
+
+    bool haveFormat;
+    qint64 dataSize;
+    qint64 remaining;
+    QAudioFormat format;
+    QIODevice *source;
+    CombinedHeader header;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // WAVEDECODER_H
diff --git a/src/multimedia/mediaservices/mediaservices.pro b/src/multimedia/mediaservices/mediaservices.pro
new file mode 100644
index 0000000..908f60a
--- /dev/null
+++ b/src/multimedia/mediaservices/mediaservices.pro
@@ -0,0 +1,16 @@
+TARGET = QtMediaservices
+QPRO_PWD = $$PWD
+QT = core gui multimedia
+
+DEFINES += QT_BUILD_MEDIASERVICES_LIB QT_NO_USING_NAMESPACE
+
+unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui QtMultimedia
+
+include(../../qbase.pri)
+
+include(base/base.pri)
+include(playback/playback.pri)
+include(effects/effects.pri)
+
+symbian: TARGET.UID3 = 0x2001E631
+
diff --git a/src/multimedia/mediaservices/playback/playback.pri b/src/multimedia/mediaservices/playback/playback.pri
new file mode 100644
index 0000000..09a81c9
--- /dev/null
+++ b/src/multimedia/mediaservices/playback/playback.pri
@@ -0,0 +1,11 @@
+
+HEADERS += \
+    $$PWD/qmediaplayer.h \
+    $$PWD/qmediaplayercontrol.h
+
+SOURCES += \
+    $$PWD/qmediaplayer.cpp \
+    $$PWD/qmediaplayercontrol.cpp
+    
+
+
diff --git a/src/multimedia/mediaservices/playback/qmediaplayer.cpp b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
new file mode 100644
index 0000000..676a6eb
--- /dev/null
+++ b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
@@ -0,0 +1,982 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qcoreevent.h>
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qpointer.h>
+#include <QtCore/qdebug.h>
+
+#include <QtMediaservices/qmediaplayer.h>
+
+#include <QtMediaservices/private/qmediaobject_p.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaserviceprovider.h>
+#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaservices/qmediaplaylistcontrol.h>
+#include <QtMediaservices/qvideowidget.h>
+#include <QtMediaservices/qgraphicsvideoitem.h>
+
+//#define DEBUG_PLAYER_STATE
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+/*!
+    \class QMediaPlayer
+    \brief The QMediaPlayer class allows the playing of a media source.
+    \ingroup multimedia
+    \since 4.7
+    \preliminary
+
+    The QMediaPlayer class is a high level media playback class. It can be used
+    to playback such content as songs, movies and internet radio. The content
+    to playback is specified as a QMediaContent, which can be thought of as a
+    main or canonical URL with addition information attached. When provided
+    with a QMediaContent playback may be able to commence.
+
+    \code
+        player = new QMediaPlayer;
+        connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
+        player->setMedia(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
+        player->setVolume(50);
+        player->play();
+    \endcode
+
+    QVideoWidget can be used with QMediaPlayer for video rendering and QMediaPlaylist
+    for accessing playlist functionality.
+
+    \code
+        player = new QMediaPlayer;
+
+        playlist = new QMediaPlaylist;
+        playlist->setMediaObject(player);
+        playlist->append(QUrl("http://example.com/movie1.mp4"));
+        playlist->append(QUrl("http://example.com/movie2.mp4"));
+
+        widget = new QVideoWidget;
+        widget->setMediaObject(player);
+        widget->show();
+
+        player->play();
+    \endcode
+
+    \sa QMediaObject, QMediaService, QVideoWidget, QMediaPlaylist
+*/
+
+namespace
+{
+class MediaPlayerRegisterMetaTypes
+{
+public:
+    MediaPlayerRegisterMetaTypes()
+    {
+        qRegisterMetaType<QMediaPlayer::State>();
+        qRegisterMetaType<QMediaPlayer::MediaStatus>();
+        qRegisterMetaType<QMediaPlayer::Error>();
+    }
+} _registerPlayerMetaTypes;
+}
+
+class QMediaPlayerPrivate : public QMediaObjectPrivate
+{
+    Q_DECLARE_NON_CONST_PUBLIC(QMediaPlayer)
+
+public:
+    QMediaPlayerPrivate()
+        : provider(0)
+        , control(0)
+        , playlistControl(0)
+        , state(QMediaPlayer::StoppedState)
+        , error(QMediaPlayer::NoError)
+        , filterStates(false)
+        , playlist(0)
+    {}
+
+    QMediaServiceProvider *provider;
+    QMediaPlayerControl* control;
+    QMediaPlaylistControl* playlistControl;
+    QMediaPlayer::State state;
+    QMediaPlayer::Error error;
+    QString errorString;
+    bool filterStates;
+
+    QMediaPlaylist *playlist;
+    QPointer<QVideoWidget> videoWidget;
+    QPointer<QGraphicsVideoItem> videoItem;
+
+    void _q_stateChanged(QMediaPlayer::State state);
+    void _q_mediaStatusChanged(QMediaPlayer::MediaStatus status);
+    void _q_error(int error, const QString &errorString);
+    void _q_updateMedia(const QMediaContent&);
+    void _q_playlistDestroyed();
+};
+
+#define ENUM_NAME(c,e,v) (c::staticMetaObject.enumerator(c::staticMetaObject.indexOfEnumerator(e)).valueToKey((v)))
+
+void QMediaPlayerPrivate::_q_stateChanged(QMediaPlayer::State ps)
+{
+    Q_Q(QMediaPlayer);
+
+#ifdef DEBUG_PLAYER_STATE
+    qDebug() << "State changed:" << ENUM_NAME(QMediaPlayer, "State", ps) << (filterStates ? "(filtered)" : "");
+#endif
+
+    if (filterStates)
+        return;
+
+    if (playlist
+            && !playlistControl //service should do this itself
+            && ps != state && ps == QMediaPlayer::StoppedState
+            && control->mediaStatus() == QMediaPlayer::EndOfMedia) {
+        playlist->next();
+        ps = control->state();
+    }
+
+    if (ps != state) {
+        state = ps;
+
+        if (ps == QMediaPlayer::PlayingState)
+            q->addPropertyWatch("position");
+        else
+            q->removePropertyWatch("position");
+
+        emit q->stateChanged(ps);
+    }
+}
+
+void QMediaPlayerPrivate::_q_mediaStatusChanged(QMediaPlayer::MediaStatus status)
+{
+    Q_Q(QMediaPlayer);
+
+#ifdef DEBUG_PLAYER_STATE
+    qDebug() << "MediaStatus changed:" << ENUM_NAME(QMediaPlayer, "MediaStatus", status);
+#endif
+
+    switch (status) {
+    case QMediaPlayer::StalledMedia:
+    case QMediaPlayer::BufferingMedia:
+        q->addPropertyWatch("bufferStatus");
+        emit q->mediaStatusChanged(status);
+        break;
+    default:
+        q->removePropertyWatch("bufferStatus");
+        emit q->mediaStatusChanged(status);
+        break;
+    }
+
+}
+
+void QMediaPlayerPrivate::_q_error(int error, const QString &errorString)
+{
+    Q_Q(QMediaPlayer);
+
+    this->error = QMediaPlayer::Error(error);
+    this->errorString = errorString;
+
+    emit q->error(this->error);
+}
+
+void QMediaPlayerPrivate::_q_updateMedia(const QMediaContent &media)
+{
+    const QMediaPlayer::State currentState = state;
+
+    filterStates = true;
+    control->setMedia(media, 0);
+
+    if (!media.isNull()) {
+        switch (currentState) {
+        case QMediaPlayer::PlayingState:
+            control->play();
+            break;
+        case QMediaPlayer::PausedState:
+            control->pause();
+            break;
+        default:
+            break;
+        }
+    }
+    filterStates = false;
+
+    state = control->state();
+
+    if (state != currentState) {
+#ifdef DEBUG_PLAYER_STATE
+        qDebug() << "State changed:" << ENUM_NAME(QMediaPlayer, "State", state);
+#endif
+        emit q_func()->stateChanged(state);
+    }
+}
+
+void QMediaPlayerPrivate::_q_playlistDestroyed()
+{
+    playlist = 0;
+
+    control->setMedia(QMediaContent(), 0);
+}
+
+static QMediaService *playerService(QMediaPlayer::Flags flags, QMediaServiceProvider *provider)
+{
+    if (flags) {
+        QMediaServiceProviderHint::Features features = 0;
+        if (flags & QMediaPlayer::LowLatency)
+            features |= QMediaServiceProviderHint::LowLatencyPlayback;
+
+        if (flags & QMediaPlayer::StreamPlayback)
+            features |= QMediaServiceProviderHint::StreamPlayback;
+
+        return provider->requestService(Q_MEDIASERVICE_MEDIAPLAYER,
+                                        QMediaServiceProviderHint(features));
+    } else
+        return provider->requestService(Q_MEDIASERVICE_MEDIAPLAYER);
+}
+
+
+/*!
+    Construct a QMediaPlayer that uses the playback service from \a provider,
+    parented to \a parent and with \a flags.
+
+    If a playback service is not specified the system default will be used.
+*/
+
+QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags, QMediaServiceProvider *provider):
+    QMediaObject(*new QMediaPlayerPrivate,
+                 parent,
+                 playerService(flags,provider))
+{
+    Q_D(QMediaPlayer);
+
+    d->provider = provider;
+
+    if (d->service == 0) {
+        d->error = ServiceMissingError;
+    } else {
+        d->control = qobject_cast<QMediaPlayerControl*>(d->service->control(QMediaPlayerControl_iid));
+        d->playlistControl = qobject_cast<QMediaPlaylistControl*>(d->service->control(QMediaPlaylistControl_iid));
+        if (d->control != 0) {
+            connect(d->control, SIGNAL(mediaChanged(QMediaContent)), SIGNAL(mediaChanged(QMediaContent)));
+            connect(d->control, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(_q_stateChanged(QMediaPlayer::State)));
+            connect(d->control, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
+                    SLOT(_q_mediaStatusChanged(QMediaPlayer::MediaStatus)));
+            connect(d->control, SIGNAL(error(int,QString)), SLOT(_q_error(int,QString)));
+
+            connect(d->control, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged(qint64)));
+            connect(d->control, SIGNAL(positionChanged(qint64)), SIGNAL(positionChanged(qint64)));
+            connect(d->control, SIGNAL(audioAvailableChanged(bool)), SIGNAL(audioAvailableChanged(bool)));
+            connect(d->control, SIGNAL(videoAvailableChanged(bool)), SIGNAL(videoAvailableChanged(bool)));
+            connect(d->control, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged(int)));
+            connect(d->control, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged(bool)));
+            connect(d->control, SIGNAL(seekableChanged(bool)), SIGNAL(seekableChanged(bool)));
+            connect(d->control, SIGNAL(playbackRateChanged(qreal)), SIGNAL(playbackRateChanged(qreal)));
+
+            if (d->control->state() == PlayingState)
+                addPropertyWatch("position");
+
+            if (d->control->mediaStatus() == StalledMedia || d->control->mediaStatus() == BufferingMedia)
+                addPropertyWatch("bufferStatus");
+        }
+    }
+}
+
+
+/*!
+    Destroys the player object.
+*/
+
+QMediaPlayer::~QMediaPlayer()
+{
+    Q_D(QMediaPlayer);
+
+    d->provider->releaseService(d->service);
+}
+
+QMediaContent QMediaPlayer::media() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->media();
+
+    return QMediaContent();
+}
+
+/*!
+    Returns the stream source of media data.
+
+    This is only valid if a stream was passed to setMedia().
+
+    \sa setMedia()
+*/
+
+const QIODevice *QMediaPlayer::mediaStream() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->mediaStream();
+
+    return 0;
+}
+
+QMediaPlayer::State QMediaPlayer::state() const
+{
+    return d_func()->state;
+}
+
+QMediaPlayer::MediaStatus QMediaPlayer::mediaStatus() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->mediaStatus();
+
+    return QMediaPlayer::UnknownMediaStatus;
+}
+
+qint64 QMediaPlayer::duration() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->duration();
+
+    return -1;
+}
+
+qint64 QMediaPlayer::position() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->position();
+
+    return 0;
+}
+
+int QMediaPlayer::volume() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->volume();
+
+    return 0;
+}
+
+bool QMediaPlayer::isMuted() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->isMuted();
+
+    return false;
+}
+
+int QMediaPlayer::bufferStatus() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->bufferStatus();
+
+    return 0;
+}
+
+bool QMediaPlayer::isAudioAvailable() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->isAudioAvailable();
+
+    return false;
+}
+
+bool QMediaPlayer::isVideoAvailable() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->isVideoAvailable();
+
+    return false;
+}
+
+bool QMediaPlayer::isSeekable() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->isSeekable();
+
+    return false;
+}
+
+qreal QMediaPlayer::playbackRate() const
+{
+    Q_D(const QMediaPlayer);
+
+    if (d->control != 0)
+        return d->control->playbackRate();
+
+    return 0.0;
+}
+
+/*!
+    Returns the current error state.
+*/
+
+QMediaPlayer::Error QMediaPlayer::error() const
+{
+    return d_func()->error;
+}
+
+QString QMediaPlayer::errorString() const
+{
+    return d_func()->errorString;
+}
+
+//public Q_SLOTS:
+/*!
+    Start or resume playing the current source.
+*/
+
+void QMediaPlayer::play()
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control == 0) {
+        QMetaObject::invokeMethod(this, "_q_error", Qt::QueuedConnection);
+                                    Q_ARG(int, QMediaPlayer::ServiceMissingError),
+                                    Q_ARG(QString, tr("The QMediaPlayer object does not have a valid service"));
+        return;
+    }
+
+    //if playlist control is available, the service should advance itself
+    if (d->playlist && !d->playlistControl && d->playlist->currentIndex() == -1 && !d->playlist->isEmpty())
+        d->playlist->setCurrentIndex(0);
+
+    // Reset error conditions
+    d->error = NoError;
+    d->errorString = QString();
+
+    d->control->play();
+}
+
+/*!
+    Pause playing the current source.
+*/
+
+void QMediaPlayer::pause()
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control != 0)
+        d->control->pause();
+}
+
+/*!
+    Stop playing, and reset the play position to the beginning.
+*/
+
+void QMediaPlayer::stop()
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control != 0)
+        d->control->stop();
+}
+
+void QMediaPlayer::setPosition(qint64 position)
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control == 0 || !isSeekable())
+        return;
+
+    d->control->setPosition(qBound(qint64(0), duration(), position));
+}
+
+void QMediaPlayer::setVolume(int v)
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control == 0)
+        return;
+
+    int clamped = qBound(0, v, 100);
+    if (clamped == volume())
+        return;
+
+    d->control->setVolume(clamped);
+}
+
+void QMediaPlayer::setMuted(bool muted)
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control == 0 || muted == isMuted())
+        return;
+
+    d->control->setMuted(muted);
+}
+
+void QMediaPlayer::setPlaybackRate(qreal rate)
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control != 0)
+        d->control->setPlaybackRate(rate);
+}
+
+/*!
+    Sets the current \a media source.
+
+    If a \a stream is supplied; media data will be read from it instead of resolving the media
+    source.  In this case the media source may still be used to resolve additional information
+    about the media such as mime type.
+
+    Setting the media to a null QMediaContent will cause the player to discard all
+    information relating to the current media source and to cease all I/O operations related
+    to that media.
+*/
+
+void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream)
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control != 0)
+        d_func()->control->setMedia(media, stream);
+}
+
+/*!
+    \internal
+*/
+
+void QMediaPlayer::bind(QObject *obj)
+{
+    Q_D(QMediaPlayer);
+
+    if (d->control != 0) {
+        QMediaPlaylist *playlist = qobject_cast<QMediaPlaylist*>(obj);
+
+        if (playlist) {
+            if (d->playlist)
+                d->playlist->setMediaObject(0);
+
+            d->playlist = playlist;
+            connect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
+                    this, SLOT(_q_updateMedia(QMediaContent)));
+            connect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
+
+            setMedia(playlist->currentMedia());
+
+            return;
+        }
+
+        QVideoWidget *videoWidget = qobject_cast<QVideoWidget*>(obj);
+        QGraphicsVideoItem *videoItem = qobject_cast<QGraphicsVideoItem*>(obj);
+
+        if (videoWidget || videoItem) {
+            //detach the current video output
+            if (d->videoWidget) {
+                d->videoWidget->setMediaObject(0);
+                d->videoWidget = 0;
+            }
+
+            if (d->videoItem) {
+                d->videoItem->setMediaObject(0);
+                d->videoItem = 0;
+            }
+        }
+
+        if (videoWidget)
+            d->videoWidget = videoWidget;
+
+        if (videoItem)
+            d->videoItem = videoItem;
+    }
+}
+
+/*!
+    \internal
+*/
+
+void QMediaPlayer::unbind(QObject *obj)
+{
+    Q_D(QMediaPlayer);
+
+    if (obj == d->videoWidget) {
+        d->videoWidget = 0;
+    } else if (obj == d->videoItem) {
+        d->videoItem = 0;
+    } else if (obj == d->playlist) {
+        disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
+                this, SLOT(_q_updateMedia(QMediaContent)));
+        disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
+        d->playlist = 0;
+        setMedia(QMediaContent());
+    }
+}
+
+/*!
+    Returns the level of support a media player has for a \a mimeType and a set of \a codecs.
+
+    The \a flags argument allows additional requirements such as performance indicators to be
+    specified.
+*/
+QtMediaservices::SupportEstimate QMediaPlayer::hasSupport(const QString &mimeType,
+                                               const QStringList& codecs,
+                                               Flags flags)
+{
+    return QMediaServiceProvider::defaultServiceProvider()->hasSupport(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER),
+                                                                    mimeType,
+                                                                    codecs,
+                                                                    flags);
+}
+
+/*!
+    Returns a list of MIME types supported by the media player.
+
+    The \a flags argument causes the resultant list to be restricted to MIME types which can be supported
+    given additional requirements, such as performance indicators.
+*/
+QStringList QMediaPlayer::supportedMimeTypes(Flags flags)
+{
+    return QMediaServiceProvider::defaultServiceProvider()->supportedMimeTypes(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER),
+                                                                               flags);
+}
+
+
+// Enums
+/*!
+    \enum QMediaPlayer::State
+
+    Defines the current state of a media player.
+
+    \value PlayingState The media player is currently playing content.
+    \value PausedState The media player has paused playback, playback of the current track will
+    resume from the position the player was paused at.
+    \value StoppedState The media player is not playing content, playback will begin from the start
+    of the current track.
+*/
+
+/*!
+    \enum QMediaPlayer::MediaStatus
+
+    Defines the status of a media player's current media.
+
+    \value UnknownMediaStatus The status of the media cannot be determined.
+    \value NoMedia The is no current media.  The player is in the StoppedState.
+    \value LoadingMedia The current media is being loaded. The player may be in any state.
+    \value LoadedMedia The current media has been loaded. The player is in the StoppedState.
+    \value StalledMedia Playback of the current media has stalled due to insufficient buffering or
+    some other temporary interruption.  The player is in the PlayingState or PausedState.
+    \value BufferingMedia The player is buffering data but has enough data buffered for playback to
+    continue for the immediate future.  The player is in the PlayingState or PausedState.
+    \value BufferedMedia The player has fully buffered the current media.  The player is in the
+    PlayingState or PausedState.
+    \value EndOfMedia Playback has reached the end of the current media.  The player is in the
+    StoppedState.
+    \value InvalidMedia The current media cannot be played.  The player is in the StoppedState.
+*/
+
+/*!
+    \enum QMediaPlayer::Error
+
+    Defines a media player error condition.
+
+    \value NoError No error has occurred.
+    \value ResourceError A media resource couldn't be resolved.
+    \value FormatError The format of a media resource isn't (fully) supported.  Playback may still
+    be possible, but without an audio or video component.
+    \value NetworkError A network error occurred.
+    \value AccessDeniedError There are not the appropriate permissions to play a media resource.
+    \value ServiceMissingError A valid playback service was not found, playback cannot proceed.
+*/
+
+// Signals
+/*!
+    \fn QMediaPlayer::error(QMediaPlayer::Error error)
+
+    Signals that an \a error condition has occurred.
+
+    \sa errorString()
+*/
+
+/*!
+    \fn void QMediaPlayer::stateChanged(State state)
+
+    Signal the \a state of the Player object has changed.
+*/
+
+/*!
+    \fn QMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status)
+
+    Signals that the \a status of the current media has changed.
+
+    \sa mediaStatus()
+*/
+
+/*!
+    \fn void QMediaPlayer::mediaChanged(const QMediaContent &media);
+
+    Signals that the current playing content will be obtained from \a media.
+
+    \sa media()
+*/
+
+/*!
+    \fn void QMediaPlayer::playbackRateChanged(qreal rate);
+
+    Signals the playbackRate has changed to \a rate.
+*/
+
+/*!
+    \fn void QMediaPlayer::seekableChanged(bool seekable);
+
+    Signals the \a seekable status of the player object has changed.
+*/
+
+// Properties
+/*!
+    \property QMediaPlayer::state
+    \brief the media player's playback state.
+
+    By default this property is QMediaPlayer::Stopped
+
+    \sa mediaStatus(), play(), pause(), stop()
+*/
+
+/*!
+    \property QMediaPlayer::error
+    \brief a string describing the last error condition.
+
+    \sa error()
+*/
+
+/*!
+    \property QMediaPlayer::media
+    \brief the active media source being used by the player object.
+
+    The player object will use the QMediaContent for selection of the content to
+    be played.
+
+    By default this property has a null QMediaContent.
+
+    Setting this property to a null QMediaContent will cause the player to discard all
+    information relating to the current media source and to cease all I/O operations related
+    to that media.
+
+    \sa QMediaContent
+*/
+
+/*!
+    \property QMediaPlayer::mediaStatus
+    \brief the status of the current media stream.
+
+    The stream status describes how the playback of the current stream is
+    progressing.
+
+    By default this property is QMediaPlayer::NoMedia
+
+    \sa state
+*/
+
+/*!
+    \property QMediaPlayer::duration
+    \brief the duration of the current media.
+
+    The value is the total playback time in milliseconds of the current media.
+    The value may change across the life time of the QMediaPlayer object and
+    may not be available when initial playback begins, connect to the
+    durationChanged() signal to receive status notifications.
+*/
+
+/*!
+    \property QMediaPlayer::position
+    \brief the playback position of the current media.
+
+    The value is the current playback position, expressed in milliseconds since
+    the beginning of the media. Periodically changes in the position will be
+    indicated with the signal positionChanged(), the interval between updates
+    can be set with QMediaObject's method setNotifyInterval().
+*/
+
+/*!
+    \property QMediaPlayer::volume
+    \brief the current playback volume.
+
+    The playback volume is a linear in effect and the value can range from 0 -
+    100, values outside this range will be clamped.
+*/
+
+/*!
+    \property QMediaPlayer::muted
+    \brief the muted state of the current media.
+
+    The value will be true if the playback volume is muted; otherwise false.
+*/
+
+/*!
+    \property QMediaPlayer::bufferStatus
+    \brief the percentage of the temporary buffer filled before playback begins.
+
+    When the player object is buffering; this property holds the percentage of
+    the temporary buffer that is filled. The buffer will need to reach 100%
+    filled before playback can resume, at which time the MediaStatus will be
+    BufferedMedia.
+
+    \sa mediaStatus()
+*/
+
+/*!
+    \property QMediaPlayer::audioAvailable
+    \brief the audio availabilty status for the current media.
+
+    As the life time of QMediaPlayer can be longer than the playback of one
+    QMediaContent, this property may change over time, the
+    audioAvailableChanged signal can be used to monitor it's status.
+*/
+
+/*!
+    \property QMediaPlayer::videoAvailable
+    \brief the video availability status for the current media.
+
+    If available, the QVideoWidget class can be used to view the video. As the
+    life time of QMediaPlayer can be longer than the playback of one
+    QMediaContent, this property may change over time, the
+    videoAvailableChanged signal can be used to monitor it's status.
+
+    \sa QVideoWidget, QMediaContent
+*/
+
+/*!
+    \property QMediaPlayer::seekable
+    \brief the seek-able status of the current media
+
+    If seeking is supported this property will be true; false otherwise. The
+    status of this property may change across the life time of the QMediaPlayer
+    object, use the seekableChanged signal to monitor changes.
+*/
+
+/*!
+    \property QMediaPlayer::playbackRate
+    \brief the playback rate of the current media.
+
+    This value is a multiplier applied to the media's standard play rate. By
+    default this value is 1.0, indicating that the media is playing at the
+    standard pace. Values higher than 1.0 will increase the rate of play.
+    Values less than zero can be set and indicate the media will rewind at the
+    multiplier of the standard pace.
+
+    Not all playback services support change of the playback rate. It is
+    framework defined as to the status and quality of audio and video
+    while fast forwarding or rewinding.
+*/
+
+/*!
+    \fn void QMediaPlayer::durationChanged(qint64 duration)
+
+    Signal the duration of the content has changed to \a duration, expressed in milliseconds.
+*/
+
+/*!
+    \fn void QMediaPlayer::positionChanged(qint64 position)
+
+    Signal the position of the content has changed to \a position, expressed in
+    milliseconds.
+*/
+
+/*!
+    \fn void QMediaPlayer::volumeChanged(int volume)
+
+    Signal the playback volume has changed to \a volume.
+*/
+
+/*!
+    \fn void QMediaPlayer::mutedChanged(bool muted)
+
+    Signal the mute state has changed to \a muted.
+*/
+
+/*!
+    \fn void QMediaPlayer::audioAvailableChanged(bool available)
+
+    Signals the availability of audio content has changed to \a available.
+*/
+
+/*!
+    \fn void QMediaPlayer::videoAvailableChanged(bool videoAvailable)
+
+    Signal the availability of visual content has changed to \a videoAvailable.
+*/
+
+/*!
+    \fn void QMediaPlayer::bufferStatusChanged(int percentFilled)
+
+    Signal the amount of the local buffer filled as a percentage by \a percentFilled.
+*/
+
+/*!
+    \enum QMediaPlayer::Flag
+
+    \value LowLatency
+            The player is expected to be used with simple audio formats,
+            but playback should start without significant delay.
+            Such playback service can be used for beeps, ringtones, etc.
+
+    \value StreamPlayback
+            The player is expected to play QIODevice based streams.
+            If passed to QMediaPlayer constructor, the service supporting
+            streams playback will be choosen.
+*/
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#include "moc_qmediaplayer.cpp"
diff --git a/src/multimedia/mediaservices/playback/qmediaplayer.h b/src/multimedia/mediaservices/playback/qmediaplayer.h
new file mode 100644
index 0000000..2b4c443
--- /dev/null
+++ b/src/multimedia/mediaservices/playback/qmediaplayer.h
@@ -0,0 +1,203 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYER_H
+#define QMEDIAPLAYER_H
+
+#include <QtMediaservices/qmediaserviceprovider.h>
+#include <QtMediaservices/qmediaobject.h>
+#include <QtMediaservices/qmediacontent.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QMediaPlaylist;
+
+class QMediaPlayerPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaPlayer : public QMediaObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QMediaContent media READ media WRITE setMedia NOTIFY mediaChanged)
+    Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged)
+    Q_PROPERTY(qint64 position READ position WRITE setPosition NOTIFY positionChanged)
+    Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged)
+    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
+    Q_PROPERTY(int bufferStatus READ bufferStatus NOTIFY bufferStatusChanged)
+    Q_PROPERTY(bool audioAvailable READ isAudioAvailable NOTIFY audioAvailableChanged)
+    Q_PROPERTY(bool videoAvailable READ isVideoAvailable NOTIFY videoAvailableChanged)
+    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
+    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
+    Q_PROPERTY(State state READ state NOTIFY stateChanged)
+    Q_PROPERTY(MediaStatus mediaStatus READ mediaStatus NOTIFY mediaStatusChanged)
+    Q_PROPERTY(QString error READ errorString)
+    Q_ENUMS(State)
+    Q_ENUMS(MediaStatus)
+
+public:
+    enum State
+    {
+        StoppedState,
+        PlayingState,
+        PausedState
+    };
+
+    enum MediaStatus
+    {
+        UnknownMediaStatus,
+        NoMedia,
+        LoadingMedia,
+        LoadedMedia,
+        StalledMedia,
+        BufferingMedia,
+        BufferedMedia,
+        EndOfMedia,
+        InvalidMedia
+    };
+
+    enum Flag
+    {
+        LowLatency = 0x01,
+        StreamPlayback = 0x02
+    };
+    Q_DECLARE_FLAGS(Flags, Flag)
+
+    enum Error
+    {
+        NoError,
+        ResourceError,
+        FormatError,
+        NetworkError,
+        AccessDeniedError,
+        ServiceMissingError
+    };
+
+    QMediaPlayer(QObject *parent = 0, Flags flags = 0, QMediaServiceProvider *provider = QMediaServiceProvider::defaultServiceProvider());
+    ~QMediaPlayer();
+
+    static QtMediaservices::SupportEstimate hasSupport(const QString &mimeType,
+                                            const QStringList& codecs = QStringList(),
+                                            Flags flags = 0);
+    static QStringList supportedMimeTypes(Flags flags = 0);
+
+    QMediaContent media() const;
+    const QIODevice *mediaStream() const;
+
+    State state() const;
+    MediaStatus mediaStatus() const;
+
+    qint64 duration() const;
+    qint64 position() const;
+
+    int volume() const;
+    bool isMuted() const;
+    bool isAudioAvailable() const;
+    bool isVideoAvailable() const;
+
+    int bufferStatus() const;
+
+    bool isSeekable() const;
+    qreal playbackRate() const;
+
+    Error error() const;
+    QString errorString() const;
+
+public Q_SLOTS:
+    void play();
+    void pause();
+    void stop();
+
+    void setPosition(qint64 position);
+    void setVolume(int volume);
+    void setMuted(bool muted);
+
+    void setPlaybackRate(qreal rate);
+
+    void setMedia(const QMediaContent &media, QIODevice *stream = 0);
+
+Q_SIGNALS:
+    void mediaChanged(const QMediaContent &media);
+
+    void stateChanged(QMediaPlayer::State newState);
+    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
+
+    void durationChanged(qint64 duration);
+    void positionChanged(qint64 position);
+
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void audioAvailableChanged(bool audioAvailable);
+    void videoAvailableChanged(bool videoAvailable);
+
+    void bufferStatusChanged(int percentFilled);
+
+    void seekableChanged(bool seekable);
+    void playbackRateChanged(qreal rate);
+
+    void error(QMediaPlayer::Error error);
+
+public:
+    virtual void bind(QObject*);
+    virtual void unbind(QObject*);
+
+private:
+    Q_DISABLE_COPY(QMediaPlayer)
+    Q_DECLARE_PRIVATE(QMediaPlayer)
+    Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QMediaPlayer::State))
+    Q_PRIVATE_SLOT(d_func(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
+    Q_PRIVATE_SLOT(d_func(), void _q_error(int, const QString &))
+    Q_PRIVATE_SLOT(d_func(), void _q_updateMedia(const QMediaContent&))
+    Q_PRIVATE_SLOT(d_func(), void _q_playlistDestroyed())
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QMediaPlayer::State)
+Q_DECLARE_METATYPE(QMediaPlayer::MediaStatus)
+Q_DECLARE_METATYPE(QMediaPlayer::Error)
+
+QT_END_HEADER
+
+#endif  // QMEDIAPLAYER_H
diff --git a/src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp b/src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp
new file mode 100644
index 0000000..3b63d93
--- /dev/null
+++ b/src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp
@@ -0,0 +1,378 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaservices/private/qmediacontrol_p.h>
+#include <QtMediaservices/qmediaplayer.h>
+
+
+QT_BEGIN_NAMESPACE
+
+
+/*!
+    \class QMediaPlayerControl
+    \ingroup multimedia-serv
+    \since 4.7
+    \preliminary
+    \brief The QMediaPlayerControl class provides access to the media playing
+    functionality of a QMediaService.
+
+    If a QMediaService can play media is will implement QMediaPlayerControl.
+    This control provides a means to set the \l {setMedia()}{media} to play,
+    \l {play()}{start}, \l {pause()} {pause} and \l {stop()}{stop} playback,
+    \l {setPosition()}{seek}, and control the \l {setVolume()}{volume}.
+    It also provides feedback on the \l {duration()}{duration} of the media,
+    the current \l {position()}{position}, and \l {bufferStatus()}{buffering}
+    progress.
+
+    The functionality provided by this control is exposed to application
+    code through the QMediaPlayer class.
+
+    The interface name of QMediaPlayerControl is \c com.nokia.Qt.QMediaPlayerControl/1.0 as
+    defined in QMediaPlayerControl_iid.
+
+    \sa QMediaService::control(), QMediaPlayer
+*/
+
+/*!
+    \macro QMediaPlayerControl_iid
+
+    \c com.nokia.Qt.QMediaPlayerControl/1.0
+
+    Defines the interface name of the QMediaPlayerControl class.
+
+    \relates QMediaPlayerControl
+*/
+
+/*!
+    Destroys a media player control.
+*/
+QMediaPlayerControl::~QMediaPlayerControl()
+{
+}
+
+/*!
+    Constructs a new media player control with the given \a parent.
+*/
+QMediaPlayerControl::QMediaPlayerControl(QObject *parent):
+    QMediaControl(*new QMediaControlPrivate, parent)
+{
+}
+
+/*!
+    \fn QMediaPlayerControl::state() const
+
+    Returns the state of a player control.
+*/
+
+/*!
+    \fn QMediaPlayerControl::stateChanged(QMediaPlayer::State state)
+
+    Signals that the \a state of a player control has changed.
+
+    \sa state()
+*/
+
+/*!
+    \fn QMediaPlayerControl::mediaStatus() const
+
+    Returns the status of the current media.
+*/
+
+/*!
+    \fn QMediaPlayerControl::mediaStatusChanged(QMediaPlayer::MediaStatus status)
+
+    Signals that the \a status of the current media has changed.
+
+    \sa mediaStatus()
+*/
+
+
+/*!
+    \fn QMediaPlayerControl::duration() const
+
+    Returns the duration of the current media in milliseconds.
+*/
+
+/*!
+    \fn QMediaPlayerControl::durationChanged(qint64 duration)
+
+    Signals that the \a duration of the current media has changed.
+
+    \sa duration()
+*/
+
+/*!
+    \fn QMediaPlayerControl::position() const
+
+    Returns the current playback position in milliseconds.
+*/
+
+/*!
+    \fn QMediaPlayerControl::setPosition(qint64 position)
+
+    Sets the playback \a position of the current media.  This will initiate a seek and it may take
+    some time for playback to reach the position set.
+*/
+
+/*!
+    \fn QMediaPlayerControl::positionChanged(qint64 position)
+
+    Signals the playback \a position has changed.
+
+    This is only emitted in when there has been a discontinous change in the playback postion, such
+    as a seek or the position being reset.
+
+    \sa position()
+*/
+
+/*!
+    \fn QMediaPlayerControl::volume() const
+
+    Returns the audio volume of a player control.
+*/
+
+/*!
+    \fn QMediaPlayerControl::setVolume(int volume)
+
+    Sets the audio \a volume of a player control.
+*/
+
+/*!
+    \fn QMediaPlayerControl::volumeChanged(int volume)
+
+    Signals the audio \a volume of a player control has changed.
+
+    \sa volume()
+*/
+
+/*!
+    \fn QMediaPlayerControl::isMuted() const
+
+    Returns the mute state of a player control.
+*/
+
+/*!
+    \fn QMediaPlayerControl::setMuted(bool mute)
+
+    Sets the \a mute state of a player control.
+*/
+
+/*!
+    \fn QMediaPlayerControl::mutedChanged(bool mute)
+
+    Signals a change in the \a mute status of a player control.
+
+    \sa isMuted()
+*/
+
+/*!
+    \fn QMediaPlayerControl::bufferStatus() const
+
+    Returns the buffering progress of the current media.  Progress is measured in the percentage
+    of the buffer filled.
+*/
+
+/*!
+    \fn QMediaPlayerControl::bufferStatusChanged(int progress)
+
+    Signals that buffering \a progress has changed.
+
+    \sa bufferStatus()
+*/
+
+/*!
+    \fn QMediaPlayerControl::isAudioAvailable() const
+
+    Identifies if there is audio output available for the current media.
+
+    Returns true if audio output is available and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlayerControl::audioAvailableChanged(bool audio)
+
+    Signals that there has been a change in the availability of \a audio output.
+
+    \sa isAudioAvailable()
+*/
+
+/*!
+    \fn QMediaPlayerControl::isVideoAvailable() const
+
+    Identifies if there is video output available for the current media.
+
+    Returns true if video output is available and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlayerControl::videoAvailableChanged(bool video)
+
+    Signals that there has been a change in the availability of \a video output.
+
+    \sa isVideoAvailable()
+*/
+
+/*!
+    \fn QMediaPlayerControl::isSeekable() const
+
+    Identifies if the current media is seekable.
+
+    Returns true if it possible to seek within the current media, and false otherwise.
+*/
+
+/*!
+    \fn QMediaPlayerControl::seekableChanged(bool seekable)
+
+    Signals that the \a seekable state of a player control has changed.
+
+    \sa isSeekable()
+*/
+
+/*!
+    \fn QMediaPlayerControl::availablePlaybackRanges() const
+
+    Returns a range of times in milliseconds that can be played back.
+
+    Usually for local files this is a continuous interval equal to [0..duration()]
+    or an empty time range if seeking is not supported, but for network sources
+    it refers to the buffered parts of the media.
+*/
+
+/*!
+    \fn QMediaPlayerControl::availablePlaybackRangesChanged(const QMediaTimeRange &ranges)
+
+    Signals that the available media playback \a ranges have changed.
+
+    \sa QMediaPlayerControl::availablePlaybackRanges()
+*/
+
+/*!
+    \fn qreal QMediaPlayerControl::playbackRate() const
+
+    Returns the rate of playback.
+*/
+
+/*!
+    \fn QMediaPlayerControl::setPlaybackRate(qreal rate)
+
+    Sets the \a rate of playback.
+*/
+
+/*!
+    \fn QMediaPlayerControl::media() const
+
+    Returns the current media source.
+*/
+
+/*!
+    \fn QMediaPlayerControl::mediaStream() const
+
+    Returns the current media stream. This is only a valid if a stream was passed to setMedia().
+
+    \sa setMedia()
+*/
+
+/*!
+    \fn QMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream)
+
+    Sets the current \a media source.  If a \a stream is supplied; data will be read from that
+    instead of attempting to resolve the media source.  The media source may still be used to
+    supply media information such as mime type.
+
+    Setting the media to a null QMediaContent will cause the control to discard all
+    information relating to the current media source and to cease all I/O operations related
+    to that media.
+*/
+
+/*!
+    \fn QMediaPlayerControl::mediaChanged(const QMediaContent& content)
+
+    Signals that the current media \a content has changed.
+*/
+
+/*!
+    \fn QMediaPlayerControl::play()
+
+    Starts playback of the current media.
+
+    If successful the player control will immediately enter the \l {QMediaPlayer::PlayingState}
+    {playing} state.
+
+    \sa state()
+*/
+
+/*!
+    \fn QMediaPlayerControl::pause()
+
+    Pauses playback of the current media.
+
+    If sucessful the player control will immediately enter the \l {QMediaPlayer::PausedState}
+    {paused} state.
+
+    \sa state(), play(), stop()
+*/
+
+/*!
+    \fn QMediaPlayerControl::stop()
+
+    Stops playback of the current media.
+
+    If succesful the player control will immediately enter the \l {QMediaPlayer::StoppedState}
+    {stopped} state.
+*/
+
+/*!
+    \fn QMediaPlayerControl::error(int error, const QString &errorString)
+
+    Signals that an \a error has occurred.  The \a errorString provides a more detailed explanation.
+*/
+
+/*!
+    \fn QMediaPlayerControl::playbackRateChanged(qreal rate)
+
+    Signal emitted when playback rate changes to \a rate.
+*/
+
+QT_END_NAMESPACE
+
+#include "moc_qmediaplayercontrol.cpp"
+
diff --git a/src/multimedia/mediaservices/playback/qmediaplayercontrol.h b/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
new file mode 100644
index 0000000..be10713
--- /dev/null
+++ b/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMediaservices module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEDIAPLAYERCONTROL_H
+#define QMEDIAPLAYERCONTROL_H
+
+#include <QtCore/qpair.h>
+
+#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaservices/qmediatimerange.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QMediaPlaylist;
+
+class Q_MULTIMEDIA_EXPORT QMediaPlayerControl : public QMediaControl
+{
+    Q_OBJECT
+
+public:
+    ~QMediaPlayerControl();
+
+    virtual QMediaPlayer::State state() const = 0;
+
+    virtual QMediaPlayer::MediaStatus mediaStatus() const = 0;
+
+    virtual qint64 duration() const = 0;
+
+    virtual qint64 position() const = 0;
+    virtual void setPosition(qint64 position) = 0;
+
+    virtual int volume() const = 0;
+    virtual void setVolume(int volume) = 0;
+
+    virtual bool isMuted() const = 0;
+    virtual void setMuted(bool muted) = 0;
+
+    virtual int bufferStatus() const = 0;
+
+    virtual bool isAudioAvailable() const = 0;
+    virtual bool isVideoAvailable() const = 0;
+
+    virtual bool isSeekable() const = 0;
+
+    virtual QMediaTimeRange availablePlaybackRanges() const = 0;
+
+    virtual qreal playbackRate() const = 0;
+    virtual void setPlaybackRate(qreal rate) = 0;
+
+    virtual QMediaContent media() const = 0;
+    virtual const QIODevice *mediaStream() const = 0;
+    virtual void setMedia(const QMediaContent &media, QIODevice *stream) = 0;
+
+    virtual void play() = 0;
+    virtual void pause() = 0;
+    virtual void stop() = 0;
+
+Q_SIGNALS:
+    void mediaChanged(const QMediaContent& content);
+    void durationChanged(qint64 duration);
+    void positionChanged(qint64 position);
+    void stateChanged(QMediaPlayer::State newState);
+    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void audioAvailableChanged(bool audioAvailable);
+    void videoAvailableChanged(bool videoAvailable);
+    void bufferStatusChanged(int percentFilled);
+    void seekableChanged(bool);
+    void availablePlaybackRangesChanged(const QMediaTimeRange&);
+    void playbackRateChanged(qreal rate);
+    void error(int error, const QString &errorString);
+
+protected:
+    QMediaPlayerControl(QObject* parent = 0);
+};
+
+#define QMediaPlayerControl_iid "com.nokia.Qt.QMediaPlayerControl/1.0"
+Q_MEDIA_DECLARE_CONTROL(QMediaPlayerControl, QMediaPlayerControl_iid)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QMEDIAPLAYERCONTROL_H
+
diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro
index 500aff7..8cdcb38 100644
--- a/src/multimedia/multimedia.pro
+++ b/src/multimedia/multimedia.pro
@@ -1,17 +1,8 @@
-TARGET = QtMultimedia
-QPRO_PWD = $$PWD
-QT = core gui
+TEMPLATE = subdirs
 
-DEFINES += QT_BUILD_MULTIMEDIA_LIB QT_NO_USING_NAMESPACE
+contains(QT_CONFIG, multimedia) {
+    SUBDIRS += multimedia
 
-unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui
+    contains(QT_CONFIG, mediaservices):SUBDIRS += mediaservices
+}
 
-include(../qbase.pri)
-
-include(audio/audio.pri)
-include(video/video.pri)
-include(base/base.pri)
-include(playback/playback.pri)
-include(effects/effects.pri)
-
-symbian: TARGET.UID3 = 0x2001E627
diff --git a/src/multimedia/multimedia/audio/audio.pri b/src/multimedia/multimedia/audio/audio.pri
new file mode 100644
index 0000000..ae28a26
--- /dev/null
+++ b/src/multimedia/multimedia/audio/audio.pri
@@ -0,0 +1,73 @@
+HEADERS += $$PWD/qaudio.h \
+           $$PWD/qaudioformat.h \
+           $$PWD/qaudioinput.h \
+           $$PWD/qaudiooutput.h \
+           $$PWD/qaudiodeviceinfo.h \
+           $$PWD/qaudioengineplugin.h \
+           $$PWD/qaudioengine.h \
+           $$PWD/qaudiodevicefactory_p.h
+
+
+SOURCES += $$PWD/qaudio.cpp \
+           $$PWD/qaudioformat.cpp  \
+           $$PWD/qaudiodeviceinfo.cpp \
+           $$PWD/qaudiooutput.cpp \
+           $$PWD/qaudioinput.cpp \
+           $$PWD/qaudioengineplugin.cpp \
+           $$PWD/qaudioengine.cpp \
+           $$PWD/qaudiodevicefactory.cpp
+
+contains(QT_CONFIG, audio-backend) {
+
+mac {
+    HEADERS +=  $$PWD/qaudioinput_mac_p.h \
+                $$PWD/qaudiooutput_mac_p.h \
+                $$PWD/qaudiodeviceinfo_mac_p.h \
+                $$PWD/qaudio_mac_p.h
+
+    SOURCES += $$PWD/qaudiodeviceinfo_mac_p.cpp \
+               $$PWD/qaudiooutput_mac_p.cpp \
+               $$PWD/qaudioinput_mac_p.cpp \
+               $$PWD/qaudio_mac.cpp
+
+    LIBS += -framework ApplicationServices -framework CoreAudio -framework AudioUnit -framework AudioToolbox
+
+} else:win32 {
+
+    HEADERS += $$PWD/qaudioinput_win32_p.h $$PWD/qaudiooutput_win32_p.h $$PWD/qaudiodeviceinfo_win32_p.h
+    SOURCES += $$PWD/qaudiodeviceinfo_win32_p.cpp \
+               $$PWD/qaudiooutput_win32_p.cpp \
+               $$PWD/qaudioinput_win32_p.cpp
+    !wince*:LIBS += -lwinmm
+    wince*:LIBS += -lcoredll
+
+} else:symbian {
+    INCLUDEPATH += /epoc32/include/mmf/common
+    INCLUDEPATH += /epoc32/include/mmf/server
+
+    HEADERS += $$PWD/qaudio_symbian_p.h \
+               $$PWD/qaudiodeviceinfo_symbian_p.h \
+               $$PWD/qaudioinput_symbian_p.h \
+               $$PWD/qaudiooutput_symbian_p.h
+
+    SOURCES += $$PWD/qaudio_symbian_p.cpp \
+               $$PWD/qaudiodeviceinfo_symbian_p.cpp \
+               $$PWD/qaudioinput_symbian_p.cpp \
+               $$PWD/qaudiooutput_symbian_p.cpp
+
+    LIBS += -lmmfdevsound
+} else:unix {
+    unix:contains(QT_CONFIG, alsa) {
+        linux-*|freebsd-*|openbsd-*:{
+            DEFINES += HAS_ALSA
+            HEADERS += $$PWD/qaudiooutput_alsa_p.h $$PWD/qaudioinput_alsa_p.h $$PWD/qaudiodeviceinfo_alsa_p.h
+            SOURCES += $$PWD/qaudiodeviceinfo_alsa_p.cpp \
+                   $$PWD/qaudiooutput_alsa_p.cpp \
+                   $$PWD/qaudioinput_alsa_p.cpp
+            LIBS_PRIVATE += -lasound
+        }
+    }
+}
+} else {
+    DEFINES += QT_NO_AUDIO_BACKEND
+}
diff --git a/src/multimedia/multimedia/audio/qaudio.cpp b/src/multimedia/multimedia/audio/qaudio.cpp
new file mode 100644
index 0000000..e0f24ce
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudio.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtMultimedia/qaudio.h>
+
+
+QT_BEGIN_NAMESPACE
+
+namespace QAudio
+{
+
+class RegisterMetaTypes
+{
+public:
+    RegisterMetaTypes()
+    {
+        qRegisterMetaType<QAudio::Error>();
+        qRegisterMetaType<QAudio::State>();
+        qRegisterMetaType<QAudio::Mode>();
+    }
+
+} _register;
+
+}
+
+/*!
+    \namespace QAudio
+    \brief The QAudio namespace contains enums used by the audio classes.
+    \inmodule QtMultimedia
+    \ingroup multimedia
+    \since 4.6
+*/
+
+/*!
+    \enum QAudio::Error
+
+    \value NoError         No errors have occurred
+    \value OpenError       An error opening the audio device
+    \value IOError         An error occurred during read/write of audio device
+    \value UnderrunError   Audio data is not being fed to the audio device at a fast enough rate
+    \value FatalError      A non-recoverable error has occurred, the audio device is not usable at this time.
+*/
+
+/*!
+    \enum QAudio::State
+
+    \value ActiveState     Audio data is being processed, this state is set after start() is called
+                           and while audio data is available to be processed.
+    \value SuspendedState  The audio device is in a suspended state, this state will only be entered
+                           after suspend() is called.
+    \value StoppedState    The audio device is closed, not processing any audio data
+    \value IdleState       The QIODevice passed in has no data and audio system's buffer is empty, this state
+                           is set after start() is called and while no audio data is available to be processed.
+*/
+
+/*!
+    \enum QAudio::Mode
+
+    \value AudioOutput   audio output device
+    \value AudioInput    audio input device
+*/
+
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/multimedia/audio/qaudio.h b/src/multimedia/multimedia/audio/qaudio.h
new file mode 100644
index 0000000..9ca1dff
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudio.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QAUDIO_H
+#define QAUDIO_H
+
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qmetatype.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+namespace QAudio
+{
+    enum Error { NoError, OpenError, IOError, UnderrunError, FatalError };
+    enum State { ActiveState, SuspendedState, StoppedState, IdleState };
+    enum Mode { AudioInput, AudioOutput };
+}
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+Q_DECLARE_METATYPE(QAudio::Error)
+Q_DECLARE_METATYPE(QAudio::State)
+Q_DECLARE_METATYPE(QAudio::Mode)
+
+#endif // QAUDIO_H
diff --git a/src/multimedia/multimedia/audio/qaudio_mac.cpp b/src/multimedia/multimedia/audio/qaudio_mac.cpp
new file mode 100644
index 0000000..14fee8b
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudio_mac.cpp
@@ -0,0 +1,142 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include "qaudio_mac_p.h"
+
+QT_BEGIN_NAMESPACE
+
+// Debugging
+QDebug operator<<(QDebug dbg, const QAudioFormat& audioFormat)
+{
+    dbg.nospace() << "QAudioFormat(" <<
+            audioFormat.frequency() << "," <<
+            audioFormat.channels() << "," <<
+            audioFormat.sampleSize()<< "," <<
+            audioFormat.codec() << "," <<
+            audioFormat.byteOrder() << "," <<
+            audioFormat.sampleType() << ")";
+
+    return dbg.space();
+}
+
+
+// Conversion
+QAudioFormat toQAudioFormat(AudioStreamBasicDescription const& sf)
+{
+    QAudioFormat    audioFormat;
+
+    audioFormat.setFrequency(sf.mSampleRate);
+    audioFormat.setChannels(sf.mChannelsPerFrame);
+    audioFormat.setSampleSize(sf.mBitsPerChannel);
+    audioFormat.setCodec(QString::fromLatin1("audio/pcm"));
+    audioFormat.setByteOrder(sf.mFormatFlags & kLinearPCMFormatFlagIsBigEndian != 0 ? QAudioFormat::BigEndian : QAudioFormat::LittleEndian);
+    QAudioFormat::SampleType type = QAudioFormat::UnSignedInt;
+    if ((sf.mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) != 0)
+        type = QAudioFormat::SignedInt;
+    else if ((sf.mFormatFlags & kLinearPCMFormatFlagIsFloat) != 0)
+        type = QAudioFormat::Float;
+    audioFormat.setSampleType(type);
+
+    return audioFormat;
+}
+
+AudioStreamBasicDescription toAudioStreamBasicDescription(QAudioFormat const& audioFormat)
+{
+    AudioStreamBasicDescription sf;
+
+    sf.mFormatFlags         = kAudioFormatFlagIsPacked;
+    sf.mSampleRate          = audioFormat.frequency();
+    sf.mFramesPerPacket     = 1;
+    sf.mChannelsPerFrame    = audioFormat.channels();
+    sf.mBitsPerChannel      = audioFormat.sampleSize();
+    sf.mBytesPerFrame       = sf.mChannelsPerFrame * (sf.mBitsPerChannel / 8);
+    sf.mBytesPerPacket      = sf.mFramesPerPacket * sf.mBytesPerFrame;
+    sf.mFormatID            = kAudioFormatLinearPCM;
+
+    switch (audioFormat.sampleType()) {
+    case QAudioFormat::SignedInt: sf.mFormatFlags |= kAudioFormatFlagIsSignedInteger; break;
+    case QAudioFormat::UnSignedInt: /* default */ break;
+    case QAudioFormat::Float: sf.mFormatFlags |= kAudioFormatFlagIsFloat; break;
+    case QAudioFormat::Unknown:  default: break;
+    }
+
+    return sf;
+}
+
+// QAudioRingBuffer
+QAudioRingBuffer::QAudioRingBuffer(int bufferSize):
+    m_bufferSize(bufferSize)
+{
+    m_buffer = new char[m_bufferSize];
+    reset();
+}
+
+QAudioRingBuffer::~QAudioRingBuffer()
+{
+    delete m_buffer;
+}
+
+int QAudioRingBuffer::used() const
+{
+    return m_bufferUsed;
+}
+
+int QAudioRingBuffer::free() const
+{
+    return m_bufferSize - m_bufferUsed;
+}
+
+int QAudioRingBuffer::size() const
+{
+    return m_bufferSize;
+}
+
+void QAudioRingBuffer::reset()
+{
+    m_readPos = 0;
+    m_writePos = 0;
+    m_bufferUsed = 0;
+}
+
+QT_END_NAMESPACE
+
+
diff --git a/src/multimedia/multimedia/audio/qaudio_mac_p.h b/src/multimedia/multimedia/audio/qaudio_mac_p.h
new file mode 100644
index 0000000..4e7d688
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudio_mac_p.h
@@ -0,0 +1,144 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#ifndef QAUDIO_MAC_P_H
+#define QAUDIO_MAC_P_H
+
+#include <CoreAudio/CoreAudio.h>
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qatomic.h>
+
+#include <QtMultimedia/qaudioformat.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+extern QDebug operator<<(QDebug dbg, const QAudioFormat& audioFormat);
+
+extern QAudioFormat toQAudioFormat(const AudioStreamBasicDescription& streamFormat);
+extern AudioStreamBasicDescription toAudioStreamBasicDescription(QAudioFormat const& audioFormat);
+
+class QAudioRingBuffer
+{
+public:
+    typedef QPair<char*, int> Region;
+
+    QAudioRingBuffer(int bufferSize);
+    ~QAudioRingBuffer();
+
+    Region acquireReadRegion(int size)
+    {
+        const int used = m_bufferUsed.fetchAndAddAcquire(0);
+
+        if (used > 0) {
+            const int readSize = qMin(size, qMin(m_bufferSize - m_readPos, used));
+
+            return readSize > 0 ? Region(m_buffer + m_readPos, readSize) : Region(0, 0);
+        }
+
+        return Region(0, 0);
+    }
+
+    void releaseReadRegion(Region const& region)
+    {
+        m_readPos = (m_readPos + region.second) % m_bufferSize;
+
+        m_bufferUsed.fetchAndAddRelease(-region.second);
+    }
+
+    Region acquireWriteRegion(int size)
+    {
+        const int free = m_bufferSize - m_bufferUsed.fetchAndAddAcquire(0);
+
+        if (free > 0) {
+            const int writeSize = qMin(size, qMin(m_bufferSize - m_writePos, free));
+
+            return writeSize > 0 ? Region(m_buffer + m_writePos, writeSize) : Region(0, 0);
+        }
+
+        return Region(0, 0);
+    }
+
+    void releaseWriteRegion(Region const& region)
+    {
+        m_writePos = (m_writePos + region.second) % m_bufferSize;
+
+        m_bufferUsed.fetchAndAddRelease(region.second);
+    }
+
+    int used() const;
+    int free() const;
+    int size() const;
+
+    void reset();
+
+private:
+    int     m_bufferSize;
+    int     m_readPos;
+    int     m_writePos;
+    char*   m_buffer;
+    QAtomicInt  m_bufferUsed;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QAUDIO_MAC_P_H
+
+
diff --git a/src/multimedia/multimedia/audio/qaudio_symbian_p.cpp b/src/multimedia/multimedia/audio/qaudio_symbian_p.cpp
new file mode 100644
index 0000000..58e3745
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudio_symbian_p.cpp
@@ -0,0 +1,395 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudio_symbian_p.h"
+#include <mmffourcc.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace SymbianAudio {
+
+DevSoundCapabilities::DevSoundCapabilities(CMMFDevSound &devsound,
+                                           QAudio::Mode mode)
+{
+    QT_TRAP_THROWING(constructL(devsound, mode));
+}
+
+DevSoundCapabilities::~DevSoundCapabilities()
+{
+    m_fourCC.Close();
+}
+
+void DevSoundCapabilities::constructL(CMMFDevSound &devsound,
+                                      QAudio::Mode mode)
+{
+    m_caps = devsound.Capabilities();
+
+    TMMFPrioritySettings settings;
+
+    switch (mode) {
+    case QAudio::AudioOutput:
+        settings.iState = EMMFStatePlaying;
+        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
+        break;
+
+    case QAudio::AudioInput:
+        settings.iState = EMMFStateRecording;
+        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
+        break;
+
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
+    }
+}
+
+namespace Utils {
+
+//-----------------------------------------------------------------------------
+// Static data
+//-----------------------------------------------------------------------------
+
+// Sample rate / frequency
+
+typedef TMMFSampleRate SampleRateNative;
+typedef int SampleRateQt;
+
+const int SampleRateCount = 12;
+
+const SampleRateNative SampleRateListNative[SampleRateCount] = {
+        EMMFSampleRate8000Hz
+    ,   EMMFSampleRate11025Hz
+    ,   EMMFSampleRate12000Hz
+    ,   EMMFSampleRate16000Hz
+    ,   EMMFSampleRate22050Hz
+    ,   EMMFSampleRate24000Hz
+    ,   EMMFSampleRate32000Hz
+    ,   EMMFSampleRate44100Hz
+    ,   EMMFSampleRate48000Hz
+    ,   EMMFSampleRate64000Hz
+    ,   EMMFSampleRate88200Hz
+    ,   EMMFSampleRate96000Hz
+};
+
+const SampleRateQt SampleRateListQt[SampleRateCount] = {
+        8000
+    ,   11025
+    ,   12000
+    ,   16000
+    ,   22050
+    ,   24000
+    ,   32000
+    ,   44100
+    ,   48000
+    ,   64000
+    ,   88200
+    ,   96000
+};
+
+// Channels
+
+typedef TMMFMonoStereo ChannelsNative;
+typedef int ChannelsQt;
+
+const int ChannelsCount = 2;
+
+const ChannelsNative ChannelsListNative[ChannelsCount] = {
+        EMMFMono
+    ,   EMMFStereo
+};
+
+const ChannelsQt ChannelsListQt[ChannelsCount] = {
+        1
+    ,   2
+};
+
+// Encoding
+
+const int EncodingCount = 6;
+
+const TUint32 EncodingFourCC[EncodingCount] = {
+        KMMFFourCCCodePCM8              // 0
+    ,   KMMFFourCCCodePCMU8             // 1
+    ,   KMMFFourCCCodePCM16             // 2
+    ,   KMMFFourCCCodePCMU16            // 3
+    ,   KMMFFourCCCodePCM16B            // 4
+    ,   KMMFFourCCCodePCMU16B           // 5
+};
+
+// The characterised DevSound API specification states that the iEncoding
+// field in TMMFCapabilities is ignored, and that the FourCC should be used
+// to specify the PCM encoding.
+// See "SGL.GT0287.102 Multimedia DevSound Baseline Compatibility.doc" in the
+// mm_info/mm_docs repository.
+const TMMFSoundEncoding EncodingNative[EncodingCount] = {
+        EMMFSoundEncoding16BitPCM       // 0
+    ,   EMMFSoundEncoding16BitPCM       // 1
+    ,   EMMFSoundEncoding16BitPCM       // 2
+    ,   EMMFSoundEncoding16BitPCM       // 3
+    ,   EMMFSoundEncoding16BitPCM       // 4
+    ,   EMMFSoundEncoding16BitPCM       // 5
+};
+
+
+const int EncodingSampleSize[EncodingCount] = {
+        8                               // 0
+    ,   8                               // 1
+    ,   16                              // 2
+    ,   16                              // 3
+    ,   16                              // 4
+    ,   16                              // 5
+};
+
+const QAudioFormat::Endian EncodingByteOrder[EncodingCount] = {
+        QAudioFormat::LittleEndian      // 0
+    ,   QAudioFormat::LittleEndian      // 1
+    ,   QAudioFormat::LittleEndian      // 2
+    ,   QAudioFormat::LittleEndian      // 3
+    ,   QAudioFormat::BigEndian         // 4
+    ,   QAudioFormat::BigEndian         // 5
+};
+
+const QAudioFormat::SampleType EncodingSampleType[EncodingCount] = {
+        QAudioFormat::SignedInt         // 0
+    ,   QAudioFormat::UnSignedInt       // 1
+    ,   QAudioFormat::SignedInt         // 2
+    ,   QAudioFormat::UnSignedInt       // 3
+    ,   QAudioFormat::SignedInt         // 4
+    ,   QAudioFormat::UnSignedInt       // 5
+};
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+// Helper functions for implementing parameter conversions
+
+template<typename Input>
+bool findValue(const Input *inputArray, int length, Input input, int &index) {
+    bool result = false;
+    for (int i=0; !result && i<length; ++i)
+        if (inputArray[i] == input) {
+            index = i;
+            result = true;
+        }
+    return result;
+}
+
+template<typename Input, typename Output>
+bool convertValue(const Input *inputArray, const Output *outputArray,
+    int length, Input input, Output &output) {
+    int index;
+    const bool result = findValue<Input>(inputArray, length, input, index);
+    if (result)
+        output = outputArray[index];
+    return result;
+}
+
+/**
+ * Macro which is used to generate the implementation of the conversion
+ * functions.  The implementation is just a wrapper around the templated
+ * convertValue function, e.g.
+ *
+ * CONVERSION_FUNCTION_IMPL(SampleRate, Qt, Native)
+ *
+ * expands to
+ *
+ * bool SampleRateQtToNative(int input, TMMFSampleRate &output) {
+ *      return convertValue<SampleRateQt, SampleRateNative>
+ *          (SampleRateListQt, SampleRateListNative, SampleRateCount,
+ *          input, output);
+ * }
+ */
+#define CONVERSION_FUNCTION_IMPL(FieldLc, Field, Input, Output)               \
+bool FieldLc##Input##To##Output(Field##Input input, Field##Output &output) {  \
+    return convertValue<Field##Input, Field##Output>(Field##List##Input,      \
+        Field##List##Output, Field##Count, input, output);                    \
+}
+
+//-----------------------------------------------------------------------------
+// Local helper functions
+//-----------------------------------------------------------------------------
+
+CONVERSION_FUNCTION_IMPL(sampleRate, SampleRate, Qt, Native)
+CONVERSION_FUNCTION_IMPL(sampleRate, SampleRate, Native, Qt)
+CONVERSION_FUNCTION_IMPL(channels, Channels, Qt, Native)
+CONVERSION_FUNCTION_IMPL(channels, Channels, Native, Qt)
+
+bool sampleInfoQtToNative(int inputSampleSize,
+                          QAudioFormat::Endian inputByteOrder,
+                          QAudioFormat::SampleType inputSampleType,
+                          TUint32 &outputFourCC,
+                          TMMFSoundEncoding &outputEncoding) {
+
+    bool found = false;
+
+    for (int i=0; i<EncodingCount && !found; ++i) {
+        if (    EncodingSampleSize[i] == inputSampleSize
+            &&  EncodingByteOrder[i] == inputByteOrder
+            &&  EncodingSampleType[i] == inputSampleType) {
+            outputFourCC = EncodingFourCC[i];
+            outputEncoding = EncodingNative[i]; // EMMFSoundEncoding16BitPCM
+            found = true;
+        }
+    }
+
+    return found;
+}
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
+                            QList<int> &frequencies,
+                            QList<int> &channels,
+                            QList<int> &sampleSizes,
+                            QList<QAudioFormat::Endian> &byteOrders,
+                            QList<QAudioFormat::SampleType> &sampleTypes) {
+
+    frequencies.clear();
+    sampleSizes.clear();
+    byteOrders.clear();
+    sampleTypes.clear();
+    channels.clear();
+
+    for (int i=0; i<SampleRateCount; ++i)
+        if (caps.caps().iRate & SampleRateListNative[i])
+            frequencies += SampleRateListQt[i];
+
+    for (int i=0; i<ChannelsCount; ++i)
+        if (caps.caps().iChannels & ChannelsListNative[i])
+            channels += ChannelsListQt[i];
+
+    for (int i=0; i<EncodingCount; ++i) {
+        if (caps.fourCC().Find(EncodingFourCC[i]) != KErrNotFound) {
+            sampleSizes += EncodingSampleSize[i];
+            byteOrders += EncodingByteOrder[i];
+            sampleTypes += EncodingSampleType[i];
+        }
+    }
+
+}
+
+bool isFormatSupported(const QAudioFormat &formatQt,
+                       const DevSoundCapabilities &caps) {
+    TMMFCapabilities formatNative;
+    TUint32 fourCC;
+
+    bool result = false;
+    if (formatQt.codec() == "audio/pcm" &&
+        formatQtToNative(formatQt, fourCC, formatNative)) {
+        result =
+                (formatNative.iRate & caps.caps().iRate)
+            &&  (formatNative.iChannels & caps.caps().iChannels)
+            &&  (caps.fourCC().Find(fourCC) != KErrNotFound);
+    }
+    return result;
+}
+
+bool formatQtToNative(const QAudioFormat &inputFormat,
+                      TUint32 &outputFourCC,
+                      TMMFCapabilities &outputFormat) {
+
+    bool result = false;
+
+    // Need to use temporary variables because TMMFCapabilities fields are all
+    // TInt, rather than MMF enumerated types.
+    TMMFSampleRate outputSampleRate;
+    TMMFMonoStereo outputChannels;
+    TMMFSoundEncoding outputEncoding;
+
+    if (inputFormat.codec() == "audio/pcm") {
+        result =
+                sampleRateQtToNative(inputFormat.frequency(), outputSampleRate)
+            &&  channelsQtToNative(inputFormat.channels(), outputChannels)
+            &&  sampleInfoQtToNative(inputFormat.sampleSize(),
+                                     inputFormat.byteOrder(),
+                                     inputFormat.sampleType(),
+                                     outputFourCC,
+                                     outputEncoding);
+    }
+
+    if (result) {
+        outputFormat.iRate = outputSampleRate;
+        outputFormat.iChannels = outputChannels;
+        outputFormat.iEncoding = outputEncoding;
+    }
+
+    return result;
+}
+
+QAudio::State stateNativeToQt(State nativeState,
+                              QAudio::State initializingState)
+{
+    switch (nativeState) {
+    case ClosedState:
+        return QAudio::StoppedState;
+    case InitializingState:
+        return initializingState;
+    case ActiveState:
+        return QAudio::ActiveState;
+    case IdleState:
+        return QAudio::IdleState;
+    case SuspendedState:
+        return QAudio::SuspendedState;
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid state");
+        return QAudio::StoppedState; // suppress compiler warning
+    }
+}
+
+qint64 bytesToSamples(const QAudioFormat &format, qint64 length)
+{
+    return length / ((format.sampleSize() / 8) * format.channels());
+}
+
+qint64 samplesToBytes(const QAudioFormat &format, qint64 samples)
+{
+    return samples * (format.sampleSize() / 8) * format.channels();
+}
+
+} // namespace Utils
+} // namespace SymbianAudio
+
+QT_END_NAMESPACE
+
+
diff --git a/src/multimedia/multimedia/audio/qaudio_symbian_p.h b/src/multimedia/multimedia/audio/qaudio_symbian_p.h
new file mode 100644
index 0000000..d5238b4
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudio_symbian_p.h
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIO_SYMBIAN_P_H
+#define QAUDIO_SYMBIAN_P_H
+
+#include <QtCore/qnamespace.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudio.h>
+#include <sounddevice.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace SymbianAudio {
+
+/**
+ * Default values used by audio input and output classes, when underlying
+ * DevSound instance has not yet been created.
+ */
+
+const int DefaultBufferSize = 4096; // bytes
+const int DefaultNotifyInterval = 1000; // ms
+
+/**
+ * Enumeration used to track state of internal DevSound instances.
+ * Values are translated to the corresponding QAudio::State values by
+ * SymbianAudio::Utils::stateNativeToQt.
+ */
+enum State {
+        ClosedState
+    ,   InitializingState
+    ,   ActiveState
+    ,   IdleState
+    ,   SuspendedState
+};
+
+/*
+ * Helper class for querying DevSound codec / format support
+ */
+class DevSoundCapabilities {
+public:
+    DevSoundCapabilities(CMMFDevSound &devsound, QAudio::Mode mode);
+    ~DevSoundCapabilities();
+
+    const RArray<TFourCC>& fourCC() const   { return m_fourCC; }
+    const TMMFCapabilities& caps() const    { return m_caps; }
+
+private:
+    void constructL(CMMFDevSound &devsound, QAudio::Mode mode);
+
+private:
+    RArray<TFourCC> m_fourCC;
+    TMMFCapabilities m_caps;
+};
+
+namespace Utils {
+
+/**
+ * Convert native audio capabilities to QAudio lists.
+ */
+void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
+                            QList<int> &frequencies,
+                            QList<int> &channels,
+                            QList<int> &sampleSizes,
+                            QList<QAudioFormat::Endian> &byteOrders,
+                            QList<QAudioFormat::SampleType> &sampleTypes);
+
+/**
+ * Check whether format is supported.
+ */
+bool isFormatSupported(const QAudioFormat &format,
+                       const DevSoundCapabilities &caps);
+
+/**
+ * Convert QAudioFormat to native format types.
+ *
+ * Note that, despite the name, DevSound uses TMMFCapabilities to specify
+ * single formats as well as capabilities.
+ *
+ * Note that this function does not modify outputFormat.iBufferSize.
+ */
+bool formatQtToNative(const QAudioFormat &inputFormat,
+                      TUint32 &outputFourCC,
+                      TMMFCapabilities &outputFormat);
+
+/**
+ * Convert internal states to QAudio states.
+ */
+QAudio::State stateNativeToQt(State nativeState,
+                              QAudio::State initializingState);
+
+/**
+ * Convert data length to number of samples.
+ */
+qint64 bytesToSamples(const QAudioFormat &format, qint64 length);
+
+/**
+ * Convert number of samples to data length.
+ */
+qint64 samplesToBytes(const QAudioFormat &format, qint64 samples);
+
+} // namespace Utils
+} // namespace SymbianAudio
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
new file mode 100644
index 0000000..4f45110
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
@@ -0,0 +1,257 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qdebug.h>
+#include <QtMultimedia/qaudioengine.h>
+#include <QtMultimedia/qaudioengineplugin.h>
+#include <private/qfactoryloader_p.h>
+#include "qaudiodevicefactory_p.h"
+
+#ifndef QT_NO_AUDIO_BACKEND
+#if defined(Q_OS_WIN)
+#include "qaudiodeviceinfo_win32_p.h"
+#include "qaudiooutput_win32_p.h"
+#include "qaudioinput_win32_p.h"
+#elif defined(Q_OS_MAC)
+#include "qaudiodeviceinfo_mac_p.h"
+#include "qaudiooutput_mac_p.h"
+#include "qaudioinput_mac_p.h"
+#elif defined(HAS_ALSA)
+#include "qaudiodeviceinfo_alsa_p.h"
+#include "qaudiooutput_alsa_p.h"
+#include "qaudioinput_alsa_p.h"
+#elif defined(Q_OS_SYMBIAN)
+#include "qaudiodeviceinfo_symbian_p.h"
+#include "qaudiooutput_symbian_p.h"
+#include "qaudioinput_symbian_p.h"
+#endif
+#endif
+
+QT_BEGIN_NAMESPACE
+
+Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
+        (QAudioEngineFactoryInterface_iid, QLatin1String("/audio"), Qt::CaseInsensitive))
+
+
+class QNullDeviceInfo : public QAbstractAudioDeviceInfo
+{
+public:
+    QAudioFormat preferredFormat() const { qWarning()<<"using null deviceinfo, none available"; return QAudioFormat(); }
+    bool isFormatSupported(const QAudioFormat& ) const { return false; }
+    QAudioFormat nearestFormat(const QAudioFormat& ) const { return QAudioFormat(); }
+    QString deviceName() const { return QString(); }
+    QStringList codecList() { return QStringList(); }
+    QList<int> frequencyList()  { return QList<int>(); }
+    QList<int> channelsList() { return QList<int>(); }
+    QList<int> sampleSizeList() { return QList<int>(); }
+    QList<QAudioFormat::Endian> byteOrderList() { return QList<QAudioFormat::Endian>(); }
+    QList<QAudioFormat::SampleType> sampleTypeList() { return QList<QAudioFormat::SampleType>(); }
+};
+
+class QNullInputDevice : public QAbstractAudioInput
+{
+public:
+    QIODevice* start(QIODevice* ) { qWarning()<<"using null input device, none available"; return 0; }
+    void stop() {}
+    void reset() {}
+    void suspend() {}
+    void resume() {}
+    int bytesReady() const { return 0; }
+    int periodSize() const { return 0; }
+    void setBufferSize(int ) {}
+    int bufferSize() const  { return 0; }
+    void setNotifyInterval(int ) {}
+    int notifyInterval() const { return 0; }
+    qint64 processedUSecs() const { return 0; }
+    qint64 elapsedUSecs() const { return 0; }
+    QAudio::Error error() const { return QAudio::OpenError; }
+    QAudio::State state() const { return QAudio::StoppedState; }
+    QAudioFormat format() const { return QAudioFormat(); }
+};
+
+class QNullOutputDevice : public QAbstractAudioOutput
+{
+public:
+    QIODevice* start(QIODevice* ) { qWarning()<<"using null output device, none available"; return 0; }
+    void stop() {}
+    void reset() {}
+    void suspend() {}
+    void resume() {}
+    int bytesFree() const { return 0; }
+    int periodSize() const { return 0; }
+    void setBufferSize(int ) {}
+    int bufferSize() const  { return 0; }
+    void setNotifyInterval(int ) {}
+    int notifyInterval() const { return 0; }
+    qint64 processedUSecs() const { return 0; }
+    qint64 elapsedUSecs() const { return 0; }
+    QAudio::Error error() const { return QAudio::OpenError; }
+    QAudio::State state() const { return QAudio::StoppedState; }
+    QAudioFormat format() const { return QAudioFormat(); }
+};
+
+QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
+{
+    QList<QAudioDeviceInfo> devices;
+#ifndef QT_NO_AUDIO_BACKEND
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
+    foreach (const QByteArray &handle, QAudioDeviceInfoInternal::availableDevices(mode))
+        devices << QAudioDeviceInfo(QLatin1String("builtin"), handle, mode);
+#endif
+#endif
+    QFactoryLoader* l = loader();
+
+    foreach (QString const& key, l->keys()) {
+        QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(l->instance(key));
+        if (plugin) {
+            foreach (QByteArray const& handle, plugin->availableDevices(mode))
+                devices << QAudioDeviceInfo(key, handle, mode);
+        }
+
+        delete plugin;
+    }
+
+    return devices;
+}
+
+QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
+{
+    QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
+
+    if (plugin) {
+        QList<QByteArray> list = plugin->availableDevices(QAudio::AudioInput);
+        if (list.size() > 0)
+            return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioInput);
+    }
+#ifndef QT_NO_AUDIO_BACKEND
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
+    return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultInputDevice(), QAudio::AudioInput);
+#endif
+#endif
+    return QAudioDeviceInfo();
+}
+
+QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
+{
+    QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
+
+    if (plugin) {
+        QList<QByteArray> list = plugin->availableDevices(QAudio::AudioOutput);
+        if (list.size() > 0)
+            return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioOutput);
+    }
+#ifndef QT_NO_AUDIO_BACKEND
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
+    return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultOutputDevice(), QAudio::AudioOutput);
+#endif
+#endif
+    return QAudioDeviceInfo();
+}
+
+QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode)
+{
+    QAbstractAudioDeviceInfo *rc = 0;
+
+#ifndef QT_NO_AUDIO_BACKEND
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
+    if (realm == QLatin1String("builtin"))
+        return new QAudioDeviceInfoInternal(handle, mode);
+#endif
+#endif
+    QAudioEngineFactoryInterface* plugin =
+        qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(realm));
+
+    if (plugin)
+        rc = plugin->createDeviceInfo(handle, mode);
+
+    return rc == 0 ? new QNullDeviceInfo() : rc;
+}
+
+QAbstractAudioInput* QAudioDeviceFactory::createDefaultInputDevice(QAudioFormat const &format)
+{
+    return createInputDevice(defaultInputDevice(), format);
+}
+
+QAbstractAudioOutput* QAudioDeviceFactory::createDefaultOutputDevice(QAudioFormat const &format)
+{
+    return createOutputDevice(defaultOutputDevice(), format);
+}
+
+QAbstractAudioInput* QAudioDeviceFactory::createInputDevice(QAudioDeviceInfo const& deviceInfo, QAudioFormat const &format)
+{
+    if (deviceInfo.isNull())
+        return new QNullInputDevice();
+#ifndef QT_NO_AUDIO_BACKEND
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
+    if (deviceInfo.realm() == QLatin1String("builtin"))
+        return new QAudioInputPrivate(deviceInfo.handle(), format);
+#endif
+#endif
+    QAudioEngineFactoryInterface* plugin =
+        qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
+
+    if (plugin)
+        return plugin->createInput(deviceInfo.handle(), format);
+
+    return new QNullInputDevice();
+}
+
+QAbstractAudioOutput* QAudioDeviceFactory::createOutputDevice(QAudioDeviceInfo const& deviceInfo, QAudioFormat const &format)
+{
+    if (deviceInfo.isNull())
+        return new QNullOutputDevice();
+#ifndef QT_NO_AUDIO_BACKEND
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
+    if (deviceInfo.realm() == QLatin1String("builtin"))
+        return new QAudioOutputPrivate(deviceInfo.handle(), format);
+#endif
+#endif
+    QAudioEngineFactoryInterface* plugin =
+        qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
+
+    if (plugin)
+        return plugin->createOutput(deviceInfo.handle(), format);
+
+    return new QNullOutputDevice();
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/multimedia/audio/qaudiodevicefactory_p.h b/src/multimedia/multimedia/audio/qaudiodevicefactory_p.h
new file mode 100644
index 0000000..8ee8b05
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodevicefactory_p.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIODEVICEFACTORY_P_H
+#define QAUDIODEVICEFACTORY_P_H
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qbytearray.h>
+#include <QtCore/qlist.h>
+
+#include <QtMultimedia/qaudiodeviceinfo.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QAbstractAudioInput;
+class QAbstractAudioOutput;
+class QAbstractAudioDeviceInfo;
+
+class QAudioDeviceFactory
+{
+public:
+    static QList<QAudioDeviceInfo> availableDevices(QAudio::Mode mode);
+
+    static QAudioDeviceInfo defaultInputDevice();
+    static QAudioDeviceInfo defaultOutputDevice();
+
+    static QAbstractAudioDeviceInfo* audioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
+
+    static QAbstractAudioInput* createDefaultInputDevice(QAudioFormat const &format);
+    static QAbstractAudioOutput* createDefaultOutputDevice(QAudioFormat const &format);
+
+    static QAbstractAudioInput* createInputDevice(QAudioDeviceInfo const &device, QAudioFormat const &format);
+    static QAbstractAudioOutput* createOutputDevice(QAudioDeviceInfo const &device, QAudioFormat const &format);
+
+    static QAbstractAudioInput* createNullInput();
+    static QAbstractAudioOutput* createNullOutput();
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QAUDIODEVICEFACTORY_P_H
+
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/multimedia/audio/qaudiodeviceinfo.cpp
new file mode 100644
index 0000000..ff04b4e
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo.cpp
@@ -0,0 +1,400 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudiodevicefactory_p.h"
+#include <QtMultimedia/qaudioengine.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+
+
+QT_BEGIN_NAMESPACE
+
+class QAudioDeviceInfoPrivate : public QSharedData
+{
+public:
+    QAudioDeviceInfoPrivate():info(0) {}
+    QAudioDeviceInfoPrivate(const QString &r, const QByteArray &h, QAudio::Mode m):
+        realm(r), handle(h), mode(m)
+    {
+        info = QAudioDeviceFactory::audioDeviceInfo(realm, handle, mode);
+    }
+
+    QAudioDeviceInfoPrivate(const QAudioDeviceInfoPrivate &other):
+        QSharedData(other),
+        realm(other.realm), handle(other.handle), mode(other.mode)
+    {
+        info = QAudioDeviceFactory::audioDeviceInfo(realm, handle, mode);
+    }
+
+    QAudioDeviceInfoPrivate& operator=(const QAudioDeviceInfoPrivate &other)
+    {
+        delete info;
+
+        realm = other.realm;
+        handle = other.handle;
+        mode = other.mode;
+        info = QAudioDeviceFactory::audioDeviceInfo(realm, handle, mode);
+        return *this;
+    }
+
+    ~QAudioDeviceInfoPrivate()
+    {
+        delete info;
+    }
+
+    QString     realm;
+    QByteArray  handle;
+    QAudio::Mode mode;
+    QAbstractAudioDeviceInfo*   info;
+};
+
+
+/*!
+    \class QAudioDeviceInfo
+    \brief The QAudioDeviceInfo class provides an interface to query audio devices and their functionality.
+    \inmodule QtMultimedia
+    \ingroup multimedia
+
+    \since 4.6
+
+    QAudioDeviceInfo lets you query for audio devices--such as sound
+    cards and USB headsets--that are currently available on the system.
+    The audio devices available are dependent on the platform or audio plugins installed.
+
+    You can also query each device for the formats it supports. A
+    format in this context is a set consisting of a specific byte
+    order, channel, codec, frequency, sample rate, and sample type.  A
+    format is represented by the QAudioFormat class.
+
+    The values supported by the the device for each of these
+    parameters can be fetched with
+    supportedByteOrders(), supportedChannelCounts(), supportedCodecs(),
+    supportedSampleRates(), supportedSampleSizes(), and
+    supportedSampleTypes(). The combinations supported are dependent on the platform,
+    audio plugins installed and the audio device capabilities. If you need a specific format, you can check if
+    the device supports it with isFormatSupported(), or fetch a
+    supported format that is as close as possible to the format with
+    nearestFormat(). For instance:
+
+    \snippet doc/src/snippets/audio/main.cpp 1
+    \dots 8
+    \snippet doc/src/snippets/audio/main.cpp 2
+
+    A QAudioDeviceInfo is used by Qt to construct
+    classes that communicate with the device--such as
+    QAudioInput, and QAudioOutput. The static
+    functions defaultInputDevice(), defaultOutputDevice(), and
+    availableDevices() let you get a list of all available
+    devices. Devices are fetch according to the value of mode
+    this is specified by the QAudio::Mode enum.
+    The QAudioDeviceInfo returned are only valid for the QAudio::Mode.
+
+    For instance:
+
+    \code
+    foreach(const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
+        qDebug() << "Device name: " << deviceInfo.deviceName();
+    \endcode
+
+    In this code sample, we loop through all devices that are able to output
+    sound, i.e., play an audio stream in a supported format. For each device we
+    find, we simply print the deviceName().
+
+    \sa QAudioOutput, QAudioInput
+*/
+
+/*!
+    Constructs an empty QAudioDeviceInfo object.
+*/
+
+QAudioDeviceInfo::QAudioDeviceInfo():
+    d(new QAudioDeviceInfoPrivate)
+{
+}
+
+/*!
+    Constructs a copy of \a other.
+*/
+
+QAudioDeviceInfo::QAudioDeviceInfo(const QAudioDeviceInfo& other):
+    d(other.d)
+{
+}
+
+/*!
+    Destroy this audio device info.
+*/
+
+QAudioDeviceInfo::~QAudioDeviceInfo()
+{
+}
+
+/*!
+    Sets the QAudioDeviceInfo object to be equal to \a other.
+*/
+
+QAudioDeviceInfo& QAudioDeviceInfo::operator=(const QAudioDeviceInfo &other)
+{
+    d = other.d;
+    return *this;
+}
+
+/*!
+    Returns whether this QAudioDeviceInfo object holds a device definition.
+*/
+
+bool QAudioDeviceInfo::isNull() const
+{
+    return d->info == 0;
+}
+
+/*!
+    Returns human readable name of audio device.
+
+    Device names vary depending on platform/audio plugin being used.
+
+    They are a unique string identifiers for the audio device.
+
+    eg. default, Intel, U0x46d0x9a4
+*/
+
+QString QAudioDeviceInfo::deviceName() const
+{
+    return isNull() ? QString() : d->info->deviceName();
+}
+
+/*!
+    Returns true if \a settings are supported by the audio device of this QAudioDeviceInfo.
+*/
+
+bool QAudioDeviceInfo::isFormatSupported(const QAudioFormat &settings) const
+{
+    return isNull() ? false : d->info->isFormatSupported(settings);
+}
+
+/*!
+    Returns QAudioFormat of default settings.
+
+    These settings are provided by the platform/audio plugin being used.
+
+    They also are dependent on the QAudio::Mode being used.
+
+    A typical audio system would provide something like:
+    \list
+    \o Input settings: 8000Hz mono 8 bit.
+    \o Output settings: 44100Hz stereo 16 bit little endian.
+    \endlist
+*/
+
+QAudioFormat QAudioDeviceInfo::preferredFormat() const
+{
+    return isNull() ? QAudioFormat() : d->info->preferredFormat();
+}
+
+/*!
+    Returns closest QAudioFormat to \a settings that system audio supports.
+
+    These settings are provided by the platform/audio plugin being used.
+
+    They also are dependent on the QAudio::Mode being used.
+*/
+
+QAudioFormat QAudioDeviceInfo::nearestFormat(const QAudioFormat &settings) const
+{
+    return isNull() ? QAudioFormat() : d->info->nearestFormat(settings);
+}
+
+/*!
+    Returns a list of supported codecs.
+
+    All platform and plugin implementations should provide support for:
+
+    "audio/pcm" - Linear PCM
+
+    For writing plugins to support additional codecs refer to:
+
+    http://www.iana.org/assignments/media-types/audio/
+*/
+
+QStringList QAudioDeviceInfo::supportedCodecs() const
+{
+    return isNull() ? QStringList() : d->info->codecList();
+}
+
+/*!
+    Returns a list of supported sample rates.
+
+    \since 4.7
+*/
+
+QList<int> QAudioDeviceInfo::supportedSampleRates() const
+{
+    return supportedFrequencies();
+}
+
+/*!
+    \obsolete
+
+    Use supportedSampleRates() instead.
+*/
+
+QList<int> QAudioDeviceInfo::supportedFrequencies() const
+{
+    return isNull() ? QList<int>() : d->info->frequencyList();
+}
+
+/*!
+    Returns a list of supported channel counts.
+
+    \since 4.7
+*/
+
+QList<int> QAudioDeviceInfo::supportedChannelCounts() const
+{
+    return supportedChannels();
+}
+
+/*!
+    \obsolete
+
+    Use supportedChannelCount() instead.
+*/
+
+QList<int> QAudioDeviceInfo::supportedChannels() const
+{
+    return isNull() ? QList<int>() : d->info->channelsList();
+}
+
+/*!
+    Returns a list of supported sample sizes.
+*/
+
+QList<int> QAudioDeviceInfo::supportedSampleSizes() const
+{
+    return isNull() ? QList<int>() : d->info->sampleSizeList();
+}
+
+/*!
+    Returns a list of supported byte orders.
+*/
+
+QList<QAudioFormat::Endian> QAudioDeviceInfo::supportedByteOrders() const
+{
+    return isNull() ? QList<QAudioFormat::Endian>() : d->info->byteOrderList();
+}
+
+/*!
+    Returns a list of supported sample types.
+*/
+
+QList<QAudioFormat::SampleType> QAudioDeviceInfo::supportedSampleTypes() const
+{
+    return isNull() ? QList<QAudioFormat::SampleType>() : d->info->sampleTypeList();
+}
+
+/*!
+    Returns the name of the default input audio device.
+    All platform and audio plugin implementations provide a default audio device to use.
+*/
+
+QAudioDeviceInfo QAudioDeviceInfo::defaultInputDevice()
+{
+    return QAudioDeviceFactory::defaultInputDevice();
+}
+
+/*!
+    Returns the name of the default output audio device.
+    All platform and audio plugin implementations provide a default audio device to use.
+*/
+
+QAudioDeviceInfo QAudioDeviceInfo::defaultOutputDevice()
+{
+    return QAudioDeviceFactory::defaultOutputDevice();
+}
+
+/*!
+    Returns a list of audio devices that support \a mode.
+*/
+
+QList<QAudioDeviceInfo> QAudioDeviceInfo::availableDevices(QAudio::Mode mode)
+{
+    return QAudioDeviceFactory::availableDevices(mode);
+}
+
+
+/*!
+    \internal
+*/
+
+QAudioDeviceInfo::QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode):
+    d(new QAudioDeviceInfoPrivate(realm, handle, mode))
+{
+}
+
+/*!
+    \internal
+*/
+
+QString QAudioDeviceInfo::realm() const
+{
+    return d->realm;
+}
+
+/*!
+    \internal
+*/
+
+QByteArray QAudioDeviceInfo::handle() const
+{
+    return d->handle;
+}
+
+
+/*!
+    \internal
+*/
+
+QAudio::Mode QAudioDeviceInfo::mode() const
+{
+    return d->mode;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo.h b/src/multimedia/multimedia/audio/qaudiodeviceinfo.h
new file mode 100644
index 0000000..1cc0731
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo.h
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QAUDIODEVICEINFO_H
+#define QAUDIODEVICEINFO_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qglobal.h>
+#include <QtCore/qbytearray.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qlist.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudioformat.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QAudioDeviceFactory;
+
+class QAudioDeviceInfoPrivate;
+class Q_MULTIMEDIA_EXPORT QAudioDeviceInfo
+{
+    friend class QAudioDeviceFactory;
+
+public:
+    QAudioDeviceInfo();
+    QAudioDeviceInfo(const QAudioDeviceInfo& other);
+    ~QAudioDeviceInfo();
+
+    QAudioDeviceInfo& operator=(const QAudioDeviceInfo& other);
+
+    bool isNull() const;
+
+    QString deviceName() const;
+
+    bool isFormatSupported(const QAudioFormat &format) const;
+    QAudioFormat preferredFormat() const;
+    QAudioFormat nearestFormat(const QAudioFormat &format) const;
+
+    QStringList supportedCodecs() const;
+    QList<int> supportedFrequencies() const;
+    QList<int> supportedSampleRates() const;
+    QList<int> supportedChannels() const;
+    QList<int> supportedChannelCounts() const;
+    QList<int> supportedSampleSizes() const;
+    QList<QAudioFormat::Endian> supportedByteOrders() const;
+    QList<QAudioFormat::SampleType> supportedSampleTypes() const;
+
+    static QAudioDeviceInfo defaultInputDevice();
+    static QAudioDeviceInfo defaultOutputDevice();
+
+    static QList<QAudioDeviceInfo> availableDevices(QAudio::Mode mode);
+
+private:
+    QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
+    QString realm() const;
+    QByteArray handle() const;
+    QAudio::Mode mode() const;
+
+    QSharedDataPointer<QAudioDeviceInfoPrivate> d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+Q_DECLARE_METATYPE(QAudioDeviceInfo)
+
+#endif // QAUDIODEVICEINFO_H
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
new file mode 100644
index 0000000..36270a7
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
@@ -0,0 +1,486 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qaudiodeviceinfo_alsa_p.h"
+
+#include <alsa/version.h>
+
+QT_BEGIN_NAMESPACE
+
+QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode)
+{
+    handle = 0;
+
+    device = QLatin1String(dev);
+    this->mode = mode;
+}
+
+QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
+{
+    close();
+}
+
+bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
+{
+    return testSettings(format);
+}
+
+QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
+{
+    QAudioFormat nearest;
+    if(mode == QAudio::AudioOutput) {
+        nearest.setFrequency(44100);
+        nearest.setChannels(2);
+        nearest.setByteOrder(QAudioFormat::LittleEndian);
+        nearest.setSampleType(QAudioFormat::SignedInt);
+        nearest.setSampleSize(16);
+        nearest.setCodec(QLatin1String("audio/pcm"));
+    } else {
+        nearest.setFrequency(8000);
+        nearest.setChannels(1);
+        nearest.setSampleType(QAudioFormat::UnSignedInt);
+        nearest.setSampleSize(8);
+        nearest.setCodec(QLatin1String("audio/pcm"));
+        if(!testSettings(nearest)) {
+            nearest.setChannels(2);
+            nearest.setSampleSize(16);
+            nearest.setSampleType(QAudioFormat::SignedInt);
+        }
+    }
+    return nearest;
+}
+
+QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) const
+{
+    if(testSettings(format))
+        return format;
+    else
+        return preferredFormat();
+}
+
+QString QAudioDeviceInfoInternal::deviceName() const
+{
+    return device;
+}
+
+QStringList QAudioDeviceInfoInternal::codecList()
+{
+    updateLists();
+    return codecz;
+}
+
+QList<int> QAudioDeviceInfoInternal::frequencyList()
+{
+    updateLists();
+    return freqz;
+}
+
+QList<int> QAudioDeviceInfoInternal::channelsList()
+{
+    updateLists();
+    return channelz;
+}
+
+QList<int> QAudioDeviceInfoInternal::sampleSizeList()
+{
+    updateLists();
+    return sizez;
+}
+
+QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
+{
+    updateLists();
+    return byteOrderz;
+}
+
+QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
+{
+    updateLists();
+    return typez;
+}
+
+bool QAudioDeviceInfoInternal::open()
+{
+    int err = 0;
+    QString dev = device;
+    QList<QByteArray> devices = availableDevices(mode);
+
+    if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(devices.first().constData());
+#else
+        dev = QLatin1String("hw:0,0");
+#endif
+    } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = device;
+#else
+        int idx = 0;
+        char *name;
+
+        QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1);
+
+	while(snd_card_get_name(idx,&name) == 0) {
+            if(dev.contains(QLatin1String(name)))
+                break;
+            idx++;
+	}
+        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
+    }
+    if(mode == QAudio::AudioOutput) {
+        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
+    } else {
+        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);
+    }
+    if(err < 0) {
+        handle = 0;
+        return false;
+    }
+    return true;
+}
+
+void QAudioDeviceInfoInternal::close()
+{
+    if(handle)
+        snd_pcm_close(handle);
+    handle = 0;
+}
+
+bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
+{
+    // Set nearest to closest settings that do work.
+    // See if what is in settings will work (return value).
+    int err = 0;
+    snd_pcm_t* handle;
+    snd_pcm_hw_params_t *params;
+    QString dev = device;
+
+    QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
+
+    if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(devices.first().constData());
+#else
+        dev = QLatin1String("hw:0,0");
+#endif
+    } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = device;
+#else
+        int idx = 0;
+        char *name;
+
+        QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1);
+
+        while(snd_card_get_name(idx,&name) == 0) {
+            if(shortName.compare(QLatin1String(name)) == 0)
+                break;
+            idx++;
+        }
+        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
+    }
+    if(mode == QAudio::AudioOutput) {
+        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
+    } else {
+        err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);
+    }
+    if(err < 0) {
+        handle = 0;
+        return false;
+    }
+
+    bool testChannel = false;
+    bool testCodec = false;
+    bool testFreq = false;
+    bool testType = false;
+    bool testSize = false;
+
+    int  dir = 0;
+
+    snd_pcm_nonblock( handle, 0 );
+    snd_pcm_hw_params_alloca( &params );
+    snd_pcm_hw_params_any( handle, params );
+
+    // set the values!
+    snd_pcm_hw_params_set_channels(handle,params,format.channels());
+    snd_pcm_hw_params_set_rate(handle,params,format.frequency(),dir);
+    switch(format.sampleSize()) {
+        case 8:
+            if(format.sampleType() == QAudioFormat::SignedInt)
+                snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S8);
+            else if(format.sampleType() == QAudioFormat::UnSignedInt)
+                snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U8);
+            break;
+        case 16:
+            if(format.sampleType() == QAudioFormat::SignedInt) {
+                if(format.byteOrder() == QAudioFormat::LittleEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_LE);
+                else if(format.byteOrder() == QAudioFormat::BigEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_BE);
+            } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
+                if(format.byteOrder() == QAudioFormat::LittleEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_LE);
+                else if(format.byteOrder() == QAudioFormat::BigEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_BE);
+            }
+            break;
+        case 32:
+            if(format.sampleType() == QAudioFormat::SignedInt) {
+                if(format.byteOrder() == QAudioFormat::LittleEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_LE);
+                else if(format.byteOrder() == QAudioFormat::BigEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_BE);
+            } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
+                if(format.byteOrder() == QAudioFormat::LittleEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_LE);
+                else if(format.byteOrder() == QAudioFormat::BigEndian)
+                    snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_BE);
+            }
+    }
+
+    // For now, just accept only audio/pcm codec
+    if(!format.codec().startsWith(QLatin1String("audio/pcm"))) {
+        err=-1;
+    } else
+        testCodec = true;
+
+    if(err>=0 && format.channels() != -1) {
+        err = snd_pcm_hw_params_test_channels(handle,params,format.channels());
+        if(err>=0)
+            err = snd_pcm_hw_params_set_channels(handle,params,format.channels());
+        if(err>=0)
+            testChannel = true;
+    }
+
+    if(err>=0 && format.frequency() != -1) {
+        err = snd_pcm_hw_params_test_rate(handle,params,format.frequency(),0);
+        if(err>=0)
+            err = snd_pcm_hw_params_set_rate(handle,params,format.frequency(),dir);
+        if(err>=0)
+            testFreq = true;
+    }
+
+    if((err>=0 && format.sampleSize() != -1) &&
+            (format.sampleType() != QAudioFormat::Unknown)) {
+        switch(format.sampleSize()) {
+            case 8:
+                if(format.sampleType() == QAudioFormat::SignedInt)
+                    err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S8);
+                else if(format.sampleType() == QAudioFormat::UnSignedInt)
+                    err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U8);
+                break;
+            case 16:
+                if(format.sampleType() == QAudioFormat::SignedInt) {
+                    if(format.byteOrder() == QAudioFormat::LittleEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_LE);
+                    else if(format.byteOrder() == QAudioFormat::BigEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S16_BE);
+                } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
+                    if(format.byteOrder() == QAudioFormat::LittleEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_LE);
+                    else if(format.byteOrder() == QAudioFormat::BigEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U16_BE);
+                }
+                break;
+            case 32:
+                if(format.sampleType() == QAudioFormat::SignedInt) {
+                    if(format.byteOrder() == QAudioFormat::LittleEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_LE);
+                    else if(format.byteOrder() == QAudioFormat::BigEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_S32_BE);
+                } else if(format.sampleType() == QAudioFormat::UnSignedInt) {
+                    if(format.byteOrder() == QAudioFormat::LittleEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_LE);
+                    else if(format.byteOrder() == QAudioFormat::BigEndian)
+                        err = snd_pcm_hw_params_set_format(handle,params,SND_PCM_FORMAT_U32_BE);
+                }
+        }
+        if(err>=0) {
+            testSize = true;
+            testType = true;
+        }
+    }
+    if(err>=0)
+        err = snd_pcm_hw_params(handle, params);
+
+    if(err == 0) {
+        // settings work
+        // close()
+        if(handle)
+            snd_pcm_close(handle);
+        return true;
+    }
+    if(handle)
+        snd_pcm_close(handle);
+
+    return false;
+}
+
+void QAudioDeviceInfoInternal::updateLists()
+{
+    // redo all lists based on current settings
+    freqz.clear();
+    channelz.clear();
+    sizez.clear();
+    byteOrderz.clear();
+    typez.clear();
+    codecz.clear();
+
+    if(!handle)
+        open();
+
+    if(!handle)
+        return;
+
+    for(int i=0; i<(int)MAX_SAMPLE_RATES; i++) {
+        //if(snd_pcm_hw_params_test_rate(handle, params, SAMPLE_RATES[i], dir) == 0)
+        freqz.append(SAMPLE_RATES[i]);
+    }
+    channelz.append(1);
+    channelz.append(2);
+    sizez.append(8);
+    sizez.append(16);
+    sizez.append(32);
+    byteOrderz.append(QAudioFormat::LittleEndian);
+    byteOrderz.append(QAudioFormat::BigEndian);
+    typez.append(QAudioFormat::SignedInt);
+    typez.append(QAudioFormat::UnSignedInt);
+    typez.append(QAudioFormat::Float);
+    codecz.append(QLatin1String("audio/pcm"));
+    close();
+}
+
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
+{
+    QList<QByteArray> allDevices;
+    QList<QByteArray> devices;
+    QByteArray filter;
+
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+    // Create a list of all current audio devices that support mode
+    void **hints, **n;
+    char *name, *descr, *io;
+
+    if(snd_device_name_hint(-1, "pcm", &hints) < 0) {
+        qWarning() << "no alsa devices available";
+        return devices;
+    }
+    n = hints;
+
+    if(mode == QAudio::AudioInput) {
+        filter = "Input";
+    } else {
+        filter = "Output";
+    }
+
+    while (*n != NULL) {
+        name = snd_device_name_get_hint(*n, "NAME");
+        descr = snd_device_name_get_hint(*n, "DESC");
+        io = snd_device_name_get_hint(*n, "IOID");
+        if((name != NULL) && (descr != NULL) && ((io == NULL) || (io == filter))) {
+            QString deviceName = QLatin1String(name);
+            QString deviceDescription = QLatin1String(descr);
+            allDevices.append(deviceName.toLocal8Bit().constData());
+            if(deviceDescription.contains(QLatin1String("Default Audio Device")))
+                devices.append(deviceName.toLocal8Bit().constData());
+        }
+        if(name != NULL)
+            free(name);
+        if(descr != NULL)
+            free(descr);
+        if(io != NULL)
+            free(io);
+        ++n;
+    }
+    snd_device_name_free_hint(hints);
+
+    if(devices.size() > 0) {
+        devices.append("default");
+    }
+#else
+    int idx = 0;
+    char* name;
+
+    while(snd_card_get_name(idx,&name) == 0) {
+        devices.append(name);
+        idx++;
+    }
+    if (idx > 0)
+        devices.append("default");
+#endif
+    if (devices.size() == 0 && allDevices.size() > 0)
+        return allDevices;
+
+    return devices;
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
+{
+    QList<QByteArray> devices = availableDevices(QAudio::AudioInput);
+    if(devices.size() == 0)
+        return QByteArray();
+
+    return devices.first();
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
+{
+    QList<QByteArray> devices = availableDevices(QAudio::AudioOutput);
+    if(devices.size() == 0)
+        return QByteArray();
+
+    return devices.first();
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.h b/src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.h
new file mode 100644
index 0000000..6f9a459
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_alsa_p.h
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#ifndef QAUDIODEVICEINFOALSA_H
+#define QAUDIODEVICEINFOALSA_H
+
+#include <alsa/asoundlib.h>
+
+#include <QtCore/qbytearray.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qdebug.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+
+QT_BEGIN_NAMESPACE
+
+const unsigned int MAX_SAMPLE_RATES = 5;
+const unsigned int SAMPLE_RATES[] =
+    { 8000, 11025, 22050, 44100, 48000 };
+
+class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
+{
+    Q_OBJECT
+public:
+    QAudioDeviceInfoInternal(QByteArray dev,QAudio::Mode mode);
+    ~QAudioDeviceInfoInternal();
+
+    bool testSettings(const QAudioFormat& format) const;
+    void updateLists();
+    QAudioFormat preferredFormat() const;
+    bool isFormatSupported(const QAudioFormat& format) const;
+    QAudioFormat nearestFormat(const QAudioFormat& format) const;
+    QString deviceName() const;
+    QStringList codecList();
+    QList<int> frequencyList();
+    QList<int> channelsList();
+    QList<int> sampleSizeList();
+    QList<QAudioFormat::Endian> byteOrderList();
+    QList<QAudioFormat::SampleType> sampleTypeList();
+    static QByteArray defaultInputDevice();
+    static QByteArray defaultOutputDevice();
+    static QList<QByteArray> availableDevices(QAudio::Mode);
+
+private:
+    bool open();
+    void close();
+
+    QString device;
+    QAudio::Mode mode;
+    QAudioFormat nearest;
+    QList<int> freqz;
+    QList<int> channelz;
+    QList<int> sizez;
+    QList<QAudioFormat::Endian> byteOrderz;
+    QStringList codecz;
+    QList<QAudioFormat::SampleType> typez;
+    snd_pcm_t* handle;
+    snd_pcm_hw_params_t *params;
+};
+
+QT_END_NAMESPACE
+
+#endif
+
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.cpp b/src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
new file mode 100644
index 0000000..ecd03e5
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
@@ -0,0 +1,357 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qstringlist.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qbytearray.h>
+#include <QtCore/qdatastream.h>
+#include <QtCore/qdebug.h>
+#include <private/qcore_mac_p.h>
+
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include "qaudio_mac_p.h"
+#include "qaudiodeviceinfo_mac_p.h"
+
+
+
+QT_BEGIN_NAMESPACE
+
+
+QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray const& handle, QAudio::Mode)
+{
+    QDataStream ds(handle);
+    quint32 did, tm;
+
+    ds >> did >> tm >> name;
+    deviceId = AudioDeviceID(did);
+    mode = QAudio::Mode(tm);
+}
+
+bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
+{
+    return format.codec() == QString::fromLatin1("audio/pcm");
+}
+
+QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
+{
+    QAudioFormat    rc;
+
+    UInt32  propSize = 0;
+
+    if (AudioDeviceGetPropertyInfo(deviceId,
+                                    0,
+                                    mode == QAudio::AudioInput,
+                                    kAudioDevicePropertyStreams,
+                                    &propSize,
+                                    0) == noErr) {
+
+        const int sc = propSize / sizeof(AudioStreamID);
+
+        if (sc > 0) {
+            AudioStreamID*  streams = new AudioStreamID[sc];
+
+            if (AudioDeviceGetProperty(deviceId,
+                                        0,
+                                        mode == QAudio::AudioInput,
+                                        kAudioDevicePropertyStreams,
+                                        &propSize,
+                                        streams) == noErr) {
+
+                for (int i = 0; i < sc; ++i) {
+                    if (AudioStreamGetPropertyInfo(streams[i],
+                                                    0,
+                                                    kAudioStreamPropertyPhysicalFormat,
+                                                    &propSize,
+                                                    0) == noErr) {
+
+                        AudioStreamBasicDescription sf;
+
+                        if (AudioStreamGetProperty(streams[i],
+                                                    0,
+                                                    kAudioStreamPropertyPhysicalFormat,
+                                                    &propSize,
+                                                    &sf) == noErr) {
+                            rc = toQAudioFormat(sf);
+                            break;
+                        }
+                    }
+                }
+            }
+
+            delete streams;
+        }
+    }
+
+    return rc;
+}
+
+QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) const
+{
+    QAudioFormat    rc(format);
+    QAudioFormat    target = preferredFormat();
+
+    if (!format.codec().isEmpty() && format.codec() != QString::fromLatin1("audio/pcm"))
+        return QAudioFormat();
+
+    rc.setCodec(QString::fromLatin1("audio/pcm"));
+
+    if (rc.frequency() != target.frequency())
+        rc.setFrequency(target.frequency());
+    if (rc.channels() != target.channels())
+        rc.setChannels(target.channels());
+    if (rc.sampleSize() != target.sampleSize())
+        rc.setSampleSize(target.sampleSize());
+    if (rc.byteOrder() != target.byteOrder())
+        rc.setByteOrder(target.byteOrder());
+    if (rc.sampleType() != target.sampleType())
+        rc.setSampleType(target.sampleType());
+
+    return rc;
+}
+
+QString QAudioDeviceInfoInternal::deviceName() const
+{
+    return name;
+}
+
+QStringList QAudioDeviceInfoInternal::codecList()
+{
+    return QStringList() << QString::fromLatin1("audio/pcm");
+}
+
+QList<int> QAudioDeviceInfoInternal::frequencyList()
+{
+    QSet<int>  rc;
+
+    // Add some common frequencies
+    rc << 8000 << 11025 << 22050 << 44100;
+
+    //
+    UInt32  propSize = 0;
+
+    if (AudioDeviceGetPropertyInfo(deviceId,
+                                    0,
+                                    mode == QAudio::AudioInput,
+                                    kAudioDevicePropertyAvailableNominalSampleRates,
+                                    &propSize,
+                                    0) == noErr) {
+
+        const int pc = propSize / sizeof(AudioValueRange);
+
+        if (pc > 0) {
+            AudioValueRange*    vr = new AudioValueRange[pc];
+
+            if (AudioDeviceGetProperty(deviceId,
+                                        0,
+                                        mode == QAudio::AudioInput,
+                                        kAudioDevicePropertyAvailableNominalSampleRates,
+                                        &propSize,
+                                        vr) == noErr) {
+
+                for (int i = 0; i < pc; ++i)
+                    rc << vr[i].mMaximum;
+            }
+
+            delete vr;
+        }
+    }
+
+    return rc.toList();
+}
+
+QList<int> QAudioDeviceInfoInternal::channelsList()
+{
+    QList<int>  rc;
+
+    // Can mix down to 1 channel
+    rc << 1;
+
+    UInt32  propSize = 0;
+    int     channels = 0;
+
+    if (AudioDeviceGetPropertyInfo(deviceId, 
+                                    0,
+                                    mode == QAudio::AudioInput,
+                                    kAudioDevicePropertyStreamConfiguration,
+                                    &propSize, 
+                                    0) == noErr) {
+
+        AudioBufferList* audioBufferList = static_cast<AudioBufferList*>(qMalloc(propSize));
+
+        if (audioBufferList != 0) {
+            if (AudioDeviceGetProperty(deviceId, 
+                                        0,
+                                        mode == QAudio::AudioInput,
+                                        kAudioDevicePropertyStreamConfiguration,
+                                        &propSize,
+                                        audioBufferList) == noErr) {
+
+                for (int i = 0; i < int(audioBufferList->mNumberBuffers); ++i) {
+                    channels += audioBufferList->mBuffers[i].mNumberChannels;
+                    rc << channels;
+                }
+            }
+
+            qFree(audioBufferList);
+        }
+    }
+
+    return rc;
+}
+
+QList<int> QAudioDeviceInfoInternal::sampleSizeList()
+{
+    return QList<int>() << 8 << 16 << 24 << 32 << 64;
+}
+
+QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
+{
+    return QList<QAudioFormat::Endian>() << QAudioFormat::LittleEndian << QAudioFormat::BigEndian;
+}
+
+QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
+{
+    return QList<QAudioFormat::SampleType>() << QAudioFormat::SignedInt << QAudioFormat::UnSignedInt << QAudioFormat::Float;
+}
+
+static QByteArray get_device_info(AudioDeviceID audioDevice, QAudio::Mode mode)
+{
+    UInt32      size;
+    QByteArray  device;
+    QDataStream ds(&device, QIODevice::WriteOnly);
+    AudioStreamBasicDescription     sf;
+    CFStringRef name;
+    Boolean     isInput = mode == QAudio::AudioInput;
+
+    // Id
+    ds << quint32(audioDevice);
+
+    // Mode
+    size = sizeof(AudioStreamBasicDescription);
+    if (AudioDeviceGetProperty(audioDevice, 0, isInput, kAudioDevicePropertyStreamFormat,
+                                &size, &sf) != noErr) {
+        return QByteArray();
+    }
+    ds << quint32(mode);
+
+    // Name
+    size = sizeof(CFStringRef);
+    if (AudioDeviceGetProperty(audioDevice, 0, isInput, kAudioObjectPropertyName,
+                                &size, &name) != noErr) {
+        qWarning() << "QAudioDeviceInfo: Unable to find device name";
+    }
+    ds << QCFString::toQString(name);
+
+    CFRelease(name);
+
+    return device;
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
+{
+    AudioDeviceID   audioDevice;
+    UInt32          size = sizeof(audioDevice);
+
+    if (AudioHardwareGetProperty(kAudioHardwarePropertyDefaultInputDevice, &size,
+                                    &audioDevice) != noErr) {
+        qWarning() << "QAudioDeviceInfo: Unable to find default input device";
+        return QByteArray();
+    }
+
+    return get_device_info(audioDevice, QAudio::AudioInput);
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
+{
+    AudioDeviceID audioDevice;
+    UInt32        size = sizeof(audioDevice);
+
+    if (AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size,
+                                    &audioDevice) != noErr) {
+        qWarning() << "QAudioDeviceInfo: Unable to find default output device";
+        return QByteArray();
+    }
+
+    return get_device_info(audioDevice, QAudio::AudioOutput);
+}
+
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
+{
+    QList<QByteArray>   devices;
+
+    UInt32  propSize = 0;
+
+    if (AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propSize, 0) == noErr) {
+
+        const int dc = propSize / sizeof(AudioDeviceID);
+
+        if (dc > 0) {
+            AudioDeviceID*  audioDevices = new AudioDeviceID[dc];
+
+            if (AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propSize, audioDevices) == noErr) {
+                for (int i = 0; i < dc; ++i) {
+                    QByteArray info = get_device_info(audioDevices[i], mode);
+                    if (!info.isNull())
+                        devices << info;
+                }
+            }
+
+            delete audioDevices;
+        }
+    }
+
+    return devices;
+}
+
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.h b/src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.h
new file mode 100644
index 0000000..e234384
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_mac_p.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#ifndef QDEVICEINFO_MAC_P_H
+#define QDEVICEINFO_MAC_P_H
+
+#include <CoreAudio/CoreAudio.h>
+
+#include <QtMultimedia/qaudioengine.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
+{
+public:
+    AudioDeviceID   deviceId;
+    QString         name;
+    QAudio::Mode   mode;
+
+    QAudioDeviceInfoInternal(QByteArray const& handle, QAudio::Mode mode);
+
+    bool isFormatSupported(const QAudioFormat& format) const;
+    QAudioFormat preferredFormat() const;
+    QAudioFormat nearestFormat(const QAudioFormat& format) const;
+
+    QString deviceName() const;
+
+    QStringList codecList();
+    QList<int> frequencyList();
+    QList<int> channelsList();
+    QList<int> sampleSizeList();
+    QList<QAudioFormat::Endian> byteOrderList();
+    QList<QAudioFormat::SampleType> sampleTypeList();
+
+    static QByteArray defaultInputDevice();
+    static QByteArray defaultOutputDevice();
+
+    static QList<QByteArray> availableDevices(QAudio::Mode mode);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QDEVICEINFO_MAC_P_H
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp b/src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
new file mode 100644
index 0000000..36284d3
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudiodeviceinfo_symbian_p.h"
+#include "qaudio_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray device,
+                                               QAudio::Mode mode)
+    :   m_deviceName(QLatin1String(device))
+    ,   m_mode(mode)
+    ,   m_updated(false)
+{
+    QT_TRAP_THROWING(m_devsound.reset(CMMFDevSound::NewL()));
+}
+
+QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
+{
+
+}
+
+QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
+{
+    QAudioFormat format;
+    switch (m_mode) {
+    case QAudio::AudioOutput:
+        format.setFrequency(44100);
+        format.setChannels(2);
+        format.setSampleSize(16);
+        format.setByteOrder(QAudioFormat::LittleEndian);
+        format.setSampleType(QAudioFormat::SignedInt);
+        format.setCodec(QLatin1String("audio/pcm"));
+        break;
+
+    case QAudio::AudioInput:
+        format.setFrequency(8000);
+        format.setChannels(1);
+        format.setSampleSize(16);
+        format.setByteOrder(QAudioFormat::LittleEndian);
+        format.setSampleType(QAudioFormat::SignedInt);
+        format.setCodec(QLatin1String("audio/pcm"));
+        break;
+
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
+    }
+
+    if (!isFormatSupported(format)) {
+        if (m_frequencies.size())
+            format.setFrequency(m_frequencies[0]);
+        if (m_channels.size())
+            format.setChannels(m_channels[0]);
+        if (m_sampleSizes.size())
+            format.setSampleSize(m_sampleSizes[0]);
+        if (m_byteOrders.size())
+            format.setByteOrder(m_byteOrders[0]);
+        if (m_sampleTypes.size())
+            format.setSampleType(m_sampleTypes[0]);
+    }
+
+    return format;
+}
+
+bool QAudioDeviceInfoInternal::isFormatSupported(
+                                 const QAudioFormat &format) const
+{
+    getSupportedFormats();
+    const bool supported =
+            m_codecs.contains(format.codec())
+        &&  m_frequencies.contains(format.frequency())
+        &&  m_channels.contains(format.channels())
+        &&  m_sampleSizes.contains(format.sampleSize())
+        &&  m_byteOrders.contains(format.byteOrder())
+        &&  m_sampleTypes.contains(format.sampleType());
+
+    return supported;
+}
+
+QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat &format) const
+{
+    if (isFormatSupported(format))
+        return format;
+    else
+        return preferredFormat();
+}
+
+QString QAudioDeviceInfoInternal::deviceName() const
+{
+    return m_deviceName;
+}
+
+QStringList QAudioDeviceInfoInternal::codecList()
+{
+    getSupportedFormats();
+    return m_codecs;
+}
+
+QList<int> QAudioDeviceInfoInternal::frequencyList()
+{
+    getSupportedFormats();
+    return m_frequencies;
+}
+
+QList<int> QAudioDeviceInfoInternal::channelsList()
+{
+    getSupportedFormats();
+    return m_channels;
+}
+
+QList<int> QAudioDeviceInfoInternal::sampleSizeList()
+{
+    getSupportedFormats();
+    return m_sampleSizes;
+}
+
+QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
+{
+    getSupportedFormats();
+    return m_byteOrders;
+}
+
+QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
+{
+    getSupportedFormats();
+    return m_sampleTypes;
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
+{
+    return QByteArray("default");
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
+{
+    return QByteArray("default");
+}
+
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode)
+{
+    QList<QByteArray> result;
+    result += QByteArray("default");
+    return result;
+}
+
+void QAudioDeviceInfoInternal::getSupportedFormats() const
+{
+    if (!m_updated) {
+        QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
+            new SymbianAudio::DevSoundCapabilities(*m_devsound, m_mode));
+
+        SymbianAudio::Utils::capabilitiesNativeToQt(*caps,
+            m_frequencies, m_channels, m_sampleSizes,
+            m_byteOrders, m_sampleTypes);
+
+        m_codecs.append(QLatin1String("audio/pcm"));
+
+        m_updated = true;
+    }
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.h b/src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.h
new file mode 100644
index 0000000..89e539f
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_symbian_p.h
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIODEVICEINFO_SYMBIAN_P_H
+#define QAUDIODEVICEINFO_SYMBIAN_P_H
+
+#include <QtMultimedia/qaudioengine.h>
+#include <sounddevice.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAudioDeviceInfoInternal
+    :   public QAbstractAudioDeviceInfo
+{
+    Q_OBJECT
+
+public:
+    QAudioDeviceInfoInternal(QByteArray device, QAudio::Mode mode);
+    ~QAudioDeviceInfoInternal();
+
+    // QAbstractAudioDeviceInfo
+    QAudioFormat preferredFormat() const;
+    bool isFormatSupported(const QAudioFormat &format) const;
+    QAudioFormat nearestFormat(const QAudioFormat &format) const;
+    QString deviceName() const;
+    QStringList codecList();
+    QList<int> frequencyList();
+    QList<int> channelsList();
+    QList<int> sampleSizeList();
+    QList<QAudioFormat::Endian> byteOrderList();
+    QList<QAudioFormat::SampleType> sampleTypeList();
+    static QByteArray defaultInputDevice();
+    static QByteArray defaultOutputDevice();
+    static QList<QByteArray> availableDevices(QAudio::Mode);
+
+private:
+    void getSupportedFormats() const;
+
+private:
+    QScopedPointer<CMMFDevSound> m_devsound;
+
+    QString m_deviceName;
+    QAudio::Mode m_mode;
+
+    // Mutable to allow lazy initialization when called from const-qualified
+    // public functions (isFormatSupported, nearestFormat)
+    mutable bool m_updated;
+    mutable QStringList m_codecs;
+    mutable QList<int> m_frequencies;
+    mutable QList<int> m_channels;
+    mutable QList<int> m_sampleSizes;
+    mutable QList<QAudioFormat::Endian> m_byteOrders;
+    mutable QList<QAudioFormat::SampleType> m_sampleTypes;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.cpp b/src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
new file mode 100644
index 0000000..aee0807
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
@@ -0,0 +1,433 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include <windows.h>
+#include <mmsystem.h>
+#include "qaudiodeviceinfo_win32_p.h"
+
+QT_BEGIN_NAMESPACE
+
+// For mingw toolchain mmsystem.h only defines half the defines, so add if needed.
+#ifndef WAVE_FORMAT_44M08
+#define WAVE_FORMAT_44M08 0x00000100
+#define WAVE_FORMAT_44S08 0x00000200
+#define WAVE_FORMAT_44M16 0x00000400
+#define WAVE_FORMAT_44S16 0x00000800
+#define WAVE_FORMAT_48M08 0x00001000
+#define WAVE_FORMAT_48S08 0x00002000
+#define WAVE_FORMAT_48M16 0x00004000
+#define WAVE_FORMAT_48S16 0x00008000
+#define WAVE_FORMAT_96M08 0x00010000
+#define WAVE_FORMAT_96S08 0x00020000
+#define WAVE_FORMAT_96M16 0x00040000
+#define WAVE_FORMAT_96S16 0x00080000
+#endif
+
+
+QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode)
+{
+    device = QLatin1String(dev);
+    this->mode = mode;
+
+    updateLists();
+}
+
+QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
+{
+    close();
+}
+
+bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
+{
+    return testSettings(format);
+}
+
+QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
+{
+    QAudioFormat nearest;
+    if(mode == QAudio::AudioOutput) {
+        nearest.setFrequency(44100);
+        nearest.setChannelCount(2);
+        nearest.setByteOrder(QAudioFormat::LittleEndian);
+        nearest.setSampleType(QAudioFormat::SignedInt);
+        nearest.setSampleSize(16);
+        nearest.setCodec(QLatin1String("audio/pcm"));
+    } else {
+        nearest.setFrequency(11025);
+        nearest.setChannelCount(1);
+        nearest.setByteOrder(QAudioFormat::LittleEndian);
+        nearest.setSampleType(QAudioFormat::SignedInt);
+        nearest.setSampleSize(8);
+        nearest.setCodec(QLatin1String("audio/pcm"));
+    }
+    return nearest;
+}
+
+QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) const
+{
+    if(testSettings(format))
+        return format;
+    else
+        return preferredFormat();
+}
+
+QString QAudioDeviceInfoInternal::deviceName() const
+{
+    return device;
+}
+
+QStringList QAudioDeviceInfoInternal::codecList()
+{
+    updateLists();
+    return codecz;
+}
+
+QList<int> QAudioDeviceInfoInternal::frequencyList()
+{
+    updateLists();
+    return freqz;
+}
+
+QList<int> QAudioDeviceInfoInternal::channelsList()
+{
+    updateLists();
+    return channelz;
+}
+
+QList<int> QAudioDeviceInfoInternal::sampleSizeList()
+{
+    updateLists();
+    return sizez;
+}
+
+QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
+{
+    updateLists();
+    return byteOrderz;
+}
+
+QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
+{
+    updateLists();
+    return typez;
+}
+
+
+bool QAudioDeviceInfoInternal::open()
+{
+    return true;
+}
+
+void QAudioDeviceInfoInternal::close()
+{
+}
+
+bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
+{
+    // Set nearest to closest settings that do work.
+    // See if what is in settings will work (return value).
+
+    bool failed = false;
+    bool match = false;
+
+    // check codec
+    for( int i = 0; i < codecz.count(); i++) {
+        if (format.codec() == codecz.at(i))
+            match = true;
+    }
+    if (!match) failed = true;
+
+    // check channel
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < channelz.count(); i++) {
+            if (format.channels() == channelz.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+    if (!match) failed = true;
+
+    // check frequency
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < freqz.count(); i++) {
+            if (format.frequency() == freqz.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    // check sample size
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < sizez.count(); i++) {
+            if (format.sampleSize() == sizez.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    // check byte order
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < byteOrderz.count(); i++) {
+            if (format.byteOrder() == byteOrderz.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    // check sample type
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < typez.count(); i++) {
+            if (format.sampleType() == typez.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    if(!failed) {
+        // settings work
+        return true;
+    }
+    return false;
+}
+
+void QAudioDeviceInfoInternal::updateLists()
+{
+    // redo all lists based on current settings
+    bool base = false;
+    bool match = false;
+    DWORD fmt = NULL;
+    QString tmp;
+
+    if(device.compare(QLatin1String("default")) == 0)
+        base = true;
+
+    if(mode == QAudio::AudioOutput) {
+        WAVEOUTCAPS woc;
+	unsigned long iNumDevs,i;
+	iNumDevs = waveOutGetNumDevs();
+	for(i=0;i<iNumDevs;i++) {
+	    if(waveOutGetDevCaps(i, &woc, sizeof(WAVEOUTCAPS))
+	        == MMSYSERR_NOERROR) {
+		tmp = QString((const QChar *)woc.szPname);
+		if(tmp.compare(device) == 0) {
+		    match = true;
+		    fmt = woc.dwFormats;
+		    break;
+		}
+		if(base) {
+		    match = true;
+		    fmt = woc.dwFormats;
+		    break;
+		}
+	    }
+	}
+    } else {
+        WAVEINCAPS woc;
+	unsigned long iNumDevs,i;
+	iNumDevs = waveInGetNumDevs();
+	for(i=0;i<iNumDevs;i++) {
+	    if(waveInGetDevCaps(i, &woc, sizeof(WAVEINCAPS))
+	        == MMSYSERR_NOERROR) {
+		tmp = QString((const QChar *)woc.szPname);
+		if(tmp.compare(device) == 0) {
+		    match = true;
+		    fmt = woc.dwFormats;
+		    break;
+		}
+		if(base) {
+		    match = true;
+		    fmt = woc.dwFormats;
+		    break;
+		}
+	    }
+	}
+    }
+    sizez.clear();
+    freqz.clear();
+    channelz.clear();
+    byteOrderz.clear();
+    typez.clear();
+    codecz.clear();
+
+    if(match) {
+        if((fmt && WAVE_FORMAT_1M08)
+           || (fmt && WAVE_FORMAT_1S08)
+	   || (fmt && WAVE_FORMAT_2M08)
+	   || (fmt && WAVE_FORMAT_2S08)
+	   || (fmt && WAVE_FORMAT_4M08)
+	   || (fmt && WAVE_FORMAT_4S08)
+#ifndef Q_OS_WINCE
+	   || (fmt && WAVE_FORMAT_48M08)
+	   || (fmt && WAVE_FORMAT_48S08)
+	   || (fmt && WAVE_FORMAT_96M08)
+	   || (fmt && WAVE_FORMAT_96S08)
+#endif
+       ) {
+            sizez.append(8);
+	}
+        if((fmt && WAVE_FORMAT_1M16)
+           || (fmt && WAVE_FORMAT_1S16)
+	   || (fmt && WAVE_FORMAT_2M16)
+	   || (fmt && WAVE_FORMAT_2S16)
+	   || (fmt && WAVE_FORMAT_4M16)
+	   || (fmt && WAVE_FORMAT_4S16)
+#ifndef Q_OS_WINCE
+	   || (fmt && WAVE_FORMAT_48M16)
+	   || (fmt && WAVE_FORMAT_48S16)
+	   || (fmt && WAVE_FORMAT_96M16)
+	   || (fmt && WAVE_FORMAT_96S16)
+#endif
+       ) {
+            sizez.append(16);
+	}
+        if((fmt && WAVE_FORMAT_1M08)
+           || (fmt && WAVE_FORMAT_1S08)
+	   || (fmt && WAVE_FORMAT_1M16)
+	   || (fmt && WAVE_FORMAT_1S16)) {
+            freqz.append(11025);
+	}
+        if((fmt && WAVE_FORMAT_2M08)
+           || (fmt && WAVE_FORMAT_2S08)
+	   || (fmt && WAVE_FORMAT_2M16)
+	   || (fmt && WAVE_FORMAT_2S16)) {
+            freqz.append(22050);
+	}
+        if((fmt && WAVE_FORMAT_4M08)
+           || (fmt && WAVE_FORMAT_4S08)
+	   || (fmt && WAVE_FORMAT_4M16)
+	   || (fmt && WAVE_FORMAT_4S16)) {
+            freqz.append(44100);
+	}
+#ifndef Q_OS_WINCE
+        if((fmt && WAVE_FORMAT_48M08)
+           || (fmt && WAVE_FORMAT_48S08)
+	   || (fmt && WAVE_FORMAT_48M16)
+	   || (fmt && WAVE_FORMAT_48S16)) {
+            freqz.append(48000);
+	}
+        if((fmt && WAVE_FORMAT_96M08)
+           || (fmt && WAVE_FORMAT_96S08)
+	   || (fmt && WAVE_FORMAT_96M16)
+	   || (fmt && WAVE_FORMAT_96S16)) {
+            freqz.append(96000);
+        }
+#endif
+	channelz.append(1);
+	channelz.append(2);
+
+	byteOrderz.append(QAudioFormat::LittleEndian);
+
+	typez.append(QAudioFormat::SignedInt);
+	typez.append(QAudioFormat::UnSignedInt);
+
+	codecz.append(QLatin1String("audio/pcm"));
+    }
+    if (freqz.count() > 0)
+        freqz.prepend(8000);
+}
+
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
+{
+    Q_UNUSED(mode)
+
+    QList<QByteArray> devices;
+
+    if(mode == QAudio::AudioOutput) {
+        WAVEOUTCAPS woc;
+	unsigned long iNumDevs,i;
+	iNumDevs = waveOutGetNumDevs();
+	for(i=0;i<iNumDevs;i++) {
+	    if(waveOutGetDevCaps(i, &woc, sizeof(WAVEOUTCAPS))
+	        == MMSYSERR_NOERROR) {
+	        devices.append(QString((const QChar *)woc.szPname).toLocal8Bit().constData());
+	    }
+	}
+    } else {
+        WAVEINCAPS woc;
+	unsigned long iNumDevs,i;
+	iNumDevs = waveInGetNumDevs();
+	for(i=0;i<iNumDevs;i++) {
+	    if(waveInGetDevCaps(i, &woc, sizeof(WAVEINCAPS))
+	        == MMSYSERR_NOERROR) {
+	        devices.append(QString((const QChar *)woc.szPname).toLocal8Bit().constData());
+	    }
+	}
+
+    }
+    if(devices.count() > 0)
+        devices.append("default");
+
+    return devices;
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
+{
+    return QByteArray("default");
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
+{
+    return QByteArray("default");
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.h b/src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.h
new file mode 100644
index 0000000..cb6dd91
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiodeviceinfo_win32_p.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#ifndef QAUDIODEVICEINFOWIN_H
+#define QAUDIODEVICEINFOWIN_H
+
+#include <QtCore/qbytearray.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qdebug.h>
+
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+
+
+QT_BEGIN_NAMESPACE
+
+const unsigned int MAX_SAMPLE_RATES = 5;
+const unsigned int SAMPLE_RATES[] = { 8000, 11025, 22050, 44100, 48000 };
+
+class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
+{
+    Q_OBJECT
+
+public:
+    QAudioDeviceInfoInternal(QByteArray dev,QAudio::Mode mode);
+    ~QAudioDeviceInfoInternal();
+
+    bool open();
+    void close();
+
+    bool testSettings(const QAudioFormat& format) const;
+    void updateLists();
+    QAudioFormat preferredFormat() const;
+    bool isFormatSupported(const QAudioFormat& format) const;
+    QAudioFormat nearestFormat(const QAudioFormat& format) const;
+    QString deviceName() const;
+    QStringList codecList();
+    QList<int> frequencyList();
+    QList<int> channelsList();
+    QList<int> sampleSizeList();
+    QList<QAudioFormat::Endian> byteOrderList();
+    QList<QAudioFormat::SampleType> sampleTypeList();
+    static QByteArray defaultInputDevice();
+    static QByteArray defaultOutputDevice();
+    static QList<QByteArray> availableDevices(QAudio::Mode);
+
+private:
+    QAudio::Mode mode;
+    QString device;
+    QAudioFormat nearest;
+    QList<int> freqz;
+    QList<int> channelz;
+    QList<int> sizez;
+    QList<QAudioFormat::Endian> byteOrderz;
+    QStringList codecz;
+    QList<QAudioFormat::SampleType> typez;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudioengine.cpp b/src/multimedia/multimedia/audio/qaudioengine.cpp
new file mode 100644
index 0000000..7f1f5d3
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioengine.cpp
@@ -0,0 +1,343 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMultimedia/qaudioengine.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QAbstractAudioDeviceInfo
+    \brief The QAbstractAudioDeviceInfo class provides access for QAudioDeviceInfo to access the audio
+    device provided by the plugin.
+    \internal
+
+    \ingroup multimedia
+
+    This class implements the audio functionality for
+    QAudioDeviceInfo, i.e., QAudioDeviceInfo keeps a
+    QAbstractAudioDeviceInfo and routes function calls to it. For a
+    description of the functionality that QAbstractAudioDeviceInfo
+    implements, you can read the class and functions documentation of
+    QAudioDeviceInfo.
+
+    \sa QAudioDeviceInfo
+*/
+
+/*!
+    \fn virtual QAudioFormat QAbstractAudioDeviceInfo::preferredFormat() const
+    Returns the nearest settings.
+*/
+
+/*!
+    \fn virtual bool QAbstractAudioDeviceInfo::isFormatSupported(const QAudioFormat& format) const
+    Returns true if \a format is available from audio device.
+*/
+
+/*!
+    \fn virtual QAudioFormat QAbstractAudioDeviceInfo::nearestFormat(const QAudioFormat& format) const
+    Returns the nearest settings \a format.
+*/
+
+/*!
+    \fn virtual QString QAbstractAudioDeviceInfo::deviceName() const
+    Returns the audio device name.
+*/
+
+/*!
+    \fn virtual QStringList QAbstractAudioDeviceInfo::codecList()
+    Returns the list of currently available codecs.
+*/
+
+/*!
+    \fn virtual QList<int> QAbstractAudioDeviceInfo::frequencyList()
+    Returns the list of currently available frequencies.
+*/
+
+/*!
+    \fn virtual QList<int> QAbstractAudioDeviceInfo::channelsList()
+    Returns the list of currently available channels.
+*/
+
+/*!
+    \fn virtual QList<int> QAbstractAudioDeviceInfo::sampleSizeList()
+    Returns the list of currently available sample sizes.
+*/
+
+/*!
+    \fn virtual QList<QAudioFormat::Endian> QAbstractAudioDeviceInfo::byteOrderList()
+    Returns the list of currently available byte orders.
+*/
+
+/*!
+    \fn virtual QList<QAudioFormat::SampleType> QAbstractAudioDeviceInfo::sampleTypeList()
+    Returns the list of currently available sample types.
+*/
+
+/*!
+    \class QAbstractAudioOutput
+    \brief The QAbstractAudioOutput class provides access for QAudioOutput to access the audio
+    device provided by the plugin.
+    \internal
+
+    \ingroup multimedia
+
+    QAbstractAudioOutput implements audio functionality for
+    QAudioOutput, i.e., QAudioOutput routes function calls to
+    QAbstractAudioOutput. For a description of the functionality that
+    is implemented, see the QAudioOutput class and function
+    descriptions.
+
+    \sa QAudioOutput
+*/
+
+/*!
+    \fn virtual QIODevice* QAbstractAudioOutput::start(QIODevice* device)
+    Uses the \a device as the QIODevice to transfer data. If \a device is null then the class
+    creates an internal QIODevice. Returns a pointer to the QIODevice being used to handle
+    the data transfer. This QIODevice can be used to write() audio data directly. Passing a
+    QIODevice allows the data to be transfered without any extra code.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioOutput::stop()
+    Stops the audio output.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioOutput::reset()
+    Drops all audio data in the buffers, resets buffers to zero.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioOutput::suspend()
+    Stops processing audio data, preserving buffered audio data.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioOutput::resume()
+    Resumes processing audio data after a suspend()
+*/
+
+/*!
+    \fn virtual int QAbstractAudioOutput::bytesFree() const
+    Returns the free space available in bytes in the audio buffer.
+*/
+
+/*!
+    \fn virtual int QAbstractAudioOutput::periodSize() const
+    Returns the period size in bytes.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioOutput::setBufferSize(int value)
+    Sets the audio buffer size to \a value in bytes.
+*/
+
+/*!
+    \fn virtual int QAbstractAudioOutput::bufferSize() const
+    Returns the audio buffer size in bytes.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioOutput::setNotifyInterval(int ms)
+    Sets the interval for notify() signal to be emitted. This is based on the \a ms
+    of audio data processed not on actual real-time. The resolution of the timer
+    is platform specific.
+*/
+
+/*!
+    \fn virtual int QAbstractAudioOutput::notifyInterval() const
+    Returns the notify interval in milliseconds.
+*/
+
+/*!
+    \fn virtual qint64 QAbstractAudioOutput::processedUSecs() const
+    Returns the amount of audio data processed since start() was called in milliseconds.
+*/
+
+/*!
+    \fn virtual qint64 QAbstractAudioOutput::elapsedUSecs() const
+    Returns the milliseconds since start() was called, including time in Idle and suspend states.
+*/
+
+/*!
+    \fn virtual QAudio::Error QAbstractAudioOutput::error() const
+    Returns the error state.
+*/
+
+/*!
+    \fn virtual QAudio::State QAbstractAudioOutput::state() const
+    Returns the state of audio processing.
+*/
+
+/*!
+    \fn virtual QAudioFormat QAbstractAudioOutput::format() const
+    Returns the QAudioFormat being used.
+*/
+
+/*!
+    \fn QAbstractAudioOutput::stateChanged(QAudio::State state)
+    This signal is emitted when the device \a state has changed.
+*/
+
+/*!
+    \fn QAbstractAudioOutput::notify()
+    This signal is emitted when x ms of audio data has been processed
+    the interval set by setNotifyInterval(x).
+*/
+
+
+/*!
+    \class QAbstractAudioInput
+    \brief The QAbstractAudioInput class provides access for QAudioInput to access the audio
+    device provided by the plugin.
+    \internal
+
+    \ingroup multimedia
+
+    QAudioDeviceInput keeps an instance of QAbstractAudioInput and
+    routes calls to functions of the same name to QAbstractAudioInput.
+    This means that it is QAbstractAudioInput that implements the
+    audio functionality. For a description of the functionality, see
+    the QAudioInput class description.
+
+    \sa QAudioInput
+*/
+
+/*!
+    \fn virtual QIODevice* QAbstractAudioInput::start(QIODevice* device)
+    Uses the \a device as the QIODevice to transfer data. If \a device is null
+    then the class creates an internal QIODevice. Returns a pointer to the
+    QIODevice being used to handle the data transfer. This QIODevice can be used to
+    read() audio data directly. Passing a QIODevice allows the data to be transfered
+    without any extra code.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioInput::stop()
+    Stops the audio input.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioInput::reset()
+    Drops all audio data in the buffers, resets buffers to zero.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioInput::suspend()
+    Stops processing audio data, preserving buffered audio data.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioInput::resume()
+    Resumes processing audio data after a suspend().
+*/
+
+/*!
+    \fn virtual int QAbstractAudioInput::bytesReady() const
+    Returns the amount of audio data available to read in bytes.
+*/
+
+/*!
+    \fn virtual int QAbstractAudioInput::periodSize() const
+    Returns the period size in bytes.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioInput::setBufferSize(int value)
+    Sets the audio buffer size to \a value in milliseconds.
+*/
+
+/*!
+    \fn virtual int QAbstractAudioInput::bufferSize() const
+    Returns the audio buffer size in milliseconds.
+*/
+
+/*!
+    \fn virtual void QAbstractAudioInput::setNotifyInterval(int ms)
+    Sets the interval for notify() signal to be emitted. This is based
+    on the \a ms of audio data processed not on actual real-time.
+    The resolution of the timer is platform specific.
+*/
+
+/*!
+    \fn virtual int QAbstractAudioInput::notifyInterval() const
+    Returns the notify interval in milliseconds.
+*/
+
+/*!
+    \fn virtual qint64 QAbstractAudioInput::processedUSecs() const
+    Returns the amount of audio data processed since start() was called in milliseconds.
+*/
+
+/*!
+    \fn virtual qint64 QAbstractAudioInput::elapsedUSecs() const
+    Returns the milliseconds since start() was called, including time in Idle and suspend states.
+*/
+
+/*!
+    \fn virtual QAudio::Error QAbstractAudioInput::error() const
+    Returns the error state.
+*/
+
+/*!
+    \fn virtual QAudio::State QAbstractAudioInput::state() const
+    Returns the state of audio processing.
+*/
+
+/*!
+    \fn virtual QAudioFormat QAbstractAudioInput::format() const
+    Returns the QAudioFormat being used
+*/
+
+/*!
+    \fn QAbstractAudioInput::stateChanged(QAudio::State state)
+    This signal is emitted when the device \a state has changed.
+*/
+
+/*!
+    \fn QAbstractAudioInput::notify()
+    This signal is emitted when x ms of audio data has been processed
+    the interval set by setNotifyInterval(x).
+*/
+
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudioengine.h b/src/multimedia/multimedia/audio/qaudioengine.h
new file mode 100644
index 0000000..df9d09d
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioengine.h
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QAUDIOENGINE_H
+#define QAUDIOENGINE_H
+
+#include <QtCore/qglobal.h>
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class Q_MULTIMEDIA_EXPORT QAbstractAudioDeviceInfo : public QObject
+{
+    Q_OBJECT
+
+public:
+    virtual QAudioFormat preferredFormat() const = 0;
+    virtual bool isFormatSupported(const QAudioFormat &format) const = 0;
+    virtual QAudioFormat nearestFormat(const QAudioFormat &format) const = 0;
+    virtual QString deviceName() const = 0;
+    virtual QStringList codecList() = 0;
+    virtual QList<int> frequencyList() = 0;
+    virtual QList<int> channelsList() = 0;
+    virtual QList<int> sampleSizeList() = 0;
+    virtual QList<QAudioFormat::Endian> byteOrderList() = 0;
+    virtual QList<QAudioFormat::SampleType> sampleTypeList() = 0;
+};
+
+class Q_MULTIMEDIA_EXPORT QAbstractAudioOutput : public QObject
+{
+    Q_OBJECT
+
+public:
+    virtual QIODevice* start(QIODevice* device) = 0;
+    virtual void stop() = 0;
+    virtual void reset() = 0;
+    virtual void suspend() = 0;
+    virtual void resume() = 0;
+    virtual int bytesFree() const = 0;
+    virtual int periodSize() const = 0;
+    virtual void setBufferSize(int value) = 0;
+    virtual int bufferSize() const = 0;
+    virtual void setNotifyInterval(int milliSeconds) = 0;
+    virtual int notifyInterval() const = 0;
+    virtual qint64 processedUSecs() const = 0;
+    virtual qint64 elapsedUSecs() const = 0;
+    virtual QAudio::Error error() const = 0;
+    virtual QAudio::State state() const = 0;
+    virtual QAudioFormat format() const = 0;
+
+Q_SIGNALS:
+    void stateChanged(QAudio::State);
+    void notify();
+};
+
+class Q_MULTIMEDIA_EXPORT QAbstractAudioInput : public QObject
+{
+    Q_OBJECT
+
+public:
+    virtual QIODevice* start(QIODevice* device) = 0;
+    virtual void stop() = 0;
+    virtual void reset() = 0;
+    virtual void suspend()  = 0;
+    virtual void resume() = 0;
+    virtual int bytesReady() const = 0;
+    virtual int periodSize() const = 0;
+    virtual void setBufferSize(int value) = 0;
+    virtual int bufferSize() const = 0;
+    virtual void setNotifyInterval(int milliSeconds) = 0;
+    virtual int notifyInterval() const = 0;
+    virtual qint64 processedUSecs() const = 0;
+    virtual qint64 elapsedUSecs() const = 0;
+    virtual QAudio::Error error() const = 0;
+    virtual QAudio::State state() const = 0;
+    virtual QAudioFormat format() const = 0;
+
+Q_SIGNALS:
+    void stateChanged(QAudio::State);
+    void notify();
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QAUDIOENGINE_H
diff --git a/src/multimedia/multimedia/audio/qaudioengineplugin.cpp b/src/multimedia/multimedia/audio/qaudioengineplugin.cpp
new file mode 100644
index 0000000..82324b5
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioengineplugin.cpp
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtMultimedia/qaudioengineplugin.h>
+
+QT_BEGIN_NAMESPACE
+
+QAudioEnginePlugin::QAudioEnginePlugin(QObject* parent) :
+    QObject(parent)
+{}
+
+QAudioEnginePlugin::~QAudioEnginePlugin()
+{}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudioengineplugin.h b/src/multimedia/multimedia/audio/qaudioengineplugin.h
new file mode 100644
index 0000000..2322d2a
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioengineplugin.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QAUDIOENGINEPLUGIN_H
+#define QAUDIOENGINEPLUGIN_H
+
+#include <QtCore/qstring.h>
+#include <QtCore/qplugin.h>
+#include <QtCore/qfactoryinterface.h>
+
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+struct Q_MULTIMEDIA_EXPORT QAudioEngineFactoryInterface : public QFactoryInterface
+{
+    virtual QList<QByteArray> availableDevices(QAudio::Mode) const = 0;
+    virtual QAbstractAudioInput* createInput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
+    virtual QAbstractAudioOutput* createOutput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
+    virtual QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) = 0;
+};
+
+#define QAudioEngineFactoryInterface_iid \
+    "com.nokia.qt.QAudioEngineFactoryInterface"
+Q_DECLARE_INTERFACE(QAudioEngineFactoryInterface, QAudioEngineFactoryInterface_iid)
+
+class Q_MULTIMEDIA_EXPORT QAudioEnginePlugin : public QObject, public QAudioEngineFactoryInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(QAudioEngineFactoryInterface:QFactoryInterface)
+
+public:
+    QAudioEnginePlugin(QObject *parent = 0);
+    ~QAudioEnginePlugin();
+
+    virtual QStringList keys() const = 0;
+    virtual QList<QByteArray> availableDevices(QAudio::Mode) const = 0;
+    virtual QAbstractAudioInput* createInput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
+    virtual QAbstractAudioOutput* createOutput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
+    virtual QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) = 0;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QAUDIOENGINEPLUGIN_H
diff --git a/src/multimedia/multimedia/audio/qaudioformat.cpp b/src/multimedia/multimedia/audio/qaudioformat.cpp
new file mode 100644
index 0000000..86d72f6
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioformat.cpp
@@ -0,0 +1,407 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QDebug>
+#include <QtMultimedia/qaudioformat.h>
+
+
+QT_BEGIN_NAMESPACE
+
+
+class QAudioFormatPrivate : public QSharedData
+{
+public:
+    QAudioFormatPrivate()
+    {
+        frequency = -1;
+        channels = -1;
+        sampleSize = -1;
+        byteOrder = QAudioFormat::Endian(QSysInfo::ByteOrder);
+        sampleType = QAudioFormat::Unknown;
+    }
+
+    QAudioFormatPrivate(const QAudioFormatPrivate &other):
+        QSharedData(other),
+        codec(other.codec),
+        byteOrder(other.byteOrder),
+        sampleType(other.sampleType),
+        frequency(other.frequency),
+        channels(other.channels),
+        sampleSize(other.sampleSize)
+    {
+    }
+
+    QAudioFormatPrivate& operator=(const QAudioFormatPrivate &other)
+    {
+        codec = other.codec;
+        byteOrder = other.byteOrder;
+        sampleType = other.sampleType;
+        frequency = other.frequency;
+        channels = other.channels;
+        sampleSize = other.sampleSize;
+
+        return *this;
+    }
+
+    QString codec;
+    QAudioFormat::Endian byteOrder;
+    QAudioFormat::SampleType sampleType;
+    int frequency;
+    int channels;
+    int sampleSize;
+};
+
+/*!
+    \class QAudioFormat
+    \brief The QAudioFormat class stores audio parameter information.
+
+    \inmodule QtMultimedia
+    \ingroup  multimedia
+    \since 4.6
+
+    An audio format specifies how data in an audio stream is arranged,
+    i.e, how the stream is to be interpreted. The encoding itself is
+    specified by the codec() used for the stream.
+
+    In addition to the encoding, QAudioFormat contains other
+    parameters that further specify how the audio data is arranged.
+    These are the frequency, the number of channels, the sample size,
+    the sample type, and the byte order. The following table describes
+    these in more detail.
+
+    \table
+        \header
+            \o Parameter
+            \o Description
+        \row
+            \o Sample Rate
+            \o Samples per second of audio data in Hertz.
+        \row
+            \o Number of channels
+            \o The number of audio channels (typically one for mono
+               or two for stereo)
+        \row
+            \o Sample size
+            \o How much data is stored in each sample (typically 8
+               or 16 bits)
+        \row
+            \o Sample type
+            \o Numerical representation of sample (typically signed integer,
+               unsigned integer or float)
+        \row
+            \o Byte order
+            \o Byte ordering of sample (typically little endian, big endian)
+    \endtable
+
+    You can obtain audio formats compatible with the audio device used
+    through functions in QAudioDeviceInfo. This class also lets you
+    query available parameter values for a device, so that you can set
+    the parameters yourself. See the QAudioDeviceInfo class
+    description for details. You need to know the format of the audio
+    streams you wish to play. Qt does not set up formats for you.
+*/
+
+/*!
+    Construct a new audio format.
+
+    Values are initialized as follows:
+    \list
+    \o sampleRate()  = -1
+    \o channelCount() = -1
+    \o sampleSize() = -1
+    \o byteOrder()  = QAudioFormat::Endian(QSysInfo::ByteOrder)
+    \o sampleType() = QAudioFormat::Unknown
+    \c codec()      = ""
+    \endlist
+*/
+
+QAudioFormat::QAudioFormat():
+    d(new QAudioFormatPrivate)
+{
+}
+
+/*!
+    Construct a new audio format using \a other.
+*/
+
+QAudioFormat::QAudioFormat(const QAudioFormat &other):
+    d(other.d)
+{
+}
+
+/*!
+    Destroy this audio format.
+*/
+
+QAudioFormat::~QAudioFormat()
+{
+}
+
+/*!
+    Assigns \a other to this QAudioFormat implementation.
+*/
+
+QAudioFormat& QAudioFormat::operator=(const QAudioFormat &other)
+{
+    d = other.d;
+    return *this;
+}
+
+/*!
+  Returns true if this QAudioFormat is equal to the \a other
+  QAudioFormat; otherwise returns false.
+
+  All elements of QAudioFormat are used for the comparison.
+*/
+
+bool QAudioFormat::operator==(const QAudioFormat &other) const
+{
+    return d->frequency == other.d->frequency &&
+            d->channels == other.d->channels &&
+            d->sampleSize == other.d->sampleSize &&
+            d->byteOrder == other.d->byteOrder &&
+            d->codec == other.d->codec &&
+            d->sampleType == other.d->sampleType;
+}
+
+/*!
+  Returns true if this QAudioFormat is not equal to the \a other
+  QAudioFormat; otherwise returns false.
+
+  All elements of QAudioFormat are used for the comparison.
+*/
+
+bool QAudioFormat::operator!=(const QAudioFormat& other) const
+{
+    return !(*this == other);
+}
+
+/*!
+    Returns true if all of the parameters are valid.
+*/
+
+bool QAudioFormat::isValid() const
+{
+    return d->frequency != -1 && d->channels != -1 && d->sampleSize != -1 &&
+            d->sampleType != QAudioFormat::Unknown && !d->codec.isEmpty();
+}
+
+/*!
+   Sets the sample rate to \a samplerate Hertz.
+
+   \since 4.7
+*/
+
+void QAudioFormat::setSampleRate(int samplerate)
+{
+    d->frequency = samplerate;
+}
+
+/*!
+   \obsolete
+
+   Use setSampleRate() instead.
+*/
+
+void QAudioFormat::setFrequency(int frequency)
+{
+    d->frequency = frequency;
+}
+
+/*!
+    Returns the current sample rate in Hertz.
+
+    \since 4.7
+*/
+
+int QAudioFormat::sampleRate() const
+{
+    return d->frequency;
+}
+
+/*!
+   \obsolete
+
+   Use sampleRate() instead.
+*/
+
+int QAudioFormat::frequency() const
+{
+    return d->frequency;
+}
+
+/*!
+   Sets the channel count to \a channels.
+
+   \since 4.7
+*/
+
+void QAudioFormat::setChannelCount(int channels)
+{
+    d->channels = channels;
+}
+
+/*!
+   \obsolete
+
+   Use setChannelCount() instead.
+*/
+
+void QAudioFormat::setChannels(int channels)
+{
+    d->channels = channels;
+}
+
+/*!
+    Returns the current channel count value.
+
+    \since 4.7
+*/
+
+int QAudioFormat::channelCount() const
+{
+    return d->channels;
+}
+
+/*!
+    \obsolete
+
+    Use channelCount() instead.
+*/
+
+int QAudioFormat::channels() const
+{
+    return d->channels;
+}
+
+/*!
+   Sets the sample size to the \a sampleSize specified.
+*/
+
+void QAudioFormat::setSampleSize(int sampleSize)
+{
+    d->sampleSize = sampleSize;
+}
+
+/*!
+    Returns the current sample size value.
+*/
+
+int QAudioFormat::sampleSize() const
+{
+    return d->sampleSize;
+}
+
+/*!
+   Sets the codec to \a codec.
+
+   \sa QAudioDeviceInfo::supportedCodecs()
+*/
+
+void QAudioFormat::setCodec(const QString &codec)
+{
+    d->codec = codec;
+}
+
+/*!
+    Returns the current codec value.
+
+   \sa QAudioDeviceInfo::supportedCodecs()
+*/
+
+QString QAudioFormat::codec() const
+{
+    return d->codec;
+}
+
+/*!
+   Sets the byteOrder to \a byteOrder.
+*/
+
+void QAudioFormat::setByteOrder(QAudioFormat::Endian byteOrder)
+{
+    d->byteOrder = byteOrder;
+}
+
+/*!
+    Returns the current byteOrder value.
+*/
+
+QAudioFormat::Endian QAudioFormat::byteOrder() const
+{
+    return d->byteOrder;
+}
+
+/*!
+   Sets the sampleType to \a sampleType.
+*/
+
+void QAudioFormat::setSampleType(QAudioFormat::SampleType sampleType)
+{
+    d->sampleType = sampleType;
+}
+
+/*!
+    Returns the current SampleType value.
+*/
+
+QAudioFormat::SampleType QAudioFormat::sampleType() const
+{
+    return d->sampleType;
+}
+
+/*!
+    \enum QAudioFormat::SampleType
+
+    \value Unknown       Not Set
+    \value SignedInt     samples are signed integers
+    \value UnSignedInt   samples are unsigned intergers
+    \value Float         samples are floats
+*/
+
+/*!
+    \enum QAudioFormat::Endian
+
+    \value BigEndian     samples are big endian byte order
+    \value LittleEndian  samples are little endian byte order
+*/
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/multimedia/audio/qaudioformat.h b/src/multimedia/multimedia/audio/qaudioformat.h
new file mode 100644
index 0000000..6c835b7
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioformat.h
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QAUDIOFORMAT_H
+#define QAUDIOFORMAT_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qglobal.h>
+#include <QtCore/qshareddata.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QAudioFormatPrivate;
+
+class Q_MULTIMEDIA_EXPORT QAudioFormat
+{
+public:
+    enum SampleType { Unknown, SignedInt, UnSignedInt, Float };
+    enum Endian { BigEndian = QSysInfo::BigEndian, LittleEndian = QSysInfo::LittleEndian };
+
+    QAudioFormat();
+    QAudioFormat(const QAudioFormat &other);
+    ~QAudioFormat();
+
+    QAudioFormat& operator=(const QAudioFormat &other);
+    bool operator==(const QAudioFormat &other) const;
+    bool operator!=(const QAudioFormat &other) const;
+
+    bool isValid() const;
+
+    void setFrequency(int frequency);
+    int frequency() const;
+    void setSampleRate(int sampleRate);
+    int sampleRate() const;
+
+    void setChannels(int channels);
+    int channels() const;
+    void setChannelCount(int channelCount);
+    int channelCount() const;
+
+    void setSampleSize(int sampleSize);
+    int sampleSize() const;
+
+    void setCodec(const QString &codec);
+    QString codec() const;
+
+    void setByteOrder(QAudioFormat::Endian byteOrder);
+    QAudioFormat::Endian byteOrder() const;
+
+    void setSampleType(QAudioFormat::SampleType sampleType);
+    QAudioFormat::SampleType sampleType() const;
+
+private:
+    QSharedDataPointer<QAudioFormatPrivate> d;
+};
+
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif  // QAUDIOFORMAT_H
diff --git a/src/multimedia/multimedia/audio/qaudioinput.cpp b/src/multimedia/multimedia/audio/qaudioinput.cpp
new file mode 100644
index 0000000..c99e870
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput.cpp
@@ -0,0 +1,432 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+#include <QtMultimedia/qaudioinput.h>
+
+#include "qaudiodevicefactory_p.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QAudioInput
+    \brief The QAudioInput class provides an interface for receiving audio data from an audio input device.
+
+    \inmodule QtMultimedia
+    \ingroup  multimedia
+    \since 4.6
+
+    You can construct an audio input with the system's
+    \l{QAudioDeviceInfo::defaultInputDevice()}{default audio input
+    device}. It is also possible to create QAudioInput with a
+    specific QAudioDeviceInfo. When you create the audio input, you
+    should also send in the QAudioFormat to be used for the recording
+    (see the QAudioFormat class description for details).
+
+    To record to a file:
+
+    QAudioInput lets you record audio with an audio input device. The
+    default constructor of this class will use the systems default
+    audio device, but you can also specify a QAudioDeviceInfo for a
+    specific device. You also need to pass in the QAudioFormat in
+    which you wish to record.
+
+    Starting up the QAudioInput is simply a matter of calling start()
+    with a QIODevice opened for writing. For instance, to record to a
+    file, you can:
+
+    \code
+      QFile outputFile;   // class member.
+      QAudioInput* audio; // class member.
+    \endcode
+
+    \code
+    {
+      outputFile.setFileName("/tmp/test.raw");
+      outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate );
+
+      QAudioFormat format;
+      // set up the format you want, eg.
+      format.setFrequency(8000);
+      format.setChannels(1);
+      format.setSampleSize(8);
+      format.setCodec("audio/pcm");
+      format.setByteOrder(QAudioFormat::LittleEndian);
+      format.setSampleType(QAudioFormat::UnSignedInt);
+
+      QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
+      if (!info.isFormatSupported(format)) {
+          qWarning()<<"default format not supported try to use nearest";
+          format = info.nearestFormat(format);
+      }
+
+      audio = new QAudioInput(format, this);
+      QTimer::singleShot(3000, this, SLOT(stopRecording()));
+      audio->start(&outputFile);
+      // Records audio for 3000ms
+    }
+    \endcode
+
+    This will start recording if the format specified is supported by
+    the input device (you can check this with
+    QAudioDeviceInfo::isFormatSupported(). In case there are any
+    snags, use the error() function to check what went wrong. We stop
+    recording in the \c stopRecording() slot.
+
+    \code
+    void stopRecording()
+    {
+      audio->stop();
+      outputFile->close();
+      delete audio;
+    }
+    \endcode
+
+    At any point in time, QAudioInput will be in one of four states:
+    active, suspended, stopped, or idle. These states are specified by
+    the QAudio::State enum. You can request a state change directly through
+    suspend(), resume(), stop(), reset(), and start(). The current
+    state is reported by state(). QAudioOutput will also signal you
+    when the state changes (stateChanged()).
+
+    QAudioInput provides several ways of measuring the time that has
+    passed since the start() of the recording. The \c processedUSecs()
+    function returns the length of the stream in microseconds written,
+    i.e., it leaves out the times the audio input was suspended or idle.
+    The elapsedUSecs() function returns the time elapsed since start() was called regardless of
+    which states the QAudioInput has been in.
+
+    If an error should occur, you can fetch its reason with error().
+    The possible error reasons are described by the QAudio::Error
+    enum. The QAudioInput will enter the \l{QAudio::}{StoppedState} when
+    an error is encountered.  Connect to the stateChanged() signal to
+    handle the error:
+
+    \snippet doc/src/snippets/audio/main.cpp 0
+
+    \sa QAudioOutput, QAudioDeviceInfo
+
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use this class must have the
+    \c UserEnvironment platform security capability.  If the client
+    process lacks this capability, calls to either overload of start()
+    will fail.
+    This failure is indicated by the QAudioInput object setting
+    its error() value to \l{QAudio::OpenError} and then emitting a
+    \l{stateChanged()}{stateChanged}(\l{QAudio::StoppedState}) signal.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
+*/
+
+/*!
+    Construct a new audio input and attach it to \a parent.
+    The default audio input device is used with the output
+    \a format parameters.
+*/
+
+QAudioInput::QAudioInput(const QAudioFormat &format, QObject *parent):
+    QObject(parent)
+{
+    d = QAudioDeviceFactory::createDefaultInputDevice(format);
+    connect(d, SIGNAL(notify()), SIGNAL(notify()));
+    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
+}
+
+/*!
+    Construct a new audio input and attach it to \a parent.
+    The device referenced by \a audioDevice is used with the input
+    \a format parameters.
+*/
+
+QAudioInput::QAudioInput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format, QObject *parent):
+    QObject(parent)
+{
+    d = QAudioDeviceFactory::createInputDevice(audioDevice, format);
+    connect(d, SIGNAL(notify()), SIGNAL(notify()));
+    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
+}
+
+/*!
+    Destroy this audio input.
+*/
+
+QAudioInput::~QAudioInput()
+{
+    delete d;
+}
+
+/*!
+     Uses the \a device as the QIODevice to transfer data.
+     Passing a QIODevice allows the data to be transfered without any extra code.
+     All that is required is to open the QIODevice.
+
+     If able to successfully get audio data from the systems audio device the
+     state() is set to either QAudio::ActiveState or QAudio::IdleState,
+     error() is set to QAudio::NoError and the stateChanged() signal is emitted.
+
+     If a problem occurs during this process the error() is set to QAudio::OpenError,
+     state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+     \sa {Symbian Platform Security Requirements}
+
+     \sa QIODevice
+*/
+
+void QAudioInput::start(QIODevice* device)
+{
+    d->start(device);
+}
+
+/*!
+    Returns a pointer to the QIODevice being used to handle the data
+    transfer. This QIODevice can be used to read() audio data
+    directly.
+
+    If able to access the systems audio device the state() is set to
+    QAudio::IdleState, error() is set to QAudio::NoError
+    and the stateChanged() signal is emitted.
+
+    If a problem occurs during this process the error() is set to QAudio::OpenError,
+    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+    \sa {Symbian Platform Security Requirements}
+
+    \sa QIODevice
+*/
+
+QIODevice* QAudioInput::start()
+{
+    return d->start(0);
+}
+
+/*!
+    Returns the QAudioFormat being used.
+*/
+
+QAudioFormat QAudioInput::format() const
+{
+    return d->format();
+}
+
+/*!
+    Stops the audio input, detaching from the system resource.
+
+    Sets error() to QAudio::NoError, state() to QAudio::StoppedState and
+    emit stateChanged() signal.
+*/
+
+void QAudioInput::stop()
+{
+    d->stop();
+}
+
+/*!
+    Drops all audio data in the buffers, resets buffers to zero.
+*/
+
+void QAudioInput::reset()
+{
+    d->reset();
+}
+
+/*!
+    Stops processing audio data, preserving buffered audio data.
+
+    Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and
+    emit stateChanged() signal.
+*/
+
+void QAudioInput::suspend()
+{
+    d->suspend();
+}
+
+/*!
+    Resumes processing audio data after a suspend().
+
+    Sets error() to QAudio::NoError.
+    Sets state() to QAudio::ActiveState if you previously called start(QIODevice*).
+    Sets state() to QAudio::IdleState if you previously called start().
+    emits stateChanged() signal.
+*/
+
+void QAudioInput::resume()
+{
+     d->resume();
+}
+
+/*!
+    Sets the audio buffer size to \a value milliseconds.
+
+    Note: This function can be called anytime before start(), calls to this
+    are ignored after start(). It should not be assumed that the buffer size
+    set is the actual buffer size used, calling bufferSize() anytime after start()
+    will return the actual buffer size being used.
+
+*/
+
+void QAudioInput::setBufferSize(int value)
+{
+    d->setBufferSize(value);
+}
+
+/*!
+    Returns the audio buffer size in milliseconds.
+
+    If called before start(), returns platform default value.
+    If called before start() but setBufferSize() was called prior, returns value set by setBufferSize().
+    If called after start(), returns the actual buffer size being used. This may not be what was set previously
+    by setBufferSize().
+
+*/
+
+int QAudioInput::bufferSize() const
+{
+    return d->bufferSize();
+}
+
+/*!
+    Returns the amount of audio data available to read in bytes.
+
+    NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState
+    state, otherwise returns zero.
+*/
+
+int QAudioInput::bytesReady() const
+{
+    /*
+    -If not ActiveState|IdleState, return 0
+    -return amount of audio data available to read
+    */
+    return d->bytesReady();
+}
+
+/*!
+    Returns the period size in bytes.
+
+    Note: This is the recommended read size in bytes.
+*/
+
+int QAudioInput::periodSize() const
+{
+    return d->periodSize();
+}
+
+/*!
+    Sets the interval for notify() signal to be emitted.
+    This is based on the \a ms of audio data processed
+    not on actual real-time.
+    The minimum resolution of the timer is platform specific and values
+    should be checked with notifyInterval() to confirm actual value
+    being used.
+*/
+
+void QAudioInput::setNotifyInterval(int ms)
+{
+    d->setNotifyInterval(ms);
+}
+
+/*!
+    Returns the notify interval in milliseconds.
+*/
+
+int QAudioInput::notifyInterval() const
+{
+    return d->notifyInterval();
+}
+
+/*!
+    Returns the amount of audio data processed since start()
+    was called in microseconds.
+*/
+
+qint64 QAudioInput::processedUSecs() const
+{
+    return d->processedUSecs();
+}
+
+/*!
+    Returns the microseconds since start() was called, including time in Idle and
+    Suspend states.
+*/
+
+qint64 QAudioInput::elapsedUSecs() const
+{
+    return d->elapsedUSecs();
+}
+
+/*!
+    Returns the error state.
+*/
+
+QAudio::Error QAudioInput::error() const
+{
+    return d->error();
+}
+
+/*!
+    Returns the state of audio processing.
+*/
+
+QAudio::State QAudioInput::state() const
+{
+    return d->state();
+}
+
+/*!
+    \fn QAudioInput::stateChanged(QAudio::State state)
+    This signal is emitted when the device \a state has changed.
+*/
+
+/*!
+    \fn QAudioInput::notify()
+    This signal is emitted when x ms of audio data has been processed
+    the interval set by setNotifyInterval(x).
+*/
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/multimedia/audio/qaudioinput.h b/src/multimedia/multimedia/audio/qaudioinput.h
new file mode 100644
index 0000000..5be9b5a
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QAUDIOINPUT_H
+#define QAUDIOINPUT_H
+
+#include <QtCore/qiodevice.h>
+#include <QtCore/qglobal.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QAbstractAudioInput;
+
+class Q_MULTIMEDIA_EXPORT QAudioInput : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
+    explicit QAudioInput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
+    ~QAudioInput();
+
+    QAudioFormat format() const;
+
+    void start(QIODevice *device);
+    QIODevice* start();
+
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+
+    void setBufferSize(int bytes);
+    int bufferSize() const;
+
+    int bytesReady() const;
+    int periodSize() const;
+
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+Q_SIGNALS:
+    void stateChanged(QAudio::State);
+    void notify();
+
+private:
+    Q_DISABLE_COPY(QAudioInput)
+
+    QAbstractAudioInput* d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QAUDIOINPUT_H
diff --git a/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp
new file mode 100644
index 0000000..6b15008
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp
@@ -0,0 +1,706 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qcoreapplication.h>
+#include "qaudioinput_alsa_p.h"
+#include "qaudiodeviceinfo_alsa_p.h"
+
+QT_BEGIN_NAMESPACE
+
+//#define DEBUG_AUDIO 1
+
+static const int minimumIntervalTime = 50;
+
+QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
+    settings(audioFormat)
+{
+    bytesAvailable = 0;
+    handle = 0;
+    ahandler = 0;
+    access = SND_PCM_ACCESS_RW_INTERLEAVED;
+    pcmformat = SND_PCM_FORMAT_S16;
+    buffer_size = 0;
+    period_size = 0;
+    buffer_time = 100000;
+    period_time = 20000;
+    totalTimeValue = 0;
+    intervalTime = 1000;
+    audioBuffer = 0;
+    errorState = QAudio::NoError;
+    deviceState = QAudio::StoppedState;
+    audioSource = 0;
+    pullMode = true;
+    resuming = false;
+
+    m_device = device;
+
+    timer = new QTimer(this);
+    connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
+}
+
+QAudioInputPrivate::~QAudioInputPrivate()
+{
+    close();
+    disconnect(timer, SIGNAL(timeout()));
+    QCoreApplication::processEvents();
+    delete timer;
+}
+
+QAudio::Error QAudioInputPrivate::error() const
+{
+    return errorState;
+}
+
+QAudio::State QAudioInputPrivate::state() const
+{
+    return deviceState;
+}
+
+
+QAudioFormat QAudioInputPrivate::format() const
+{
+    return settings;
+}
+
+int QAudioInputPrivate::xrun_recovery(int err)
+{
+    int  count = 0;
+    bool reset = false;
+
+    if(err == -EPIPE) {
+        errorState = QAudio::UnderrunError;
+        err = snd_pcm_prepare(handle);
+        if(err < 0)
+            reset = true;
+        else {
+            bytesAvailable = bytesReady();
+            if (bytesAvailable <= 0)
+                reset = true;
+        }
+
+    } else if((err == -ESTRPIPE)||(err == -EIO)) {
+        errorState = QAudio::IOError;
+        while((err = snd_pcm_resume(handle)) == -EAGAIN){
+            usleep(100);
+            count++;
+            if(count > 5) {
+                reset = true;
+                break;
+            }
+        }
+        if(err < 0) {
+            err = snd_pcm_prepare(handle);
+            if(err < 0)
+                reset = true;
+        }
+    }
+    if(reset) {
+        close();
+        open();
+        snd_pcm_prepare(handle);
+        return 0;
+    }
+    return err;
+}
+
+int QAudioInputPrivate::setFormat()
+{
+    snd_pcm_format_t format = SND_PCM_FORMAT_S16;
+
+    if(settings.sampleSize() == 8) {
+        format = SND_PCM_FORMAT_U8;
+    } else if(settings.sampleSize() == 16) {
+        if(settings.sampleType() == QAudioFormat::SignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                format = SND_PCM_FORMAT_S16_LE;
+            else
+                format = SND_PCM_FORMAT_S16_BE;
+        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                format = SND_PCM_FORMAT_U16_LE;
+            else
+                format = SND_PCM_FORMAT_U16_BE;
+        }
+    } else if(settings.sampleSize() == 24) {
+        if(settings.sampleType() == QAudioFormat::SignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                format = SND_PCM_FORMAT_S24_LE;
+            else
+                format = SND_PCM_FORMAT_S24_BE;
+        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                format = SND_PCM_FORMAT_U24_LE;
+            else
+                format = SND_PCM_FORMAT_U24_BE;
+        }
+    } else if(settings.sampleSize() == 32) {
+        if(settings.sampleType() == QAudioFormat::SignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                format = SND_PCM_FORMAT_S32_LE;
+            else
+                format = SND_PCM_FORMAT_S32_BE;
+        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                format = SND_PCM_FORMAT_U32_LE;
+            else
+                format = SND_PCM_FORMAT_U32_BE;
+        } else if(settings.sampleType() == QAudioFormat::Float) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                format = SND_PCM_FORMAT_FLOAT_LE;
+            else
+                format = SND_PCM_FORMAT_FLOAT_BE;
+        }
+    } else if(settings.sampleSize() == 64) {
+        if(settings.byteOrder() == QAudioFormat::LittleEndian)
+            format = SND_PCM_FORMAT_FLOAT64_LE;
+        else
+            format = SND_PCM_FORMAT_FLOAT64_BE;
+    }
+
+    return snd_pcm_hw_params_set_format( handle, hwparams, format);
+}
+
+QIODevice* QAudioInputPrivate::start(QIODevice* device)
+{
+    if(deviceState != QAudio::StoppedState)
+        close();
+
+    if(!pullMode && audioSource) {
+        delete audioSource;
+    }
+
+    if(device) {
+        //set to pull mode
+        pullMode = true;
+        audioSource = device;
+        deviceState = QAudio::ActiveState;
+    } else {
+        //set to push mode
+        pullMode = false;
+        deviceState = QAudio::IdleState;
+        audioSource = new InputPrivate(this);
+        audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+    }
+
+    if( !open() )
+        return 0;
+
+    emit stateChanged(deviceState);
+
+    return audioSource;
+}
+
+void QAudioInputPrivate::stop()
+{
+    if(deviceState == QAudio::StoppedState)
+        return;
+
+    deviceState = QAudio::StoppedState;
+
+    close();
+    emit stateChanged(deviceState);
+}
+
+bool QAudioInputPrivate::open()
+{
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
+#endif
+    clockStamp.restart();
+    timeStamp.restart();
+    elapsedTimeOffset = 0;
+
+    int dir;
+    int err=-1;
+    int count=0;
+    unsigned int freakuency=settings.frequency();
+
+    QString dev = QString(QLatin1String(m_device.constData()));
+    QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioInput);
+    if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(devices.first());
+#else
+        dev = QLatin1String("hw:0,0");
+#endif
+    } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(m_device);
+#else
+        int idx = 0;
+        char *name;
+
+        QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData());
+
+        while(snd_card_get_name(idx,&name) == 0) {
+            if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0)
+                break;
+            idx++;
+        }
+        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
+    }
+
+    // Step 1: try and open the device
+    while((count < 5) && (err < 0)) {
+        err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);
+        if(err < 0)
+            count++;
+    }
+    if (( err < 0)||(handle == 0)) {
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        return false;
+    }
+    snd_pcm_nonblock( handle, 0 );
+
+    // Step 2: Set the desired HW parameters.
+    snd_pcm_hw_params_alloca( &hwparams );
+
+    bool fatal = false;
+    QString errMessage;
+    unsigned int chunks = 8;
+
+    err = snd_pcm_hw_params_any( handle, hwparams );
+    if ( err < 0 ) {
+        fatal = true;
+        errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_any: err = %1").arg(err);
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_rate_resample( handle, hwparams, 1 );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_rate_resample: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_access( handle, hwparams, access );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_access: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = setFormat();
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_format: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_channels: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_rate_near( handle, hwparams, &freakuency, 0 );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_rate_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_period_time_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_periods_near(handle, hwparams, &chunks, &dir);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_periods_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params(handle, hwparams);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params: err = %1").arg(err);
+        }
+    }
+    if( err < 0) {
+        qWarning()<<errMessage;
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        return false;
+    }
+    snd_pcm_hw_params_get_buffer_size(hwparams,&buffer_frames);
+    buffer_size = snd_pcm_frames_to_bytes(handle,buffer_frames);
+    snd_pcm_hw_params_get_period_size(hwparams,&period_frames, &dir);
+    period_size = snd_pcm_frames_to_bytes(handle,period_frames);
+    snd_pcm_hw_params_get_buffer_time(hwparams,&buffer_time, &dir);
+    snd_pcm_hw_params_get_period_time(hwparams,&period_time, &dir);
+
+    // Step 3: Set the desired SW parameters.
+    snd_pcm_sw_params_t *swparams;
+    snd_pcm_sw_params_alloca(&swparams);
+    snd_pcm_sw_params_current(handle, swparams);
+    snd_pcm_sw_params_set_start_threshold(handle,swparams,period_frames);
+    snd_pcm_sw_params_set_stop_threshold(handle,swparams,buffer_frames);
+    snd_pcm_sw_params_set_avail_min(handle, swparams,period_frames);
+    snd_pcm_sw_params(handle, swparams);
+
+    // Step 4: Prepare audio
+    if(audioBuffer == 0)
+        audioBuffer = new char[buffer_size];
+    snd_pcm_prepare( handle );
+    snd_pcm_start(handle);
+
+    // Step 5: Setup timer
+    bytesAvailable = bytesReady();
+
+    if(pullMode)
+        connect(audioSource,SIGNAL(readyRead()),this,SLOT(userFeed()));
+
+    // Step 6: Start audio processing
+    chunks = buffer_size/period_size;
+    timer->start(period_time*chunks/2000);
+
+    errorState  = QAudio::NoError;
+
+    totalTimeValue = 0;
+
+    return true;
+}
+
+void QAudioInputPrivate::close()
+{
+    timer->stop();
+
+    if ( handle ) {
+        snd_pcm_drop( handle );
+        snd_pcm_close( handle );
+        handle = 0;
+        delete [] audioBuffer;
+        audioBuffer=0;
+    }
+}
+
+int QAudioInputPrivate::bytesReady() const
+{
+    if(resuming)
+        return period_size;
+
+    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+        return 0;
+    int frames = snd_pcm_avail_update(handle);
+    if (frames < 0) return frames;
+    if((int)frames > (int)buffer_frames)
+        frames = buffer_frames;
+
+    return snd_pcm_frames_to_bytes(handle, frames);
+}
+
+qint64 QAudioInputPrivate::read(char* data, qint64 len)
+{
+    Q_UNUSED(len)
+
+    // Read in some audio data and write it to QIODevice, pull mode
+    if ( !handle )
+        return 0;
+
+    bytesAvailable = bytesReady();
+
+    if (bytesAvailable < 0) {
+        // bytesAvailable as negative is error code, try to recover from it.
+        xrun_recovery(bytesAvailable);
+        bytesAvailable = bytesReady();
+        if (bytesAvailable < 0) {
+            // recovery failed must stop and set error.
+            close();
+            errorState = QAudio::IOError;
+            deviceState = QAudio::StoppedState;
+            emit stateChanged(deviceState);
+            return 0;
+        }
+    }
+
+    int count=0, err = 0;
+    while(count < 5) {
+        int chunks = bytesAvailable/period_size;
+        int frames = chunks*period_frames;
+        if(frames > (int)buffer_frames)
+            frames = buffer_frames;
+        int readFrames = snd_pcm_readi(handle, audioBuffer, frames);
+        if (readFrames >= 0) {
+            err = snd_pcm_frames_to_bytes(handle, readFrames);
+#ifdef DEBUG_AUDIO
+            qDebug()<<QString::fromLatin1("read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData();
+#endif
+            break;
+        } else if((readFrames == -EAGAIN) || (readFrames == -EINTR)) {
+            errorState = QAudio::IOError;
+            err = 0;
+            break;
+        } else {
+            if(readFrames == -EPIPE) {
+                errorState = QAudio::UnderrunError;
+                err = snd_pcm_prepare(handle);
+            } else if(readFrames == -ESTRPIPE) {
+                err = snd_pcm_prepare(handle);
+            }
+            if(err != 0) break;
+        }
+        count++;
+    }
+    if(err > 0) {
+        // got some send it onward
+#ifdef DEBUG_AUDIO
+        qDebug()<<"frames to write to QIODevice = "<<
+            snd_pcm_bytes_to_frames( handle, (int)err )<<" ("<<err<<") bytes";
+#endif
+        if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+            return 0;
+        if (pullMode) {
+            qint64 l = audioSource->write(audioBuffer,err);
+            if(l < 0) {
+                close();
+                errorState = QAudio::IOError;
+                deviceState = QAudio::StoppedState;
+                emit stateChanged(deviceState);
+            } else if(l == 0) {
+                if (deviceState != QAudio::IdleState) {
+                    errorState = QAudio::NoError;
+                    deviceState = QAudio::IdleState;
+                    emit stateChanged(deviceState);
+                }
+            } else {
+                totalTimeValue += err;
+                resuming = false;
+                if (deviceState != QAudio::ActiveState) {
+                    errorState = QAudio::NoError;
+                    deviceState = QAudio::ActiveState;
+                    emit stateChanged(deviceState);
+                }
+            }
+            return l;
+
+        } else {
+            memcpy(data,audioBuffer,err);
+            totalTimeValue += err;
+            resuming = false;
+            if (deviceState != QAudio::ActiveState) {
+                errorState = QAudio::NoError;
+                deviceState = QAudio::ActiveState;
+                emit stateChanged(deviceState);
+            }
+            return err;
+        }
+    }
+    return 0;
+}
+
+void QAudioInputPrivate::resume()
+{
+    if(deviceState == QAudio::SuspendedState) {
+        int err = 0;
+
+        if(handle) {
+            err = snd_pcm_prepare( handle );
+            if(err < 0)
+                xrun_recovery(err);
+
+            err = snd_pcm_start(handle);
+            if(err < 0)
+                xrun_recovery(err);
+
+            bytesAvailable = buffer_size;
+        }
+        resuming = true;
+        deviceState = QAudio::ActiveState;
+        int chunks = buffer_size/period_size;
+        timer->start(period_time*chunks/2000);
+        emit stateChanged(deviceState);
+    }
+}
+
+void QAudioInputPrivate::setBufferSize(int value)
+{
+    buffer_size = value;
+}
+
+int QAudioInputPrivate::bufferSize() const
+{
+    return buffer_size;
+}
+
+int QAudioInputPrivate::periodSize() const
+{
+    return period_size;
+}
+
+void QAudioInputPrivate::setNotifyInterval(int ms)
+{
+    if(ms >= minimumIntervalTime)
+        intervalTime = ms;
+    else
+        intervalTime = minimumIntervalTime;
+}
+
+int QAudioInputPrivate::notifyInterval() const
+{
+    return intervalTime;
+}
+
+qint64 QAudioInputPrivate::processedUSecs() const
+{
+    qint64 result = qint64(1000000) * totalTimeValue /
+        (settings.channels()*(settings.sampleSize()/8)) /
+        settings.frequency();
+
+    return result;
+}
+
+void QAudioInputPrivate::suspend()
+{
+    if(deviceState == QAudio::ActiveState||resuming) {
+        timer->stop();
+        deviceState = QAudio::SuspendedState;
+        emit stateChanged(deviceState);
+    }
+}
+
+void QAudioInputPrivate::userFeed()
+{
+    if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
+        return;
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :userFeed() IN";
+#endif
+    deviceReady();
+}
+
+bool QAudioInputPrivate::deviceReady()
+{
+    if(pullMode) {
+        // reads some audio data and writes it to QIODevice
+        read(0,0);
+    } else {
+        // emits readyRead() so user will call read() on QIODevice to get some audio data
+        InputPrivate* a = qobject_cast<InputPrivate*>(audioSource);
+        a->trigger();
+    }
+    bytesAvailable = bytesReady();
+
+    if(deviceState != QAudio::ActiveState)
+        return true;
+
+    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+        emit notify();
+        elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
+        timeStamp.restart();
+    }
+    return true;
+}
+
+qint64 QAudioInputPrivate::elapsedUSecs() const
+{
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+
+    return clockStamp.elapsed()*1000;
+}
+
+void QAudioInputPrivate::reset()
+{
+    if(handle)
+        snd_pcm_reset(handle);
+}
+
+void QAudioInputPrivate::drain()
+{
+    if(handle)
+        snd_pcm_drain(handle);
+}
+
+InputPrivate::InputPrivate(QAudioInputPrivate* audio)
+{
+    audioDevice = qobject_cast<QAudioInputPrivate*>(audio);
+}
+
+InputPrivate::~InputPrivate()
+{
+}
+
+qint64 InputPrivate::readData( char* data, qint64 len)
+{
+    return audioDevice->read(data,len);
+}
+
+qint64 InputPrivate::writeData(const char* data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+    return 0;
+}
+
+void InputPrivate::trigger()
+{
+    emit readyRead();
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudioinput_alsa_p.h b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.h
new file mode 100644
index 0000000..c907019
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.h
@@ -0,0 +1,158 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#ifndef QAUDIOINPUTALSA_H
+#define QAUDIOINPUTALSA_H
+
+#include <alsa/asoundlib.h>
+
+#include <QtCore/qfile.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qelapsedtimer.h>
+#include <QtCore/qdatetime.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+
+QT_BEGIN_NAMESPACE
+
+class InputPrivate;
+
+class QAudioInputPrivate : public QAbstractAudioInput
+{
+    Q_OBJECT
+public:
+    QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
+    ~QAudioInputPrivate();
+
+    qint64 read(char* data, qint64 len);
+
+    QIODevice* start(QIODevice* device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesReady() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+    QAudioFormat format() const;
+    bool resuming;
+    snd_pcm_t* handle;
+    qint64 totalTimeValue;
+    QIODevice* audioSource;
+    QAudioFormat settings;
+    QAudio::Error errorState;
+    QAudio::State deviceState;
+
+private slots:
+    void userFeed();
+    bool deviceReady();
+
+private:
+    int xrun_recovery(int err);
+    int setFormat();
+    bool open();
+    void close();
+    void drain();
+
+    QTimer* timer;
+    QElapsedTimer timeStamp;
+    QElapsedTimer clockStamp;
+    qint64 elapsedTimeOffset;
+    int intervalTime;
+    char* audioBuffer;
+    int bytesAvailable;
+    QByteArray m_device;
+    bool pullMode;
+    int buffer_size;
+    int period_size;
+    unsigned int buffer_time;
+    unsigned int period_time;
+    snd_pcm_uframes_t buffer_frames;
+    snd_pcm_uframes_t period_frames;
+    snd_async_handler_t* ahandler;
+    snd_pcm_access_t access;
+    snd_pcm_format_t pcmformat;
+    snd_timestamp_t* timestamp;
+    snd_pcm_hw_params_t *hwparams;
+};
+
+class InputPrivate : public QIODevice
+{
+    Q_OBJECT
+public:
+    InputPrivate(QAudioInputPrivate* audio);
+    ~InputPrivate();
+
+    qint64 readData( char* data, qint64 len);
+    qint64 writeData(const char* data, qint64 len);
+
+    void trigger();
+private:
+    QAudioInputPrivate *audioDevice;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudioinput_mac_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_mac_p.cpp
new file mode 100644
index 0000000..cb65f6e
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_mac_p.cpp
@@ -0,0 +1,956 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qendian.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qdebug.h>
+
+#include <QtMultimedia/qaudioinput.h>
+
+#include "qaudio_mac_p.h"
+#include "qaudioinput_mac_p.h"
+#include "qaudiodeviceinfo_mac_p.h"
+
+QT_BEGIN_NAMESPACE
+
+
+namespace QtMultimediaInternal
+{
+
+static const int default_buffer_size = 4 * 1024;
+
+class QAudioBufferList
+{
+public:
+    QAudioBufferList(AudioStreamBasicDescription const& streamFormat):
+        owner(false),
+        sf(streamFormat)
+    {
+        const bool isInterleaved = (sf.mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0;
+        const int numberOfBuffers = isInterleaved ? 1 : sf.mChannelsPerFrame;
+
+        dataSize = 0;
+
+        bfs = reinterpret_cast<AudioBufferList*>(qMalloc(sizeof(AudioBufferList) +
+                                                                (sizeof(AudioBuffer) * numberOfBuffers)));
+
+        bfs->mNumberBuffers = numberOfBuffers;
+        for (int i = 0; i < numberOfBuffers; ++i) {
+            bfs->mBuffers[i].mNumberChannels = isInterleaved ? numberOfBuffers : 1;
+            bfs->mBuffers[i].mDataByteSize = 0;
+            bfs->mBuffers[i].mData = 0;
+        }
+    }
+
+    QAudioBufferList(AudioStreamBasicDescription const& streamFormat, char* buffer, int bufferSize):
+        owner(false),
+        sf(streamFormat),
+        bfs(0)
+    {
+        dataSize = bufferSize;
+
+        bfs = reinterpret_cast<AudioBufferList*>(qMalloc(sizeof(AudioBufferList) + sizeof(AudioBuffer)));
+
+        bfs->mNumberBuffers = 1;
+        bfs->mBuffers[0].mNumberChannels = 1;
+        bfs->mBuffers[0].mDataByteSize = dataSize;
+        bfs->mBuffers[0].mData = buffer;
+    }
+
+    QAudioBufferList(AudioStreamBasicDescription const& streamFormat, int framesToBuffer):
+        owner(true),
+        sf(streamFormat),
+        bfs(0)
+    {
+        const bool isInterleaved = (sf.mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0;
+        const int numberOfBuffers = isInterleaved ? 1 : sf.mChannelsPerFrame;
+
+        dataSize = framesToBuffer * sf.mBytesPerFrame;
+
+        bfs = reinterpret_cast<AudioBufferList*>(qMalloc(sizeof(AudioBufferList) +
+                                                                (sizeof(AudioBuffer) * numberOfBuffers)));
+        bfs->mNumberBuffers = numberOfBuffers;
+        for (int i = 0; i < numberOfBuffers; ++i) {
+            bfs->mBuffers[i].mNumberChannels = isInterleaved ? numberOfBuffers : 1;
+            bfs->mBuffers[i].mDataByteSize = dataSize;
+            bfs->mBuffers[i].mData = qMalloc(dataSize);
+        }
+    }
+
+    ~QAudioBufferList()
+    {
+        if (owner) {
+            for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i)
+                qFree(bfs->mBuffers[i].mData);
+        }
+
+        qFree(bfs);
+    }
+
+    AudioBufferList* audioBufferList() const
+    {
+        return bfs;
+    }
+
+    char* data(int buffer = 0) const
+    {
+        return static_cast<char*>(bfs->mBuffers[buffer].mData);
+    }
+
+    qint64 bufferSize(int buffer = 0) const
+    {
+        return bfs->mBuffers[buffer].mDataByteSize;
+    }
+
+    int frameCount(int buffer = 0) const
+    {
+        return bfs->mBuffers[buffer].mDataByteSize / sf.mBytesPerFrame;
+    }
+
+    int packetCount(int buffer = 0) const
+    {
+        return bfs->mBuffers[buffer].mDataByteSize / sf.mBytesPerPacket;
+    }
+
+    int packetSize() const
+    {
+        return sf.mBytesPerPacket;
+    }
+
+    void reset()
+    {
+        for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i) {
+            bfs->mBuffers[i].mDataByteSize = dataSize;
+            bfs->mBuffers[i].mData = 0;
+        }
+    }
+
+private:
+    bool    owner;
+    int     dataSize;
+    AudioStreamBasicDescription sf;
+    AudioBufferList* bfs;
+};
+
+class QAudioPacketFeeder
+{
+public:
+    QAudioPacketFeeder(QAudioBufferList* abl):
+        audioBufferList(abl)
+    {
+        totalPackets = audioBufferList->packetCount();
+        position = 0;
+    }
+
+    bool feed(AudioBufferList& dst, UInt32& packetCount)
+    {
+        if (position == totalPackets) {
+            dst.mBuffers[0].mDataByteSize = 0;
+            packetCount = 0;
+            return false;
+        }
+
+        if (totalPackets - position < packetCount)
+            packetCount = totalPackets - position;
+
+        dst.mBuffers[0].mDataByteSize = packetCount * audioBufferList->packetSize();
+        dst.mBuffers[0].mData = audioBufferList->data() + (position * audioBufferList->packetSize());
+
+        position += packetCount;
+
+        return true;
+    }
+
+private:
+    UInt32 totalPackets;
+    UInt32 position;
+    QAudioBufferList*   audioBufferList;
+};
+
+class QAudioInputBuffer : public QObject
+{
+    Q_OBJECT
+
+public:
+    QAudioInputBuffer(int bufferSize,
+                        int maxPeriodSize,
+                        AudioStreamBasicDescription const& inputFormat,
+                        AudioStreamBasicDescription const& outputFormat,
+                        QObject* parent):
+        QObject(parent),
+        m_deviceError(false),
+        m_audioConverter(0),
+        m_inputFormat(inputFormat),
+        m_outputFormat(outputFormat)
+    {
+        m_maxPeriodSize = maxPeriodSize;
+        m_periodTime = m_maxPeriodSize / m_outputFormat.mBytesPerFrame * 1000 / m_outputFormat.mSampleRate;
+        m_buffer = new QAudioRingBuffer(bufferSize + (bufferSize % maxPeriodSize == 0 ? 0 : maxPeriodSize - (bufferSize % maxPeriodSize)));
+        m_inputBufferList = new QAudioBufferList(m_inputFormat);
+
+        m_flushTimer = new QTimer(this);
+        connect(m_flushTimer, SIGNAL(timeout()), SLOT(flushBuffer()));
+
+        if (toQAudioFormat(inputFormat) != toQAudioFormat(outputFormat)) {
+            if (AudioConverterNew(&m_inputFormat, &m_outputFormat, &m_audioConverter) != noErr) {
+                qWarning() << "QAudioInput: Unable to create an Audio Converter";
+                m_audioConverter = 0;
+            }
+        }
+    }
+
+    ~QAudioInputBuffer()
+    {
+        delete m_buffer;
+    }
+
+    qint64 renderFromDevice(AudioUnit audioUnit,
+                             AudioUnitRenderActionFlags* ioActionFlags,
+                             const AudioTimeStamp* inTimeStamp,
+                             UInt32 inBusNumber,
+                             UInt32 inNumberFrames)
+    {
+        const bool  wasEmpty = m_buffer->used() == 0;
+
+        OSStatus    err;
+        qint64      framesRendered = 0;
+
+        m_inputBufferList->reset();
+        err = AudioUnitRender(audioUnit,
+                                ioActionFlags,
+                                inTimeStamp,
+                                inBusNumber,
+                                inNumberFrames,
+                                m_inputBufferList->audioBufferList());
+
+        if (m_audioConverter != 0) {
+            QAudioPacketFeeder  feeder(m_inputBufferList);
+
+            bool    wecan = true;
+            int     copied = 0;
+
+            const int available = m_buffer->free();
+
+            while (err == noErr && wecan) {
+                QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(available);
+
+                if (region.second > 0) {
+                    AudioBufferList     output;
+                    output.mNumberBuffers = 1;
+                    output.mBuffers[0].mNumberChannels = 1;
+                    output.mBuffers[0].mDataByteSize = region.second;
+                    output.mBuffers[0].mData = region.first;
+
+                    UInt32  packetSize = region.second / m_outputFormat.mBytesPerPacket;
+                    err = AudioConverterFillComplexBuffer(m_audioConverter,
+                                                          converterCallback,
+                                                          &feeder,
+                                                          &packetSize,
+                                                          &output,
+                                                          0);
+
+                    region.second = output.mBuffers[0].mDataByteSize;
+                    copied += region.second;
+
+                    m_buffer->releaseWriteRegion(region);
+                }
+                else
+                    wecan = false;
+            }
+
+            framesRendered += copied / m_outputFormat.mBytesPerFrame;
+        }
+        else {
+            const int available = m_inputBufferList->bufferSize();
+            bool    wecan = true;
+            int     copied = 0;
+
+            while (wecan && copied < available) {
+                QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(available - copied);
+
+                if (region.second > 0) {
+                    memcpy(region.first, m_inputBufferList->data() + copied, region.second);
+                    copied += region.second;
+                }
+                else
+                    wecan = false;
+
+                m_buffer->releaseWriteRegion(region);
+            }
+
+            framesRendered = copied / m_outputFormat.mBytesPerFrame;
+        }
+
+        if (wasEmpty && framesRendered > 0)
+            emit readyRead();
+
+        return framesRendered;
+    }
+
+    qint64 readBytes(char* data, qint64 len)
+    {
+        bool    wecan = true;
+        qint64  bytesCopied = 0;
+
+        len -= len % m_maxPeriodSize;
+        while (wecan && bytesCopied < len) {
+            QAudioRingBuffer::Region region = m_buffer->acquireReadRegion(len - bytesCopied);
+
+            if (region.second > 0) {
+                memcpy(data + bytesCopied, region.first, region.second);
+                bytesCopied += region.second;
+            }
+            else
+                wecan = false;
+
+            m_buffer->releaseReadRegion(region);
+        }
+
+        return bytesCopied;
+    }
+
+    void setFlushDevice(QIODevice* device)
+    {
+        if (m_device != device)
+            m_device = device;
+    }
+
+    void startFlushTimer()
+    {
+        if (m_device != 0) {
+            m_flushTimer->start((m_buffer->size() - (m_maxPeriodSize * 2)) / m_maxPeriodSize * m_periodTime);
+        }
+    }
+
+    void stopFlushTimer()
+    {
+        m_flushTimer->stop();
+    }
+
+    void flush(bool all = false)
+    {
+        if (m_device == 0)
+            return;
+
+        const int used = m_buffer->used();
+        const int readSize = all ? used : used - (used % m_maxPeriodSize);
+
+        if (readSize > 0) {
+            bool    wecan = true;
+            int     flushed = 0;
+
+            while (!m_deviceError && wecan && flushed < readSize) {
+                QAudioRingBuffer::Region region = m_buffer->acquireReadRegion(readSize - flushed);
+
+                if (region.second > 0) {
+                    int bytesWritten = m_device->write(region.first, region.second);
+                    if (bytesWritten < 0) {
+                        stopFlushTimer();
+                        m_deviceError = true;
+                    }
+                    else {
+                        region.second = bytesWritten;
+                        flushed += bytesWritten;
+                        wecan = bytesWritten != 0;
+                    }
+                }
+                else
+                    wecan = false;
+
+                m_buffer->releaseReadRegion(region);
+            }
+        }
+    }
+
+    void reset()
+    {
+        m_buffer->reset();
+        m_deviceError = false;
+    }
+
+    int available() const
+    {
+        return m_buffer->free();
+    }
+
+    int used() const
+    {
+        return m_buffer->used();
+    }
+
+signals:
+    void readyRead();
+
+private slots:
+    void flushBuffer()
+    {
+        flush();
+    }
+
+private:
+    bool        m_deviceError;
+    int         m_maxPeriodSize;
+    int         m_periodTime;
+    QIODevice*  m_device;
+    QTimer*     m_flushTimer;
+    QAudioRingBuffer*   m_buffer;
+    QAudioBufferList*   m_inputBufferList;
+    AudioConverterRef   m_audioConverter;
+    AudioStreamBasicDescription m_inputFormat;
+    AudioStreamBasicDescription m_outputFormat;
+
+    const static OSStatus as_empty = 'qtem';
+
+    // Converter callback
+    static OSStatus converterCallback(AudioConverterRef inAudioConverter,
+                                UInt32* ioNumberDataPackets,
+                                AudioBufferList* ioData,
+                                AudioStreamPacketDescription** outDataPacketDescription,
+                                void* inUserData)
+    {
+        Q_UNUSED(inAudioConverter);
+        Q_UNUSED(outDataPacketDescription);
+
+        QAudioPacketFeeder* feeder = static_cast<QAudioPacketFeeder*>(inUserData);
+
+        if (!feeder->feed(*ioData, *ioNumberDataPackets))
+            return as_empty;
+
+        return noErr;
+    }
+};
+
+
+class MacInputDevice : public QIODevice
+{
+    Q_OBJECT
+
+public:
+    MacInputDevice(QAudioInputBuffer* audioBuffer, QObject* parent):
+        QIODevice(parent),
+        m_audioBuffer(audioBuffer)
+    {
+        open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+        connect(m_audioBuffer, SIGNAL(readyRead()), SIGNAL(readyRead()));
+    }
+
+    qint64 readData(char* data, qint64 len)
+    {
+        return m_audioBuffer->readBytes(data, len);
+    }
+
+    qint64 writeData(const char* data, qint64 len)
+    {
+        Q_UNUSED(data);
+        Q_UNUSED(len);
+
+        return 0;
+    }
+
+    bool isSequential() const
+    {
+        return true;
+    }
+
+private:
+    QAudioInputBuffer*   m_audioBuffer;
+};
+
+}
+
+
+QAudioInputPrivate::QAudioInputPrivate(const QByteArray& device, QAudioFormat const& format):
+    audioFormat(format)
+{
+    QDataStream ds(device);
+    quint32 did, mode;
+
+    ds >> did >> mode;
+
+    if (QAudio::Mode(mode) == QAudio::AudioOutput)
+        errorCode = QAudio::OpenError;
+    else {
+        audioDeviceInfo = new QAudioDeviceInfoInternal(device, QAudio::AudioInput);
+        isOpen = false;
+        audioDeviceId = AudioDeviceID(did);
+        audioUnit = 0;
+        startTime = 0;
+        totalFrames = 0;
+        audioBuffer = 0;
+        internalBufferSize = QtMultimediaInternal::default_buffer_size;
+        clockFrequency = AudioGetHostClockFrequency() / 1000;
+        errorCode = QAudio::NoError;
+        stateCode = QAudio::StoppedState;
+
+        intervalTimer = new QTimer(this);
+        intervalTimer->setInterval(1000);
+        connect(intervalTimer, SIGNAL(timeout()), SIGNAL(notify()));
+    }
+}
+
+QAudioInputPrivate::~QAudioInputPrivate()
+{
+    close();
+    delete audioDeviceInfo;
+}
+
+bool QAudioInputPrivate::open()
+{
+    UInt32  size = 0;
+
+    if (isOpen)
+        return true;
+
+    ComponentDescription    cd;
+    cd.componentType = kAudioUnitType_Output;
+    cd.componentSubType = kAudioUnitSubType_HALOutput;
+    cd.componentManufacturer = kAudioUnitManufacturer_Apple;
+    cd.componentFlags = 0;
+    cd.componentFlagsMask = 0;
+
+    // Open
+    Component cp = FindNextComponent(NULL, &cd);
+    if (cp == 0) {
+        qWarning() << "QAudioInput: Failed to find HAL Output component";
+        return false;
+    }
+
+    if (OpenAComponent(cp, &audioUnit) != noErr) {
+        qWarning() << "QAudioInput: Unable to Open Output Component";
+        return false;
+    }
+
+    // Set mode
+    // switch to input mode
+    UInt32 enable = 1;
+    if (AudioUnitSetProperty(audioUnit,
+                               kAudioOutputUnitProperty_EnableIO,
+                               kAudioUnitScope_Input,
+                               1,
+                               &enable,
+                               sizeof(enable)) != noErr) {
+        qWarning() << "QAudioInput: Unable to switch to input mode (Enable Input)";
+        return false;
+    }
+
+    enable = 0;
+    if (AudioUnitSetProperty(audioUnit,
+                            kAudioOutputUnitProperty_EnableIO,
+                            kAudioUnitScope_Output,
+                            0,
+                            &enable,
+                            sizeof(enable)) != noErr) {
+        qWarning() << "QAudioInput: Unable to switch to input mode (Disable output)";
+        return false;
+    }
+
+    // register callback
+    AURenderCallbackStruct cb;
+    cb.inputProc = inputCallback;
+    cb.inputProcRefCon = this;
+
+    if (AudioUnitSetProperty(audioUnit,
+                               kAudioOutputUnitProperty_SetInputCallback,
+                               kAudioUnitScope_Global,
+                               0,
+                               &cb,
+                               sizeof(cb)) != noErr) {
+        qWarning() << "QAudioInput: Failed to set AudioUnit callback";
+        return false;
+    }
+
+    // Set Audio Device
+    if (AudioUnitSetProperty(audioUnit,
+                                kAudioOutputUnitProperty_CurrentDevice,
+                                kAudioUnitScope_Global,
+                                0,
+                                &audioDeviceId,
+                                sizeof(audioDeviceId)) != noErr) {
+        qWarning() << "QAudioInput: Unable to use configured device";
+        return false;
+    }
+
+    // Set format
+    // Wanted
+    streamFormat = toAudioStreamBasicDescription(audioFormat);
+
+    // Required on unit
+    if (audioFormat == audioDeviceInfo->preferredFormat()) {
+        deviceFormat = streamFormat;
+        AudioUnitSetProperty(audioUnit,
+                               kAudioUnitProperty_StreamFormat,
+                               kAudioUnitScope_Output,
+                               1,
+                               &deviceFormat,
+                               sizeof(deviceFormat));
+    }
+    else {
+        size = sizeof(deviceFormat);
+        if (AudioUnitGetProperty(audioUnit,
+                                    kAudioUnitProperty_StreamFormat,
+                                    kAudioUnitScope_Input,
+                                    1,
+                                    &deviceFormat,
+                                    &size) != noErr) {
+            qWarning() << "QAudioInput: Unable to retrieve device format";
+            return false;
+        }
+
+        if (AudioUnitSetProperty(audioUnit,
+                                   kAudioUnitProperty_StreamFormat,
+                                   kAudioUnitScope_Output,
+                                   1,
+                                   &deviceFormat,
+                                   sizeof(deviceFormat)) != noErr) {
+            qWarning() << "QAudioInput: Unable to set device format";
+            return false;
+        }
+    }
+
+    // Setup buffers
+    UInt32 numberOfFrames;
+    size = sizeof(UInt32);
+    if (AudioUnitGetProperty(audioUnit,
+                                kAudioDevicePropertyBufferFrameSize,
+                                kAudioUnitScope_Global,
+                                0,
+                                &numberOfFrames,
+                                &size) != noErr) {
+        qWarning() << "QAudioInput: Failed to get audio period size";
+        return false;
+    }
+
+    // Allocate buffer
+    periodSizeBytes = numberOfFrames * streamFormat.mBytesPerFrame;
+
+    if (internalBufferSize < periodSizeBytes * 2)
+        internalBufferSize = periodSizeBytes * 2;
+    else
+        internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
+
+    audioBuffer = new QtMultimediaInternal::QAudioInputBuffer(internalBufferSize,
+                                        periodSizeBytes,
+                                        deviceFormat,
+                                        streamFormat,
+                                        this);
+
+    audioIO = new QtMultimediaInternal::MacInputDevice(audioBuffer, this);
+
+    // Init
+    if (AudioUnitInitialize(audioUnit) != noErr) {
+        qWarning() << "QAudioInput: Failed to initialize AudioUnit";
+        return false;
+    }
+
+    isOpen = true;
+
+    return isOpen;
+}
+
+void QAudioInputPrivate::close()
+{
+    if (audioUnit != 0) {
+        AudioOutputUnitStop(audioUnit);
+        AudioUnitUninitialize(audioUnit);
+        CloseComponent(audioUnit);
+    }
+
+    delete audioBuffer;
+}
+
+QAudioFormat QAudioInputPrivate::format() const
+{
+    return audioFormat;
+}
+
+QIODevice* QAudioInputPrivate::start(QIODevice* device)
+{
+    QIODevice*  op = device;
+
+    if (!audioFormat.isValid() || !open()) {
+        stateCode = QAudio::StoppedState;
+        errorCode = QAudio::OpenError;
+        return audioIO;
+    }
+
+    reset();
+    audioBuffer->reset();
+    audioBuffer->setFlushDevice(op);
+
+    if (op == 0)
+        op = audioIO;
+
+    // Start
+    startTime = AudioGetCurrentHostTime();
+    totalFrames = 0;
+
+    audioThreadStart();
+
+    stateCode = QAudio::ActiveState;
+    errorCode = QAudio::NoError;
+    emit stateChanged(stateCode);
+
+    return op;
+}
+
+void QAudioInputPrivate::stop()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode != QAudio::StoppedState) {
+        audioThreadStop();
+        audioBuffer->flush(true);
+
+        errorCode = QAudio::NoError;
+        stateCode = QAudio::StoppedState;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+void QAudioInputPrivate::reset()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode != QAudio::StoppedState) {
+        audioThreadStop();
+
+        errorCode = QAudio::NoError;
+        stateCode = QAudio::StoppedState;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+void QAudioInputPrivate::suspend()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::ActiveState || stateCode == QAudio::IdleState) {
+        audioThreadStop();
+
+        errorCode = QAudio::NoError;
+        stateCode = QAudio::SuspendedState;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+void QAudioInputPrivate::resume()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::SuspendedState) {
+        audioThreadStart();
+
+        errorCode = QAudio::NoError;
+        stateCode = QAudio::ActiveState;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+int QAudioInputPrivate::bytesReady() const
+{
+    return audioBuffer->used();
+}
+
+int QAudioInputPrivate::periodSize() const
+{
+    return periodSizeBytes;
+}
+
+void QAudioInputPrivate::setBufferSize(int bs)
+{
+    internalBufferSize = bs;
+}
+
+int QAudioInputPrivate::bufferSize() const
+{
+    return internalBufferSize;
+}
+
+void QAudioInputPrivate::setNotifyInterval(int milliSeconds)
+{
+    if (intervalTimer->interval() == milliSeconds)
+        return;
+
+    if (milliSeconds <= 0)
+        milliSeconds = 0;
+
+    intervalTimer->setInterval(milliSeconds);
+}
+
+int QAudioInputPrivate::notifyInterval() const
+{
+    return intervalTimer->interval();
+}
+
+qint64 QAudioInputPrivate::processedUSecs() const
+{
+    return totalFrames * 1000000 / audioFormat.frequency();
+}
+
+qint64 QAudioInputPrivate::elapsedUSecs() const
+{
+    if (stateCode == QAudio::StoppedState)
+        return 0;
+
+    return (AudioGetCurrentHostTime() - startTime) / (clockFrequency / 1000);
+}
+
+QAudio::Error QAudioInputPrivate::error() const
+{
+    return errorCode;
+}
+
+QAudio::State QAudioInputPrivate::state() const
+{
+    return stateCode;
+}
+
+void QAudioInputPrivate::audioThreadStop()
+{
+    stopTimers();
+    if (audioThreadState.testAndSetAcquire(Running, Stopped))
+        threadFinished.wait(&mutex);
+}
+
+void QAudioInputPrivate::audioThreadStart()
+{
+    startTimers();
+    audioThreadState = Running;
+    AudioOutputUnitStart(audioUnit);
+}
+
+void QAudioInputPrivate::audioDeviceStop()
+{
+    AudioOutputUnitStop(audioUnit);
+    audioThreadState = Stopped;
+    threadFinished.wakeOne();
+}
+
+void QAudioInputPrivate::audioDeviceFull()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::ActiveState) {
+        audioDeviceStop();
+
+        errorCode = QAudio::UnderrunError;
+        stateCode = QAudio::IdleState;
+        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
+    }
+}
+
+void QAudioInputPrivate::audioDeviceError()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::ActiveState) {
+        audioDeviceStop();
+
+        errorCode = QAudio::IOError;
+        stateCode = QAudio::StoppedState;
+        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
+    }
+}
+
+void QAudioInputPrivate::startTimers()
+{
+    audioBuffer->startFlushTimer();
+    if (intervalTimer->interval() > 0)
+        intervalTimer->start();
+}
+
+void QAudioInputPrivate::stopTimers()
+{
+    audioBuffer->stopFlushTimer();
+    intervalTimer->stop();
+}
+
+void QAudioInputPrivate::deviceStopped()
+{
+    stopTimers();
+    emit stateChanged(stateCode);
+}
+
+// Input callback
+OSStatus QAudioInputPrivate::inputCallback(void* inRefCon,
+                                AudioUnitRenderActionFlags* ioActionFlags,
+                                const AudioTimeStamp* inTimeStamp,
+                                UInt32 inBusNumber,
+                                UInt32 inNumberFrames,
+                                AudioBufferList* ioData)
+{
+    Q_UNUSED(ioData);
+
+    QAudioInputPrivate* d = static_cast<QAudioInputPrivate*>(inRefCon);
+
+    const int threadState = d->audioThreadState.fetchAndAddAcquire(0);
+    if (threadState == Stopped)
+        d->audioDeviceStop();
+    else {
+        qint64      framesWritten;
+
+        framesWritten = d->audioBuffer->renderFromDevice(d->audioUnit,
+                                                         ioActionFlags,
+                                                         inTimeStamp,
+                                                         inBusNumber,
+                                                         inNumberFrames);
+
+        if (framesWritten > 0)
+            d->totalFrames += framesWritten;
+        else if (framesWritten == 0)
+            d->audioDeviceFull();
+        else if (framesWritten < 0)
+            d->audioDeviceError();
+    }
+
+    return noErr;
+}
+
+
+QT_END_NAMESPACE
+
+#include "qaudioinput_mac_p.moc"
+
diff --git a/src/multimedia/multimedia/audio/qaudioinput_mac_p.h b/src/multimedia/multimedia/audio/qaudioinput_mac_p.h
new file mode 100644
index 0000000..7aa4168
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_mac_p.h
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#ifndef QAUDIOINPUT_MAC_P_H
+#define QAUDIOINPUT_MAC_P_H
+
+#include <CoreServices/CoreServices.h>
+#include <CoreAudio/CoreAudio.h>
+#include <AudioUnit/AudioUnit.h>
+#include <AudioToolbox/AudioToolbox.h>
+
+#include <QtCore/qobject.h>
+#include <QtCore/qmutex.h>
+#include <QtCore/qwaitcondition.h>
+#include <QtCore/qatomic.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudioengine.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QTimer;
+class QIODevice;
+class QAbstractAudioDeviceInfo;
+
+namespace QtMultimediaInternal
+{
+class QAudioInputBuffer;
+}
+
+class QAudioInputPrivate : public QAbstractAudioInput
+{
+    Q_OBJECT
+
+public:
+    bool            isOpen;
+    int             periodSizeBytes;
+    int             internalBufferSize;
+    qint64          totalFrames;
+    QAudioFormat    audioFormat;
+    QIODevice*      audioIO;
+    AudioUnit       audioUnit;
+    AudioDeviceID   audioDeviceId;
+    Float64         clockFrequency;
+    UInt64          startTime;
+    QAudio::Error   errorCode;
+    QAudio::State   stateCode;
+    QtMultimediaInternal::QAudioInputBuffer*   audioBuffer;
+    QMutex          mutex;
+    QWaitCondition  threadFinished;
+    QAtomicInt      audioThreadState;
+    QTimer*         intervalTimer;
+    AudioStreamBasicDescription streamFormat;
+    AudioStreamBasicDescription deviceFormat;
+    QAbstractAudioDeviceInfo *audioDeviceInfo;
+
+    QAudioInputPrivate(const QByteArray& device, QAudioFormat const& format);
+    ~QAudioInputPrivate();
+
+    bool open();
+    void close();
+
+    QAudioFormat format() const;
+
+    QIODevice* start(QIODevice* device);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    void idle();
+
+    int bytesReady() const;
+    int periodSize() const;
+
+    void setBufferSize(int value);
+    int bufferSize() const;
+
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+    void audioThreadStart();
+    void audioThreadStop();
+
+    void audioDeviceStop();
+    void audioDeviceFull();
+    void audioDeviceError();
+
+    void startTimers();
+    void stopTimers();
+
+private slots:
+    void deviceStopped();
+
+private:
+    enum { Running, Stopped };
+
+    // Input callback
+    static OSStatus inputCallback(void* inRefCon,
+                                    AudioUnitRenderActionFlags* ioActionFlags,
+                                    const AudioTimeStamp* inTimeStamp,
+                                    UInt32 inBusNumber,
+                                    UInt32 inNumberFrames,
+                                    AudioBufferList* ioData);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QAUDIOINPUT_MAC_P_H
diff --git a/src/multimedia/multimedia/audio/qaudioinput_symbian_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_symbian_p.cpp
new file mode 100644
index 0000000..52daa88
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_symbian_p.cpp
@@ -0,0 +1,594 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudioinput_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+const int PushInterval = 50; // ms
+
+
+//-----------------------------------------------------------------------------
+// Private class
+//-----------------------------------------------------------------------------
+
+SymbianAudioInputPrivate::SymbianAudioInputPrivate(
+                              QAudioInputPrivate *audioDevice)
+    :   m_audioDevice(audioDevice)
+{
+
+}
+
+SymbianAudioInputPrivate::~SymbianAudioInputPrivate()
+{
+
+}
+
+qint64 SymbianAudioInputPrivate::readData(char *data, qint64 len)
+{
+    qint64 totalRead = 0;
+
+    if (m_audioDevice->state() == QAudio::ActiveState ||
+        m_audioDevice->state() == QAudio::IdleState) {
+
+        while (totalRead < len) {
+            const qint64 read = m_audioDevice->read(data + totalRead,
+                                                    len - totalRead);
+            if (read > 0)
+                totalRead += read;
+            else
+                break;
+        }
+    }
+
+    return totalRead;
+}
+
+qint64 SymbianAudioInputPrivate::writeData(const char *data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+    return 0;
+}
+
+void SymbianAudioInputPrivate::dataReady()
+{
+    emit readyRead();
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device,
+                                     const QAudioFormat &format)
+    :   m_device(device)
+    ,   m_format(format)
+    ,   m_clientBufferSize(SymbianAudio::DefaultBufferSize)
+    ,   m_notifyInterval(SymbianAudio::DefaultNotifyInterval)
+    ,   m_notifyTimer(new QTimer(this))
+    ,   m_error(QAudio::NoError)
+    ,   m_internalState(SymbianAudio::ClosedState)
+    ,   m_externalState(QAudio::StoppedState)
+    ,   m_pullMode(false)
+    ,   m_sink(0)
+    ,   m_pullTimer(new QTimer(this))
+    ,   m_devSoundBuffer(0)
+    ,   m_devSoundBufferSize(0)
+    ,   m_totalBytesReady(0)
+    ,   m_devSoundBufferPos(0)
+    ,   m_totalSamplesRecorded(0)
+{
+    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
+
+    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
+                                          m_nativeFormat);
+
+    m_pullTimer->setInterval(PushInterval);
+    connect(m_pullTimer.data(), SIGNAL(timeout()), this, SLOT(pullData()));
+}
+
+QAudioInputPrivate::~QAudioInputPrivate()
+{
+    close();
+}
+
+QIODevice* QAudioInputPrivate::start(QIODevice *device)
+{
+    stop();
+
+    open();
+    if (SymbianAudio::ClosedState != m_internalState) {
+        if (device) {
+            m_pullMode = true;
+            m_sink = device;
+        } else {
+            m_sink = new SymbianAudioInputPrivate(this);
+            m_sink->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+        }
+
+        m_elapsed.restart();
+    }
+
+    return m_sink;
+}
+
+void QAudioInputPrivate::stop()
+{
+    close();
+}
+
+void QAudioInputPrivate::reset()
+{
+    m_totalSamplesRecorded += getSamplesRecorded();
+    m_devSound->Stop();
+    startRecording();
+}
+
+void QAudioInputPrivate::suspend()
+{
+    if (SymbianAudio::ActiveState == m_internalState
+        || SymbianAudio::IdleState == m_internalState) {
+        m_notifyTimer->stop();
+        m_pullTimer->stop();
+        m_devSound->Pause();
+        const qint64 samplesRecorded = getSamplesRecorded();
+        m_totalSamplesRecorded += samplesRecorded;
+
+        if (m_devSoundBuffer) {
+            m_devSoundBufferQ.append(m_devSoundBuffer);
+            m_devSoundBuffer = 0;
+        }
+
+        setState(SymbianAudio::SuspendedState);
+    }
+}
+
+void QAudioInputPrivate::resume()
+{
+    if (SymbianAudio::SuspendedState == m_internalState)
+        startDataTransfer();
+}
+
+int QAudioInputPrivate::bytesReady() const
+{
+    Q_ASSERT(m_devSoundBufferPos <= m_totalBytesReady);
+    return m_totalBytesReady - m_devSoundBufferPos;
+}
+
+int QAudioInputPrivate::periodSize() const
+{
+    return bufferSize();
+}
+
+void QAudioInputPrivate::setBufferSize(int value)
+{
+    // Note that DevSound does not allow its client to specify the buffer size.
+    // This functionality is available via custom interfaces, but since these
+    // cannot be guaranteed to work across all DevSound implementations, we
+    // do not use them here.
+    // In order to comply with the expected bevahiour of QAudioInput, we store
+    // the value and return it from bufferSize(), but the underlying DevSound
+    // buffer size remains unchanged.
+    if (value > 0)
+        m_clientBufferSize = value;
+}
+
+int QAudioInputPrivate::bufferSize() const
+{
+    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
+}
+
+void QAudioInputPrivate::setNotifyInterval(int ms)
+{
+    if (ms > 0) {
+        const int oldNotifyInterval = m_notifyInterval;
+        m_notifyInterval = ms;
+        if (m_notifyTimer->isActive() && ms != oldNotifyInterval)
+            m_notifyTimer->start(m_notifyInterval);
+    }
+}
+
+int QAudioInputPrivate::notifyInterval() const
+{
+    return m_notifyInterval;
+}
+
+qint64 QAudioInputPrivate::processedUSecs() const
+{
+    int samplesPlayed = 0;
+    if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
+        samplesPlayed = getSamplesRecorded();
+
+    // Protect against division by zero
+    Q_ASSERT_X(m_format.frequency() > 0, Q_FUNC_INFO, "Invalid frequency");
+
+    const qint64 result = qint64(1000000) *
+                          (samplesPlayed + m_totalSamplesRecorded)
+                        / m_format.frequency();
+
+    return result;
+}
+
+qint64 QAudioInputPrivate::elapsedUSecs() const
+{
+    const qint64 result = (QAudio::StoppedState == state()) ?
+                              0 : m_elapsed.elapsed() * 1000;
+    return result;
+}
+
+QAudio::Error QAudioInputPrivate::error() const
+{
+    return m_error;
+}
+
+QAudio::State QAudioInputPrivate::state() const
+{
+    return m_externalState;
+}
+
+QAudioFormat QAudioInputPrivate::format() const
+{
+    return m_format;
+}
+
+//-----------------------------------------------------------------------------
+// MDevSoundObserver implementation
+//-----------------------------------------------------------------------------
+
+void QAudioInputPrivate::InitializeComplete(TInt aError)
+{
+    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
+        Q_FUNC_INFO, "Invalid state");
+
+    if (KErrNone == aError)
+        startRecording();
+}
+
+void QAudioInputPrivate::ToneFinished(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound's tone playback functions, so should
+    // never receive this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioInputPrivate::BufferToBeFilled(CMMFBuffer *aBuffer)
+{
+    Q_UNUSED(aBuffer)
+    // This class doesn't use DevSound in play mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioInputPrivate::PlayError(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound in play mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioInputPrivate::BufferToBeEmptied(CMMFBuffer *aBuffer)
+{
+    // Following receipt of this callback, DevSound should not provide another
+    // buffer until we have returned the current one.
+    Q_ASSERT_X(!m_devSoundBuffer, Q_FUNC_INFO, "Buffer already held");
+
+    CMMFDataBuffer *const buffer = static_cast<CMMFDataBuffer*>(aBuffer);
+
+    if (!m_devSoundBufferSize)
+        m_devSoundBufferSize = buffer->Data().MaxLength();
+
+    m_totalBytesReady += buffer->Data().Length();
+
+    if (SymbianAudio::SuspendedState == m_internalState) {
+        m_devSoundBufferQ.append(buffer);
+    } else {
+        // Will be returned to DevSound by bufferEmptied().
+        m_devSoundBuffer = buffer;
+        m_devSoundBufferPos = 0;
+
+        if (bytesReady() && !m_pullMode)
+            pushData();
+    }
+}
+
+void QAudioInputPrivate::RecordError(TInt aError)
+{
+    Q_UNUSED(aError)
+    setError(QAudio::IOError);
+}
+
+void QAudioInputPrivate::ConvertError(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound's format conversion functions, so
+    // should never receive this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioInputPrivate::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
+{
+    Q_UNUSED(aMessageType)
+    Q_UNUSED(aMsg)
+    // Ignore this callback.
+}
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void QAudioInputPrivate::open()
+{
+    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
+        Q_FUNC_INFO, "DevSound already opened");
+
+    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
+
+    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
+        new SymbianAudio::DevSoundCapabilities(*m_devSound, QAudio::AudioInput));
+
+    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
+                  KErrNone : KErrNotSupported;
+
+    if (KErrNone == err) {
+        setState(SymbianAudio::InitializingState);
+        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
+                                          EMMFStateRecording));
+    }
+
+    if (KErrNone != err) {
+        setError(QAudio::OpenError);
+        m_devSound.reset();
+    }
+}
+
+void QAudioInputPrivate::startRecording()
+{
+    const int samplesRecorded = m_devSound->SamplesRecorded();
+    Q_ASSERT(samplesRecorded == 0);
+
+    TRAPD(err, startDevSoundL());
+    if (KErrNone == err) {
+        startDataTransfer();
+    } else {
+        setError(QAudio::OpenError);
+        close();
+    }
+}
+
+void QAudioInputPrivate::startDevSoundL()
+{
+    TMMFCapabilities nativeFormat = m_devSound->Config();
+    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
+    m_devSound->SetConfigL(m_nativeFormat);
+    m_devSound->RecordInitL();
+}
+
+void QAudioInputPrivate::startDataTransfer()
+{
+    m_notifyTimer->start(m_notifyInterval);
+
+    if (m_pullMode)
+        m_pullTimer->start();
+
+    if (bytesReady()) {
+        setState(SymbianAudio::ActiveState);
+        if (!m_pullMode)
+            pushData();
+    } else {
+        if (SymbianAudio::SuspendedState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+        else
+            setState(SymbianAudio::IdleState);
+    }
+}
+
+CMMFDataBuffer* QAudioInputPrivate::currentBuffer() const
+{
+    CMMFDataBuffer *result = m_devSoundBuffer;
+    if (!result && !m_devSoundBufferQ.empty())
+        result = m_devSoundBufferQ.front();
+    return result;
+}
+
+void QAudioInputPrivate::pushData()
+{
+    Q_ASSERT_X(bytesReady(), Q_FUNC_INFO, "No data available");
+    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO, "pushData called when in pull mode");
+    qobject_cast<SymbianAudioInputPrivate *>(m_sink)->dataReady();
+}
+
+qint64 QAudioInputPrivate::read(char *data, qint64 len)
+{
+    // SymbianAudioInputPrivate is ready to read data
+
+    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO,
+        "read called when in pull mode");
+
+    qint64 bytesRead = 0;
+
+    CMMFDataBuffer *buffer = 0;
+    while ((buffer = currentBuffer()) && (bytesRead < len)) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDesC8 &inputBuffer = buffer->Data();
+
+        const qint64 inputBytes = bytesReady();
+        const qint64 outputBytes = len - bytesRead;
+        const qint64 copyBytes = outputBytes < inputBytes ?
+                                     outputBytes : inputBytes;
+
+        memcpy(data, inputBuffer.Ptr() + m_devSoundBufferPos, copyBytes);
+
+        m_devSoundBufferPos += copyBytes;
+        data += copyBytes;
+        bytesRead += copyBytes;
+
+        if (!bytesReady())
+            bufferEmptied();
+    }
+
+    return bytesRead;
+}
+
+void QAudioInputPrivate::pullData()
+{
+    Q_ASSERT_X(m_pullMode, Q_FUNC_INFO,
+        "pullData called when in push mode");
+
+    CMMFDataBuffer *buffer = 0;
+    while (buffer = currentBuffer()) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDesC8 &inputBuffer = buffer->Data();
+
+        const qint64 inputBytes = bytesReady();
+        const qint64 bytesPushed = m_sink->write(
+            (char*)inputBuffer.Ptr() + m_devSoundBufferPos, inputBytes);
+
+        m_devSoundBufferPos += bytesPushed;
+
+        if (!bytesReady())
+            bufferEmptied();
+
+        if (!bytesPushed)
+            break;
+    }
+}
+
+void QAudioInputPrivate::bufferEmptied()
+{
+    m_devSoundBufferPos = 0;
+
+    if (m_devSoundBuffer) {
+        m_totalBytesReady -= m_devSoundBuffer->Data().Length();
+        m_devSoundBuffer = 0;
+        m_devSound->RecordData();
+    } else {
+        Q_ASSERT(!m_devSoundBufferQ.empty());
+        m_totalBytesReady -= m_devSoundBufferQ.front()->Data().Length();
+        m_devSoundBufferQ.erase(m_devSoundBufferQ.begin());
+
+        // If the queue has been emptied, resume transfer from the hardware
+        if (m_devSoundBufferQ.empty())
+            m_devSound->RecordInitL();
+    }
+
+    Q_ASSERT(m_totalBytesReady >= 0);
+}
+
+void QAudioInputPrivate::close()
+{
+    m_notifyTimer->stop();
+    m_pullTimer->stop();
+
+    m_error = QAudio::NoError;
+
+    if (m_devSound)
+        m_devSound->Stop();
+    m_devSound.reset();
+    m_devSoundBuffer = 0;
+    m_devSoundBufferSize = 0;
+    m_totalBytesReady = 0;
+
+    if (!m_pullMode) // m_sink is owned
+        delete m_sink;
+    m_pullMode = false;
+    m_sink = 0;
+
+    m_devSoundBufferQ.clear();
+    m_devSoundBufferPos = 0;
+    m_totalSamplesRecorded = 0;
+
+    setState(SymbianAudio::ClosedState);
+}
+
+qint64 QAudioInputPrivate::getSamplesRecorded() const
+{
+    qint64 result = 0;
+    if (m_devSound)
+        result = qint64(m_devSound->SamplesRecorded());
+    return result;
+}
+
+void QAudioInputPrivate::setError(QAudio::Error error)
+{
+    m_error = error;
+
+    // Although no state transition actually occurs here, a stateChanged event
+    // must be emitted to inform the client that the call to start() was
+    // unsuccessful.
+    if (QAudio::OpenError == error)
+        emit stateChanged(QAudio::StoppedState);
+
+    // Close the DevSound instance.  This causes a transition to StoppedState.
+    // This must be done asynchronously in case the current function was called
+    // from a DevSound event handler, in which case deleting the DevSound
+    // instance may cause an exception.
+    QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection);
+}
+
+void QAudioInputPrivate::setState(SymbianAudio::State newInternalState)
+{
+    const QAudio::State oldExternalState = m_externalState;
+    m_internalState = newInternalState;
+    m_externalState = SymbianAudio::Utils::stateNativeToQt(
+                            m_internalState, initializingState());
+
+    if (m_externalState != oldExternalState)
+        emit stateChanged(m_externalState);
+}
+
+QAudio::State QAudioInputPrivate::initializingState() const
+{
+    return QAudio::IdleState;
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudioinput_symbian_p.h b/src/multimedia/multimedia/audio/qaudioinput_symbian_p.h
new file mode 100644
index 0000000..ca3ccf7
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_symbian_p.h
@@ -0,0 +1,188 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOINPUT_SYMBIAN_P_H
+#define QAUDIOINPUT_SYMBIAN_P_H
+
+#include <QtMultimedia/qaudioengine.h>
+#include <QTime>
+#include <QTimer>
+#include <sounddevice.h>
+#include "qaudio_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QAudioInputPrivate;
+
+class SymbianAudioInputPrivate : public QIODevice
+{
+    friend class QAudioInputPrivate;
+    Q_OBJECT
+public:
+    SymbianAudioInputPrivate(QAudioInputPrivate *audio);
+    ~SymbianAudioInputPrivate();
+
+    qint64 readData(char *data, qint64 len);
+    qint64 writeData(const char *data, qint64 len);
+
+    void dataReady();
+
+private:
+    QAudioInputPrivate *const m_audioDevice;
+};
+
+class QAudioInputPrivate
+    :   public QAbstractAudioInput
+    ,   public MDevSoundObserver
+{
+    friend class SymbianAudioInputPrivate;
+    Q_OBJECT
+public:
+    QAudioInputPrivate(const QByteArray &device,
+                      const QAudioFormat &audioFormat);
+    ~QAudioInputPrivate();
+
+    // QAbstractAudioInput
+    QIODevice* start(QIODevice *device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesReady() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+    QAudioFormat format() const;
+
+    // MDevSoundObserver
+    void InitializeComplete(TInt aError);
+    void ToneFinished(TInt aError);
+    void BufferToBeFilled(CMMFBuffer *aBuffer);
+    void PlayError(TInt aError);
+    void BufferToBeEmptied(CMMFBuffer *aBuffer);
+    void RecordError(TInt aError);
+    void ConvertError(TInt aError);
+    void DeviceMessage(TUid aMessageType, const TDesC8 &aMsg);
+
+private slots:
+    void pullData();
+
+private:
+   void open();
+   void startRecording();
+   void startDevSoundL();
+   void startDataTransfer();
+   CMMFDataBuffer* currentBuffer() const;
+   void pushData();
+   qint64 read(char *data, qint64 len);
+   void bufferEmptied();
+   Q_INVOKABLE void close();
+
+   qint64 getSamplesRecorded() const;
+
+   void setError(QAudio::Error error);
+   void setState(SymbianAudio::State state);
+
+   QAudio::State initializingState() const;
+
+private:
+    const QByteArray m_device;
+    const QAudioFormat m_format;
+
+    int m_clientBufferSize;
+    int m_notifyInterval;
+    QScopedPointer<QTimer> m_notifyTimer;
+    QTime m_elapsed;
+    QAudio::Error m_error;
+
+    SymbianAudio::State m_internalState;
+    QAudio::State m_externalState;
+
+    bool m_pullMode;
+    QIODevice *m_sink;
+
+    QScopedPointer<QTimer> m_pullTimer;
+
+    QScopedPointer<CMMFDevSound> m_devSound;
+    TUint32 m_nativeFourCC;
+    TMMFCapabilities m_nativeFormat;
+
+    // Latest buffer provided by DevSound, to be empied of data.
+    CMMFDataBuffer *m_devSoundBuffer;
+
+    int m_devSoundBufferSize;
+
+    // Total amount of data in buffers provided by DevSound
+    int m_totalBytesReady;
+
+    // Queue of buffers returned after call to CMMFDevSound::Pause().
+    QList<CMMFDataBuffer *> m_devSoundBufferQ;
+
+    // Current read position within m_devSoundBuffer
+    qint64 m_devSoundBufferPos;
+
+    // Samples recorded up to the last call to suspend().  It is necessary
+    // to cache this because suspend() is implemented using
+    // CMMFDevSound::Stop(), which resets DevSound's SamplesRecorded() counter.
+    quint32 m_totalSamplesRecorded;
+
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp
new file mode 100644
index 0000000..b5d673e
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp
@@ -0,0 +1,613 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+
+#include "qaudioinput_win32_p.h"
+
+QT_BEGIN_NAMESPACE
+
+//#define DEBUG_AUDIO 1
+
+static const int minimumIntervalTime = 50;
+
+QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
+    settings(audioFormat)
+{
+    bytesAvailable = 0;
+    buffer_size = 0;
+    period_size = 0;
+    m_device = device;
+    totalTimeValue = 0;
+    intervalTime = 1000;
+    errorState = QAudio::NoError;
+    deviceState = QAudio::StoppedState;
+    audioSource = 0;
+    pullMode = true;
+    resuming = false;
+    finished = false;
+
+    connect(this,SIGNAL(processMore()),SLOT(deviceReady()));
+
+    InitializeCriticalSection(&waveInCriticalSection);
+}
+
+QAudioInputPrivate::~QAudioInputPrivate()
+{
+    stop();
+    DeleteCriticalSection(&waveInCriticalSection);
+}
+
+void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
+        DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 )
+{
+    Q_UNUSED(dwParam1)
+    Q_UNUSED(dwParam2)
+    Q_UNUSED(hWaveIn)
+
+    QAudioInputPrivate* qAudio;
+    qAudio = (QAudioInputPrivate*)(dwInstance);
+    if(!qAudio)
+        return;
+
+    switch(uMsg) {
+        case WIM_OPEN:
+            break;
+        case WIM_DATA:
+            EnterCriticalSection(&qAudio->waveInCriticalSection);
+            if(qAudio->waveFreeBlockCount > 0)
+                qAudio->waveFreeBlockCount--;
+            qAudio->feedback();
+            LeaveCriticalSection(&qAudio->waveInCriticalSection);
+            break;
+        case WIM_CLOSE:
+            EnterCriticalSection(&qAudio->waveInCriticalSection);
+            qAudio->finished = true;
+            LeaveCriticalSection(&qAudio->waveInCriticalSection);
+            break;
+        default:
+            return;
+    }
+}
+
+WAVEHDR* QAudioInputPrivate::allocateBlocks(int size, int count)
+{
+    int i;
+    unsigned char* buffer;
+    WAVEHDR* blocks;
+    DWORD totalBufferSize = (size + sizeof(WAVEHDR))*count;
+
+    if((buffer=(unsigned char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
+                    totalBufferSize)) == 0) {
+        qWarning("QAudioInput: Memory allocation error");
+        return 0;
+    }
+    blocks = (WAVEHDR*)buffer;
+    buffer += sizeof(WAVEHDR)*count;
+    for(i = 0; i < count; i++) {
+        blocks[i].dwBufferLength = size;
+        blocks[i].lpData = (LPSTR)buffer;
+        blocks[i].dwBytesRecorded=0;
+        blocks[i].dwUser = 0L;
+        blocks[i].dwFlags = 0L;
+        blocks[i].dwLoops = 0L;
+        result = waveInPrepareHeader(hWaveIn,&blocks[i], sizeof(WAVEHDR));
+        if(result != MMSYSERR_NOERROR) {
+            qWarning("QAudioInput: Can't prepare block %d",i);
+            return 0;
+        }
+        buffer += size;
+    }
+    return blocks;
+}
+
+void QAudioInputPrivate::freeBlocks(WAVEHDR* blockArray)
+{
+    WAVEHDR* blocks = blockArray;
+
+    int count = buffer_size/period_size;
+
+    for(int i = 0; i < count; i++) {
+        waveInUnprepareHeader(hWaveIn,&blocks[i], sizeof(WAVEHDR));
+        blocks+=sizeof(WAVEHDR);
+    }
+    HeapFree(GetProcessHeap(), 0, blockArray);
+}
+
+QAudio::Error QAudioInputPrivate::error() const
+{
+    return errorState;
+}
+
+QAudio::State QAudioInputPrivate::state() const
+{
+    return deviceState;
+}
+
+QAudioFormat QAudioInputPrivate::format() const
+{
+    return settings;
+}
+
+QIODevice* QAudioInputPrivate::start(QIODevice* device)
+{
+    if(deviceState != QAudio::StoppedState)
+        close();
+
+    if(!pullMode && audioSource) {
+        delete audioSource;
+    }
+
+    if(device) {
+        //set to pull mode
+        pullMode = true;
+        audioSource = device;
+        deviceState = QAudio::ActiveState;
+    } else {
+        //set to push mode
+        pullMode = false;
+        deviceState = QAudio::IdleState;
+        audioSource = new InputPrivate(this);
+        audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+    }
+
+    if( !open() )
+        return 0;
+
+    emit stateChanged(deviceState);
+
+    return audioSource;
+}
+
+void QAudioInputPrivate::stop()
+{
+    if(deviceState == QAudio::StoppedState)
+        return;
+
+    close();
+    emit stateChanged(deviceState);
+}
+
+bool QAudioInputPrivate::open()
+{
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
+#endif
+    header = 0;
+    if(buffer_size == 0) {
+        // Default buffer size, 200ms, default period size is 40ms
+        buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2;
+	period_size = buffer_size/5;
+    } else {
+        period_size = buffer_size/5;
+    }
+#ifdef Q_OS_WINCE
+    // For wince reduce size to 40ms for buffer size and 20ms period
+    buffer_size = settings.sampleRate()*settings.channelCount()*(settings.sampleSize()/8)*0.04;
+    period_size = buffer_size/2;
+#endif
+    timeStamp.restart();
+    elapsedTimeOffset = 0;
+    wfx.nSamplesPerSec = settings.frequency();
+    wfx.wBitsPerSample = settings.sampleSize();
+    wfx.nChannels = settings.channels();
+    wfx.cbSize = 0;
+
+    wfx.wFormatTag = WAVE_FORMAT_PCM;
+    wfx.nBlockAlign = (wfx.wBitsPerSample >> 3) * wfx.nChannels;
+    wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
+
+    UINT_PTR devId = WAVE_MAPPER;
+
+    WAVEINCAPS wic;
+    unsigned long iNumDevs,ii;
+    iNumDevs = waveInGetNumDevs();
+    for(ii=0;ii<iNumDevs;ii++) {
+        if(waveInGetDevCaps(ii, &wic, sizeof(WAVEINCAPS))
+	    == MMSYSERR_NOERROR) {
+	    QString tmp;
+	    tmp = QString((const QChar *)wic.szPname);
+	    if(tmp.compare(QLatin1String(m_device)) == 0) {
+	        devId = ii;
+		break;
+	    }
+	}
+    }
+
+    if(waveInOpen(&hWaveIn, devId, &wfx,
+                (DWORD_PTR)&waveInProc,
+                (DWORD_PTR) this,
+                CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        qWarning("QAudioInput: failed to open audio device");
+        return false;
+    }
+    waveBlocks = allocateBlocks(period_size, buffer_size/period_size);
+
+    if(waveBlocks == 0) {
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        qWarning("QAudioInput: failed to allocate blocks. open failed");
+        return false;
+    }
+
+    EnterCriticalSection(&waveInCriticalSection);
+    waveFreeBlockCount = buffer_size/period_size;
+    LeaveCriticalSection(&waveInCriticalSection);
+
+    waveCurrentBlock = 0;
+
+    for(int i=0; i<buffer_size/period_size; i++) {
+        result = waveInAddBuffer(hWaveIn, &waveBlocks[i], sizeof(WAVEHDR));
+        if(result != MMSYSERR_NOERROR) {
+            qWarning("QAudioInput: failed to setup block %d,err=%d",i,result);
+            errorState = QAudio::OpenError;
+            deviceState = QAudio::StoppedState;
+            emit stateChanged(deviceState);
+            return false;
+        }
+    }
+    result = waveInStart(hWaveIn);
+    if(result) {
+        qWarning("QAudioInput: failed to start audio input");
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        return false;
+    }
+    timeStampOpened.restart();
+    elapsedTimeOffset = 0;
+    totalTimeValue = 0;
+    errorState  = QAudio::NoError;
+    return true;
+}
+
+void QAudioInputPrivate::close()
+{
+    if(deviceState == QAudio::StoppedState)
+        return;
+
+    deviceState = QAudio::StoppedState;
+    waveInReset(hWaveIn);
+    waveInClose(hWaveIn);
+
+    int count = 0;
+    while(!finished && count < 500) {
+        count++;
+        Sleep(10);
+    }
+
+    EnterCriticalSection(&waveInCriticalSection);
+    for(int i=0; i<waveFreeBlockCount; i++) {
+        if(waveBlocks[i].dwFlags & WHDR_PREPARED)
+            waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
+    }
+    LeaveCriticalSection(&waveInCriticalSection);
+    freeBlocks(waveBlocks);
+}
+
+int QAudioInputPrivate::bytesReady() const
+{
+    if(period_size == 0 || buffer_size == 0)
+        return 0;
+
+    int buf = ((buffer_size/period_size)-waveFreeBlockCount)*period_size;
+    if(buf < 0)
+        buf = 0;
+    return buf;
+}
+
+qint64 QAudioInputPrivate::read(char* data, qint64 len)
+{
+    bool done = false;
+
+    char*  p = data;
+    qint64 l = 0;
+    qint64 written = 0;
+    while(!done) {
+        // Read in some audio data
+        if(waveBlocks[header].dwBytesRecorded > 0 && waveBlocks[header].dwFlags & WHDR_DONE) {
+            if(pullMode) {
+                l = audioSource->write(waveBlocks[header].lpData,
+                        waveBlocks[header].dwBytesRecorded);
+#ifdef DEBUG_AUDIO
+                qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l;
+#endif
+                if(l < 0) {
+                    // error
+                    qWarning("QAudioInput: IOError");
+                    errorState = QAudio::IOError;
+
+                } else if(l == 0) {
+                    // cant write to IODevice
+                    qWarning("QAudioInput: IOError, can't write to QIODevice");
+                    errorState = QAudio::IOError;
+
+                } else {
+                    totalTimeValue += waveBlocks[header].dwBytesRecorded;
+                    errorState = QAudio::NoError;
+                    if (deviceState != QAudio::ActiveState) {
+                        deviceState = QAudio::ActiveState;
+                        emit stateChanged(deviceState);
+                    }
+		    resuming = false;
+                }
+            } else {
+                // push mode
+                memcpy(p,waveBlocks[header].lpData,waveBlocks[header].dwBytesRecorded);
+                l = waveBlocks[header].dwBytesRecorded;
+#ifdef DEBUG_AUDIO
+                qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l;
+#endif
+                totalTimeValue += waveBlocks[header].dwBytesRecorded;
+                errorState = QAudio::NoError;
+                if (deviceState != QAudio::ActiveState) {
+                    deviceState = QAudio::ActiveState;
+                    emit stateChanged(deviceState);
+                }
+		resuming = false;
+            }
+        } else {
+            //no data, not ready yet, next time
+            break;
+        }
+
+        waveInUnprepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
+
+        EnterCriticalSection(&waveInCriticalSection);
+        waveFreeBlockCount++;
+        LeaveCriticalSection(&waveInCriticalSection);
+        waveBlocks[header].dwBytesRecorded=0;
+        waveBlocks[header].dwFlags = 0L;
+        result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
+        if(result != MMSYSERR_NOERROR) {
+            result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
+            qWarning("QAudioInput: failed to prepare block %d,err=%d",header,result);
+            errorState = QAudio::IOError;
+            EnterCriticalSection(&waveInCriticalSection);
+            waveFreeBlockCount--;
+            LeaveCriticalSection(&waveInCriticalSection);
+            return 0;
+        }
+        result = waveInAddBuffer(hWaveIn, &waveBlocks[header], sizeof(WAVEHDR));
+        if(result != MMSYSERR_NOERROR) {
+            qWarning("QAudioInput: failed to setup block %d,err=%d",header,result);
+            errorState = QAudio::IOError;
+            EnterCriticalSection(&waveInCriticalSection);
+            waveFreeBlockCount--;
+            LeaveCriticalSection(&waveInCriticalSection);
+            return 0;
+        }
+        header++;
+        if(header >= buffer_size/period_size)
+            header = 0;
+        p+=l;
+
+        EnterCriticalSection(&waveInCriticalSection);
+        if(!pullMode) {
+	    if(l+period_size > len && waveFreeBlockCount == buffer_size/period_size)
+	        done = true;
+	} else {
+	    if(waveFreeBlockCount == buffer_size/period_size)
+	        done = true;
+	}
+        LeaveCriticalSection(&waveInCriticalSection);
+
+	written+=l;
+    }
+#ifdef DEBUG_AUDIO
+    qDebug()<<"read in len="<<written;
+#endif
+    return written;
+}
+
+void QAudioInputPrivate::resume()
+{
+    if(deviceState == QAudio::SuspendedState) {
+        deviceState = QAudio::ActiveState;
+        for(int i=0; i<buffer_size/period_size; i++) {
+            result = waveInAddBuffer(hWaveIn, &waveBlocks[i], sizeof(WAVEHDR));
+            if(result != MMSYSERR_NOERROR) {
+                qWarning("QAudioInput: failed to setup block %d,err=%d",i,result);
+                errorState = QAudio::OpenError;
+                deviceState = QAudio::StoppedState;
+                emit stateChanged(deviceState);
+                return;
+            }
+        }
+        EnterCriticalSection(&waveInCriticalSection);
+        waveFreeBlockCount = buffer_size/period_size;
+        LeaveCriticalSection(&waveInCriticalSection);
+
+        waveCurrentBlock = 0;
+        header = 0;
+	resuming = true;
+        waveInStart(hWaveIn);
+        QTimer::singleShot(20,this,SLOT(feedback()));
+        emit stateChanged(deviceState);
+    }
+}
+
+void QAudioInputPrivate::setBufferSize(int value)
+{
+    buffer_size = value;
+}
+
+int QAudioInputPrivate::bufferSize() const
+{
+    return buffer_size;
+}
+
+int QAudioInputPrivate::periodSize() const
+{
+    return period_size;
+}
+
+void QAudioInputPrivate::setNotifyInterval(int ms)
+{
+    if(ms >= minimumIntervalTime)
+        intervalTime = ms;
+    else
+        intervalTime = minimumIntervalTime;
+}
+
+int QAudioInputPrivate::notifyInterval() const
+{
+    return intervalTime;
+}
+
+qint64 QAudioInputPrivate::processedUSecs() const
+{
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+    qint64 result = qint64(1000000) * totalTimeValue /
+        (settings.channels()*(settings.sampleSize()/8)) /
+        settings.frequency();
+
+    return result;
+}
+
+void QAudioInputPrivate::suspend()
+{
+    if(deviceState == QAudio::ActiveState) {
+        waveInReset(hWaveIn);
+        deviceState = QAudio::SuspendedState;
+        emit stateChanged(deviceState);
+    }
+}
+
+void QAudioInputPrivate::feedback()
+{
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :feedback() INPUT "<<this;
+#endif
+    bytesAvailable = bytesReady();
+
+    if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState))
+        emit processMore();
+}
+
+bool QAudioInputPrivate::deviceReady()
+{
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :deviceReady() INPUT";
+#endif
+    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+        return true;
+
+    if(pullMode) {
+        // reads some audio data and writes it to QIODevice
+        read(0,0);
+    } else {
+        // emits readyRead() so user will call read() on QIODevice to get some audio data
+	InputPrivate* a = qobject_cast<InputPrivate*>(audioSource);
+	a->trigger();
+    }
+
+    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+        emit notify();
+        elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
+        timeStamp.restart();
+    }
+    return true;
+}
+
+qint64 QAudioInputPrivate::elapsedUSecs() const
+{
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+
+    return timeStampOpened.elapsed()*1000;
+}
+
+void QAudioInputPrivate::reset()
+{
+    close();
+}
+
+InputPrivate::InputPrivate(QAudioInputPrivate* audio)
+{
+    audioDevice = qobject_cast<QAudioInputPrivate*>(audio);
+}
+
+InputPrivate::~InputPrivate() {}
+
+qint64 InputPrivate::readData( char* data, qint64 len)
+{
+    // push mode, user read() called
+    if(audioDevice->deviceState != QAudio::ActiveState &&
+            audioDevice->deviceState != QAudio::IdleState)
+        return 0;
+    // Read in some audio data
+    return audioDevice->read(data,len);
+}
+
+qint64 InputPrivate::writeData(const char* data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+
+    emit readyRead();
+    return 0;
+}
+
+void InputPrivate::trigger()
+{
+    emit readyRead();
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/multimedia/audio/qaudioinput_win32_p.h
new file mode 100644
index 0000000..66c2535
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudioinput_win32_p.h
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOINPUTWIN_H
+#define QAUDIOINPUTWIN_H
+
+#include <windows.h>
+#include <mmsystem.h>
+
+#include <QtCore/qfile.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qdatetime.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+
+
+QT_BEGIN_NAMESPACE
+
+class QAudioInputPrivate : public QAbstractAudioInput
+{
+    Q_OBJECT
+public:
+    QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
+    ~QAudioInputPrivate();
+
+    qint64 read(char* data, qint64 len);
+
+    QAudioFormat format() const;
+    QIODevice* start(QIODevice* device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesReady() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+    QIODevice* audioSource;
+    QAudioFormat settings;
+    QAudio::Error errorState;
+    QAudio::State deviceState;
+
+private:
+    qint32 buffer_size;
+    qint32 period_size;
+    qint32 header;
+    QByteArray m_device;
+    int bytesAvailable;
+    int intervalTime;
+    QTime timeStamp;
+    qint64 elapsedTimeOffset;
+    QTime timeStampOpened;
+    qint64 totalTimeValue;
+    bool pullMode;
+    bool resuming;
+    WAVEFORMATEX wfx;
+    HWAVEIN hWaveIn;
+    MMRESULT result;
+    WAVEHDR* waveBlocks;
+    volatile bool finished;
+    volatile int waveFreeBlockCount;
+    int waveCurrentBlock;
+
+    CRITICAL_SECTION waveInCriticalSection;
+    static void QT_WIN_CALLBACK waveInProc( HWAVEIN hWaveIn, UINT uMsg,
+            DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
+
+    WAVEHDR* allocateBlocks(int size, int count);
+    void freeBlocks(WAVEHDR* blockArray);
+    bool open();
+    void close();
+
+private slots:
+    void feedback();
+    bool deviceReady();
+
+signals:
+    void processMore();
+};
+
+class InputPrivate : public QIODevice
+{
+    Q_OBJECT
+public:
+    InputPrivate(QAudioInputPrivate* audio);
+    ~InputPrivate();
+
+    qint64 readData( char* data, qint64 len);
+    qint64 writeData(const char* data, qint64 len);
+
+    void trigger();
+private:
+    QAudioInputPrivate *audioDevice;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudiooutput.cpp b/src/multimedia/multimedia/audio/qaudiooutput.cpp
new file mode 100644
index 0000000..b0b5244
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput.cpp
@@ -0,0 +1,411 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+#include <QtMultimedia/qaudiooutput.h>
+
+#include "qaudiodevicefactory_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QAudioOutput
+    \brief The QAudioOutput class provides an interface for sending audio data to an audio output device.
+
+    \inmodule QtMultimedia
+    \ingroup  multimedia
+    \since 4.6
+
+    You can construct an audio output with the system's
+    \l{QAudioDeviceInfo::defaultOutputDevice()}{default audio output
+    device}. It is also possible to create QAudioOutput with a
+    specific QAudioDeviceInfo. When you create the audio output, you
+    should also send in the QAudioFormat to be used for the playback
+    (see the QAudioFormat class description for details).
+
+    To play a file:
+
+    Starting to play an audio stream is simply a matter of calling
+    start() with a QIODevice. QAudioOutput will then fetch the data it
+    needs from the io device. So playing back an audio file is as
+    simple as:
+
+    \code
+      QFile inputFile;     // class member.
+      QAudioOutput* audio; // class member.
+    \endcode
+
+    \code
+      inputFile.setFileName("/tmp/test.raw");
+      inputFile.open(QIODevice::ReadOnly);
+
+      QAudioFormat format;
+      // Set up the format, eg.
+      format.setFrequency(8000);
+      format.setChannels(1);
+      format.setSampleSize(8);
+      format.setCodec("audio/pcm");
+      format.setByteOrder(QAudioFormat::LittleEndian);
+      format.setSampleType(QAudioFormat::UnSignedInt);
+
+      QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
+      if (!info.isFormatSupported(format)) {
+          qWarning()<<"raw audio format not supported by backend, cannot play audio.";
+          return;
+      }
+
+      audio = new QAudioOutput(format, this);
+      connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));
+      audio->start(&inputFile);
+
+    \endcode
+
+    The file will start playing assuming that the audio system and
+    output device support it. If you run out of luck, check what's
+    up with the error() function.
+
+    After the file has finished playing, we need to stop the device:
+
+    \code
+      void finishedPlaying(QAudio::State state)
+      {
+        if(state == QAudio::IdleState) {
+          audio->stop();
+          inputFile.close();
+          delete audio;
+        }
+      }
+    \endcode
+
+    At any given time, the QAudioOutput will be in one of four states:
+    active, suspended, stopped, or idle. These states are described
+    by the QAudio::State enum.
+    State changes are reported through the stateChanged() signal. You
+    can use this signal to, for instance, update the GUI of the
+    application; the mundane example here being changing the state of
+    a \c { play/pause } button. You request a state change directly
+    with suspend(), stop(), reset(), resume(), and start().
+
+    While the stream is playing, you can set a notify interval in
+    milliseconds with setNotifyInterval(). This interval specifies the
+    time between two emissions of the notify() signal. This is
+    relative to the position in the stream, i.e., if the QAudioOutput
+    is in the SuspendedState or the IdleState, the notify() signal is
+    not emitted. A typical use-case would be to update a
+    \l{QSlider}{slider} that allows seeking in the stream.
+    If you want the time since playback started regardless of which
+    states the audio output has been in, elapsedUSecs() is the function for you.
+
+    If an error occurs, you can fetch the \l{QAudio::Error}{error
+    type} with the error() function. Please see the QAudio::Error enum
+    for a description of the possible errors that are reported.  When
+    an error is encountered, the state changes to QAudio::StoppedState.
+    You can check for errors by connecting to the stateChanged()
+    signal:
+
+    \snippet doc/src/snippets/audio/main.cpp 3
+
+    \sa QAudioInput, QAudioDeviceInfo
+*/
+
+/*!
+    Construct a new audio output and attach it to \a parent.
+    The default audio output device is used with the output
+    \a format parameters.
+*/
+
+QAudioOutput::QAudioOutput(const QAudioFormat &format, QObject *parent):
+    QObject(parent)
+{
+    d = QAudioDeviceFactory::createDefaultOutputDevice(format);
+    connect(d, SIGNAL(notify()), SIGNAL(notify()));
+    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
+}
+
+/*!
+    Construct a new audio output and attach it to \a parent.
+    The device referenced by \a audioDevice is used with the output
+    \a format parameters.
+*/
+
+QAudioOutput::QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format, QObject *parent):
+    QObject(parent)
+{
+    d = QAudioDeviceFactory::createOutputDevice(audioDevice, format);
+    connect(d, SIGNAL(notify()), SIGNAL(notify()));
+    connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
+}
+
+/*!
+    Destroys this audio output.
+*/
+
+QAudioOutput::~QAudioOutput()
+{
+    delete d;
+}
+
+/*!
+    Returns the QAudioFormat being used.
+
+*/
+
+QAudioFormat QAudioOutput::format() const
+{
+    return d->format();
+}
+
+/*!
+    Uses the \a device as the QIODevice to transfer data.
+    Passing a QIODevice allows the data to be transfered without any extra code.
+    All that is required is to open the QIODevice.
+
+    If able to successfully output audio data to the systems audio device the
+    state() is set to QAudio::ActiveState, error() is set to QAudio::NoError
+    and the stateChanged() signal is emitted.
+
+    If a problem occurs during this process the error() is set to QAudio::OpenError,
+    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+    \sa QIODevice
+*/
+
+void QAudioOutput::start(QIODevice* device)
+{
+    d->start(device);
+}
+
+/*!
+    Returns a pointer to the QIODevice being used to handle the data
+    transfer. This QIODevice can be used to write() audio data directly.
+
+    If able to access the systems audio device the state() is set to
+    QAudio::IdleState, error() is set to QAudio::NoError
+    and the stateChanged() signal is emitted.
+
+    If a problem occurs during this process the error() is set to QAudio::OpenError,
+    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+    \sa QIODevice
+*/
+
+QIODevice* QAudioOutput::start()
+{
+    return d->start(0);
+}
+
+/*!
+    Stops the audio output, detaching from the system resource.
+
+    Sets error() to QAudio::NoError, state() to QAudio::StoppedState and
+    emit stateChanged() signal.
+*/
+
+void QAudioOutput::stop()
+{
+    d->stop();
+}
+
+/*!
+    Drops all audio data in the buffers, resets buffers to zero.
+*/
+
+void QAudioOutput::reset()
+{
+    d->reset();
+}
+
+/*!
+    Stops processing audio data, preserving buffered audio data.
+
+    Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and
+    emit stateChanged() signal.
+*/
+
+void QAudioOutput::suspend()
+{
+    d->suspend();
+}
+
+/*!
+    Resumes processing audio data after a suspend().
+
+    Sets error() to QAudio::NoError.
+    Sets state() to QAudio::ActiveState if you previously called start(QIODevice*).
+    Sets state() to QAudio::IdleState if you previously called start().
+    emits stateChanged() signal.
+*/
+
+void QAudioOutput::resume()
+{
+     d->resume();
+}
+
+/*!
+    Returns the free space available in bytes in the audio buffer.
+
+    NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState
+    state, otherwise returns zero.
+*/
+
+int QAudioOutput::bytesFree() const
+{
+    return d->bytesFree();
+}
+
+/*!
+    Returns the period size in bytes.
+
+    Note: This is the recommended write size in bytes.
+*/
+
+int QAudioOutput::periodSize() const
+{
+    return d->periodSize();
+}
+
+/*!
+    Sets the audio buffer size to \a value in bytes.
+
+    Note: This function can be called anytime before start(), calls to this
+    are ignored after start(). It should not be assumed that the buffer size
+    set is the actual buffer size used, calling bufferSize() anytime after start()
+    will return the actual buffer size being used.
+*/
+
+void QAudioOutput::setBufferSize(int value)
+{
+    d->setBufferSize(value);
+}
+
+/*!
+    Returns the audio buffer size in bytes.
+
+    If called before start(), returns platform default value.
+    If called before start() but setBufferSize() was called prior, returns value set by setBufferSize().
+    If called after start(), returns the actual buffer size being used. This may not be what was set previously
+    by setBufferSize().
+
+*/
+
+int QAudioOutput::bufferSize() const
+{
+    return d->bufferSize();
+}
+
+/*!
+    Sets the interval for notify() signal to be emitted.
+    This is based on the \a ms of audio data processed
+    not on actual real-time.
+    The minimum resolution of the timer is platform specific and values
+    should be checked with notifyInterval() to confirm actual value
+    being used.
+*/
+
+void QAudioOutput::setNotifyInterval(int ms)
+{
+    d->setNotifyInterval(ms);
+}
+
+/*!
+    Returns the notify interval in milliseconds.
+*/
+
+int QAudioOutput::notifyInterval() const
+{
+    return d->notifyInterval();
+}
+
+/*!
+    Returns the amount of audio data processed since start()
+    was called in microseconds.
+*/
+
+qint64 QAudioOutput::processedUSecs() const
+{
+    return d->processedUSecs();
+}
+
+/*!
+    Returns the microseconds since start() was called, including time in Idle and
+    Suspend states.
+*/
+
+qint64 QAudioOutput::elapsedUSecs() const
+{
+    return d->elapsedUSecs();
+}
+
+/*!
+    Returns the error state.
+*/
+
+QAudio::Error QAudioOutput::error() const
+{
+    return d->error();
+}
+
+/*!
+    Returns the state of audio processing.
+*/
+
+QAudio::State QAudioOutput::state() const
+{
+    return d->state();
+}
+
+/*!
+    \fn QAudioOutput::stateChanged(QAudio::State state)
+    This signal is emitted when the device \a state has changed.
+    This is the current state of the audio output.
+*/
+
+/*!
+    \fn QAudioOutput::notify()
+    This signal is emitted when x ms of audio data has been processed
+    the interval set by setNotifyInterval(x).
+*/
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudiooutput.h b/src/multimedia/multimedia/audio/qaudiooutput.h
new file mode 100644
index 0000000..0f45b1b
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QAUDIOOUTPUT_H
+#define QAUDIOOUTPUT_H
+
+#include <QtCore/qiodevice.h>
+#include <QtCore/qglobal.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+
+class QAbstractAudioOutput;
+
+class Q_MULTIMEDIA_EXPORT QAudioOutput : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
+    explicit QAudioOutput(const QAudioDeviceInfo &audioDeviceInfo, const QAudioFormat &format = QAudioFormat(), QObject *parent = 0);
+    ~QAudioOutput();
+
+    QAudioFormat format() const;
+
+    void start(QIODevice *device);
+    QIODevice* start();
+
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+
+    void setBufferSize(int bytes);
+    int bufferSize() const;
+
+    int bytesFree() const;
+    int periodSize() const;
+
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+Q_SIGNALS:
+    void stateChanged(QAudio::State);
+    void notify();
+
+private:
+    Q_DISABLE_COPY(QAudioOutput)
+
+    QAbstractAudioOutput* d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QAUDIOOUTPUT_H
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp
new file mode 100644
index 0000000..cf3726b
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp
@@ -0,0 +1,780 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qcoreapplication.h>
+#include "qaudiooutput_alsa_p.h"
+#include "qaudiodeviceinfo_alsa_p.h"
+
+QT_BEGIN_NAMESPACE
+
+//#define DEBUG_AUDIO 1
+
+static const int minimumIntervalTime = 50;
+
+QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
+    settings(audioFormat)
+{
+    bytesAvailable = 0;
+    handle = 0;
+    ahandler = 0;
+    access = SND_PCM_ACCESS_RW_INTERLEAVED;
+    pcmformat = SND_PCM_FORMAT_S16;
+    buffer_frames = 0;
+    period_frames = 0;
+    buffer_size = 0;
+    period_size = 0;
+    buffer_time = 100000;
+    period_time = 20000;
+    totalTimeValue = 0;
+    intervalTime = 1000;
+    audioBuffer = 0;
+    errorState = QAudio::NoError;
+    deviceState = QAudio::StoppedState;
+    audioSource = 0;
+    pullMode = true;
+    resuming = false;
+    opened = false;
+
+    QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":"));
+    m_device = QByteArray(list1.at(0).toLocal8Bit().constData());
+
+    timer = new QTimer(this);
+    connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
+}
+
+QAudioOutputPrivate::~QAudioOutputPrivate()
+{
+    close();
+    disconnect(timer, SIGNAL(timeout()));
+    QCoreApplication::processEvents();
+    delete timer;
+}
+
+QAudio::Error QAudioOutputPrivate::error() const
+{
+    return errorState;
+}
+
+QAudio::State QAudioOutputPrivate::state() const
+{
+    return deviceState;
+}
+
+void QAudioOutputPrivate::async_callback(snd_async_handler_t *ahandler)
+{
+    QAudioOutputPrivate* audioOut;
+
+    audioOut = static_cast<QAudioOutputPrivate*>
+        (snd_async_handler_get_callback_private(ahandler));
+
+    if((audioOut->deviceState==QAudio::ActiveState)||(audioOut->resuming))
+        audioOut->feedback();
+}
+
+int QAudioOutputPrivate::xrun_recovery(int err)
+{
+    int  count = 0;
+    bool reset = false;
+
+    if(err == -EPIPE) {
+        errorState = QAudio::UnderrunError;
+        err = snd_pcm_prepare(handle);
+        if(err < 0)
+            reset = true;
+
+    } else if((err == -ESTRPIPE)||(err == -EIO)) {
+        errorState = QAudio::IOError;
+        while((err = snd_pcm_resume(handle)) == -EAGAIN){
+            usleep(100);
+            count++;
+            if(count > 5) {
+                reset = true;
+                break;
+            }
+        }
+        if(err < 0) {
+            err = snd_pcm_prepare(handle);
+            if(err < 0)
+                reset = true;
+        }
+    }
+    if(reset) {
+        close();
+        open();
+        snd_pcm_prepare(handle);
+        return 0;
+    }
+    return err;
+}
+
+int QAudioOutputPrivate::setFormat()
+{
+    snd_pcm_format_t pcmformat = SND_PCM_FORMAT_S16;
+
+    if(settings.sampleSize() == 8) {
+        pcmformat = SND_PCM_FORMAT_U8;
+
+    } else if(settings.sampleSize() == 16) {
+        if(settings.sampleType() == QAudioFormat::SignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                pcmformat = SND_PCM_FORMAT_S16_LE;
+            else
+                pcmformat = SND_PCM_FORMAT_S16_BE;
+        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                pcmformat = SND_PCM_FORMAT_U16_LE;
+            else
+                pcmformat = SND_PCM_FORMAT_U16_BE;
+        }
+    } else if(settings.sampleSize() == 24) {
+        if(settings.sampleType() == QAudioFormat::SignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                pcmformat = SND_PCM_FORMAT_S24_LE;
+            else
+                pcmformat = SND_PCM_FORMAT_S24_BE;
+        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                pcmformat = SND_PCM_FORMAT_U24_LE;
+            else
+                pcmformat = SND_PCM_FORMAT_U24_BE;
+        }
+    } else if(settings.sampleSize() == 32) {
+        if(settings.sampleType() == QAudioFormat::SignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                pcmformat = SND_PCM_FORMAT_S32_LE;
+            else
+                pcmformat = SND_PCM_FORMAT_S32_BE;
+        } else if(settings.sampleType() == QAudioFormat::UnSignedInt) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                pcmformat = SND_PCM_FORMAT_U32_LE;
+            else
+                pcmformat = SND_PCM_FORMAT_U32_BE;
+        } else if(settings.sampleType() == QAudioFormat::Float) {
+            if(settings.byteOrder() == QAudioFormat::LittleEndian)
+                pcmformat = SND_PCM_FORMAT_FLOAT_LE;
+            else
+                pcmformat = SND_PCM_FORMAT_FLOAT_BE;
+        }
+    } else if(settings.sampleSize() == 64) {
+        if(settings.byteOrder() == QAudioFormat::LittleEndian)
+            pcmformat = SND_PCM_FORMAT_FLOAT64_LE;
+        else
+            pcmformat = SND_PCM_FORMAT_FLOAT64_BE;
+    }
+
+    return snd_pcm_hw_params_set_format( handle, hwparams, pcmformat);
+}
+
+QIODevice* QAudioOutputPrivate::start(QIODevice* device)
+{
+    if(deviceState != QAudio::StoppedState)
+        deviceState = QAudio::StoppedState;
+
+    errorState = QAudio::NoError;
+
+    // Handle change of mode
+    if(audioSource && pullMode && !device) {
+        // pull -> push
+        close();
+        audioSource = 0;
+    } else if(audioSource && !pullMode && device) {
+        // push -> pull
+        close();
+        delete audioSource;
+        audioSource = 0;
+    }
+
+    if(device) {
+        //set to pull mode
+        pullMode = true;
+        audioSource = device;
+        deviceState = QAudio::ActiveState;
+    } else {
+        //set to push mode
+        if(!audioSource) {
+            audioSource = new OutputPrivate(this);
+            audioSource->open(QIODevice::WriteOnly|QIODevice::Unbuffered);
+        }
+        pullMode = false;
+        deviceState = QAudio::IdleState;
+    }
+
+    open();
+
+    emit stateChanged(deviceState);
+
+    return audioSource;
+}
+
+void QAudioOutputPrivate::stop()
+{
+    if(deviceState == QAudio::StoppedState)
+        return;
+    errorState = QAudio::NoError;
+    deviceState = QAudio::StoppedState;
+    close();
+    emit stateChanged(deviceState);
+}
+
+bool QAudioOutputPrivate::open()
+{
+    if(opened)
+        return true;
+
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
+#endif
+    timeStamp.restart();
+    elapsedTimeOffset = 0;
+
+    int dir;
+    int err=-1;
+    int count=0;
+    unsigned int freakuency=settings.frequency();
+
+    QString dev = QLatin1String(m_device.constData());
+    QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
+    if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(devices.first().constData());
+#else
+        dev = QLatin1String("hw:0,0");
+#endif
+    } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(m_device);
+#else
+        int idx = 0;
+        char *name;
+
+        QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData());
+
+	while(snd_card_get_name(idx,&name) == 0) {
+            if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0)
+                break;
+            idx++;
+	}
+        dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
+    }
+
+    // Step 1: try and open the device
+    while((count < 5) && (err < 0)) {
+        err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
+        if(err < 0)
+            count++;
+    }
+    if (( err < 0)||(handle == 0)) {
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        return false;
+    }
+    snd_pcm_nonblock( handle, 0 );
+
+    // Step 2: Set the desired HW parameters.
+    snd_pcm_hw_params_alloca( &hwparams );
+
+    bool fatal = false;
+    QString errMessage;
+    unsigned int chunks = 8;
+
+    err = snd_pcm_hw_params_any( handle, hwparams );
+    if ( err < 0 ) {
+        fatal = true;
+        errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_any: err = %1").arg(err);
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_rate_resample( handle, hwparams, 1 );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_rate_resample: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_access( handle, hwparams, access );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_access: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = setFormat();
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_format: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_channels: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_rate_near( handle, hwparams, &freakuency, 0 );
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_rate_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        unsigned int maxBufferTime = 0;
+        unsigned int minBufferTime = 0;
+        unsigned int maxPeriodTime = 0;
+        unsigned int minPeriodTime = 0;
+
+        err = snd_pcm_hw_params_get_buffer_time_max(hwparams, &maxBufferTime, &dir);
+        if ( err >= 0)
+            err = snd_pcm_hw_params_get_buffer_time_min(hwparams, &minBufferTime, &dir);
+        if ( err >= 0)
+            err = snd_pcm_hw_params_get_period_time_max(hwparams, &maxPeriodTime, &dir);
+        if ( err >= 0)
+            err = snd_pcm_hw_params_get_period_time_min(hwparams, &minPeriodTime, &dir);
+
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: buffer/period min and max: err = %1").arg(err);
+        } else {
+            if (maxBufferTime < buffer_time || buffer_time < minBufferTime || maxPeriodTime < period_time || minPeriodTime > period_time) {
+#ifdef DEBUG_AUDIO
+                qDebug()<<"defaults out of range";
+                qDebug()<<"pmin="<<minPeriodTime<<", pmax="<<maxPeriodTime<<", bmin="<<minBufferTime<<", bmax="<<maxBufferTime;
+#endif
+                period_time = minPeriodTime;
+                if (period_time*4 <= maxBufferTime) {
+                    // Use 4 periods if possible
+                    buffer_time = period_time*4;
+                    chunks = 4;
+                } else if (period_time*2 <= maxBufferTime) {
+                    // Use 2 periods if possible
+                    buffer_time = period_time*2;
+                    chunks = 2;
+                } else {
+                    qWarning()<<"QAudioOutput: alsa only supports single period!";
+                    fatal = true;
+                }
+#ifdef DEBUG_AUDIO
+                qDebug()<<"used: buffer_time="<<buffer_time<<", period_time="<<period_time;
+#endif
+            }
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_period_time_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params_set_periods_near(handle, hwparams, &chunks, &dir);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_periods_near: err = %1").arg(err);
+        }
+    }
+    if ( !fatal ) {
+        err = snd_pcm_hw_params(handle, hwparams);
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params: err = %1").arg(err);
+        }
+    }
+    if( err < 0) {
+        qWarning()<<errMessage;
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        return false;
+    }
+    snd_pcm_hw_params_get_buffer_size(hwparams,&buffer_frames);
+    buffer_size = snd_pcm_frames_to_bytes(handle,buffer_frames);
+    snd_pcm_hw_params_get_period_size(hwparams,&period_frames, &dir);
+    period_size = snd_pcm_frames_to_bytes(handle,period_frames);
+    snd_pcm_hw_params_get_buffer_time(hwparams,&buffer_time, &dir);
+    snd_pcm_hw_params_get_period_time(hwparams,&period_time, &dir);
+
+    // Step 3: Set the desired SW parameters.
+    snd_pcm_sw_params_t *swparams;
+    snd_pcm_sw_params_alloca(&swparams);
+    snd_pcm_sw_params_current(handle, swparams);
+    snd_pcm_sw_params_set_start_threshold(handle,swparams,period_frames);
+    snd_pcm_sw_params_set_stop_threshold(handle,swparams,buffer_frames);
+    snd_pcm_sw_params_set_avail_min(handle, swparams,period_frames);
+    snd_pcm_sw_params(handle, swparams);
+
+    // Step 4: Prepare audio
+    if(audioBuffer == 0)
+        audioBuffer = new char[snd_pcm_frames_to_bytes(handle,buffer_frames)];
+    snd_pcm_prepare( handle );
+    snd_pcm_start(handle);
+
+    // Step 5: Setup callback and timer fallback
+    snd_async_add_pcm_handler(&ahandler, handle, async_callback, this);
+    bytesAvailable = bytesFree();
+
+    // Step 6: Start audio processing
+    timer->start(period_time/1000);
+
+    clockStamp.restart();
+    timeStamp.restart();
+    elapsedTimeOffset = 0;
+    errorState  = QAudio::NoError;
+    totalTimeValue = 0;
+    opened = true;
+
+    return true;
+}
+
+void QAudioOutputPrivate::close()
+{
+    timer->stop();
+
+    if ( handle ) {
+        snd_pcm_drain( handle );
+        snd_pcm_close( handle );
+        handle = 0;
+        delete [] audioBuffer;
+        audioBuffer=0;
+    }
+    if(!pullMode && audioSource) {
+        delete audioSource;
+        audioSource = 0;
+    }
+    opened = false;
+}
+
+int QAudioOutputPrivate::bytesFree() const
+{
+    if(resuming)
+        return period_size;
+
+    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+        return 0;
+    int frames = snd_pcm_avail_update(handle);
+    if((int)frames > (int)buffer_frames)
+        frames = buffer_frames;
+
+    return snd_pcm_frames_to_bytes(handle, frames);
+}
+
+qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
+{
+    // Write out some audio data
+    if ( !handle )
+        return 0;
+#ifdef DEBUG_AUDIO
+    qDebug()<<"frames to write out = "<<
+        snd_pcm_bytes_to_frames( handle, (int)len )<<" ("<<len<<") bytes";
+#endif
+    int frames, err;
+    int space = bytesFree();
+    if(len < space) {
+        // Just write it
+        frames = snd_pcm_bytes_to_frames( handle, (int)len );
+        err = snd_pcm_writei( handle, data, frames );
+    } else {
+        // Only write space worth
+        frames = snd_pcm_bytes_to_frames( handle, (int)space );
+        err = snd_pcm_writei( handle, data, frames );
+    }
+    if(err > 0) {
+        totalTimeValue += err;
+        resuming = false;
+        errorState = QAudio::NoError;
+        if (deviceState != QAudio::ActiveState) {
+            deviceState = QAudio::ActiveState;
+            emit stateChanged(deviceState);
+        }
+        return snd_pcm_frames_to_bytes( handle, err );
+    } else
+        err = xrun_recovery(err);
+
+    if(err < 0) {
+        close();
+        errorState = QAudio::FatalError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+    }
+    return 0;
+}
+
+int QAudioOutputPrivate::periodSize() const
+{
+    return period_size;
+}
+
+void QAudioOutputPrivate::setBufferSize(int value)
+{
+    if(deviceState == QAudio::StoppedState)
+        buffer_size = value;
+}
+
+int QAudioOutputPrivate::bufferSize() const
+{
+    return buffer_size;
+}
+
+void QAudioOutputPrivate::setNotifyInterval(int ms)
+{
+    if(ms >= minimumIntervalTime)
+        intervalTime = ms;
+    else
+        intervalTime = minimumIntervalTime;
+}
+
+int QAudioOutputPrivate::notifyInterval() const
+{
+    return intervalTime;
+}
+
+qint64 QAudioOutputPrivate::processedUSecs() const
+{
+    return qint64(1000000) * totalTimeValue / settings.frequency();
+}
+
+void QAudioOutputPrivate::resume()
+{
+    if(deviceState == QAudio::SuspendedState) {
+        int err = 0;
+
+        if(handle) {
+            err = snd_pcm_prepare( handle );
+            if(err < 0)
+                xrun_recovery(err);
+
+            err = snd_pcm_start(handle);
+            if(err < 0)
+                xrun_recovery(err);
+
+            bytesAvailable = (int)snd_pcm_frames_to_bytes(handle, buffer_frames);
+        }
+        resuming = true;
+
+        deviceState = QAudio::ActiveState;
+
+        errorState = QAudio::NoError;
+        timer->start(period_time/1000);
+        emit stateChanged(deviceState);
+    }
+}
+
+QAudioFormat QAudioOutputPrivate::format() const
+{
+    return settings;
+}
+
+void QAudioOutputPrivate::suspend()
+{
+    if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState || resuming) {
+        timer->stop();
+        deviceState = QAudio::SuspendedState;
+        errorState = QAudio::NoError;
+        emit stateChanged(deviceState);
+    }
+}
+
+void QAudioOutputPrivate::userFeed()
+{
+    if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
+        return;
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :userFeed() OUT";
+#endif
+    if(deviceState ==  QAudio::IdleState)
+        bytesAvailable = bytesFree();
+
+    deviceReady();
+}
+
+void QAudioOutputPrivate::feedback()
+{
+    updateAvailable();
+}
+
+
+void QAudioOutputPrivate::updateAvailable()
+{
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :updateAvailable()";
+#endif
+    bytesAvailable = bytesFree();
+}
+
+bool QAudioOutputPrivate::deviceReady()
+{
+    if(pullMode) {
+        int l = 0;
+        int chunks = bytesAvailable/period_size;
+        if(chunks==0) {
+            bytesAvailable = bytesFree();
+            return false;
+        }
+#ifdef DEBUG_AUDIO
+        qDebug()<<"deviceReady() avail="<<bytesAvailable<<" bytes, period size="<<period_size<<" bytes";
+        qDebug()<<"deviceReady() no. of chunks that can fit ="<<chunks<<", chunks in bytes ="<<period_size*chunks;
+#endif
+        int input = period_frames*chunks;
+        if(input > (int)buffer_frames)
+            input = buffer_frames;
+        l = audioSource->read(audioBuffer,snd_pcm_frames_to_bytes(handle, input));
+        if(l > 0) {
+            // Got some data to output
+            if(deviceState != QAudio::ActiveState)
+                return true;
+            qint64 bytesWritten = write(audioBuffer,l);
+            if (bytesWritten != l)
+                audioSource->seek(audioSource->pos()-(l-bytesWritten));
+            bytesAvailable = bytesFree();
+
+        } else if(l == 0) {
+            // Did not get any data to output
+            bytesAvailable = bytesFree();
+            if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) {
+                // Underrun
+                if (deviceState != QAudio::IdleState) {
+                    errorState = QAudio::UnderrunError;
+                    deviceState = QAudio::IdleState;
+                    emit stateChanged(deviceState);
+                }
+            }
+
+        } else if(l < 0) {
+            close();
+            deviceState = QAudio::StoppedState;
+            errorState = QAudio::IOError;
+            emit stateChanged(deviceState);
+        }
+    } else {
+        bytesAvailable = bytesFree();
+        if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) {
+            // Underrun
+            if (deviceState != QAudio::IdleState) {
+                errorState = QAudio::UnderrunError;
+                deviceState = QAudio::IdleState;
+                emit stateChanged(deviceState);
+            }
+        }
+    }
+
+    if(deviceState != QAudio::ActiveState)
+        return true;
+
+    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+        emit notify();
+        elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
+        timeStamp.restart();
+    }
+    return true;
+}
+
+qint64 QAudioOutputPrivate::elapsedUSecs() const
+{
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+
+    return clockStamp.elapsed()*1000;
+}
+
+void QAudioOutputPrivate::reset()
+{
+    if(handle)
+        snd_pcm_reset(handle);
+
+    stop();
+}
+
+OutputPrivate::OutputPrivate(QAudioOutputPrivate* audio)
+{
+    audioDevice = qobject_cast<QAudioOutputPrivate*>(audio);
+}
+
+OutputPrivate::~OutputPrivate() {}
+
+qint64 OutputPrivate::readData( char* data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+
+    return 0;
+}
+
+qint64 OutputPrivate::writeData(const char* data, qint64 len)
+{
+    int retry = 0;
+    qint64 written = 0;
+    if((audioDevice->deviceState == QAudio::ActiveState)
+            ||(audioDevice->deviceState == QAudio::IdleState)) {
+        while(written < len) {
+            int chunk = audioDevice->write(data+written,(len-written));
+            if(chunk <= 0)
+                retry++;
+            written+=chunk;
+            if(retry > 10)
+                return written;
+        }
+    }
+    return written;
+
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.h b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.h
new file mode 100644
index 0000000..e6ac231
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.h
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOOUTPUTALSA_H
+#define QAUDIOOUTPUTALSA_H
+
+#include <alsa/asoundlib.h>
+
+#include <QtCore/qfile.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qelapsedtimer.h>
+#include <QtCore/qdatetime.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+
+QT_BEGIN_NAMESPACE
+
+class OutputPrivate;
+
+class QAudioOutputPrivate : public QAbstractAudioOutput
+{
+    friend class OutputPrivate;
+    Q_OBJECT
+public:
+    QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
+    ~QAudioOutputPrivate();
+
+    qint64 write( const char *data, qint64 len );
+
+    QIODevice* start(QIODevice* device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesFree() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+    QAudioFormat format() const;
+
+    QIODevice* audioSource;
+    QAudioFormat settings;
+    QAudio::Error errorState;
+    QAudio::State deviceState;
+
+private slots:
+    void userFeed();
+    void feedback();
+    void updateAvailable();
+    bool deviceReady();
+
+signals:
+    void processMore();
+
+private:
+    bool opened;
+    bool pullMode;
+    bool resuming;
+    int buffer_size;
+    int period_size;
+    int intervalTime;
+    qint64 totalTimeValue;
+    unsigned int buffer_time;
+    unsigned int period_time;
+    snd_pcm_uframes_t buffer_frames;
+    snd_pcm_uframes_t period_frames;
+    static void async_callback(snd_async_handler_t *ahandler);
+    int xrun_recovery(int err);
+
+    int setFormat();
+    bool open();
+    void close();
+
+    QTimer* timer;
+    QByteArray m_device;
+    int bytesAvailable;
+    QElapsedTimer timeStamp;
+    QElapsedTimer clockStamp;
+    qint64 elapsedTimeOffset;
+    char* audioBuffer;
+    snd_pcm_t* handle;
+    snd_async_handler_t* ahandler;
+    snd_pcm_access_t access;
+    snd_pcm_format_t pcmformat;
+    snd_timestamp_t* timestamp;
+    snd_pcm_hw_params_t *hwparams;
+};
+
+class OutputPrivate : public QIODevice
+{
+    friend class QAudioOutputPrivate;
+    Q_OBJECT
+public:
+    OutputPrivate(QAudioOutputPrivate* audio);
+    ~OutputPrivate();
+
+    qint64 readData( char* data, qint64 len);
+    qint64 writeData(const char* data, qint64 len);
+
+private:
+    QAudioOutputPrivate *audioDevice;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_mac_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_mac_p.cpp
new file mode 100644
index 0000000..9689101
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_mac_p.cpp
@@ -0,0 +1,712 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <CoreServices/CoreServices.h>
+#include <CoreAudio/CoreAudio.h>
+#include <AudioUnit/AudioUnit.h>
+#include <AudioToolbox/AudioToolbox.h>
+
+#include <QtCore/qendian.h>
+#include <QtCore/qbuffer.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qdebug.h>
+
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudiooutput.h>
+
+#include "qaudio_mac_p.h"
+#include "qaudiooutput_mac_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+
+namespace QtMultimediaInternal
+{
+
+static const int default_buffer_size = 8 * 1024;
+
+
+class QAudioOutputBuffer : public QObject
+{
+    Q_OBJECT
+
+public:
+    QAudioOutputBuffer(int bufferSize, int maxPeriodSize, QAudioFormat const& audioFormat):
+        m_deviceError(false),
+        m_maxPeriodSize(maxPeriodSize),
+        m_device(0)
+    {
+        m_buffer = new QAudioRingBuffer(bufferSize + (bufferSize % maxPeriodSize == 0 ? 0 : maxPeriodSize - (bufferSize % maxPeriodSize)));
+        m_bytesPerFrame = (audioFormat.sampleSize() / 8) * audioFormat.channels();
+        m_periodTime = m_maxPeriodSize / m_bytesPerFrame * 1000 / audioFormat.frequency();
+
+        m_fillTimer = new QTimer(this);
+        connect(m_fillTimer, SIGNAL(timeout()), SLOT(fillBuffer()));
+    }
+
+    ~QAudioOutputBuffer()
+    {
+        delete m_buffer;
+    }
+
+    qint64 readFrames(char* data, qint64 maxFrames)
+    {
+        bool    wecan = true;
+        qint64  framesRead = 0;
+
+        while (wecan && framesRead < maxFrames) {
+            QAudioRingBuffer::Region region = m_buffer->acquireReadRegion((maxFrames - framesRead) * m_bytesPerFrame);
+
+            if (region.second > 0) {
+                region.second -= region.second % m_bytesPerFrame;
+                memcpy(data + (framesRead * m_bytesPerFrame), region.first, region.second);
+                framesRead += region.second / m_bytesPerFrame;
+            }
+            else
+                wecan = false;
+
+            m_buffer->releaseReadRegion(region);
+        }
+
+        if (framesRead == 0 && m_deviceError)
+            framesRead = -1;
+
+        return framesRead;
+    }
+
+    qint64 writeBytes(const char* data, qint64 maxSize)
+    {
+        bool    wecan = true;
+        qint64  bytesWritten = 0;
+
+        maxSize -= maxSize % m_bytesPerFrame;
+        while (wecan && bytesWritten < maxSize) {
+            QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(maxSize - bytesWritten);
+
+            if (region.second > 0) {
+                memcpy(region.first, data + bytesWritten, region.second);
+                bytesWritten += region.second;
+            }
+            else
+                wecan = false;
+
+            m_buffer->releaseWriteRegion(region);
+        }
+
+        if (bytesWritten > 0)
+            emit readyRead();
+
+        return bytesWritten;
+    }
+
+    int available() const
+    {
+        return m_buffer->free();
+    }
+
+    void reset()
+    {
+        m_buffer->reset();
+        m_deviceError = false;
+    }
+
+    void setPrefetchDevice(QIODevice* device)
+    {
+        if (m_device != device) {
+            m_device = device;
+            if (m_device != 0)
+                fillBuffer();
+        }
+    }
+
+    void startFillTimer()
+    {
+        if (m_device != 0)
+            m_fillTimer->start(m_buffer->size() / 2 / m_maxPeriodSize * m_periodTime);
+    }
+
+    void stopFillTimer()
+    {
+        m_fillTimer->stop();
+    }
+
+signals:
+    void readyRead();
+
+private slots:
+    void fillBuffer()
+    {
+        const int free = m_buffer->free();
+        const int writeSize = free - (free % m_maxPeriodSize);
+
+        if (writeSize > 0) {
+            bool    wecan = true;
+            int     filled = 0;
+
+            while (!m_deviceError && wecan && filled < writeSize) {
+                QAudioRingBuffer::Region region = m_buffer->acquireWriteRegion(writeSize - filled);
+
+                if (region.second > 0) {
+                    region.second = m_device->read(region.first, region.second);
+                    if (region.second > 0)
+                        filled += region.second;
+                    else if (region.second == 0)
+                        wecan = false;
+                    else if (region.second < 0) {
+                        m_fillTimer->stop();
+                        region.second = 0;
+                        m_deviceError = true;
+                    }
+                }
+                else
+                    wecan = false;
+
+                m_buffer->releaseWriteRegion(region);
+            }
+
+            if (filled > 0)
+                emit readyRead();
+        }
+    }
+
+private:
+    bool        m_deviceError;
+    int         m_maxPeriodSize;
+    int         m_bytesPerFrame;
+    int         m_periodTime;
+    QIODevice*  m_device;
+    QTimer*     m_fillTimer;
+    QAudioRingBuffer*  m_buffer;
+};
+
+
+}
+
+class MacOutputDevice : public QIODevice
+{
+    Q_OBJECT
+
+public:
+    MacOutputDevice(QtMultimediaInternal::QAudioOutputBuffer* audioBuffer, QObject* parent):
+        QIODevice(parent),
+        m_audioBuffer(audioBuffer)
+    {
+        open(QIODevice::WriteOnly | QIODevice::Unbuffered);
+    }
+
+    qint64 readData(char* data, qint64 len)
+    {
+        Q_UNUSED(data);
+        Q_UNUSED(len);
+
+        return 0;
+    }
+
+    qint64 writeData(const char* data, qint64 len)
+    {
+        return m_audioBuffer->writeBytes(data, len);
+    }
+
+    bool isSequential() const
+    {
+        return true;
+    }
+
+private:
+    QtMultimediaInternal::QAudioOutputBuffer*    m_audioBuffer;
+};
+
+
+QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray& device, const QAudioFormat& format):
+    audioFormat(format)
+{
+    QDataStream ds(device);
+    quint32 did, mode;
+
+    ds >> did >> mode;
+
+    if (QAudio::Mode(mode) == QAudio::AudioInput)
+        errorCode = QAudio::OpenError;
+    else {
+        isOpen = false;
+        audioDeviceId = AudioDeviceID(did);
+        audioUnit = 0;
+        audioIO = 0;
+        startTime = 0;
+        totalFrames = 0;
+        audioBuffer = 0;
+        internalBufferSize = QtMultimediaInternal::default_buffer_size;
+        clockFrequency = AudioGetHostClockFrequency() / 1000;
+        errorCode = QAudio::NoError;
+        stateCode = QAudio::StoppedState;
+        audioThreadState = Stopped;
+
+        intervalTimer = new QTimer(this);
+        intervalTimer->setInterval(1000);
+        connect(intervalTimer, SIGNAL(timeout()), SIGNAL(notify()));
+    }
+}
+
+QAudioOutputPrivate::~QAudioOutputPrivate()
+{
+    close();
+}
+
+bool QAudioOutputPrivate::open()
+{
+    if (errorCode != QAudio::NoError)
+        return false;
+
+    if (isOpen)
+        return true;
+
+    ComponentDescription    cd;
+    cd.componentType = kAudioUnitType_Output;
+    cd.componentSubType = kAudioUnitSubType_HALOutput;
+    cd.componentManufacturer = kAudioUnitManufacturer_Apple;
+    cd.componentFlags = 0;
+    cd.componentFlagsMask = 0;
+
+    // Open
+    Component cp = FindNextComponent(NULL, &cd);
+    if (cp == 0) {
+        qWarning() << "QAudioOutput: Failed to find HAL Output component";
+        return false;
+    }
+
+    if (OpenAComponent(cp, &audioUnit) != noErr) {
+        qWarning() << "QAudioOutput: Unable to Open Output Component";
+        return false;
+    }
+
+    // register callback
+    AURenderCallbackStruct  cb;
+    cb.inputProc = renderCallback;
+    cb.inputProcRefCon = this;
+
+    if (AudioUnitSetProperty(audioUnit,
+                               kAudioUnitProperty_SetRenderCallback,
+                               kAudioUnitScope_Global,
+                               0,
+                               &cb,
+                               sizeof(cb)) != noErr) {
+        qWarning() << "QAudioOutput: Failed to set AudioUnit callback";
+        return false;
+    }
+
+    // Set Audio Device
+    if (AudioUnitSetProperty(audioUnit,
+                                kAudioOutputUnitProperty_CurrentDevice,
+                                kAudioUnitScope_Global,
+                                0,
+                                &audioDeviceId,
+                                sizeof(audioDeviceId)) != noErr) {
+        qWarning() << "QAudioOutput: Unable to use configured device";
+        return false;
+    }
+
+    // Set stream format
+    streamFormat = toAudioStreamBasicDescription(audioFormat);
+
+    UInt32 size = sizeof(deviceFormat);
+    if (AudioUnitGetProperty(audioUnit,
+                                kAudioUnitProperty_StreamFormat,
+                                kAudioUnitScope_Input,
+                                0,
+                                &deviceFormat,
+                                &size) != noErr) {
+        qWarning() << "QAudioOutput: Unable to retrieve device format";
+        return false;
+    }
+
+    if (AudioUnitSetProperty(audioUnit,
+                                kAudioUnitProperty_StreamFormat,
+                                kAudioUnitScope_Input,
+                                0,
+                                &streamFormat,
+                                sizeof(streamFormat)) != noErr) {
+        qWarning() << "QAudioOutput: Unable to Set Stream information";
+        return false;
+    }
+
+    // Allocate buffer
+    UInt32 numberOfFrames = 0;
+    size = sizeof(UInt32);
+    if (AudioUnitGetProperty(audioUnit,
+                                kAudioDevicePropertyBufferFrameSize,
+                                kAudioUnitScope_Global,
+                                0,
+                                &numberOfFrames,
+                                &size) != noErr) {
+        qWarning() << "QAudioInput: Failed to get audio period size";
+        return false;
+    }
+
+    periodSizeBytes = (numberOfFrames * streamFormat.mSampleRate / deviceFormat.mSampleRate) * 
+                        streamFormat.mBytesPerFrame;
+    if (internalBufferSize < periodSizeBytes * 2)
+        internalBufferSize = periodSizeBytes * 2;
+    else
+        internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
+
+    audioBuffer = new QtMultimediaInternal::QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat);
+    connect(audioBuffer, SIGNAL(readyRead()), SLOT(inputReady()));  // Pull
+
+    audioIO = new MacOutputDevice(audioBuffer, this);
+
+    // Init
+    if (AudioUnitInitialize(audioUnit)) {
+        qWarning() << "QAudioOutput: Failed to initialize AudioUnit";
+        return false;
+    }
+
+    isOpen = true;
+
+    return true;
+}
+
+void QAudioOutputPrivate::close()
+{
+    if (audioUnit != 0) {
+        AudioOutputUnitStop(audioUnit);
+        AudioUnitUninitialize(audioUnit);
+        CloseComponent(audioUnit);
+    }
+
+    delete audioBuffer;
+}
+
+QAudioFormat QAudioOutputPrivate::format() const
+{
+    return audioFormat;
+}
+
+QIODevice* QAudioOutputPrivate::start(QIODevice* device)
+{
+    QIODevice*  op = device;
+
+    if (!audioFormat.isValid() || !open()) {
+        stateCode = QAudio::StoppedState;
+        errorCode = QAudio::OpenError;
+        return audioIO;
+    }
+
+    reset();
+    audioBuffer->reset();
+    audioBuffer->setPrefetchDevice(op);
+
+    if (op == 0) {
+        op = audioIO;
+        stateCode = QAudio::IdleState;
+    }
+    else
+        stateCode = QAudio::ActiveState;
+
+    // Start
+    errorCode = QAudio::NoError;
+    totalFrames = 0;
+    startTime = AudioGetCurrentHostTime();
+
+    if (stateCode == QAudio::ActiveState)
+        audioThreadStart();
+
+    emit stateChanged(stateCode);
+
+    return op;
+}
+
+void QAudioOutputPrivate::stop()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode != QAudio::StoppedState) {
+        audioThreadDrain();
+
+        stateCode = QAudio::StoppedState;
+        errorCode = QAudio::NoError;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+void QAudioOutputPrivate::reset()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode != QAudio::StoppedState) {
+        audioThreadStop();
+
+        stateCode = QAudio::StoppedState;
+        errorCode = QAudio::NoError;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+void QAudioOutputPrivate::suspend()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::ActiveState || stateCode == QAudio::IdleState) {
+        audioThreadStop();
+
+        stateCode = QAudio::SuspendedState;
+        errorCode = QAudio::NoError;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+void QAudioOutputPrivate::resume()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::SuspendedState) {
+        audioThreadStart();
+
+        stateCode = QAudio::ActiveState;
+        errorCode = QAudio::NoError;
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+int QAudioOutputPrivate::bytesFree() const
+{
+    return audioBuffer->available();
+}
+
+int QAudioOutputPrivate::periodSize() const
+{
+    return periodSizeBytes;
+}
+
+void QAudioOutputPrivate::setBufferSize(int bs)
+{
+    if (stateCode == QAudio::StoppedState)
+        internalBufferSize = bs;
+}
+
+int QAudioOutputPrivate::bufferSize() const
+{
+    return internalBufferSize;
+}
+
+void QAudioOutputPrivate::setNotifyInterval(int milliSeconds)
+{
+    if (intervalTimer->interval() == milliSeconds)
+        return;
+
+    if (milliSeconds <= 0)
+        milliSeconds = 0;
+
+    intervalTimer->setInterval(milliSeconds);
+}
+
+int QAudioOutputPrivate::notifyInterval() const
+{
+    return intervalTimer->interval();
+}
+
+qint64 QAudioOutputPrivate::processedUSecs() const
+{
+    return totalFrames * 1000000 / audioFormat.frequency();
+}
+
+qint64 QAudioOutputPrivate::elapsedUSecs() const
+{
+    if (stateCode == QAudio::StoppedState)
+        return 0;
+
+    return (AudioGetCurrentHostTime() - startTime) / (clockFrequency / 1000);
+}
+
+QAudio::Error QAudioOutputPrivate::error() const
+{
+    return errorCode;
+}
+
+QAudio::State QAudioOutputPrivate::state() const
+{
+    return stateCode;
+}
+
+void QAudioOutputPrivate::audioThreadStart()
+{
+    startTimers();
+    audioThreadState = Running;
+    AudioOutputUnitStart(audioUnit);
+}
+
+void QAudioOutputPrivate::audioThreadStop()
+{
+    stopTimers();
+    if (audioThreadState.testAndSetAcquire(Running, Stopped))
+        threadFinished.wait(&mutex);
+}
+
+void QAudioOutputPrivate::audioThreadDrain()
+{
+    stopTimers();
+    if (audioThreadState.testAndSetAcquire(Running, Draining))
+        threadFinished.wait(&mutex);
+}
+
+void QAudioOutputPrivate::audioDeviceStop()
+{
+    AudioOutputUnitStop(audioUnit);
+    audioThreadState = Stopped;
+    threadFinished.wakeOne();
+}
+
+void QAudioOutputPrivate::audioDeviceIdle()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::ActiveState) {
+        audioDeviceStop();
+
+        errorCode = QAudio::UnderrunError;
+        stateCode = QAudio::IdleState;
+        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
+    }
+}
+
+void QAudioOutputPrivate::audioDeviceError()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::ActiveState) {
+        audioDeviceStop();
+
+        errorCode = QAudio::IOError;
+        stateCode = QAudio::StoppedState;
+        QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
+    }
+}
+
+void QAudioOutputPrivate::startTimers()
+{
+    audioBuffer->startFillTimer();
+    if (intervalTimer->interval() > 0)
+        intervalTimer->start();
+}
+
+void QAudioOutputPrivate::stopTimers()
+{
+    audioBuffer->stopFillTimer();
+    intervalTimer->stop();
+}
+
+
+void QAudioOutputPrivate::deviceStopped()
+{
+    intervalTimer->stop();
+    emit stateChanged(stateCode);
+}
+
+void QAudioOutputPrivate::inputReady()
+{
+    QMutexLocker    lock(&mutex);
+    if (stateCode == QAudio::IdleState) {
+        audioThreadStart();
+
+        stateCode = QAudio::ActiveState;
+        errorCode = QAudio::NoError;
+
+        QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
+    }
+}
+
+
+OSStatus QAudioOutputPrivate::renderCallback(void* inRefCon,
+                                    AudioUnitRenderActionFlags* ioActionFlags,
+                                    const AudioTimeStamp* inTimeStamp,
+                                    UInt32 inBusNumber,
+                                    UInt32 inNumberFrames,
+                                    AudioBufferList* ioData)
+{
+    Q_UNUSED(ioActionFlags)
+    Q_UNUSED(inTimeStamp)
+    Q_UNUSED(inBusNumber)
+    Q_UNUSED(inNumberFrames)
+
+    QAudioOutputPrivate* d = static_cast<QAudioOutputPrivate*>(inRefCon);
+
+    const int threadState = d->audioThreadState.fetchAndAddAcquire(0);
+    if (threadState == Stopped) {
+        ioData->mBuffers[0].mDataByteSize = 0;
+        d->audioDeviceStop();
+    }
+    else {
+        const UInt32    bytesPerFrame = d->streamFormat.mBytesPerFrame;
+        qint64          framesRead;
+
+        framesRead = d->audioBuffer->readFrames((char*)ioData->mBuffers[0].mData,
+                                                 ioData->mBuffers[0].mDataByteSize / bytesPerFrame);
+
+        if (framesRead > 0) {
+            ioData->mBuffers[0].mDataByteSize = framesRead * bytesPerFrame;
+            d->totalFrames += framesRead;
+        }
+        else {
+            ioData->mBuffers[0].mDataByteSize = 0;
+            if (framesRead == 0) {
+                if (threadState == Draining)
+                    d->audioDeviceStop();
+                else
+                    d->audioDeviceIdle();
+            }
+            else
+                d->audioDeviceError();
+        }
+    }
+
+    return noErr;
+}
+
+
+QT_END_NAMESPACE
+
+#include "qaudiooutput_mac_p.moc"
+
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_mac_p.h b/src/multimedia/multimedia/audio/qaudiooutput_mac_p.h
new file mode 100644
index 0000000..752905c
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_mac_p.h
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOOUTPUT_MAC_P_H
+#define QAUDIOOUTPUT_MAC_P_H
+
+#include <CoreServices/CoreServices.h>
+#include <CoreAudio/CoreAudio.h>
+#include <AudioUnit/AudioUnit.h>
+#include <AudioToolbox/AudioToolbox.h>
+
+#include <QtCore/qobject.h>
+#include <QtCore/qmutex.h>
+#include <QtCore/qwaitcondition.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qatomic.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudioengine.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QIODevice;
+
+namespace QtMultimediaInternal
+{
+class QAudioOutputBuffer;
+}
+
+class QAudioOutputPrivate : public QAbstractAudioOutput
+{
+    Q_OBJECT
+
+public:
+    bool            isOpen;
+    int             internalBufferSize;
+    int             periodSizeBytes;
+    qint64          totalFrames;
+    QAudioFormat    audioFormat;
+    QIODevice*      audioIO;
+    AudioDeviceID   audioDeviceId;
+    AudioUnit       audioUnit;
+    Float64         clockFrequency;
+    UInt64          startTime;
+    AudioStreamBasicDescription deviceFormat;
+    AudioStreamBasicDescription streamFormat;
+    QtMultimediaInternal::QAudioOutputBuffer*   audioBuffer;
+    QAtomicInt      audioThreadState;
+    QWaitCondition  threadFinished;
+    QMutex          mutex;
+    QTimer*         intervalTimer;
+
+    QAudio::Error    errorCode;
+    QAudio::State    stateCode;
+
+    QAudioOutputPrivate(const QByteArray& device, const QAudioFormat& format);
+    ~QAudioOutputPrivate();
+
+    bool open();
+    void close();
+
+    QAudioFormat format() const;
+
+    QIODevice* start(QIODevice* device);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+
+    int bytesFree() const;
+    int periodSize() const;
+
+    void setBufferSize(int value);
+    int bufferSize() const;
+
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+    void audioThreadStart();
+    void audioThreadStop();
+    void audioThreadDrain();
+
+    void audioDeviceStop();
+    void audioDeviceIdle();
+    void audioDeviceError();
+
+    void startTimers();
+    void stopTimers();
+
+private slots:
+    void deviceStopped();
+    void inputReady();
+
+private:
+    enum { Running, Draining, Stopped };
+
+    static OSStatus renderCallback(void* inRefCon,
+                                    AudioUnitRenderActionFlags* ioActionFlags,
+                                    const AudioTimeStamp* inTimeStamp,
+                                    UInt32 inBusNumber,
+                                    UInt32 inNumberFrames,
+                                    AudioBufferList* ioData);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_symbian_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_symbian_p.cpp
new file mode 100644
index 0000000..3f8e933
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_symbian_p.cpp
@@ -0,0 +1,697 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudiooutput_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+const int UnderflowTimerInterval = 50; // ms
+
+
+//-----------------------------------------------------------------------------
+// Private class
+//-----------------------------------------------------------------------------
+
+SymbianAudioOutputPrivate::SymbianAudioOutputPrivate(
+                               QAudioOutputPrivate *audioDevice)
+    :   m_audioDevice(audioDevice)
+{
+
+}
+
+SymbianAudioOutputPrivate::~SymbianAudioOutputPrivate()
+{
+
+}
+
+qint64 SymbianAudioOutputPrivate::readData(char *data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+    return 0;
+}
+
+qint64 SymbianAudioOutputPrivate::writeData(const char *data, qint64 len)
+{
+    qint64 totalWritten = 0;
+
+    if (m_audioDevice->state() == QAudio::ActiveState ||
+        m_audioDevice->state() == QAudio::IdleState) {
+
+        while (totalWritten < len) {
+            const qint64 written = m_audioDevice->pushData(data + totalWritten,
+                                                           len - totalWritten);
+            if (written > 0)
+                totalWritten += written;
+            else
+                break;
+        }
+    }
+
+    return totalWritten;
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device,
+                                       const QAudioFormat &format)
+    :   m_device(device)
+    ,   m_format(format)
+    ,   m_clientBufferSize(SymbianAudio::DefaultBufferSize)
+    ,   m_notifyInterval(SymbianAudio::DefaultNotifyInterval)
+    ,   m_notifyTimer(new QTimer(this))
+    ,   m_error(QAudio::NoError)
+    ,   m_internalState(SymbianAudio::ClosedState)
+    ,   m_externalState(QAudio::StoppedState)
+    ,   m_pullMode(false)
+    ,   m_source(0)
+    ,   m_devSoundBuffer(0)
+    ,   m_devSoundBufferSize(0)
+    ,   m_bytesWritten(0)
+    ,   m_pushDataReady(false)
+    ,   m_bytesPadding(0)
+    ,   m_underflow(false)
+    ,   m_lastBuffer(false)
+    ,   m_underflowTimer(new QTimer(this))
+    ,   m_samplesPlayed(0)
+    ,   m_totalSamplesPlayed(0)
+{
+    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
+
+    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
+                                          m_nativeFormat);
+
+    m_underflowTimer->setInterval(UnderflowTimerInterval);
+    connect(m_underflowTimer.data(), SIGNAL(timeout()), this,
+            SLOT(underflowTimerExpired()));
+}
+
+QAudioOutputPrivate::~QAudioOutputPrivate()
+{
+    close();
+}
+
+QIODevice* QAudioOutputPrivate::start(QIODevice *device)
+{
+    stop();
+
+    // We have to set these before the call to open() because of the
+    // logic in initializingState()
+    if (device) {
+        m_pullMode = true;
+        m_source = device;
+    }
+
+    open();
+
+    if (SymbianAudio::ClosedState != m_internalState) {
+        if (device) {
+            connect(m_source, SIGNAL(readyRead()), this, SLOT(dataReady()));
+        } else {
+            m_source = new SymbianAudioOutputPrivate(this);
+            m_source->open(QIODevice::WriteOnly | QIODevice::Unbuffered);
+        }
+
+        m_elapsed.restart();
+    }
+
+    return m_source;
+}
+
+void QAudioOutputPrivate::stop()
+{
+    close();
+}
+
+void QAudioOutputPrivate::reset()
+{
+    m_totalSamplesPlayed += getSamplesPlayed();
+    m_devSound->Stop();
+    m_bytesPadding = 0;
+    startPlayback();
+}
+
+void QAudioOutputPrivate::suspend()
+{
+    if (SymbianAudio::ActiveState == m_internalState
+        || SymbianAudio::IdleState == m_internalState) {
+        m_notifyTimer->stop();
+        m_underflowTimer->stop();
+
+        const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
+                                          m_format, m_bytesWritten);
+
+        const qint64 samplesPlayed = getSamplesPlayed();
+
+        m_bytesWritten = 0;
+
+        // CMMFDevSound::Pause() is not guaranteed to work correctly in all
+        // implementations, for play-mode DevSound sessions.  We therefore
+        // have to implement suspend() by calling CMMFDevSound::Stop().
+        // Because this causes buffered data to be dropped, we replace the
+        // lost data with silence following a call to resume(), in order to
+        // ensure that processedUSecs() returns the correct value.
+        m_devSound->Stop();
+        m_totalSamplesPlayed += samplesPlayed;
+
+        // Calculate the amount of data dropped
+        const qint64 paddingSamples = samplesWritten - samplesPlayed;
+        m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format,
+                                                             paddingSamples);
+
+        setState(SymbianAudio::SuspendedState);
+    }
+}
+
+void QAudioOutputPrivate::resume()
+{
+    if (SymbianAudio::SuspendedState == m_internalState)
+        startPlayback();
+}
+
+int QAudioOutputPrivate::bytesFree() const
+{
+    int result = 0;
+    if (m_devSoundBuffer) {
+        const TDes8 &outputBuffer = m_devSoundBuffer->Data();
+        result = outputBuffer.MaxLength() - outputBuffer.Length();
+    }
+    return result;
+}
+
+int QAudioOutputPrivate::periodSize() const
+{
+    return bufferSize();
+}
+
+void QAudioOutputPrivate::setBufferSize(int value)
+{
+    // Note that DevSound does not allow its client to specify the buffer size.
+    // This functionality is available via custom interfaces, but since these
+    // cannot be guaranteed to work across all DevSound implementations, we
+    // do not use them here.
+    // In order to comply with the expected bevahiour of QAudioOutput, we store
+    // the value and return it from bufferSize(), but the underlying DevSound
+    // buffer size remains unchanged.
+    if (value > 0)
+        m_clientBufferSize = value;
+}
+
+int QAudioOutputPrivate::bufferSize() const
+{
+    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
+}
+
+void QAudioOutputPrivate::setNotifyInterval(int ms)
+{
+    if (ms > 0) {
+        const int oldNotifyInterval = m_notifyInterval;
+        m_notifyInterval = ms;
+        if (m_notifyTimer->isActive() && ms != oldNotifyInterval)
+            m_notifyTimer->start(m_notifyInterval);
+    }
+}
+
+int QAudioOutputPrivate::notifyInterval() const
+{
+    return m_notifyInterval;
+}
+
+qint64 QAudioOutputPrivate::processedUSecs() const
+{
+    int samplesPlayed = 0;
+    if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
+        samplesPlayed = getSamplesPlayed();
+
+    // Protect against division by zero
+    Q_ASSERT_X(m_format.frequency() > 0, Q_FUNC_INFO, "Invalid frequency");
+
+    const qint64 result = qint64(1000000) *
+                          (samplesPlayed + m_totalSamplesPlayed)
+                        / m_format.frequency();
+
+    return result;
+}
+
+qint64 QAudioOutputPrivate::elapsedUSecs() const
+{
+    const qint64 result = (QAudio::StoppedState == state()) ?
+                              0 : m_elapsed.elapsed() * 1000;
+    return result;
+}
+
+QAudio::Error QAudioOutputPrivate::error() const
+{
+    return m_error;
+}
+
+QAudio::State QAudioOutputPrivate::state() const
+{
+    return m_externalState;
+}
+
+QAudioFormat QAudioOutputPrivate::format() const
+{
+    return m_format;
+}
+
+//-----------------------------------------------------------------------------
+// MDevSoundObserver implementation
+//-----------------------------------------------------------------------------
+
+void QAudioOutputPrivate::InitializeComplete(TInt aError)
+{
+    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
+        Q_FUNC_INFO, "Invalid state");
+
+    if (KErrNone == aError)
+        startPlayback();
+}
+
+void QAudioOutputPrivate::ToneFinished(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound's tone playback functions, so should
+    // never receive this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioOutputPrivate::BufferToBeFilled(CMMFBuffer *aBuffer)
+{
+    // Following receipt of this callback, DevSound should not provide another
+    // buffer until we have returned the current one.
+    Q_ASSERT_X(!m_devSoundBuffer, Q_FUNC_INFO, "Buffer already held");
+
+    // Will be returned to DevSound by bufferFilled().
+    m_devSoundBuffer = static_cast<CMMFDataBuffer*>(aBuffer);
+
+    if (!m_devSoundBufferSize)
+        m_devSoundBufferSize = m_devSoundBuffer->Data().MaxLength();
+
+    writePaddingData();
+
+    if (m_pullMode && isDataReady() && !m_bytesPadding)
+        pullData();
+}
+
+void QAudioOutputPrivate::PlayError(TInt aError)
+{
+    switch (aError) {
+    case KErrUnderflow:
+        m_underflow = true;
+        if (m_pullMode && !m_lastBuffer)
+            setError(QAudio::UnderrunError);
+        else
+            setState(SymbianAudio::IdleState);
+        break;
+    default:
+        setError(QAudio::IOError);
+        break;
+    }
+}
+
+void QAudioOutputPrivate::BufferToBeEmptied(CMMFBuffer *aBuffer)
+{
+    Q_UNUSED(aBuffer)
+    // This class doesn't use DevSound in record mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioOutputPrivate::RecordError(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound in record mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioOutputPrivate::ConvertError(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound's format conversion functions, so
+    // should never receive this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioOutputPrivate::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
+{
+    Q_UNUSED(aMessageType)
+    Q_UNUSED(aMsg)
+    // Ignore this callback.
+}
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void QAudioOutputPrivate::dataReady()
+{
+    // Client-provided QIODevice has data ready to read.
+
+    Q_ASSERT_X(m_source->bytesAvailable(), Q_FUNC_INFO,
+        "readyRead signal received, but no data available");
+
+    if (!m_bytesPadding)
+        pullData();
+}
+
+void QAudioOutputPrivate::underflowTimerExpired()
+{
+    const TInt samplesPlayed = getSamplesPlayed();
+    if (m_samplesPlayed && (samplesPlayed == m_samplesPlayed)) {
+        setError(QAudio::UnderrunError);
+    } else {
+        m_samplesPlayed = samplesPlayed;
+        m_underflowTimer->start();
+    }
+}
+
+void QAudioOutputPrivate::open()
+{
+    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
+        Q_FUNC_INFO, "DevSound already opened");
+
+    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
+
+    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
+        new SymbianAudio::DevSoundCapabilities(*m_devSound,
+                                               QAudio::AudioOutput));
+
+    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
+                  KErrNone : KErrNotSupported;
+
+    if (KErrNone == err) {
+        setState(SymbianAudio::InitializingState);
+        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
+                                          EMMFStatePlaying));
+    }
+
+    if (KErrNone != err) {
+        setError(QAudio::OpenError);
+        m_devSound.reset();
+    }
+}
+
+void QAudioOutputPrivate::startPlayback()
+{
+    TRAPD(err, startDevSoundL());
+    if (KErrNone == err) {
+        if (isDataReady())
+            setState(SymbianAudio::ActiveState);
+        else
+            setState(SymbianAudio::IdleState);
+
+        m_notifyTimer->start(m_notifyInterval);
+        m_underflow = false;
+
+        Q_ASSERT(m_devSound->SamplesPlayed() == 0);
+
+        writePaddingData();
+
+        if (m_pullMode && m_source->bytesAvailable() && !m_bytesPadding)
+            dataReady();
+    } else {
+        setError(QAudio::OpenError);
+        close();
+    }
+}
+
+void QAudioOutputPrivate::startDevSoundL()
+{
+    TMMFCapabilities nativeFormat = m_devSound->Config();
+    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
+    m_devSound->SetConfigL(m_nativeFormat);
+    m_devSound->PlayInitL();
+}
+
+void QAudioOutputPrivate::writePaddingData()
+{
+    // See comments in suspend()
+
+    while (m_devSoundBuffer && m_bytesPadding) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDes8 &outputBuffer = m_devSoundBuffer->Data();
+        const qint64 outputBytes = bytesFree();
+        const qint64 paddingBytes = outputBytes < m_bytesPadding ?
+                                        outputBytes : m_bytesPadding;
+        unsigned char *ptr = const_cast<unsigned char*>(outputBuffer.Ptr());
+        Mem::FillZ(ptr, paddingBytes);
+        outputBuffer.SetLength(outputBuffer.Length() + paddingBytes);
+        m_bytesPadding -= paddingBytes;
+
+        if (m_pullMode && m_source->atEnd())
+            lastBufferFilled();
+        if (paddingBytes == outputBytes)
+            bufferFilled();
+    }
+}
+
+qint64 QAudioOutputPrivate::pushData(const char *data, qint64 len)
+{
+    // Data has been written to SymbianAudioOutputPrivate
+
+    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO,
+        "pushData called when in pull mode");
+
+    const unsigned char *const inputPtr =
+        reinterpret_cast<const unsigned char*>(data);
+    qint64 bytesWritten = 0;
+
+    if (SymbianAudio::IdleState == m_internalState)
+        setState(SymbianAudio::ActiveState);
+
+    while (m_devSoundBuffer && (bytesWritten < len)) {
+        // writePaddingData() is called from BufferToBeFilled(), so we should
+        // never have any padding data left at this point.
+        Q_ASSERT_X(0 == m_bytesPadding, Q_FUNC_INFO,
+            "Padding bytes remaining in pushData");
+
+        TDes8 &outputBuffer = m_devSoundBuffer->Data();
+
+        const qint64 outputBytes = bytesFree();
+        const qint64 inputBytes = len - bytesWritten;
+        const qint64 copyBytes = outputBytes < inputBytes ?
+                                     outputBytes : inputBytes;
+
+        outputBuffer.Append(inputPtr + bytesWritten, copyBytes);
+        bytesWritten += copyBytes;
+
+        bufferFilled();
+    }
+
+    m_pushDataReady = (bytesWritten < len);
+
+    // If DevSound is still initializing (m_internalState == InitializingState),
+    // we cannot transition m_internalState to ActiveState, but we must emit
+    // an (external) state change from IdleState to ActiveState.  The following
+    // call triggers this signal.
+    setState(m_internalState);
+
+    return bytesWritten;
+}
+
+void QAudioOutputPrivate::pullData()
+{
+    Q_ASSERT_X(m_pullMode, Q_FUNC_INFO,
+        "pullData called when in push mode");
+
+    if (m_bytesPadding)
+        m_bytesPadding = 1;
+
+    // writePaddingData() is called by BufferToBeFilled() before pullData(),
+    // so we should never have any padding data left at this point.
+    Q_ASSERT_X(0 == m_bytesPadding, Q_FUNC_INFO,
+        "Padding bytes remaining in pullData");
+
+    qint64 inputBytes = m_source->bytesAvailable();
+    while (m_devSoundBuffer && inputBytes) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDes8 &outputBuffer = m_devSoundBuffer->Data();
+
+        const qint64 outputBytes = bytesFree();
+        const qint64 copyBytes = outputBytes < inputBytes ?
+                                     outputBytes : inputBytes;
+
+        char *outputPtr = (char*)(outputBuffer.Ptr() + outputBuffer.Length());
+        const qint64 bytesCopied = m_source->read(outputPtr, copyBytes);
+        Q_ASSERT(bytesCopied == copyBytes);
+        outputBuffer.SetLength(outputBuffer.Length() + bytesCopied);
+        inputBytes -= bytesCopied;
+
+        if (m_source->atEnd())
+            lastBufferFilled();
+        else if (copyBytes == outputBytes)
+            bufferFilled();
+    }
+}
+
+void QAudioOutputPrivate::bufferFilled()
+{
+    Q_ASSERT_X(m_devSoundBuffer, Q_FUNC_INFO, "No buffer to return");
+
+    const TDes8 &outputBuffer = m_devSoundBuffer->Data();
+    m_bytesWritten += outputBuffer.Length();
+
+    m_devSoundBuffer = 0;
+
+    m_samplesPlayed = getSamplesPlayed();
+    m_underflowTimer->start();
+
+    if (QAudio::UnderrunError == m_error)
+        m_error = QAudio::NoError;
+
+    m_devSound->PlayData();
+}
+
+void QAudioOutputPrivate::lastBufferFilled()
+{
+    Q_ASSERT_X(m_devSoundBuffer, Q_FUNC_INFO, "No buffer to fill");
+    Q_ASSERT_X(!m_lastBuffer, Q_FUNC_INFO, "Last buffer already sent");
+    m_lastBuffer = true;
+    m_devSoundBuffer->SetLastBuffer(ETrue);
+    bufferFilled();
+}
+
+void QAudioOutputPrivate::close()
+{
+    m_notifyTimer->stop();
+    m_underflowTimer->stop();
+
+    m_error = QAudio::NoError;
+
+    if (m_devSound)
+        m_devSound->Stop();
+    m_devSound.reset();
+    m_devSoundBuffer = 0;
+    m_devSoundBufferSize = 0;
+
+    if (!m_pullMode) // m_source is owned
+        delete m_source;
+    m_pullMode = false;
+    m_source = 0;
+
+    m_bytesWritten = 0;
+    m_pushDataReady = false;
+    m_bytesPadding = 0;
+    m_underflow = false;
+    m_lastBuffer = false;
+    m_samplesPlayed = 0;
+    m_totalSamplesPlayed = 0;
+
+    setState(SymbianAudio::ClosedState);
+}
+
+qint64 QAudioOutputPrivate::getSamplesPlayed() const
+{
+    qint64 result = 0;
+    if (m_devSound) {
+        const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
+                                          m_format, m_bytesWritten);
+
+        if (m_underflow) {
+            result = samplesWritten;
+        } else {
+            // This is necessary because some DevSound implementations report
+            // that they have played more data than has actually been provided to them
+            // by the client.
+            const qint64 devSoundSamplesPlayed(m_devSound->SamplesPlayed());
+            result = qMin(devSoundSamplesPlayed, samplesWritten);
+        }
+    }
+    return result;
+}
+
+void QAudioOutputPrivate::setError(QAudio::Error error)
+{
+    m_error = error;
+
+    // Although no state transition actually occurs here, a stateChanged event
+    // must be emitted to inform the client that the call to start() was
+    // unsuccessful.
+    if (QAudio::OpenError == error)
+        emit stateChanged(QAudio::StoppedState);
+
+    if (QAudio::UnderrunError == error)
+        setState(SymbianAudio::IdleState);
+    else
+        // Close the DevSound instance.  This causes a transition to
+        // StoppedState.  This must be done asynchronously in case the
+        // current function was called from a DevSound event handler, in which
+        // case deleting the DevSound instance may cause an exception.
+        QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection);
+}
+
+void QAudioOutputPrivate::setState(SymbianAudio::State newInternalState)
+{
+    const QAudio::State oldExternalState = m_externalState;
+    m_internalState = newInternalState;
+    m_externalState = SymbianAudio::Utils::stateNativeToQt(
+                            m_internalState, initializingState());
+
+    if (m_externalState != oldExternalState)
+        emit stateChanged(m_externalState);
+}
+
+bool QAudioOutputPrivate::isDataReady() const
+{
+    return (m_source && m_source->bytesAvailable())
+        ||  m_bytesPadding
+        ||  m_pushDataReady;
+}
+
+QAudio::State QAudioOutputPrivate::initializingState() const
+{
+    return isDataReady() ? QAudio::ActiveState : QAudio::IdleState;
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_symbian_p.h b/src/multimedia/multimedia/audio/qaudiooutput_symbian_p.h
new file mode 100644
index 0000000..00ccb24
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_symbian_p.h
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOOUTPUT_SYMBIAN_P_H
+#define QAUDIOOUTPUT_SYMBIAN_P_H
+
+#include <QtMultimedia/qaudioengine.h>
+#include <QTime>
+#include <QTimer>
+#include <sounddevice.h>
+#include "qaudio_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QAudioOutputPrivate;
+
+class SymbianAudioOutputPrivate : public QIODevice
+{
+    friend class QAudioOutputPrivate;
+    Q_OBJECT
+public:
+    SymbianAudioOutputPrivate(QAudioOutputPrivate *audio);
+    ~SymbianAudioOutputPrivate();
+
+    qint64 readData(char *data, qint64 len);
+    qint64 writeData(const char *data, qint64 len);
+
+private:
+    QAudioOutputPrivate *const m_audioDevice;
+};
+
+class QAudioOutputPrivate
+    :   public QAbstractAudioOutput
+    ,   public MDevSoundObserver
+{
+    friend class SymbianAudioOutputPrivate;
+    Q_OBJECT
+public:
+    QAudioOutputPrivate(const QByteArray &device,
+                       const QAudioFormat &audioFormat);
+    ~QAudioOutputPrivate();
+
+    // QAbstractAudioOutput
+    QIODevice* start(QIODevice *device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesFree() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+    QAudioFormat format() const;
+
+    // MDevSoundObserver
+    void InitializeComplete(TInt aError);
+    void ToneFinished(TInt aError);
+    void BufferToBeFilled(CMMFBuffer *aBuffer);
+    void PlayError(TInt aError);
+    void BufferToBeEmptied(CMMFBuffer *aBuffer);
+    void RecordError(TInt aError);
+    void ConvertError(TInt aError);
+    void DeviceMessage(TUid aMessageType, const TDesC8 &aMsg);
+
+private slots:
+    void dataReady();
+    void underflowTimerExpired();
+
+private:
+   void open();
+   void startPlayback();
+   void startDevSoundL();
+   void writePaddingData();
+   qint64 pushData(const char *data, qint64 len);
+   void pullData();
+   void bufferFilled();
+   void lastBufferFilled();
+   Q_INVOKABLE void close();
+
+   qint64 getSamplesPlayed() const;
+
+   void setError(QAudio::Error error);
+   void setState(SymbianAudio::State state);
+
+   bool isDataReady() const;
+   QAudio::State initializingState() const;
+
+private:
+    const QByteArray m_device;
+    const QAudioFormat m_format;
+
+    int m_clientBufferSize;
+    int m_notifyInterval;
+    QScopedPointer<QTimer> m_notifyTimer;
+    QTime m_elapsed;
+    QAudio::Error m_error;
+
+    SymbianAudio::State m_internalState;
+    QAudio::State m_externalState;
+
+    bool m_pullMode;
+    QIODevice *m_source;
+
+    QScopedPointer<CMMFDevSound> m_devSound;
+    TUint32 m_nativeFourCC;
+    TMMFCapabilities m_nativeFormat;
+
+    // Buffer provided by DevSound, to be filled with data.
+    CMMFDataBuffer *m_devSoundBuffer;
+
+    int m_devSoundBufferSize;
+
+    // Number of bytes transferred from QIODevice to QAudioOutput.  It is
+    // necessary to count this because data is dropped when suspend() is
+    // called.  The difference between the position reported by DevSound and
+    // this value allows us to calculate m_bytesPadding;
+    quint32 m_bytesWritten;
+
+    // True if client has provided data while the audio subsystem was not
+    // ready to consume it.
+    bool m_pushDataReady;
+
+    // Number of zero bytes which will be written when client calls resume().
+    quint32 m_bytesPadding;
+
+    // True if PlayError(KErrUnderflow) has been called.
+    bool m_underflow;
+
+    // True if a buffer marked with the "last buffer" flag has been provided
+    // to DevSound.
+    bool m_lastBuffer;
+
+    // Some DevSound implementations ignore all underflow errors raised by the
+    // audio driver, unless the last buffer flag has been set by the client.
+    // In push-mode playback, this flag will never be set, so the underflow
+    // error will never be reported.  In order to work around this, a timer
+    // is used, which gets reset every time the client provides more data.  If
+    // the timer expires, an underflow error is raised by this object.
+    QScopedPointer<QTimer> m_underflowTimer;
+
+    // Result of previous call to CMMFDevSound::SamplesPlayed().  This value is
+    // used to determine whether, when m_underflowTimer expires, an
+    // underflow error has actually occurred.
+    quint32 m_samplesPlayed;
+
+    // Samples played up to the last call to suspend().  It is necessary
+    // to cache this because suspend() is implemented using
+    // CMMFDevSound::Stop(), which resets DevSound's SamplesPlayed() counter.
+    quint32 m_totalSamplesPlayed;
+
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp
new file mode 100644
index 0000000..13bce58
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp
@@ -0,0 +1,606 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qaudiooutput_win32_p.h"
+
+//#define DEBUG_AUDIO 1
+
+QT_BEGIN_NAMESPACE
+
+static const int minimumIntervalTime = 50;
+
+QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
+    settings(audioFormat)
+{
+    bytesAvailable = 0;
+    buffer_size = 0;
+    period_size = 0;
+    m_device = device;
+    totalTimeValue = 0;
+    intervalTime = 1000;
+    audioBuffer = 0;
+    errorState = QAudio::NoError;
+    deviceState = QAudio::StoppedState;
+    audioSource = 0;
+    pullMode = true;
+    finished = false;
+    InitializeCriticalSection(&waveOutCriticalSection);
+}
+
+QAudioOutputPrivate::~QAudioOutputPrivate()
+{
+    EnterCriticalSection(&waveOutCriticalSection);
+    finished = true;
+    LeaveCriticalSection(&waveOutCriticalSection);
+
+    close();
+    DeleteCriticalSection(&waveOutCriticalSection);
+}
+
+void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
+        DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 )
+{
+    Q_UNUSED(dwParam1)
+    Q_UNUSED(dwParam2)
+    Q_UNUSED(hWaveOut)
+
+    QAudioOutputPrivate* qAudio;
+    qAudio = (QAudioOutputPrivate*)(dwInstance);
+    if(!qAudio)
+        return;
+
+    switch(uMsg) {
+        case WOM_OPEN:
+            qAudio->feedback();
+            break;
+        case WOM_CLOSE:
+            return;
+        case WOM_DONE:
+            EnterCriticalSection(&qAudio->waveOutCriticalSection);
+            if(qAudio->finished || qAudio->buffer_size == 0 || qAudio->period_size == 0) {
+                LeaveCriticalSection(&qAudio->waveOutCriticalSection);
+                return;
+	    }
+            qAudio->waveFreeBlockCount++;
+            if(qAudio->waveFreeBlockCount >= qAudio->buffer_size/qAudio->period_size)
+                qAudio->waveFreeBlockCount = qAudio->buffer_size/qAudio->period_size;
+            qAudio->feedback();
+            LeaveCriticalSection(&qAudio->waveOutCriticalSection);
+            break;
+        default:
+            return;
+    }
+}
+
+WAVEHDR* QAudioOutputPrivate::allocateBlocks(int size, int count)
+{
+    int i;
+    unsigned char* buffer;
+    WAVEHDR* blocks;
+    DWORD totalBufferSize = (size + sizeof(WAVEHDR))*count;
+
+    if((buffer=(unsigned char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
+                    totalBufferSize)) == 0) {
+        qWarning("QAudioOutput: Memory allocation error");
+        return 0;
+    }
+    blocks = (WAVEHDR*)buffer;
+    buffer += sizeof(WAVEHDR)*count;
+    for(i = 0; i < count; i++) {
+        blocks[i].dwBufferLength = size;
+        blocks[i].lpData = (LPSTR)buffer;
+        buffer += size;
+    }
+    return blocks;
+}
+
+void QAudioOutputPrivate::freeBlocks(WAVEHDR* blockArray)
+{
+    WAVEHDR* blocks = blockArray;
+
+    int count = buffer_size/period_size;
+
+    for(int i = 0; i < count; i++) {
+        waveOutUnprepareHeader(hWaveOut,&blocks[i], sizeof(WAVEHDR));
+        blocks+=sizeof(WAVEHDR);
+    }
+    HeapFree(GetProcessHeap(), 0, blockArray);
+}
+
+QAudioFormat QAudioOutputPrivate::format() const
+{
+    return settings;
+}
+
+QIODevice* QAudioOutputPrivate::start(QIODevice* device)
+{
+    if(deviceState != QAudio::StoppedState)
+        close();
+
+    if(!pullMode && audioSource) {
+        delete audioSource;
+    }
+
+    if(device) {
+        //set to pull mode
+        pullMode = true;
+        audioSource = device;
+        deviceState = QAudio::ActiveState;
+    } else {
+        //set to push mode
+        pullMode = false;
+        audioSource = new OutputPrivate(this);
+        audioSource->open(QIODevice::WriteOnly|QIODevice::Unbuffered);
+        deviceState = QAudio::IdleState;
+    }
+
+    if( !open() )
+        return 0;
+
+    emit stateChanged(deviceState);
+
+    return audioSource;
+}
+
+void QAudioOutputPrivate::stop()
+{
+    if(deviceState == QAudio::StoppedState)
+        return;
+    close();
+    if(!pullMode && audioSource) {
+        delete audioSource;
+        audioSource = 0;
+    }
+    emit stateChanged(deviceState);
+}
+
+bool QAudioOutputPrivate::open()
+{
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
+#endif
+    if (!(settings.frequency() >= 8000 && settings.frequency() <= 48000)) {
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        qWarning("QAudioOutput: open error, frequency out of range.");
+        return false;
+    }
+    if(buffer_size == 0) {
+        // Default buffer size, 200ms, default period size is 40ms
+        buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2;
+	period_size = buffer_size/5;
+    } else {
+        period_size = buffer_size/5;
+    }
+    waveBlocks = allocateBlocks(period_size, buffer_size/period_size);
+
+    EnterCriticalSection(&waveOutCriticalSection);
+    waveFreeBlockCount = buffer_size/period_size;
+    LeaveCriticalSection(&waveOutCriticalSection);
+
+    waveCurrentBlock = 0;
+
+    if(audioBuffer == 0)
+        audioBuffer = new char[buffer_size];
+
+    timeStamp.restart();
+    elapsedTimeOffset = 0;
+
+    wfx.nSamplesPerSec = settings.frequency();
+    wfx.wBitsPerSample = settings.sampleSize();
+    wfx.nChannels = settings.channels();
+    wfx.cbSize = 0;
+
+    wfx.wFormatTag = WAVE_FORMAT_PCM;
+    wfx.nBlockAlign = (wfx.wBitsPerSample >> 3) * wfx.nChannels;
+    wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
+
+    UINT_PTR devId = WAVE_MAPPER;
+
+    WAVEOUTCAPS woc;
+    unsigned long iNumDevs,ii;
+    iNumDevs = waveOutGetNumDevs();
+    for(ii=0;ii<iNumDevs;ii++) {
+        if(waveOutGetDevCaps(ii, &woc, sizeof(WAVEOUTCAPS))
+	    == MMSYSERR_NOERROR) {
+	    QString tmp;
+	    tmp = QString((const QChar *)woc.szPname);
+            if(tmp.compare(QLatin1String(m_device)) == 0) {
+	        devId = ii;
+		break;
+	    }
+	}
+    }
+
+    if(waveOutOpen(&hWaveOut, devId, &wfx,
+                (DWORD_PTR)&waveOutProc,
+                (DWORD_PTR) this,
+                CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        qWarning("QAudioOutput: open error");
+        return false;
+    }
+
+    totalTimeValue = 0;
+    timeStampOpened.restart();
+    elapsedTimeOffset = 0;
+
+    errorState = QAudio::NoError;
+    if(pullMode) {
+        deviceState = QAudio::ActiveState;
+        QTimer::singleShot(10, this, SLOT(feedback()));
+    } else
+        deviceState = QAudio::IdleState;
+
+    return true;
+}
+
+void QAudioOutputPrivate::close()
+{
+    if(deviceState == QAudio::StoppedState)
+        return;
+
+    deviceState = QAudio::StoppedState;
+    errorState = QAudio::NoError;
+    int delay = (buffer_size-bytesFree())*1000/(settings.frequency()
+                  *settings.channels()*(settings.sampleSize()/8));
+    waveOutReset(hWaveOut);
+    Sleep(delay+10);
+
+    freeBlocks(waveBlocks);
+    waveOutClose(hWaveOut);
+    delete [] audioBuffer;
+    audioBuffer = 0;
+    buffer_size = 0;
+}
+
+int QAudioOutputPrivate::bytesFree() const
+{
+    int buf;
+    buf = waveFreeBlockCount*period_size;
+
+    return buf;
+}
+
+int QAudioOutputPrivate::periodSize() const
+{
+    return period_size;
+}
+
+void QAudioOutputPrivate::setBufferSize(int value)
+{
+    if(deviceState == QAudio::StoppedState)
+        buffer_size = value;
+}
+
+int QAudioOutputPrivate::bufferSize() const
+{
+    return buffer_size;
+}
+
+void QAudioOutputPrivate::setNotifyInterval(int ms)
+{
+    if(ms >= minimumIntervalTime)
+        intervalTime = ms;
+    else
+        intervalTime = minimumIntervalTime;
+}
+
+int QAudioOutputPrivate::notifyInterval() const
+{
+    return intervalTime;
+}
+
+qint64 QAudioOutputPrivate::processedUSecs() const
+{
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+    qint64 result = qint64(1000000) * totalTimeValue /
+        (settings.channels()*(settings.sampleSize()/8)) /
+        settings.frequency();
+
+    return result;
+}
+
+qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
+{
+    // Write out some audio data
+    if (deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+        return 0;
+
+    char* p = (char*)data;
+    int l = (int)len;
+
+    WAVEHDR* current;
+    int remain;
+    current = &waveBlocks[waveCurrentBlock];
+    while(l > 0) {
+        EnterCriticalSection(&waveOutCriticalSection);
+        if(waveFreeBlockCount==0) {
+            LeaveCriticalSection(&waveOutCriticalSection);
+            break;
+        }
+        LeaveCriticalSection(&waveOutCriticalSection);
+
+        if(current->dwFlags & WHDR_PREPARED)
+            waveOutUnprepareHeader(hWaveOut, current, sizeof(WAVEHDR));
+
+        if(l < period_size)
+            remain = l;
+        else
+            remain = period_size;
+        memcpy(current->lpData, p, remain);
+
+        l -= remain;
+        p += remain;
+        current->dwBufferLength = remain;
+        waveOutPrepareHeader(hWaveOut, current, sizeof(WAVEHDR));
+        waveOutWrite(hWaveOut, current, sizeof(WAVEHDR));
+
+        EnterCriticalSection(&waveOutCriticalSection);
+        waveFreeBlockCount--;
+        LeaveCriticalSection(&waveOutCriticalSection);
+#ifdef DEBUG_AUDIO
+        EnterCriticalSection(&waveOutCriticalSection);
+        qDebug("write out l=%d, waveFreeBlockCount=%d",
+                current->dwBufferLength,waveFreeBlockCount);
+        LeaveCriticalSection(&waveOutCriticalSection);
+#endif
+        totalTimeValue += current->dwBufferLength;
+        waveCurrentBlock++;
+        waveCurrentBlock %= buffer_size/period_size;
+        current = &waveBlocks[waveCurrentBlock];
+        current->dwUser = 0;
+        errorState = QAudio::NoError;
+        if (deviceState != QAudio::ActiveState) {
+            deviceState = QAudio::ActiveState;
+            emit stateChanged(deviceState);
+        }
+    }
+    return (len-l);
+}
+
+void QAudioOutputPrivate::resume()
+{
+    if(deviceState == QAudio::SuspendedState) {
+        deviceState = QAudio::ActiveState;
+        errorState = QAudio::NoError;
+        waveOutRestart(hWaveOut);
+        QTimer::singleShot(10, this, SLOT(feedback()));
+        emit stateChanged(deviceState);
+    }
+}
+
+void QAudioOutputPrivate::suspend()
+{
+    if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState) {
+        int delay = (buffer_size-bytesFree())*1000/(settings.frequency()
+                *settings.channels()*(settings.sampleSize()/8));
+        waveOutPause(hWaveOut);
+        Sleep(delay+10);
+        deviceState = QAudio::SuspendedState;
+        errorState = QAudio::NoError;
+        emit stateChanged(deviceState);
+    }
+}
+
+void QAudioOutputPrivate::feedback()
+{
+#ifdef DEBUG_AUDIO
+    QTime now(QTime::currentTime());
+    qDebug()<<now.second()<<"s "<<now.msec()<<"ms :feedback()";
+#endif
+    bytesAvailable = bytesFree();
+
+    if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState)) {
+        if(bytesAvailable >= period_size)
+            QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection);
+    }
+}
+
+bool QAudioOutputPrivate::deviceReady()
+{
+    if(deviceState == QAudio::StoppedState)
+        return false;
+
+    if(pullMode) {
+        int chunks = bytesAvailable/period_size;
+#ifdef DEBUG_AUDIO
+        qDebug()<<"deviceReady() avail="<<bytesAvailable<<" bytes, period size="<<period_size<<" bytes";
+        qDebug()<<"deviceReady() no. of chunks that can fit ="<<chunks<<", chunks in bytes ="<<chunks*period_size;
+#endif
+        bool startup = false;
+        if(totalTimeValue == 0)
+	    startup = true;
+
+	bool full=false;
+	EnterCriticalSection(&waveOutCriticalSection);
+	if(waveFreeBlockCount==0) full = true;
+	LeaveCriticalSection(&waveOutCriticalSection);
+	if (full){
+#ifdef DEBUG_AUDIO
+            qDebug() << "Skipping data as unable to write";
+#endif
+	    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) {
+                emit notify();
+		elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
+		timeStamp.restart();
+	    }
+	    return true;
+	}
+
+        if(startup)
+	    waveOutPause(hWaveOut);
+        int input = period_size*chunks;
+        int l = audioSource->read(audioBuffer,input);
+        if(l > 0) {
+            int out= write(audioBuffer,l);
+            if(out > 0) {
+                if (deviceState != QAudio::ActiveState) {
+                    deviceState = QAudio::ActiveState;
+                    emit stateChanged(deviceState);
+                }
+            }
+            if ( out < l) {
+                // Didnt write all data
+                audioSource->seek(audioSource->pos()-(l-out));
+            }
+	    if(startup)
+	        waveOutRestart(hWaveOut);
+        } else if(l == 0) {
+            bytesAvailable = bytesFree();
+
+            int check = 0;
+            EnterCriticalSection(&waveOutCriticalSection);
+            check = waveFreeBlockCount;
+            LeaveCriticalSection(&waveOutCriticalSection);
+            if(check == buffer_size/period_size) {
+                errorState = QAudio::UnderrunError;
+                if (deviceState != QAudio::IdleState) {
+                    deviceState = QAudio::IdleState;
+                    emit stateChanged(deviceState);
+                }
+            }
+
+        } else if(l < 0) {
+            bytesAvailable = bytesFree();
+            errorState = QAudio::IOError;
+        }
+    } else {
+        int buffered;
+	EnterCriticalSection(&waveOutCriticalSection);
+	buffered = waveFreeBlockCount;
+	LeaveCriticalSection(&waveOutCriticalSection);
+        errorState = QAudio::UnderrunError;
+        if (buffered >= buffer_size/period_size && deviceState == QAudio::ActiveState) {
+            deviceState = QAudio::IdleState;
+            emit stateChanged(deviceState);
+        }
+    }
+    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+        return true;
+
+    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+        emit notify();
+	elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
+        timeStamp.restart();
+    }
+
+    return true;
+}
+
+qint64 QAudioOutputPrivate::elapsedUSecs() const
+{
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+
+    return timeStampOpened.elapsed()*1000;
+}
+
+QAudio::Error QAudioOutputPrivate::error() const
+{
+    return errorState;
+}
+
+QAudio::State QAudioOutputPrivate::state() const
+{
+    return deviceState;
+}
+
+void QAudioOutputPrivate::reset()
+{
+    close();
+}
+
+OutputPrivate::OutputPrivate(QAudioOutputPrivate* audio)
+{
+    audioDevice = qobject_cast<QAudioOutputPrivate*>(audio);
+}
+
+OutputPrivate::~OutputPrivate() {}
+
+qint64 OutputPrivate::readData( char* data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+
+    return 0;
+}
+
+qint64 OutputPrivate::writeData(const char* data, qint64 len)
+{
+    int retry = 0;
+    qint64 written = 0;
+
+    if((audioDevice->deviceState == QAudio::ActiveState)
+            ||(audioDevice->deviceState == QAudio::IdleState)) {
+        qint64 l = len;
+        while(written < l) {
+            int chunk = audioDevice->write(data+written,(l-written));
+            if(chunk <= 0)
+                retry++;
+            else
+                written+=chunk;
+
+            if(retry > 10)
+                return written;
+        }
+        audioDevice->deviceState = QAudio::ActiveState;
+    }
+    return written;
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h
new file mode 100644
index 0000000..68a40f7
--- /dev/null
+++ b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOOUTPUTWIN_H
+#define QAUDIOOUTPUTWIN_H
+
+#include <windows.h>
+#include <mmsystem.h>
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qtimer.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qdatetime.h>
+
+#include <QtMultimedia/qaudio.h>
+#include <QtMultimedia/qaudiodeviceinfo.h>
+#include <QtMultimedia/qaudioengine.h>
+
+
+QT_BEGIN_NAMESPACE
+
+class QAudioOutputPrivate : public QAbstractAudioOutput
+{
+    Q_OBJECT
+public:
+    QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat);
+    ~QAudioOutputPrivate();
+
+    qint64 write( const char *data, qint64 len );
+
+    QAudioFormat format() const;
+    QIODevice* start(QIODevice* device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesFree() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+    QIODevice* audioSource;
+    QAudioFormat settings;
+    QAudio::Error errorState;
+    QAudio::State deviceState;
+
+private slots:
+    void feedback();
+    bool deviceReady();
+
+private:
+    QByteArray m_device;
+    bool resuming;
+    int bytesAvailable;
+    QTime timeStamp;
+    qint64 elapsedTimeOffset;
+    QTime timeStampOpened;
+    qint32 buffer_size;
+    qint32 period_size;
+    qint64 totalTimeValue;
+    bool pullMode;
+    int intervalTime;
+    static void QT_WIN_CALLBACK waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
+            DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
+
+    CRITICAL_SECTION waveOutCriticalSection;
+
+    WAVEHDR* allocateBlocks(int size, int count);
+    void freeBlocks(WAVEHDR* blockArray);
+    bool open();
+    void close();
+
+    WAVEFORMATEX wfx;
+    HWAVEOUT hWaveOut;
+    MMRESULT result;
+    WAVEHDR header;
+    WAVEHDR* waveBlocks;
+    volatile bool finished;
+    volatile int waveFreeBlockCount;
+    int waveCurrentBlock;
+    char* audioBuffer;
+};
+
+class OutputPrivate : public QIODevice
+{
+    Q_OBJECT
+public:
+    OutputPrivate(QAudioOutputPrivate* audio);
+    ~OutputPrivate();
+
+    qint64 readData( char* data, qint64 len);
+    qint64 writeData(const char* data, qint64 len);
+
+private:
+    QAudioOutputPrivate *audioDevice;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/multimedia.pro b/src/multimedia/multimedia/multimedia.pro
new file mode 100644
index 0000000..8d130bd
--- /dev/null
+++ b/src/multimedia/multimedia/multimedia.pro
@@ -0,0 +1,14 @@
+TARGET = QtMultimedia
+QPRO_PWD = $$PWD
+QT = core gui
+
+DEFINES += QT_BUILD_MULTIMEDIA_LIB QT_NO_USING_NAMESPACE
+
+unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui
+
+include(../../qbase.pri)
+
+include(audio/audio.pri)
+include(video/video.pri)
+
+symbian: TARGET.UID3 = 0x2001E627
diff --git a/src/multimedia/multimedia/video/qabstractvideobuffer.cpp b/src/multimedia/multimedia/video/qabstractvideobuffer.cpp
new file mode 100644
index 0000000..e9d30d0
--- /dev/null
+++ b/src/multimedia/multimedia/video/qabstractvideobuffer.cpp
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qabstractvideobuffer_p.h"
+
+#include <qvariant.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QAbstractVideoBuffer
+    \brief The QAbstractVideoBuffer class is an abstraction for video data.
+    \since 4.6
+
+    The QVideoFrame class makes use of a QAbstractVideoBuffer internally to reference a buffer of
+    video data.  Creating a subclass of QAbstractVideoBuffer will allow you to construct video
+    frames from preallocated or static buffers.
+
+    The contents of a buffer can be accessed by mapping the buffer to memory using the map()
+    function which returns a pointer to memory containing the contents of the the video buffer.
+    The memory returned by map() is released by calling the unmap() function.
+
+    The handle() of a buffer may also be used to manipulate it's contents using type specific APIs.
+    The type of a buffer's handle is given by the handleType() function.
+
+    \sa QVideoFrame
+*/
+
+/*!
+    \enum QAbstractVideoBuffer::HandleType
+
+    Identifies the type of a video buffers handle.
+
+    \value NoHandle The buffer has no handle, its data can only be accessed by mapping the buffer.
+    \value GLTextureHandle The handle of the buffer is an OpenGL texture ID.
+    \value XvShmImageHandle The handle contains pointer to shared memory XVideo image.
+    \value CoreImageHandle The handle contains pointer to Mac OS X CIImage.
+    \value UserHandle Start value for user defined handle types.
+
+    \sa handleType()
+*/
+
+/*!
+    \enum QAbstractVideoBuffer::MapMode
+
+    Enumerates how a video buffer's data is mapped to memory.
+
+    \value NotMapped The video buffer has is not mapped to memory.
+    \value ReadOnly The mapped memory is populated with data from the video buffer when mapped, but
+    the content of the mapped memory may be discarded when unmapped.
+    \value WriteOnly The mapped memory in unitialized when mapped, and the content will be used to
+    populate the video buffer when unmapped.
+    \value ReadWrite The mapped memory is populated with data from the video buffer, and the
+    video buffer is repopulated with the content of the mapped memory.
+
+    \sa mapMode(), map()
+*/
+
+/*!
+    Constructs an abstract video buffer of the given \a type.
+*/
+
+QAbstractVideoBuffer::QAbstractVideoBuffer(HandleType type)
+    : d_ptr(new QAbstractVideoBufferPrivate)
+{
+    Q_D(QAbstractVideoBuffer);
+
+    d->handleType = type;
+}
+
+/*!
+    \internal
+*/
+
+QAbstractVideoBuffer::QAbstractVideoBuffer(QAbstractVideoBufferPrivate &dd, HandleType type)
+    : d_ptr(&dd)
+{
+    Q_D(QAbstractVideoBuffer);
+
+    d->handleType = type;
+}
+
+/*!
+    Destroys an abstract video buffer.
+*/
+
+QAbstractVideoBuffer::~QAbstractVideoBuffer()
+{
+    delete d_ptr;
+}
+
+/*!
+    Returns the type of a video buffer's handle.
+
+    \sa handle()
+*/
+
+QAbstractVideoBuffer::HandleType QAbstractVideoBuffer::handleType() const
+{
+    return d_func()->handleType;
+}
+
+/*!
+    \fn QAbstractVideoBuffer::mapMode() const
+
+    Returns the mode a video buffer is mapped in.
+
+    \sa map()
+*/
+
+/*!
+    \fn QAbstractVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
+
+    Maps the contents of a video buffer to memory.
+
+    The map \a mode indicates whether the contents of the mapped memory should be read from and/or
+    written to the buffer.  If the map mode includes the QAbstractVideoBuffer::ReadOnly flag the
+    mapped memory will be populated with the content of the video buffer when mapped.  If the map
+    mode includes the QAbstractVideoBuffer::WriteOnly flag the content of the mapped memory will be
+    persisted in the buffer when unmapped.
+
+    When access to the data is no longer needed be sure to call the unmap() function to release the
+    mapped memory.
+
+    Returns a pointer to the mapped memory region, or a null pointer if the mapping failed.  The
+    size in bytes of the mapped memory region is returned in \a numBytes, and the line stride in \a
+    bytesPerLine.
+
+    When access to the data is no longer needed be sure to unmap() the buffer.
+
+    \note Writing to memory that is mapped as read-only is undefined, and may result in changes
+    to shared data.
+
+    \sa unmap(), mapMode()
+*/
+
+/*!
+    \fn QAbstractVideoBuffer::unmap()
+
+    Releases the memory mapped by the map() function
+
+    If the \l {QAbstractVideoBuffer::MapMode}{MapMode} included the QAbstractVideoBuffer::WriteOnly
+    flag this will persist the current content of the mapped memory to the video frame.
+
+    \sa map()
+*/
+
+/*!
+    Returns a type specific handle to the data buffer.
+
+    The type of the handle is given by handleType() function.
+
+    \sa handleType()
+*/
+
+QVariant QAbstractVideoBuffer::handle() const
+{
+    return QVariant();
+}
+
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/video/qabstractvideobuffer.h b/src/multimedia/multimedia/video/qabstractvideobuffer.h
new file mode 100644
index 0000000..a8389db
--- /dev/null
+++ b/src/multimedia/multimedia/video/qabstractvideobuffer.h
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTVIDEOBUFFER_H
+#define QABSTRACTVIDEOBUFFER_H
+
+#include <QtCore/qmetatype.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QVariant;
+
+class QAbstractVideoBufferPrivate;
+
+class Q_MULTIMEDIA_EXPORT QAbstractVideoBuffer
+{
+public:
+    enum HandleType
+    {
+        NoHandle,
+        GLTextureHandle,
+        XvShmImageHandle,
+        CoreImageHandle,
+        UserHandle = 1000
+    };
+
+    enum MapMode
+    {
+        NotMapped = 0x00,
+        ReadOnly  = 0x01,
+        WriteOnly = 0x02,
+        ReadWrite = ReadOnly | WriteOnly
+    };
+
+    QAbstractVideoBuffer(HandleType type);
+    virtual ~QAbstractVideoBuffer();
+
+    HandleType handleType() const;
+
+    virtual MapMode mapMode() const = 0;
+
+    virtual uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) = 0;
+    virtual void unmap() = 0;
+
+    virtual QVariant handle() const;
+
+protected:
+    QAbstractVideoBuffer(QAbstractVideoBufferPrivate &dd, HandleType type);
+
+    QAbstractVideoBufferPrivate *d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(QAbstractVideoBuffer)
+    Q_DISABLE_COPY(QAbstractVideoBuffer)
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QAbstractVideoBuffer::HandleType)
+Q_DECLARE_METATYPE(QAbstractVideoBuffer::MapMode)
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/multimedia/video/qabstractvideobuffer_p.h b/src/multimedia/multimedia/video/qabstractvideobuffer_p.h
new file mode 100644
index 0000000..c72f303
--- /dev/null
+++ b/src/multimedia/multimedia/video/qabstractvideobuffer_p.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTVIDEOBUFFER_P_H
+#define QABSTRACTVIDEOBUFFER_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists purely as an
+// implementation detail.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qshareddata.h>
+#include <QtMultimedia/qabstractvideobuffer.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAbstractVideoBufferPrivate
+{
+public:
+    QAbstractVideoBufferPrivate()
+        : handleType(QAbstractVideoBuffer::NoHandle)
+    {}
+
+    QAbstractVideoBuffer::HandleType handleType;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/video/qabstractvideosurface.cpp b/src/multimedia/multimedia/video/qabstractvideosurface.cpp
new file mode 100644
index 0000000..3dabb6b
--- /dev/null
+++ b/src/multimedia/multimedia/video/qabstractvideosurface.cpp
@@ -0,0 +1,283 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qabstractvideosurface_p.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+    \class QAbstractVideoSurface
+    \brief The QAbstractVideoSurface class is a base class for video presentation surfaces.
+    \since 4.6
+
+    The QAbstractVideoSurface class defines the standard interface that video producers use to
+    inter-operate with video presentation surfaces.  It is not supposed to be instantiated directly.
+    Instead, you should subclass it to create new video surfaces.
+
+    A video surface presents a continuous stream of identically formatted frames, where the format
+    of each frame is compatible with a stream format supplied when starting a presentation.
+
+    A list of pixel formats a surface can present is given by the supportedPixelFormats() function,
+    and the isFormatSupported() function will test if a video surface format is supported.  If a
+    format is not supported the nearestFormat() function may be able to suggest a similar format.
+    For example if a surface supports fixed set of resolutions it may suggest the smallest
+    supported resolution that contains the proposed resolution.
+
+    The start() function takes a supported format and enables a video surface.  Once started a
+    surface will begin displaying the frames it receives in the present() function.  Surfaces may
+    hold a reference to the buffer of a presented video frame until a new frame is presented or
+    streaming is stopped. The stop() function will disable a surface and a release any video
+    buffers it holds references to.
+*/
+
+/*!
+    \enum QAbstractVideoSurface::Error
+    This enum describes the errors that may be returned by the error() function.
+
+    \value NoError No error occurred.
+    \value UnsupportedFormatError A video format was not supported.
+    \value IncorrectFormatError A video frame was not compatible with the format of the surface.
+    \value StoppedError The surface has not been started.
+    \value ResourceError The surface could not allocate some resource.
+*/
+
+/*!
+    Constructs a video surface with the given \a parent.
+*/
+
+QAbstractVideoSurface::QAbstractVideoSurface(QObject *parent)
+    : QObject(*new QAbstractVideoSurfacePrivate, parent)
+{
+}
+
+/*!
+    \internal
+*/
+
+QAbstractVideoSurface::QAbstractVideoSurface(QAbstractVideoSurfacePrivate &dd, QObject *parent)
+    : QObject(dd, parent)
+{
+}
+
+/*!
+    Destroys a video surface.
+*/
+
+QAbstractVideoSurface::~QAbstractVideoSurface()
+{
+}
+
+/*!
+    \fn QAbstractVideoSurface::supportedPixelFormats(QAbstractVideoBuffer::HandleType type) const
+
+    Returns a list of pixel formats a video surface can present for a given handle \a type.
+
+    The pixel formats returned for the QAbstractVideoBuffer::NoHandle type are valid for any buffer
+    that can be mapped in read-only mode.
+
+    Types that are first in the list can be assumed to be faster to render.
+*/
+
+/*!
+    Tests a video surface \a format to determine if a surface can accept it.
+
+    Returns true if the format is supported by the surface, and false otherwise.
+*/
+
+bool QAbstractVideoSurface::isFormatSupported(const QVideoSurfaceFormat &format) const
+{
+    return supportedPixelFormats(format.handleType()).contains(format.pixelFormat());
+}
+
+/*!
+    Returns a supported video surface format that is similar to \a format.
+
+    A similar surface format is one that has the same \l {QVideoSurfaceFormat::pixelFormat()}{pixel
+    format} and \l {QVideoSurfaceFormat::handleType()}{handle type} but differs in some of the other
+    properties.  For example if there are restrictions on the \l {QVideoSurfaceFormat::frameSize()}
+    {frame sizes} a video surface can accept it may suggest a format with a larger frame size and
+    a \l {QVideoSurfaceFormat::viewport()}{viewport} the size of the original frame size.
+
+    If the format is already supported it will be returned unchanged, or if there is no similar
+    supported format an invalid format will be returned.
+*/
+
+QVideoSurfaceFormat QAbstractVideoSurface::nearestFormat(const QVideoSurfaceFormat &format) const
+{
+    return isFormatSupported(format)
+            ? format
+            : QVideoSurfaceFormat();
+}
+
+/*!
+    \fn QAbstractVideoSurface::supportedFormatsChanged()
+
+    Signals that the set of formats supported by a video surface has changed.
+
+    \sa supportedPixelFormats(), isFormatSupported()
+*/
+
+/*!
+    Returns the format of a video surface.
+*/
+
+QVideoSurfaceFormat QAbstractVideoSurface::surfaceFormat() const
+{
+    return d_func()->format;
+}
+
+/*!
+    \fn QAbstractVideoSurface::surfaceFormatChanged(const QVideoSurfaceFormat &format)
+
+    Signals that the configured \a format of a video surface has changed.
+
+    \sa surfaceFormat(), start()
+*/
+
+/*!
+    Starts a video surface presenting \a format frames.
+
+    Returns true if the surface was started, and false if an error occurred.
+
+    \sa isActive(), stop()
+*/
+
+bool QAbstractVideoSurface::start(const QVideoSurfaceFormat &format)
+{
+    Q_D(QAbstractVideoSurface);
+
+    bool wasActive  = d->active;
+
+    d->active = true;
+    d->format = format;
+    d->error = NoError;
+
+    emit surfaceFormatChanged(d->format);
+
+    if (!wasActive)
+        emit activeChanged(true);
+
+    return true;
+}
+
+/*!
+    Stops a video surface presenting frames and releases any resources acquired in start().
+
+    \sa isActive(), start()
+*/
+
+void QAbstractVideoSurface::stop()
+{
+    Q_D(QAbstractVideoSurface);
+
+    if (d->active) {
+        d->format = QVideoSurfaceFormat();
+        d->active = false;
+
+        emit activeChanged(false);
+        emit surfaceFormatChanged(d->format);
+    }
+}
+
+/*!
+    Indicates whether a video surface has been started.
+
+    Returns true if the surface has been started, and false otherwise.
+*/
+
+bool QAbstractVideoSurface::isActive() const
+{
+    return d_func()->active;
+}
+
+/*!
+    \fn QAbstractVideoSurface::activeChanged(bool active)
+
+    Signals that the \a active state of a video surface has changed.
+
+    \sa isActive(), start(), stop()
+*/
+
+/*!
+    \fn QAbstractVideoSurface::present(const QVideoFrame &frame)
+
+    Presents a video \a frame.
+
+    Returns true if the frame was presented, and false if an error occurred.
+
+    Not all surfaces will block until the presentation of a frame has completed.  Calling present()
+    on a non-blocking surface may fail if called before the presentation of a previous frame has
+    completed.  In such cases the surface may not return to a ready state until it's had an
+    opportunity to process events.
+
+    If present() fails for any other reason the surface will immediately enter the stopped state
+    and an error() value will be set.
+
+    A video surface must be in the started state for present() to succeed, and the format of the
+    video frame must be compatible with the current video surface format.
+
+    \sa error()
+*/
+
+/*!
+    Returns the last error that occurred.
+
+    If a surface fails to start(), or stops unexpectedly this function can be called to discover
+    what error occurred.
+*/
+
+QAbstractVideoSurface::Error QAbstractVideoSurface::error() const
+{
+    return d_func()->error;
+}
+
+/*!
+    Sets the value of error() to \a error.
+*/
+
+void QAbstractVideoSurface::setError(Error error)
+{
+    Q_D(QAbstractVideoSurface);
+
+    d->error = error;
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/video/qabstractvideosurface.h b/src/multimedia/multimedia/video/qabstractvideosurface.h
new file mode 100644
index 0000000..f2cae17
--- /dev/null
+++ b/src/multimedia/multimedia/video/qabstractvideosurface.h
@@ -0,0 +1,110 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTVIDEOSURFACE_H
+#define QABSTRACTVIDEOSURFACE_H
+
+#include <QtCore/qobject.h>
+#include <QtMultimedia/qvideoframe.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QRectF;
+class QVideoSurfaceFormat;
+
+class QAbstractVideoSurfacePrivate;
+
+class Q_MULTIMEDIA_EXPORT QAbstractVideoSurface : public QObject
+{
+    Q_OBJECT
+
+public:
+    enum Error
+    {
+        NoError,
+        UnsupportedFormatError,
+        IncorrectFormatError,
+        StoppedError,
+        ResourceError
+    };
+
+    explicit QAbstractVideoSurface(QObject *parent = 0);
+    ~QAbstractVideoSurface();
+
+    virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(
+            QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const = 0;
+    virtual bool isFormatSupported(const QVideoSurfaceFormat &format) const;
+    virtual QVideoSurfaceFormat nearestFormat(const QVideoSurfaceFormat &format) const;
+
+    QVideoSurfaceFormat surfaceFormat() const;
+
+    virtual bool start(const QVideoSurfaceFormat &format);
+    virtual void stop();
+
+    bool isActive() const;
+
+    virtual bool present(const QVideoFrame &frame) = 0;
+
+    Error error() const;
+
+Q_SIGNALS:
+    void activeChanged(bool active);
+    void surfaceFormatChanged(const QVideoSurfaceFormat &format);
+    void supportedFormatsChanged();
+
+protected:
+    QAbstractVideoSurface(QAbstractVideoSurfacePrivate &dd, QObject *parent);
+
+    void setError(Error error);
+
+private:
+    Q_DECLARE_PRIVATE(QAbstractVideoSurface)
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/multimedia/video/qabstractvideosurface_p.h b/src/multimedia/multimedia/video/qabstractvideosurface_p.h
new file mode 100644
index 0000000..42df112
--- /dev/null
+++ b/src/multimedia/multimedia/video/qabstractvideosurface_p.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTVIDEOSURFACE_P_H
+#define QABSTRACTVIDEOSURFACE_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists purely as an
+// implementation detail.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtMultimedia/qabstractvideosurface.h>
+#include <QtMultimedia/qvideosurfaceformat.h>
+#include <QtCore/private/qobject_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAbstractVideoSurfacePrivate : public QObjectPrivate
+{
+public:
+    QAbstractVideoSurfacePrivate()
+        : error(QAbstractVideoSurface::NoError)
+        , active(false)
+    {
+    }
+
+    mutable QAbstractVideoSurface::Error error;
+    QVideoSurfaceFormat format;
+    bool active;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/video/qimagevideobuffer.cpp b/src/multimedia/multimedia/video/qimagevideobuffer.cpp
new file mode 100644
index 0000000..e3e1585
--- /dev/null
+++ b/src/multimedia/multimedia/video/qimagevideobuffer.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qimagevideobuffer_p.h"
+
+#include <private/qabstractvideobuffer_p.h>
+
+#include <qimage.h>
+#include <qvariant.h>
+
+QT_BEGIN_NAMESPACE
+
+class QImageVideoBufferPrivate : public QAbstractVideoBufferPrivate
+{
+public:
+    QImageVideoBufferPrivate()
+        : mapMode(QAbstractVideoBuffer::NotMapped)
+    {
+    }
+
+    QAbstractVideoBuffer::MapMode mapMode;
+    QImage image;
+};
+
+QImageVideoBuffer::QImageVideoBuffer(const QImage &image)
+    : QAbstractVideoBuffer(*new QImageVideoBufferPrivate, NoHandle)
+{
+    Q_D(QImageVideoBuffer);
+
+    d->image = image;
+}
+
+QImageVideoBuffer::~QImageVideoBuffer()
+{
+}
+
+QAbstractVideoBuffer::MapMode QImageVideoBuffer::mapMode() const
+{
+    return d_func()->mapMode;
+}
+
+uchar *QImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
+{
+    Q_D(QImageVideoBuffer);
+
+    if (d->mapMode == NotMapped && d->image.bits() && mode != NotMapped) {
+        d->mapMode = mode;
+
+        if (numBytes)
+            *numBytes = d->image.byteCount();
+
+        if (bytesPerLine)
+            *bytesPerLine = d->image.bytesPerLine();
+
+        return d->image.bits();
+    } else {
+        return 0;
+    }
+}
+
+void QImageVideoBuffer::unmap()
+{
+    Q_D(QImageVideoBuffer);
+
+    d->mapMode = NotMapped;
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/video/qimagevideobuffer_p.h b/src/multimedia/multimedia/video/qimagevideobuffer_p.h
new file mode 100644
index 0000000..82075d7
--- /dev/null
+++ b/src/multimedia/multimedia/video/qimagevideobuffer_p.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QIMAGEVIDEOBUFFER_P_H
+#define QIMAGEVIDEOBUFFER_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists purely as an
+// implementation detail.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtMultimedia/qabstractvideobuffer.h>
+
+QT_BEGIN_NAMESPACE
+
+class QImage;
+
+class QImageVideoBufferPrivate;
+
+class Q_MULTIMEDIA_EXPORT QImageVideoBuffer : public QAbstractVideoBuffer
+{
+    Q_DECLARE_PRIVATE(QImageVideoBuffer)
+public:
+    QImageVideoBuffer(const QImage &image);
+    ~QImageVideoBuffer();
+
+    MapMode mapMode() const;
+
+    uchar *map(MapMode mode, int *numBytes, int *bytesPerLine);
+    void unmap();
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/multimedia/multimedia/video/qmemoryvideobuffer.cpp b/src/multimedia/multimedia/video/qmemoryvideobuffer.cpp
new file mode 100644
index 0000000..2e892b7
--- /dev/null
+++ b/src/multimedia/multimedia/video/qmemoryvideobuffer.cpp
@@ -0,0 +1,129 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmemoryvideobuffer_p.h"
+
+#include <private/qabstractvideobuffer_p.h>
+#include <qbytearray.h>
+
+QT_BEGIN_NAMESPACE
+
+class QMemoryVideoBufferPrivate : public QAbstractVideoBufferPrivate
+{
+public:
+    QMemoryVideoBufferPrivate()
+        : bytesPerLine(0)
+        , mapMode(QAbstractVideoBuffer::NotMapped)
+    {
+    }
+
+    int bytesPerLine;
+    QAbstractVideoBuffer::MapMode mapMode;
+    QByteArray data;
+};
+
+/*!
+    \class QMemoryVideoBuffer
+    \brief The QMemoryVideoBuffer class provides a system memory allocated video data buffer.
+    \internal
+
+    QMemoryVideoBuffer is the default video buffer for allocating system memory.  It may be used to
+    allocate memory for a QVideoFrame without implementing your own QAbstractVideoBuffer.
+*/
+
+/*!
+    Constructs a video buffer with an image stride of \a bytesPerLine from a byte \a array.
+*/
+QMemoryVideoBuffer::QMemoryVideoBuffer(const QByteArray &array, int bytesPerLine)
+    : QAbstractVideoBuffer(*new QMemoryVideoBufferPrivate, NoHandle)
+{
+    Q_D(QMemoryVideoBuffer);
+
+    d->data = array;
+    d->bytesPerLine = bytesPerLine;
+}
+
+/*!
+    Destroys a system memory allocated video buffer.
+*/
+QMemoryVideoBuffer::~QMemoryVideoBuffer()
+{
+}
+
+/*!
+    \reimp
+*/
+QAbstractVideoBuffer::MapMode QMemoryVideoBuffer::mapMode() const
+{
+    return d_func()->mapMode;
+}
+
+/*!
+    \reimp
+*/
+uchar *QMemoryVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
+{
+    Q_D(QMemoryVideoBuffer);
+
+    if (d->mapMode == NotMapped && d->data.data() && mode != NotMapped) {
+        d->mapMode = mode;
+
+        if (numBytes)
+            *numBytes = d->data.size();
+
+        if (bytesPerLine)
+            *bytesPerLine = d->bytesPerLine;
+
+        return reinterpret_cast<uchar *>(d->data.data());
+    } else {
+        return 0;
+    }
+}
+
+/*!
+    \reimp
+*/
+void QMemoryVideoBuffer::unmap()
+{
+    d_func()->mapMode = NotMapped;
+}
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/video/qmemoryvideobuffer_p.h b/src/multimedia/multimedia/video/qmemoryvideobuffer_p.h
new file mode 100644
index 0000000..c66cf93
--- /dev/null
+++ b/src/multimedia/multimedia/video/qmemoryvideobuffer_p.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMEMORYVIDEOBUFFER_P_H
+#define QMEMORYVIDEOBUFFER_P_H
+
+#include <QtMultimedia/qabstractvideobuffer.h>
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists purely as an
+// implementation detail.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QMemoryVideoBufferPrivate;
+
+class Q_MULTIMEDIA_EXPORT QMemoryVideoBuffer : public QAbstractVideoBuffer
+{
+    Q_DECLARE_PRIVATE(QMemoryVideoBuffer)
+public:
+    QMemoryVideoBuffer(const QByteArray &data, int bytesPerLine);
+    ~QMemoryVideoBuffer();
+
+    MapMode mapMode() const;
+
+    uchar *map(MapMode mode, int *numBytes, int *bytesPerLine);
+    void unmap();
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/src/multimedia/multimedia/video/qvideoframe.cpp b/src/multimedia/multimedia/video/qvideoframe.cpp
new file mode 100644
index 0000000..2d66d9e
--- /dev/null
+++ b/src/multimedia/multimedia/video/qvideoframe.cpp
@@ -0,0 +1,741 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qvideoframe.h"
+
+#include <private/qimagevideobuffer_p.h>
+#include <private/qmemoryvideobuffer_p.h>
+
+#include <qimage.h>
+#include <qpair.h>
+#include <qsize.h>
+#include <qvariant.h>
+#include <qvector.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVideoFramePrivate : public QSharedData
+{
+public:
+    QVideoFramePrivate()
+        : startTime(-1)
+        , endTime(-1)
+        , data(0)
+        , mappedBytes(0)
+        , bytesPerLine(0)
+        , pixelFormat(QVideoFrame::Format_Invalid)
+        , fieldType(QVideoFrame::ProgressiveFrame)
+        , buffer(0)
+    {
+    }
+
+    QVideoFramePrivate(const QSize &size, QVideoFrame::PixelFormat format)
+        : size(size)
+        , startTime(-1)
+        , endTime(-1)
+        , data(0)
+        , mappedBytes(0)
+        , bytesPerLine(0)
+        , pixelFormat(format)
+        , fieldType(QVideoFrame::ProgressiveFrame)
+        , buffer(0)
+    {
+    }
+
+    ~QVideoFramePrivate()
+    {
+        delete buffer;
+    }
+
+    QSize size;
+    qint64 startTime;
+    qint64 endTime;
+    uchar *data;
+    int mappedBytes;
+    int bytesPerLine;
+    QVideoFrame::PixelFormat pixelFormat;
+    QVideoFrame::FieldType fieldType;
+    QAbstractVideoBuffer *buffer;
+
+private:
+    Q_DISABLE_COPY(QVideoFramePrivate)
+};
+
+/*!
+    \class QVideoFrame
+    \brief The QVideoFrame class provides a representation of a frame of video data.
+    \since 4.6
+
+    A QVideoFrame encapsulates the data of a video frame, and information about the frame.
+
+    The contents of a video frame can be mapped to memory using the map() function.  While
+    mapped the video data can accessed using the bits() function which returns a pointer to a
+    buffer, the total size of which is given by the mappedBytes(), and the size of each line is given
+    by bytesPerLine().  The return value of the handle() function may be used to access frame data
+    using the internal buffer's native APIs.
+
+    The video data in a QVideoFrame is encapsulated in a QAbstractVideoBuffer.  A QVideoFrame
+    may be constructed from any buffer type by subclassing the QAbstractVideoBuffer class.
+
+    \note QVideoFrame is explicitly shared, any change made to video frame will also apply to any
+    copies.
+*/
+
+/*!
+    \enum QVideoFrame::PixelFormat
+
+    Enumerates video data types.
+
+    \value Format_Invalid
+    The frame is invalid. 
+ 
+    \value Format_ARGB32
+    The frame is stored using a 32-bit ARGB format (0xAARRGGBB).  This is equivalent to
+    QImage::Format_ARGB32.
+ 
+    \value Format_ARGB32_Premultiplied
+    The frame stored using a premultiplied 32-bit ARGB format (0xAARRGGBB).  This is equivalent
+    to QImage::Format_ARGB32_Premultiplied.
+ 
+    \value Format_RGB32
+    The frame stored using a 32-bit RGB format (0xffRRGGBB).  This is equivalent to
+    QImage::Format_RGB32
+ 
+    \value Format_RGB24
+    The frame is stored using a 24-bit RGB format (8-8-8).  This is equivalent to
+    QImage::Format_RGB888
+ 
+    \value Format_RGB565
+    The frame is stored using a 16-bit RGB format (5-6-5).  This is equivalent to
+    QImage::Format_RGB16.
+ 
+    \value Format_RGB555
+    The frame is stored using a 16-bit RGB format (5-5-5).  This is equivalent to
+    QImage::Format_RGB555.
+ 
+    \value Format_ARGB8565_Premultiplied
+    The frame is stored using a 24-bit premultiplied ARGB format (8-6-6-5).
+ 
+    \value Format_BGRA32
+    The frame is stored using a 32-bit ARGB format (0xBBGGRRAA).
+ 
+    \value Format_BGRA32_Premultiplied
+    The frame is stored using a premultiplied 32bit BGRA format.
+ 
+    \value Format_BGR32
+    The frame is stored using a 32-bit BGR format (0xBBGGRRff).
+ 
+    \value Format_BGR24
+    The frame is stored using a 24-bit BGR format (0xBBGGRR).
+ 
+    \value Format_BGR565
+    The frame is stored using a 16-bit BGR format (5-6-5).
+ 
+    \value Format_BGR555
+    The frame is stored using a 16-bit BGR format (5-5-5).
+ 
+    \value Format_BGRA5658_Premultiplied
+    The frame is stored using a 24-bit premultiplied BGRA format (5-6-5-8).
+ 
+    \value Format_AYUV444
+    The frame is stored using a packed 32-bit AYUV format (0xAAYYUUVV).
+ 
+    \value Format_AYUV444_Premultiplied
+    The frame is stored using a packed premultiplied 32-bit AYUV format (0xAAYYUUVV).
+
+    \value Format_YUV444
+    The frame is stored using a 24-bit packed YUV format (8-8-8).
+ 
+    \value Format_YUV420P
+    The frame is stored using an 8-bit per component planar YUV format with the U and V planes
+    horizontally and vertically sub-sampled, i.e. the height and width of the U and V planes are
+    half that of the Y plane.
+ 
+    \value Format_YV12
+    The frame is stored using an 8-bit per component planar YVU format with the V and U planes
+    horizontally and vertically sub-sampled, i.e. the height and width of the V and U planes are
+    half that of the Y plane.
+ 
+    \value Format_UYVY
+    The frame is stored using an 8-bit per component packed YUV format with the U and V planes
+    horizontally sub-sampled (U-Y-V-Y), i.e. two horizontally adjacent pixels are stored as a 32-bit
+    macropixel which has a Y value for each pixel and common U and V values.
+ 
+    \value Format_YUYV
+    The frame is stored using an 8-bit per component packed YUV format with the U and V planes
+    horizontally sub-sampled (Y-U-Y-V), i.e. two horizontally adjacent pixels are stored as a 32-bit
+    macropixel which has a Y value for each pixel and common U and V values.
+ 
+    \value Format_NV12
+    The frame is stored using an 8-bit per component semi-planar YUV format with a Y plane (Y)
+    followed by a horizontally and vertically sub-sampled, packed UV plane (U-V).
+ 
+    \value Format_NV21
+    The frame is stored using an 8-bit per component semi-planar YUV format with a Y plane (Y)
+    followed by a horizontally and vertically sub-sampled, packed VU plane (V-U).
+ 
+    \value Format_IMC1
+    The frame is stored using an 8-bit per component planar YUV format with the U and V planes
+    horizontally and vertically sub-sampled.  This is similar to the Format_YUV420P type, except
+    that the bytes per line of the U and V planes are padded out to the same stride as the Y plane.
+
+    \value Format_IMC2
+    The frame is stored using an 8-bit per component planar YUV format with the U and V planes
+    horizontally and vertically sub-sampled.  This is similar to the Format_YUV420P type, except
+    that the lines of the U and V planes are interleaved, i.e. each line of U data is followed by a
+    line of V data creating a single line of the same stride as the Y data.
+ 
+    \value Format_IMC3
+    The frame is stored using an 8-bit per component planar YVU format with the V and U planes
+    horizontally and vertically sub-sampled.  This is similar to the Format_YV12 type, except that
+    the bytes per line of the V and U planes are padded out to the same stride as the Y plane.
+ 
+    \value Format_IMC4
+    The frame is stored using an 8-bit per component planar YVU format with the V and U planes
+    horizontally and vertically sub-sampled.  This is similar to the Format_YV12 type, except that
+    the lines of the V and U planes are interleaved, i.e. each line of V data is followed by a line
+    of U data creating a single line of the same stride as the Y data.
+ 
+    \value Format_Y8
+    The frame is stored using an 8-bit greyscale format.
+ 
+    \value Format_Y16
+    The frame is stored using a 16-bit linear greyscale format.  Little endian.
+
+    \value Format_User
+    Start value for user defined pixel formats.
+*/
+
+/*!
+    \enum QVideoFrame::FieldType
+
+    Specifies the field an interlaced video frame belongs to.
+
+    \value ProgressiveFrame The frame is not interlaced.
+    \value TopField The frame contains a top field.
+    \value BottomField The frame contains a bottom field.
+    \value InterlacedFrame The frame contains a merged top and bottom field.
+*/
+
+/*!
+    Constructs a null video frame.
+*/
+
+QVideoFrame::QVideoFrame()
+    : d(new QVideoFramePrivate)
+{
+}
+
+/*!
+    Constructs a video frame from a \a buffer of the given pixel \a format and \a size in pixels.
+
+    \note This doesn't increment the reference count of the video buffer.
+*/
+
+QVideoFrame::QVideoFrame(
+        QAbstractVideoBuffer *buffer, const QSize &size, PixelFormat format)
+    : d(new QVideoFramePrivate(size, format))
+{
+    d->buffer = buffer;
+}
+
+/*!
+    Constructs a video frame of the given pixel \a format and \a size in pixels.
+
+    The \a bytesPerLine (stride) is the length of each scan line in bytes, and \a bytes is the total
+    number of bytes that must be allocated for the frame.
+*/
+
+QVideoFrame::QVideoFrame(int bytes, const QSize &size, int bytesPerLine, PixelFormat format)
+    : d(new QVideoFramePrivate(size, format))
+{
+    if (bytes > 0) {
+        QByteArray data;
+        data.resize(bytes);
+
+        // Check the memory was successfully allocated.
+        if (!data.isEmpty())
+            d->buffer = new QMemoryVideoBuffer(data, bytesPerLine);
+    }
+}
+
+/*!
+    Constructs a video frame from an \a image.
+
+    \note This will construct an invalid video frame if there is no frame type equivalent to the
+    image format.
+
+    \sa pixelFormatFromImageFormat()
+*/
+
+QVideoFrame::QVideoFrame(const QImage &image)
+    : d(new QVideoFramePrivate(
+            image.size(), pixelFormatFromImageFormat(image.format())))
+{
+    if (d->pixelFormat != Format_Invalid)
+        d->buffer = new QImageVideoBuffer(image);
+}
+
+/*!
+    Constructs a copy of \a other.
+*/
+
+QVideoFrame::QVideoFrame(const QVideoFrame &other)
+    : d(other.d)
+{
+}
+
+/*!
+    Assigns the contents of \a other to a video frame.
+*/
+
+QVideoFrame &QVideoFrame::operator =(const QVideoFrame &other)
+{
+    d = other.d;
+
+    return *this;
+}
+
+/*!
+    Destroys a video frame.
+*/
+
+QVideoFrame::~QVideoFrame()
+{
+}
+
+/*!
+    Identifies whether a video frame is valid.
+
+    An invalid frame has no video buffer associated with it.
+
+    Returns true if the frame is valid, and false if it is not.
+*/
+
+bool QVideoFrame::isValid() const
+{
+    return d->buffer != 0;
+}
+
+/*!
+    Returns the color format of a video frame.
+*/
+
+QVideoFrame::PixelFormat QVideoFrame::pixelFormat() const
+{
+    return d->pixelFormat;
+}
+
+/*!
+    Returns the type of a video frame's handle.
+*/
+
+QAbstractVideoBuffer::HandleType QVideoFrame::handleType() const
+{
+    return d->buffer ? d->buffer->handleType() : QAbstractVideoBuffer::NoHandle;
+}
+
+/*!
+    Returns the size of a video frame.
+*/
+
+QSize QVideoFrame::size() const
+{
+    return d->size;
+}
+
+/*!
+    Returns the width of a video frame.
+*/
+
+int QVideoFrame::width() const
+{
+    return d->size.width();
+}
+
+/*!
+    Returns the height of a video frame.
+*/
+
+int QVideoFrame::height() const
+{
+    return d->size.height();
+}
+
+/*!
+    Returns the field an interlaced video frame belongs to.
+
+    If the video is not interlaced this will return WholeFrame.
+*/
+
+QVideoFrame::FieldType QVideoFrame::fieldType() const
+{
+    return d->fieldType;
+}
+
+/*!
+    Sets the \a field an interlaced video frame belongs to.
+*/
+
+void QVideoFrame::setFieldType(QVideoFrame::FieldType field)
+{
+    d->fieldType = field;
+}
+
+/*!
+    Identifies if a video frame's contents are currently mapped to system memory.
+
+    This is a convenience function which checks that the \l {QAbstractVideoBuffer::MapMode}{MapMode}
+    of the frame is not equal to QAbstractVideoBuffer::NotMapped.
+
+    Returns true if the contents of the video frame are mapped to system memory, and false
+    otherwise.
+
+    \sa mapMode() QAbstractVideoBuffer::MapMode
+*/
+
+bool QVideoFrame::isMapped() const
+{
+    return d->buffer != 0 && d->buffer->mapMode() != QAbstractVideoBuffer::NotMapped;
+}
+
+/*!
+    Identifies if the mapped contents of a video frame will be persisted when the frame is unmapped.
+
+    This is a convenience function which checks if the \l {QAbstractVideoBuffer::MapMode}{MapMode}
+    contains the QAbstractVideoBuffer::WriteOnly flag.
+
+    Returns true if the video frame will be updated when unmapped, and false otherwise.
+
+    \note The result of altering the data of a frame that is mapped in read-only mode is undefined.
+    Depending on the buffer implementation the changes may be persisted, or worse alter a shared
+    buffer.
+
+    \sa mapMode(), QAbstractVideoBuffer::MapMode
+*/
+
+bool QVideoFrame::isWritable() const
+{
+    return d->buffer != 0 && (d->buffer->mapMode() & QAbstractVideoBuffer::WriteOnly);
+}
+
+/*!
+    Identifies if the mapped contents of a video frame were read from the frame when it was mapped.
+
+    This is a convenience function which checks if the \l {QAbstractVideoBuffer::MapMode}{MapMode}
+    contains the QAbstractVideoBuffer::WriteOnly flag.
+
+    Returns true if the contents of the mapped memory were read from the video frame, and false
+    otherwise.
+
+    \sa mapMode(), QAbstractVideoBuffer::MapMode
+*/
+
+bool QVideoFrame::isReadable() const
+{
+    return d->buffer != 0 && (d->buffer->mapMode() & QAbstractVideoBuffer::ReadOnly);
+}
+
+/*!
+    Returns the mode a video frame was mapped to system memory in.
+
+    \sa map(), QAbstractVideoBuffer::MapMode
+*/
+
+QAbstractVideoBuffer::MapMode QVideoFrame::mapMode() const
+{
+    return d->buffer != 0 ? d->buffer->mapMode() : QAbstractVideoBuffer::NotMapped;
+}
+
+/*!
+    Maps the contents of a video frame to memory.
+
+    The map \a mode indicates whether the contents of the mapped memory should be read from and/or
+    written to the frame.  If the map mode includes the QAbstractVideoBuffer::ReadOnly flag the
+    mapped memory will be populated with the content of the video frame when mapped.  If the map
+    mode inclues the QAbstractVideoBuffer::WriteOnly flag the content of the mapped memory will be
+    persisted in the frame when unmapped.
+
+    While mapped the contents of a video frame can be accessed directly through the pointer returned
+    by the bits() function.
+
+    When access to the data is no longer needed be sure to call the unmap() function to release the
+    mapped memory.
+
+    Returns true if the buffer was mapped to memory in the given \a mode and false otherwise.
+
+    \sa unmap(), mapMode(), bits()
+*/
+
+bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
+{
+    if (d->buffer != 0 && d->data == 0) {
+        Q_ASSERT(d->bytesPerLine == 0);
+        Q_ASSERT(d->mappedBytes == 0);
+
+        d->data = d->buffer->map(mode, &d->mappedBytes, &d->bytesPerLine);
+
+        return d->data != 0;
+    }
+
+    return false;
+}
+
+/*!
+    Releases the memory mapped by the map() function.
+
+    If the \l {QAbstractVideoBuffer::MapMode}{MapMode} included the QAbstractVideoBuffer::WriteOnly
+    flag this will persist the current content of the mapped memory to the video frame.
+
+    \sa map()
+*/
+
+void QVideoFrame::unmap()
+{
+    if (d->data != 0) {
+        d->mappedBytes = 0;
+        d->bytesPerLine = 0;
+        d->data = 0;
+
+        d->buffer->unmap();
+    }
+}
+
+/*!
+    Returns the number of bytes in a scan line.
+
+    \note This is the bytes per line of the first plane only.  The bytes per line of subsequent
+    planes should be calculated as per the frame type.
+
+    This value is only valid while the frame data is \l {map()}{mapped}.
+
+    \sa bits(), map(), mappedBytes()
+*/
+
+int QVideoFrame::bytesPerLine() const
+{
+    return d->bytesPerLine;
+}
+
+/*!
+    Returns a pointer to the start of the frame data buffer.
+
+    This value is only valid while the frame data is \l {map()}{mapped}.
+
+    \sa map(), mappedBytes(), bytesPerLine()
+*/
+
+uchar *QVideoFrame::bits()
+{
+    return d->data;
+}
+
+/*!
+    Returns a pointer to the start of the frame data buffer.
+
+    This value is only valid while the frame data is \l {map()}{mapped}.
+
+    \sa map(), mappedBytes(), bytesPerLine()
+*/
+
+const uchar *QVideoFrame::bits() const
+{
+    return d->data;
+}
+
+/*!
+    Returns the number of bytes occupied by the mapped frame data.
+
+    This value is only valid while the frame data is \l {map()}{mapped}.
+
+    \sa map()
+*/
+
+int QVideoFrame::mappedBytes() const
+{
+    return d->mappedBytes;
+}
+
+/*!
+    Returns a type specific handle to a video frame's buffer.
+
+    For an OpenGL texture this would be the texture ID.
+
+    \sa QAbstractVideoBuffer::handle()
+*/
+
+QVariant QVideoFrame::handle() const
+{
+    return d->buffer != 0 ? d->buffer->handle() : QVariant();
+}
+
+/*!
+    Returns the presentation time when the frame should be displayed.
+*/
+
+qint64 QVideoFrame::startTime() const
+{
+    return d->startTime;
+}
+
+/*!
+    Sets the presentation \a time when the frame should be displayed.
+*/
+
+void QVideoFrame::setStartTime(qint64 time)
+{
+    d->startTime = time;
+}
+
+/*!
+    Returns the presentation time when a frame should stop being displayed.
+*/
+
+qint64 QVideoFrame::endTime() const
+{
+    return d->endTime;
+}
+
+/*!
+    Sets the presentation \a time when a frame should stop being displayed.
+*/
+
+void QVideoFrame::setEndTime(qint64 time)
+{
+    d->endTime = time;
+}
+
+/*!
+    Returns an video pixel format equivalent to an image \a format.  If there is no equivalent
+    format QVideoFrame::InvalidType is returned instead.
+*/
+
+QVideoFrame::PixelFormat QVideoFrame::pixelFormatFromImageFormat(QImage::Format format)
+{
+    switch (format) {
+    case QImage::Format_Invalid:
+    case QImage::Format_Mono:
+    case QImage::Format_MonoLSB:
+    case QImage::Format_Indexed8:
+        return Format_Invalid;
+    case QImage::Format_RGB32:
+        return Format_RGB32;
+    case QImage::Format_ARGB32:
+        return Format_ARGB32;
+    case QImage::Format_ARGB32_Premultiplied:
+        return Format_ARGB32_Premultiplied;
+    case QImage::Format_RGB16:
+        return Format_RGB565;
+    case QImage::Format_ARGB8565_Premultiplied:
+    case QImage::Format_RGB666:
+    case QImage::Format_ARGB6666_Premultiplied:
+        return Format_Invalid;
+    case QImage::Format_RGB555:
+        return Format_RGB555;
+    case QImage::Format_ARGB8555_Premultiplied:
+        return Format_Invalid;
+    case QImage::Format_RGB888:
+        return Format_RGB24;
+    case QImage::Format_RGB444:
+    case QImage::Format_ARGB4444_Premultiplied:
+        return Format_Invalid;
+    case QImage::NImageFormats:
+        return Format_Invalid;
+    }
+    return Format_Invalid;
+}
+
+/*!
+    Returns an image format equivalent to a video frame pixel \a format.  If there is no equivalent
+    format QImage::Format_Invalid is returned instead.
+*/
+
+QImage::Format QVideoFrame::imageFormatFromPixelFormat(PixelFormat format)
+{
+    switch (format) {
+    case Format_Invalid:
+        return QImage::Format_Invalid;
+    case Format_ARGB32:
+        return QImage::Format_ARGB32;
+    case Format_ARGB32_Premultiplied:
+        return QImage::Format_ARGB32_Premultiplied;
+    case Format_RGB32:
+        return QImage::Format_RGB32;
+    case Format_RGB24:
+        return QImage::Format_RGB888;
+    case Format_RGB565:
+        return QImage::Format_RGB16;
+    case Format_RGB555:
+        return QImage::Format_RGB555;
+    case Format_ARGB8565_Premultiplied:
+        return QImage::Format_ARGB8565_Premultiplied;
+    case Format_BGRA32:
+    case Format_BGRA32_Premultiplied:
+    case Format_BGR32:
+    case Format_BGR24:
+        return QImage::Format_Invalid;
+    case Format_BGR565:
+    case Format_BGR555:
+    case Format_BGRA5658_Premultiplied:
+    case Format_AYUV444:
+    case Format_AYUV444_Premultiplied:
+    case Format_YUV444:
+    case Format_YUV420P:
+    case Format_YV12:
+    case Format_UYVY:
+    case Format_YUYV:
+    case Format_NV12:
+    case Format_NV21:
+    case Format_IMC1:
+    case Format_IMC2:
+    case Format_IMC3:
+    case Format_IMC4:
+    case Format_Y8:
+    case Format_Y16:
+        return QImage::Format_Invalid;
+    case Format_User:
+        return QImage::Format_Invalid;
+    }
+    return QImage::Format_Invalid;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/multimedia/multimedia/video/qvideoframe.h b/src/multimedia/multimedia/video/qvideoframe.h
new file mode 100644
index 0000000..668a738
--- /dev/null
+++ b/src/multimedia/multimedia/video/qvideoframe.h
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEOFRAME_H
+#define QVIDEOFRAME_H
+
+#include <QtCore/qmetatype.h>
+#include <QtCore/qshareddata.h>
+#include <QtGui/qimage.h>
+#include <QtMultimedia/qabstractvideobuffer.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QSize;
+class QVariant;
+
+class QVideoFramePrivate;
+
+class Q_MULTIMEDIA_EXPORT QVideoFrame
+{
+public:
+    enum FieldType
+    {
+        ProgressiveFrame,
+        TopField,
+        BottomField,
+        InterlacedFrame
+    };
+
+    enum PixelFormat
+    {
+        Format_Invalid,
+        Format_ARGB32,
+        Format_ARGB32_Premultiplied,
+        Format_RGB32,
+        Format_RGB24,
+        Format_RGB565,
+        Format_RGB555,
+        Format_ARGB8565_Premultiplied,
+        Format_BGRA32,
+        Format_BGRA32_Premultiplied,
+        Format_BGR32,
+        Format_BGR24,
+        Format_BGR565,
+        Format_BGR555,
+        Format_BGRA5658_Premultiplied,
+
+        Format_AYUV444,
+        Format_AYUV444_Premultiplied,
+        Format_YUV444,
+        Format_YUV420P,
+        Format_YV12,
+        Format_UYVY,
+        Format_YUYV,
+        Format_NV12,
+        Format_NV21,
+        Format_IMC1,
+        Format_IMC2,
+        Format_IMC3,
+        Format_IMC4,
+        Format_Y8,
+        Format_Y16,
+
+        Format_User = 1000
+    };
+
+    QVideoFrame();
+    QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, PixelFormat format);
+    QVideoFrame(int bytes, const QSize &size, int bytesPerLine, PixelFormat format);
+    QVideoFrame(const QImage &image);
+    QVideoFrame(const QVideoFrame &other);
+    ~QVideoFrame();
+
+    QVideoFrame &operator =(const QVideoFrame &other);
+
+    bool isValid() const;
+
+    PixelFormat pixelFormat() const;
+
+    QAbstractVideoBuffer::HandleType handleType() const;
+
+    QSize size() const;
+    int width() const;
+    int height() const;
+
+    FieldType fieldType() const;
+    void setFieldType(FieldType);
+
+    bool isMapped() const;
+    bool isReadable() const;
+    bool isWritable() const;
+
+    QAbstractVideoBuffer::MapMode mapMode() const;
+
+    bool map(QAbstractVideoBuffer::MapMode mode);
+    void unmap();
+
+    int bytesPerLine() const;
+
+    uchar *bits();
+    const uchar *bits() const;
+    int mappedBytes() const;
+
+    QVariant handle() const;
+
+    qint64 startTime() const;
+    void setStartTime(qint64 time);
+
+    qint64 endTime() const;
+    void setEndTime(qint64 time);
+
+    static PixelFormat pixelFormatFromImageFormat(QImage::Format format);
+    static QImage::Format imageFormatFromPixelFormat(PixelFormat format);
+
+private:
+    QExplicitlySharedDataPointer<QVideoFramePrivate> d;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QVideoFrame::FieldType)
+Q_DECLARE_METATYPE(QVideoFrame::PixelFormat)
+
+QT_END_HEADER
+
+#endif
+
diff --git a/src/multimedia/multimedia/video/qvideosurfaceformat.cpp b/src/multimedia/multimedia/video/qvideosurfaceformat.cpp
new file mode 100644
index 0000000..1fc13a6
--- /dev/null
+++ b/src/multimedia/multimedia/video/qvideosurfaceformat.cpp
@@ -0,0 +1,704 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qvideosurfaceformat.h"
+
+#include <qdebug.h>
+#include <qmetatype.h>
+#include <qpair.h>
+#include <qvariant.h>
+#include <qvector.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVideoSurfaceFormatPrivate : public QSharedData
+{
+public:
+    QVideoSurfaceFormatPrivate()
+        : pixelFormat(QVideoFrame::Format_Invalid)
+        , handleType(QAbstractVideoBuffer::NoHandle)
+        , scanLineDirection(QVideoSurfaceFormat::TopToBottom)
+        , pixelAspectRatio(1, 1)
+        , ycbcrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
+        , frameRate(0.0)
+    {
+    }
+
+    QVideoSurfaceFormatPrivate(
+            const QSize &size,
+            QVideoFrame::PixelFormat format,
+            QAbstractVideoBuffer::HandleType type)
+        : pixelFormat(format)
+        , handleType(type)
+        , scanLineDirection(QVideoSurfaceFormat::TopToBottom)
+        , frameSize(size)
+        , pixelAspectRatio(1, 1)
+        , ycbcrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
+        , viewport(QPoint(0, 0), size)
+        , frameRate(0.0)
+    {
+    }
+
+    QVideoSurfaceFormatPrivate(const QVideoSurfaceFormatPrivate &other)
+        : QSharedData(other)
+        , pixelFormat(other.pixelFormat)
+        , handleType(other.handleType)
+        , scanLineDirection(other.scanLineDirection)
+        , frameSize(other.frameSize)
+        , pixelAspectRatio(other.pixelAspectRatio)
+        , ycbcrColorSpace(other.ycbcrColorSpace)
+        , viewport(other.viewport)
+        , frameRate(other.frameRate)
+        , propertyNames(other.propertyNames)
+        , propertyValues(other.propertyValues)
+    {
+    }
+
+    bool operator ==(const QVideoSurfaceFormatPrivate &other) const
+    {
+        if (pixelFormat == other.pixelFormat
+            && handleType == other.handleType
+            && scanLineDirection == other.scanLineDirection
+            && frameSize == other.frameSize
+            && pixelAspectRatio == other.pixelAspectRatio
+            && viewport == other.viewport
+            && frameRatesEqual(frameRate, other.frameRate)
+            && ycbcrColorSpace == other.ycbcrColorSpace
+            && propertyNames.count() == other.propertyNames.count()) {
+            for (int i = 0; i < propertyNames.count(); ++i) {
+                int j = other.propertyNames.indexOf(propertyNames.at(i));
+
+                if (j == -1 || propertyValues.at(i) != other.propertyValues.at(j))
+                    return false;
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    inline static bool frameRatesEqual(qreal r1, qreal r2)
+    {
+        return qAbs(r1 - r2) <= 0.00001 * qMin(qAbs(r1), qAbs(r2));
+    }
+
+    QVideoFrame::PixelFormat pixelFormat;
+    QAbstractVideoBuffer::HandleType handleType;
+    QVideoSurfaceFormat::Direction scanLineDirection;
+    QSize frameSize;
+    QSize pixelAspectRatio;
+    QVideoSurfaceFormat::YCbCrColorSpace ycbcrColorSpace;
+    QRect viewport;
+    qreal frameRate;
+    QList<QByteArray> propertyNames;
+    QList<QVariant> propertyValues;
+};
+
+/*!
+    \class QVideoSurfaceFormat
+    \brief The QVideoSurfaceFormat class specifies the stream format of a video presentation
+    surface.
+    \since 4.6
+
+    A video surface presents a stream of video frames.  The surface's format describes the type of
+    the frames and determines how they should be presented.
+
+    The core properties of a video stream required to setup a video surface are the pixel format
+    given by pixelFormat(), and the frame dimensions given by frameSize().
+
+    If the surface is to present frames using a frame's handle a surface format will also include
+    a handle type which is given by the handleType() function.
+
+    The region of a frame that is actually displayed on a video surface is given by the viewport().
+    A stream may have a viewport less than the entire region of a frame to allow for videos smaller
+    than the nearest optimal size of a video frame.  For example the width of a frame may be
+    extended so that the start of each scan line is eight byte aligned.
+
+    Other common properties are the pixelAspectRatio(), scanLineDirection(), and frameRate().
+    Additionally a stream may have some additional type specific properties which are listed by the
+    dynamicPropertyNames() function and can be accessed using the property(), and setProperty()
+    functions.
+*/
+
+/*!
+    \enum QVideoSurfaceFormat::Direction
+
+    Enumerates the layout direction of video scan lines.
+
+    \value TopToBottom Scan lines are arranged from the top of the frame to the bottom.
+    \value BottomToTop Scan lines are arranged from the bottom of the frame to the top.
+*/
+
+/*! 
+    \enum QVideoSurfaceFormat::YCbCrColorSpace
+ 
+    Enumerates the Y'CbCr color space of video frames.
+ 
+    \value YCbCr_Undefined
+    No color space is specified.
+
+    \value YCbCr_BT601
+    A Y'CbCr color space defined by ITU-R recommendation BT.601
+    with Y value range from 16 to 235, and Cb/Cr range from 16 to 240.
+    Used in standard definition video.
+ 
+    \value YCbCr_BT709
+    A Y'CbCr color space defined by ITU-R BT.709 with the same values range as YCbCr_BT601.  Used
+    for HDTV.
+ 
+    \value YCbCr_xvYCC601
+    The BT.601 color space with the value range extended to 0 to 255.
+    It is backward compatibile with BT.601 and uses values outside BT.601 range to represent
+    wider colors range.
+ 
+    \value YCbCr_xvYCC709
+    The BT.709 color space with the value range extended to 0 to 255.
+ 
+    \value YCbCr_JPEG
+    The full range Y'CbCr color space used in JPEG files.
+*/
+
+/*!
+    Constructs a null video stream format.
+*/
+
+QVideoSurfaceFormat::QVideoSurfaceFormat()
+    : d(new QVideoSurfaceFormatPrivate)
+{
+}
+
+/*!
+    Contructs a description of stream which receives stream of \a type buffers with given frame
+    \a size and pixel \a format.
+*/
+
+QVideoSurfaceFormat::QVideoSurfaceFormat(
+        const QSize& size, QVideoFrame::PixelFormat format, QAbstractVideoBuffer::HandleType type)
+    : d(new QVideoSurfaceFormatPrivate(size, format, type))
+{
+}
+
+/*!
+    Constructs a copy of \a other.
+*/
+
+QVideoSurfaceFormat::QVideoSurfaceFormat(const QVideoSurfaceFormat &other)
+    : d(other.d)
+{
+}
+
+/*!
+    Assigns the values of \a other to a video stream description.
+*/
+
+QVideoSurfaceFormat &QVideoSurfaceFormat::operator =(const QVideoSurfaceFormat &other)
+{
+    d = other.d;
+
+    return *this;
+}
+
+/*!
+    Destroys a video stream description.
+*/
+
+QVideoSurfaceFormat::~QVideoSurfaceFormat()
+{
+}
+
+/*!
+    Identifies if a video surface format has a valid pixel format and frame size.
+
+    Returns true if the format is valid, and false otherwise.
+*/
+
+bool QVideoSurfaceFormat::isValid() const
+{
+    return d->pixelFormat == QVideoFrame::Format_Invalid && d->frameSize.isValid();
+}
+
+/*!
+    Returns true if \a other is the same as a video format, and false if they are the different.
+*/
+
+bool QVideoSurfaceFormat::operator ==(const QVideoSurfaceFormat &other) const
+{
+    return d == other.d || *d == *other.d;
+}
+
+/*!
+    Returns true if \a other is different to a video format, and false if they are the same.
+*/
+
+bool QVideoSurfaceFormat::operator !=(const QVideoSurfaceFormat &other) const
+{
+    return d != other.d && !(*d == *other.d);
+}
+
+/*!
+    Returns the pixel format of frames in a video stream.
+*/
+
+QVideoFrame::PixelFormat QVideoSurfaceFormat::pixelFormat() const
+{
+    return d->pixelFormat;
+}
+
+/*!
+    Returns the type of handle the surface uses to present the frame data.
+
+    If the handle type is QAbstractVideoBuffer::NoHandle buffers with any handle type are valid
+    provided they can be \l {QAbstractVideoBuffer::map()}{mapped} with the
+    QAbstractVideoBuffer::ReadOnly flag.  If the handleType() is not QAbstractVideoBuffer::NoHandle
+    then the handle type of the buffer be the same as that of the surface format.
+*/
+
+QAbstractVideoBuffer::HandleType QVideoSurfaceFormat::handleType() const
+{
+    return d->handleType;
+}
+
+/*!
+    Returns the size of frames in a video stream.
+
+    \sa frameWidth(), frameHeight()
+*/
+
+QSize QVideoSurfaceFormat::frameSize() const
+{
+    return d->frameSize;
+}
+
+/*!
+    Returns the width of frames in a video stream.
+
+    \sa frameSize(), frameHeight()
+*/
+
+int QVideoSurfaceFormat::frameWidth() const
+{
+    return d->frameSize.width();
+}
+
+/*!
+    Returns the height of frame in a video stream.
+*/
+
+int QVideoSurfaceFormat::frameHeight() const
+{
+    return d->frameSize.height();
+}
+
+/*!
+    Sets the size of frames in a video stream to \a size.
+
+    This will reset the viewport() to fill the entire frame.
+*/
+
+void QVideoSurfaceFormat::setFrameSize(const QSize &size)
+{
+    d->frameSize = size;
+    d->viewport = QRect(QPoint(0, 0), size);
+}
+
+/*!
+    \overload
+
+    Sets the \a width and \a height of frames in a video stream.
+
+    This will reset the viewport() to fill the entire frame.
+*/
+
+void QVideoSurfaceFormat::setFrameSize(int width, int height)
+{
+    d->frameSize = QSize(width, height);
+    d->viewport = QRect(0, 0, width, height);
+}
+
+/*!
+    Returns the viewport of a video stream.
+
+    The viewport is the region of a video frame that is actually displayed.
+
+    By default the viewport covers an entire frame.
+*/
+
+QRect QVideoSurfaceFormat::viewport() const
+{
+    return d->viewport;
+}
+
+/*!
+    Sets the viewport of a video stream to \a viewport.
+*/
+
+void QVideoSurfaceFormat::setViewport(const QRect &viewport)
+{
+    d->viewport = viewport;
+}
+
+/*!
+    Returns the direction of scan lines.
+*/
+
+QVideoSurfaceFormat::Direction QVideoSurfaceFormat::scanLineDirection() const
+{
+    return d->scanLineDirection;
+}
+
+/*!
+    Sets the \a direction of scan lines.
+*/
+
+void QVideoSurfaceFormat::setScanLineDirection(Direction direction)
+{
+    d->scanLineDirection = direction;
+}
+
+/*!
+    Returns the frame rate of a video stream in frames per second.
+*/
+
+qreal QVideoSurfaceFormat::frameRate() const
+{
+    return d->frameRate;
+}
+
+/*!
+    Sets the frame \a rate of a video stream in frames per second.
+*/
+
+void QVideoSurfaceFormat::setFrameRate(qreal rate)
+{
+    d->frameRate = rate;
+}
+
+/*!
+    Returns a video stream's pixel aspect ratio.
+*/
+
+QSize QVideoSurfaceFormat::pixelAspectRatio() const
+{
+    return d->pixelAspectRatio;
+}
+
+/*!
+    Sets a video stream's pixel aspect \a ratio.
+*/
+
+void QVideoSurfaceFormat::setPixelAspectRatio(const QSize &ratio)
+{
+    d->pixelAspectRatio = ratio;
+}
+
+/*!
+    \overload
+
+    Sets the \a horizontal and \a vertical elements of a video stream's pixel aspect ratio.
+*/
+
+void QVideoSurfaceFormat::setPixelAspectRatio(int horizontal, int vertical)
+{
+    d->pixelAspectRatio = QSize(horizontal, vertical);
+}
+
+/*!
+    Returns the Y'CbCr color space of a video stream.
+*/
+
+QVideoSurfaceFormat::YCbCrColorSpace QVideoSurfaceFormat::yCbCrColorSpace() const
+{
+    return d->ycbcrColorSpace;
+}
+
+/*!
+    Sets the Y'CbCr color \a space of a video stream.
+    It is only used with raw YUV frame types.
+*/
+
+void QVideoSurfaceFormat::setYCbCrColorSpace(QVideoSurfaceFormat::YCbCrColorSpace space)
+{
+    d->ycbcrColorSpace = space;
+}
+
+/*!
+    Returns a suggested size in pixels for the video stream.
+
+    This is the size of the viewport scaled according to the pixel aspect ratio.
+*/
+
+QSize QVideoSurfaceFormat::sizeHint() const
+{
+    QSize size = d->viewport.size();
+
+    if (d->pixelAspectRatio.height() != 0)
+        size.setWidth(size.width() * d->pixelAspectRatio.width() / d->pixelAspectRatio.height());
+
+    return size;
+}
+
+/*!
+    Returns a list of video format dynamic property names.
+*/
+
+QList<QByteArray> QVideoSurfaceFormat::propertyNames() const
+{
+    return (QList<QByteArray>()
+            << "handleType"
+            << "pixelFormat"
+            << "frameSize"
+            << "frameWidth"
+            << "viewport"
+            << "scanLineDirection"
+            << "frameRate"
+            << "pixelAspectRatio"
+            << "sizeHint"
+            << "yCbCrColorSpace")
+            + d->propertyNames;
+}
+
+/*!
+    Returns the value of the video format's \a name property.
+*/
+
+QVariant QVideoSurfaceFormat::property(const char *name) const
+{
+    if (qstrcmp(name, "handleType") == 0) {
+        return qVariantFromValue(d->handleType);
+    } else if (qstrcmp(name, "pixelFormat") == 0) {
+        return qVariantFromValue(d->pixelFormat);
+    } else if (qstrcmp(name, "handleType") == 0) {
+        return qVariantFromValue(d->handleType);
+    } else if (qstrcmp(name, "frameSize") == 0) {
+        return d->frameSize;
+    } else if (qstrcmp(name, "frameWidth") == 0) {
+        return d->frameSize.width();
+    } else if (qstrcmp(name, "frameHeight") == 0) {
+        return d->frameSize.height();
+    } else if (qstrcmp(name, "viewport") == 0) {
+        return d->viewport;
+    } else if (qstrcmp(name, "scanLineDirection") == 0) {
+        return qVariantFromValue(d->scanLineDirection);
+    } else if (qstrcmp(name, "frameRate") == 0) {
+        return qVariantFromValue(d->frameRate);
+    } else if (qstrcmp(name, "pixelAspectRatio") == 0) {
+        return qVariantFromValue(d->pixelAspectRatio);
+    } else if (qstrcmp(name, "sizeHint") == 0) {
+        return sizeHint();
+    } else if (qstrcmp(name, "yCbCrColorSpace") == 0) {
+        return qVariantFromValue(d->ycbcrColorSpace);
+    } else {
+        int id = 0;
+        for (; id < d->propertyNames.count() && d->propertyNames.at(id) != name; ++id) {}
+
+        return id < d->propertyValues.count()
+                ? d->propertyValues.at(id)
+                : QVariant();
+    }
+}
+
+/*!
+    Sets the video format's \a name property to \a value.
+*/
+
+void QVideoSurfaceFormat::setProperty(const char *name, const QVariant &value)
+{
+    if (qstrcmp(name, "handleType") == 0) {
+        // read only.
+    } else if (qstrcmp(name, "pixelFormat") == 0) {
+        // read only.
+    } else if (qstrcmp(name, "frameSize") == 0) {
+        if (qVariantCanConvert<QSize>(value)) {
+            d->frameSize = qvariant_cast<QSize>(value);
+            d->viewport = QRect(QPoint(0, 0), d->frameSize);
+        }
+    } else if (qstrcmp(name, "frameWidth") == 0) {
+        // read only.
+    } else if (qstrcmp(name, "frameHeight") == 0) {
+        // read only.
+    } else if (qstrcmp(name, "viewport") == 0) {
+        if (qVariantCanConvert<QRect>(value))
+            d->viewport = qvariant_cast<QRect>(value);
+    } else if (qstrcmp(name, "scanLineDirection") == 0) {
+        if (qVariantCanConvert<Direction>(value))
+            d->scanLineDirection = qvariant_cast<Direction>(value);
+    } else if (qstrcmp(name, "frameRate") == 0) {
+        if (qVariantCanConvert<qreal>(value))
+            d->frameRate = qvariant_cast<qreal>(value);
+    } else if (qstrcmp(name, "pixelAspectRatio") == 0) {
+        if (qVariantCanConvert<QSize>(value))
+            d->pixelAspectRatio = qvariant_cast<QSize>(value);
+    } else if (qstrcmp(name, "sizeHint") == 0) {
+        // read only.
+    } else if (qstrcmp(name, "yCbCrColorSpace") == 0) {
+          if (qVariantCanConvert<YCbCrColorSpace>(value))
+              d->ycbcrColorSpace = qvariant_cast<YCbCrColorSpace>(value);
+    } else {
+        int id = 0;
+        for (; id < d->propertyNames.count() && d->propertyNames.at(id) != name; ++id) {}
+
+        if (id < d->propertyValues.count()) {
+            if (value.isNull()) {
+                d->propertyNames.removeAt(id);
+                d->propertyValues.removeAt(id);
+            } else {
+                d->propertyValues[id] = value;
+            }
+        } else if (!value.isNull()) {
+            d->propertyNames.append(QByteArray(name));
+            d->propertyValues.append(value);
+        }
+    }
+}
+
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug dbg, const QVideoSurfaceFormat &f)
+{
+    QString typeName;
+    switch (f.pixelFormat()) {
+    case QVideoFrame::Format_Invalid:
+        typeName = QLatin1String("Format_Invalid");
+        break;
+    case QVideoFrame::Format_ARGB32:
+        typeName = QLatin1String("Format_ARGB32");
+        break;
+    case QVideoFrame::Format_ARGB32_Premultiplied:
+        typeName = QLatin1String("Format_ARGB32_Premultiplied");
+        break;
+    case QVideoFrame::Format_RGB32:
+        typeName = QLatin1String("Format_RGB32");
+        break;
+    case QVideoFrame::Format_RGB24:
+        typeName = QLatin1String("Format_RGB24");
+        break;
+    case QVideoFrame::Format_RGB565:
+        typeName = QLatin1String("Format_RGB565");
+        break;
+    case QVideoFrame::Format_RGB555:
+        typeName = QLatin1String("Format_RGB555");
+        break;
+    case QVideoFrame::Format_ARGB8565_Premultiplied:
+        typeName = QLatin1String("Format_ARGB8565_Premultiplied");
+        break;
+    case QVideoFrame::Format_BGRA32:
+        typeName = QLatin1String("Format_BGRA32");
+        break;
+    case QVideoFrame::Format_BGRA32_Premultiplied:
+        typeName = QLatin1String("Format_BGRA32_Premultiplied");
+        break;
+    case QVideoFrame::Format_BGR32:
+        typeName = QLatin1String("Format_BGR32");
+        break;
+    case QVideoFrame::Format_BGR24:
+        typeName = QLatin1String("Format_BGR24");
+        break;
+    case QVideoFrame::Format_BGR565:
+        typeName = QLatin1String("Format_BGR565");
+        break;
+    case QVideoFrame::Format_BGR555:
+        typeName = QLatin1String("Format_BGR555");
+        break;
+    case QVideoFrame::Format_BGRA5658_Premultiplied:
+        typeName = QLatin1String("Format_BGRA5658_Premultiplied");
+        break;
+    case QVideoFrame::Format_AYUV444:
+        typeName = QLatin1String("Format_AYUV444");
+        break;
+    case QVideoFrame::Format_AYUV444_Premultiplied:
+        typeName = QLatin1String("Format_AYUV444_Premultiplied");
+        break;
+    case QVideoFrame::Format_YUV444:
+        typeName = QLatin1String("Format_YUV444");
+        break;
+    case QVideoFrame::Format_YUV420P:
+        typeName = QLatin1String("Format_YUV420P");
+        break;
+    case QVideoFrame::Format_YV12:
+        typeName = QLatin1String("Format_YV12");
+        break;
+    case QVideoFrame::Format_UYVY:
+        typeName = QLatin1String("Format_UYVY");
+        break;
+    case QVideoFrame::Format_YUYV:
+        typeName = QLatin1String("Format_YUYV");
+        break;
+    case QVideoFrame::Format_NV12:
+        typeName = QLatin1String("Format_NV12");
+        break;
+    case QVideoFrame::Format_NV21:
+        typeName = QLatin1String("Format_NV21");
+        break;
+    case QVideoFrame::Format_IMC1:
+        typeName = QLatin1String("Format_IMC1");
+        break;
+    case QVideoFrame::Format_IMC2:
+        typeName = QLatin1String("Format_IMC2");
+        break;
+    case QVideoFrame::Format_IMC3:
+        typeName = QLatin1String("Format_IMC3");
+        break;
+    case QVideoFrame::Format_IMC4:
+        typeName = QLatin1String("Format_IMC4");
+        break;
+    case QVideoFrame::Format_Y8:
+        typeName = QLatin1String("Format_Y8");
+        break;
+    case QVideoFrame::Format_Y16:
+        typeName = QLatin1String("Format_Y16");
+    default:
+        typeName = QString(QLatin1String("UserType(%1)" )).arg(int(f.pixelFormat()));
+    }
+
+    dbg.nospace() << "QVideoSurfaceFormat(" << typeName;
+    dbg.nospace() << ", " << f.frameSize();
+    dbg.nospace() << ", viewport=" << f.viewport();
+    dbg.nospace() << ", pixelAspectRatio=" << f.pixelAspectRatio();
+    dbg.nospace() << ")";
+
+    foreach(const QByteArray& propertyName, f.propertyNames())
+        dbg << "\n    " << propertyName.data() << " = " << f.property(propertyName.data());
+
+    return dbg.space();
+}
+#endif
+
+QT_END_NAMESPACE
diff --git a/src/multimedia/multimedia/video/qvideosurfaceformat.h b/src/multimedia/multimedia/video/qvideosurfaceformat.h
new file mode 100644
index 0000000..9c73f5f
--- /dev/null
+++ b/src/multimedia/multimedia/video/qvideosurfaceformat.h
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIDEOSURFACEFORMAT_H
+#define QVIDEOSURFACEFORMAT_H
+
+#include <QtCore/qlist.h>
+#include <QtCore/qpair.h>
+#include <QtCore/qshareddata.h>
+#include <QtCore/qsize.h>
+#include <QtGui/qimage.h>
+#include <QtMultimedia/qvideoframe.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Multimedia)
+
+class QDebug;
+
+class QVideoSurfaceFormatPrivate;
+
+class Q_MULTIMEDIA_EXPORT QVideoSurfaceFormat
+{
+public:
+    enum Direction
+    {
+        TopToBottom,
+        BottomToTop
+    };
+
+    enum YCbCrColorSpace
+    {
+        YCbCr_Undefined,
+        YCbCr_BT601,
+        YCbCr_BT709,
+        YCbCr_xvYCC601,
+        YCbCr_xvYCC709,
+        YCbCr_JPEG,
+#ifndef qdoc
+        YCbCr_CustomMatrix
+#endif
+    };
+
+    QVideoSurfaceFormat();
+    QVideoSurfaceFormat(
+            const QSize &size,
+            QVideoFrame::PixelFormat pixelFormat,
+            QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle);
+    QVideoSurfaceFormat(const QVideoSurfaceFormat &format);
+    ~QVideoSurfaceFormat();
+
+    QVideoSurfaceFormat &operator =(const QVideoSurfaceFormat &format);
+
+    bool operator ==(const QVideoSurfaceFormat &format) const;
+    bool operator !=(const QVideoSurfaceFormat &format) const;
+
+    bool isValid() const;
+
+    QVideoFrame::PixelFormat pixelFormat() const;
+    QAbstractVideoBuffer::HandleType handleType() const;
+
+    QSize frameSize() const;
+    void setFrameSize(const QSize &size);
+    void setFrameSize(int width, int height);
+
+    int frameWidth() const;
+    int frameHeight() const;
+
+    QRect viewport() const;
+    void setViewport(const QRect &viewport);
+
+    Direction scanLineDirection() const;
+    void setScanLineDirection(Direction direction);
+
+    qreal frameRate() const;
+    void setFrameRate(qreal rate);
+
+    QSize pixelAspectRatio() const;
+    void setPixelAspectRatio(const QSize &ratio);
+    void setPixelAspectRatio(int width, int height);
+
+    YCbCrColorSpace yCbCrColorSpace() const;
+    void setYCbCrColorSpace(YCbCrColorSpace colorSpace);
+
+    QSize sizeHint() const;
+
+    QList<QByteArray> propertyNames() const;
+    QVariant property(const char *name) const;
+    void setProperty(const char *name, const QVariant &value);
+
+private:
+    QSharedDataPointer<QVideoSurfaceFormatPrivate> d;
+};
+
+#ifndef QT_NO_DEBUG_STREAM
+Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug, const QVideoSurfaceFormat &);
+#endif
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QVideoSurfaceFormat::Direction)
+Q_DECLARE_METATYPE(QVideoSurfaceFormat::YCbCrColorSpace)
+
+QT_END_HEADER
+
+#endif
+
diff --git a/src/multimedia/multimedia/video/video.pri b/src/multimedia/multimedia/video/video.pri
new file mode 100644
index 0000000..0547a4c
--- /dev/null
+++ b/src/multimedia/multimedia/video/video.pri
@@ -0,0 +1,21 @@
+
+INCLUDEPATH += $$PWD
+
+HEADERS += \
+    $$PWD/qabstractvideobuffer.h \
+    $$PWD/qabstractvideobuffer_p.h \
+    $$PWD/qabstractvideosurface.h \
+    $$PWD/qabstractvideosurface_p.h \
+    $$PWD/qimagevideobuffer_p.h \
+    $$PWD/qmemoryvideobuffer_p.h \
+    $$PWD/qvideoframe.h \
+    $$PWD/qvideosurfaceformat.h
+
+SOURCES += \
+    $$PWD/qabstractvideobuffer.cpp \
+    $$PWD/qabstractvideosurface.cpp \
+    $$PWD/qimagevideobuffer.cpp \
+    $$PWD/qmemoryvideobuffer.cpp \
+    $$PWD/qvideoframe.cpp \
+    $$PWD/qvideosurfaceformat.cpp
+
diff --git a/src/multimedia/playback/playback.pri b/src/multimedia/playback/playback.pri
deleted file mode 100644
index 09a81c9..0000000
--- a/src/multimedia/playback/playback.pri
+++ /dev/null
@@ -1,11 +0,0 @@
-
-HEADERS += \
-    $$PWD/qmediaplayer.h \
-    $$PWD/qmediaplayercontrol.h
-
-SOURCES += \
-    $$PWD/qmediaplayer.cpp \
-    $$PWD/qmediaplayercontrol.cpp
-    
-
-
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
deleted file mode 100644
index 9466cad..0000000
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ /dev/null
@@ -1,982 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qcoreevent.h>
-#include <QtCore/qmetaobject.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qpointer.h>
-#include <QtCore/qdebug.h>
-
-#include <QtMultimedia/qmediaplayer.h>
-
-#include <QtMultimedia/private/qmediaobject_p.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaserviceprovider.h>
-#include <QtMultimedia/qmediaplaylist.h>
-#include <QtMultimedia/qmediaplaylistcontrol.h>
-#include <QtMultimedia/qvideowidget.h>
-#include <QtMultimedia/qgraphicsvideoitem.h>
-
-//#define DEBUG_PLAYER_STATE
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-/*!
-    \class QMediaPlayer
-    \brief The QMediaPlayer class allows the playing of a media source.
-    \ingroup multimedia
-    \since 4.7
-    \preliminary
-
-    The QMediaPlayer class is a high level media playback class. It can be used
-    to playback such content as songs, movies and internet radio. The content
-    to playback is specified as a QMediaContent, which can be thought of as a
-    main or canonical URL with addition information attached. When provided
-    with a QMediaContent playback may be able to commence.
-
-    \code
-        player = new QMediaPlayer;
-        connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
-        player->setMedia(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
-        player->setVolume(50);
-        player->play();
-    \endcode
-
-    QVideoWidget can be used with QMediaPlayer for video rendering and QMediaPlaylist
-    for accessing playlist functionality.
-
-    \code
-        player = new QMediaPlayer;
-
-        playlist = new QMediaPlaylist;
-        playlist->setMediaObject(player);
-        playlist->append(QUrl("http://example.com/movie1.mp4"));
-        playlist->append(QUrl("http://example.com/movie2.mp4"));
-
-        widget = new QVideoWidget;
-        widget->setMediaObject(player);
-        widget->show();
-
-        player->play();
-    \endcode
-
-    \sa QMediaObject, QMediaService, QVideoWidget, QMediaPlaylist
-*/
-
-namespace
-{
-class MediaPlayerRegisterMetaTypes
-{
-public:
-    MediaPlayerRegisterMetaTypes()
-    {
-        qRegisterMetaType<QMediaPlayer::State>();
-        qRegisterMetaType<QMediaPlayer::MediaStatus>();
-        qRegisterMetaType<QMediaPlayer::Error>();
-    }
-} _registerPlayerMetaTypes;
-}
-
-class QMediaPlayerPrivate : public QMediaObjectPrivate
-{
-    Q_DECLARE_NON_CONST_PUBLIC(QMediaPlayer)
-
-public:
-    QMediaPlayerPrivate()
-        : provider(0)
-        , control(0)
-        , playlistControl(0)
-        , state(QMediaPlayer::StoppedState)
-        , error(QMediaPlayer::NoError)
-        , filterStates(false)
-        , playlist(0)
-    {}
-
-    QMediaServiceProvider *provider;
-    QMediaPlayerControl* control;
-    QMediaPlaylistControl* playlistControl;
-    QMediaPlayer::State state;
-    QMediaPlayer::Error error;
-    QString errorString;
-    bool filterStates;
-
-    QMediaPlaylist *playlist;
-    QPointer<QVideoWidget> videoWidget;
-    QPointer<QGraphicsVideoItem> videoItem;
-
-    void _q_stateChanged(QMediaPlayer::State state);
-    void _q_mediaStatusChanged(QMediaPlayer::MediaStatus status);
-    void _q_error(int error, const QString &errorString);
-    void _q_updateMedia(const QMediaContent&);
-    void _q_playlistDestroyed();
-};
-
-#define ENUM_NAME(c,e,v) (c::staticMetaObject.enumerator(c::staticMetaObject.indexOfEnumerator(e)).valueToKey((v)))
-
-void QMediaPlayerPrivate::_q_stateChanged(QMediaPlayer::State ps)
-{
-    Q_Q(QMediaPlayer);
-
-#ifdef DEBUG_PLAYER_STATE
-    qDebug() << "State changed:" << ENUM_NAME(QMediaPlayer, "State", ps) << (filterStates ? "(filtered)" : "");
-#endif
-
-    if (filterStates)
-        return;
-
-    if (playlist
-            && !playlistControl //service should do this itself
-            && ps != state && ps == QMediaPlayer::StoppedState
-            && control->mediaStatus() == QMediaPlayer::EndOfMedia) {
-        playlist->next();
-        ps = control->state();
-    }
-
-    if (ps != state) {
-        state = ps;
-
-        if (ps == QMediaPlayer::PlayingState)
-            q->addPropertyWatch("position");
-        else
-            q->removePropertyWatch("position");
-
-        emit q->stateChanged(ps);
-    }
-}
-
-void QMediaPlayerPrivate::_q_mediaStatusChanged(QMediaPlayer::MediaStatus status)
-{
-    Q_Q(QMediaPlayer);
-
-#ifdef DEBUG_PLAYER_STATE
-    qDebug() << "MediaStatus changed:" << ENUM_NAME(QMediaPlayer, "MediaStatus", status);
-#endif
-
-    switch (status) {
-    case QMediaPlayer::StalledMedia:
-    case QMediaPlayer::BufferingMedia:
-        q->addPropertyWatch("bufferStatus");
-        emit q->mediaStatusChanged(status);
-        break;
-    default:
-        q->removePropertyWatch("bufferStatus");
-        emit q->mediaStatusChanged(status);
-        break;
-    }
-
-}
-
-void QMediaPlayerPrivate::_q_error(int error, const QString &errorString)
-{
-    Q_Q(QMediaPlayer);
-
-    this->error = QMediaPlayer::Error(error);
-    this->errorString = errorString;
-
-    emit q->error(this->error);
-}
-
-void QMediaPlayerPrivate::_q_updateMedia(const QMediaContent &media)
-{
-    const QMediaPlayer::State currentState = state;
-
-    filterStates = true;
-    control->setMedia(media, 0);
-
-    if (!media.isNull()) {
-        switch (currentState) {
-        case QMediaPlayer::PlayingState:
-            control->play();
-            break;
-        case QMediaPlayer::PausedState:
-            control->pause();
-            break;
-        default:
-            break;
-        }
-    }
-    filterStates = false;
-
-    state = control->state();
-
-    if (state != currentState) {
-#ifdef DEBUG_PLAYER_STATE
-        qDebug() << "State changed:" << ENUM_NAME(QMediaPlayer, "State", state);
-#endif
-        emit q_func()->stateChanged(state);
-    }
-}
-
-void QMediaPlayerPrivate::_q_playlistDestroyed()
-{
-    playlist = 0;
-
-    control->setMedia(QMediaContent(), 0);
-}
-
-static QMediaService *playerService(QMediaPlayer::Flags flags, QMediaServiceProvider *provider)
-{
-    if (flags) {
-        QMediaServiceProviderHint::Features features = 0;
-        if (flags & QMediaPlayer::LowLatency)
-            features |= QMediaServiceProviderHint::LowLatencyPlayback;
-
-        if (flags & QMediaPlayer::StreamPlayback)
-            features |= QMediaServiceProviderHint::StreamPlayback;
-
-        return provider->requestService(Q_MEDIASERVICE_MEDIAPLAYER,
-                                        QMediaServiceProviderHint(features));
-    } else
-        return provider->requestService(Q_MEDIASERVICE_MEDIAPLAYER);
-}
-
-
-/*!
-    Construct a QMediaPlayer that uses the playback service from \a provider,
-    parented to \a parent and with \a flags.
-
-    If a playback service is not specified the system default will be used.
-*/
-
-QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags, QMediaServiceProvider *provider):
-    QMediaObject(*new QMediaPlayerPrivate,
-                 parent,
-                 playerService(flags,provider))
-{
-    Q_D(QMediaPlayer);
-
-    d->provider = provider;
-
-    if (d->service == 0) {
-        d->error = ServiceMissingError;
-    } else {
-        d->control = qobject_cast<QMediaPlayerControl*>(d->service->control(QMediaPlayerControl_iid));
-        d->playlistControl = qobject_cast<QMediaPlaylistControl*>(d->service->control(QMediaPlaylistControl_iid));
-        if (d->control != 0) {
-            connect(d->control, SIGNAL(mediaChanged(QMediaContent)), SIGNAL(mediaChanged(QMediaContent)));
-            connect(d->control, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(_q_stateChanged(QMediaPlayer::State)));
-            connect(d->control, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
-                    SLOT(_q_mediaStatusChanged(QMediaPlayer::MediaStatus)));
-            connect(d->control, SIGNAL(error(int,QString)), SLOT(_q_error(int,QString)));
-
-            connect(d->control, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged(qint64)));
-            connect(d->control, SIGNAL(positionChanged(qint64)), SIGNAL(positionChanged(qint64)));
-            connect(d->control, SIGNAL(audioAvailableChanged(bool)), SIGNAL(audioAvailableChanged(bool)));
-            connect(d->control, SIGNAL(videoAvailableChanged(bool)), SIGNAL(videoAvailableChanged(bool)));
-            connect(d->control, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged(int)));
-            connect(d->control, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged(bool)));
-            connect(d->control, SIGNAL(seekableChanged(bool)), SIGNAL(seekableChanged(bool)));
-            connect(d->control, SIGNAL(playbackRateChanged(qreal)), SIGNAL(playbackRateChanged(qreal)));
-
-            if (d->control->state() == PlayingState)
-                addPropertyWatch("position");
-
-            if (d->control->mediaStatus() == StalledMedia || d->control->mediaStatus() == BufferingMedia)
-                addPropertyWatch("bufferStatus");
-        }
-    }
-}
-
-
-/*!
-    Destroys the player object.
-*/
-
-QMediaPlayer::~QMediaPlayer()
-{
-    Q_D(QMediaPlayer);
-
-    d->provider->releaseService(d->service);
-}
-
-QMediaContent QMediaPlayer::media() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->media();
-
-    return QMediaContent();
-}
-
-/*!
-    Returns the stream source of media data.
-
-    This is only valid if a stream was passed to setMedia().
-
-    \sa setMedia()
-*/
-
-const QIODevice *QMediaPlayer::mediaStream() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->mediaStream();
-
-    return 0;
-}
-
-QMediaPlayer::State QMediaPlayer::state() const
-{
-    return d_func()->state;
-}
-
-QMediaPlayer::MediaStatus QMediaPlayer::mediaStatus() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->mediaStatus();
-
-    return QMediaPlayer::UnknownMediaStatus;
-}
-
-qint64 QMediaPlayer::duration() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->duration();
-
-    return -1;
-}
-
-qint64 QMediaPlayer::position() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->position();
-
-    return 0;
-}
-
-int QMediaPlayer::volume() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->volume();
-
-    return 0;
-}
-
-bool QMediaPlayer::isMuted() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->isMuted();
-
-    return false;
-}
-
-int QMediaPlayer::bufferStatus() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->bufferStatus();
-
-    return 0;
-}
-
-bool QMediaPlayer::isAudioAvailable() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->isAudioAvailable();
-
-    return false;
-}
-
-bool QMediaPlayer::isVideoAvailable() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->isVideoAvailable();
-
-    return false;
-}
-
-bool QMediaPlayer::isSeekable() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->isSeekable();
-
-    return false;
-}
-
-qreal QMediaPlayer::playbackRate() const
-{
-    Q_D(const QMediaPlayer);
-
-    if (d->control != 0)
-        return d->control->playbackRate();
-
-    return 0.0;
-}
-
-/*!
-    Returns the current error state.
-*/
-
-QMediaPlayer::Error QMediaPlayer::error() const
-{
-    return d_func()->error;
-}
-
-QString QMediaPlayer::errorString() const
-{
-    return d_func()->errorString;
-}
-
-//public Q_SLOTS:
-/*!
-    Start or resume playing the current source.
-*/
-
-void QMediaPlayer::play()
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control == 0) {
-        QMetaObject::invokeMethod(this, "_q_error", Qt::QueuedConnection);
-                                    Q_ARG(int, QMediaPlayer::ServiceMissingError),
-                                    Q_ARG(QString, tr("The QMediaPlayer object does not have a valid service"));
-        return;
-    }
-
-    //if playlist control is available, the service should advance itself
-    if (d->playlist && !d->playlistControl && d->playlist->currentIndex() == -1 && !d->playlist->isEmpty())
-        d->playlist->setCurrentIndex(0);
-
-    // Reset error conditions
-    d->error = NoError;
-    d->errorString = QString();
-
-    d->control->play();
-}
-
-/*!
-    Pause playing the current source.
-*/
-
-void QMediaPlayer::pause()
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control != 0)
-        d->control->pause();
-}
-
-/*!
-    Stop playing, and reset the play position to the beginning.
-*/
-
-void QMediaPlayer::stop()
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control != 0)
-        d->control->stop();
-}
-
-void QMediaPlayer::setPosition(qint64 position)
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control == 0 || !isSeekable())
-        return;
-
-    d->control->setPosition(qBound(qint64(0), duration(), position));
-}
-
-void QMediaPlayer::setVolume(int v)
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control == 0)
-        return;
-
-    int clamped = qBound(0, v, 100);
-    if (clamped == volume())
-        return;
-
-    d->control->setVolume(clamped);
-}
-
-void QMediaPlayer::setMuted(bool muted)
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control == 0 || muted == isMuted())
-        return;
-
-    d->control->setMuted(muted);
-}
-
-void QMediaPlayer::setPlaybackRate(qreal rate)
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control != 0)
-        d->control->setPlaybackRate(rate);
-}
-
-/*!
-    Sets the current \a media source.
-
-    If a \a stream is supplied; media data will be read from it instead of resolving the media
-    source.  In this case the media source may still be used to resolve additional information
-    about the media such as mime type.
-
-    Setting the media to a null QMediaContent will cause the player to discard all
-    information relating to the current media source and to cease all I/O operations related
-    to that media.
-*/
-
-void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream)
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control != 0)
-        d_func()->control->setMedia(media, stream);
-}
-
-/*!
-    \internal
-*/
-
-void QMediaPlayer::bind(QObject *obj)
-{
-    Q_D(QMediaPlayer);
-
-    if (d->control != 0) {
-        QMediaPlaylist *playlist = qobject_cast<QMediaPlaylist*>(obj);
-
-        if (playlist) {
-            if (d->playlist)
-                d->playlist->setMediaObject(0);
-
-            d->playlist = playlist;
-            connect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
-                    this, SLOT(_q_updateMedia(QMediaContent)));
-            connect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
-
-            setMedia(playlist->currentMedia());
-
-            return;
-        }
-
-        QVideoWidget *videoWidget = qobject_cast<QVideoWidget*>(obj);
-        QGraphicsVideoItem *videoItem = qobject_cast<QGraphicsVideoItem*>(obj);
-
-        if (videoWidget || videoItem) {
-            //detach the current video output
-            if (d->videoWidget) {
-                d->videoWidget->setMediaObject(0);
-                d->videoWidget = 0;
-            }
-
-            if (d->videoItem) {
-                d->videoItem->setMediaObject(0);
-                d->videoItem = 0;
-            }
-        }
-
-        if (videoWidget)
-            d->videoWidget = videoWidget;
-
-        if (videoItem)
-            d->videoItem = videoItem;
-    }
-}
-
-/*!
-    \internal
-*/
-
-void QMediaPlayer::unbind(QObject *obj)
-{
-    Q_D(QMediaPlayer);
-
-    if (obj == d->videoWidget) {
-        d->videoWidget = 0;
-    } else if (obj == d->videoItem) {
-        d->videoItem = 0;
-    } else if (obj == d->playlist) {
-        disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
-                this, SLOT(_q_updateMedia(QMediaContent)));
-        disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
-        d->playlist = 0;
-        setMedia(QMediaContent());
-    }
-}
-
-/*!
-    Returns the level of support a media player has for a \a mimeType and a set of \a codecs.
-
-    The \a flags argument allows additional requirements such as performance indicators to be
-    specified.
-*/
-QtMultimedia::SupportEstimate QMediaPlayer::hasSupport(const QString &mimeType,
-                                               const QStringList& codecs,
-                                               Flags flags)
-{
-    return QMediaServiceProvider::defaultServiceProvider()->hasSupport(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER),
-                                                                    mimeType,
-                                                                    codecs,
-                                                                    flags);
-}
-
-/*!
-    Returns a list of MIME types supported by the media player.
-
-    The \a flags argument causes the resultant list to be restricted to MIME types which can be supported
-    given additional requirements, such as performance indicators.
-*/
-QStringList QMediaPlayer::supportedMimeTypes(Flags flags)
-{
-    return QMediaServiceProvider::defaultServiceProvider()->supportedMimeTypes(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER),
-                                                                               flags);
-}
-
-
-// Enums
-/*!
-    \enum QMediaPlayer::State
-
-    Defines the current state of a media player.
-
-    \value PlayingState The media player is currently playing content.
-    \value PausedState The media player has paused playback, playback of the current track will
-    resume from the position the player was paused at.
-    \value StoppedState The media player is not playing content, playback will begin from the start
-    of the current track.
-*/
-
-/*!
-    \enum QMediaPlayer::MediaStatus
-
-    Defines the status of a media player's current media.
-
-    \value UnknownMediaStatus The status of the media cannot be determined.
-    \value NoMedia The is no current media.  The player is in the StoppedState.
-    \value LoadingMedia The current media is being loaded. The player may be in any state.
-    \value LoadedMedia The current media has been loaded. The player is in the StoppedState.
-    \value StalledMedia Playback of the current media has stalled due to insufficient buffering or
-    some other temporary interruption.  The player is in the PlayingState or PausedState.
-    \value BufferingMedia The player is buffering data but has enough data buffered for playback to
-    continue for the immediate future.  The player is in the PlayingState or PausedState.
-    \value BufferedMedia The player has fully buffered the current media.  The player is in the
-    PlayingState or PausedState.
-    \value EndOfMedia Playback has reached the end of the current media.  The player is in the
-    StoppedState.
-    \value InvalidMedia The current media cannot be played.  The player is in the StoppedState.
-*/
-
-/*!
-    \enum QMediaPlayer::Error
-
-    Defines a media player error condition.
-
-    \value NoError No error has occurred.
-    \value ResourceError A media resource couldn't be resolved.
-    \value FormatError The format of a media resource isn't (fully) supported.  Playback may still
-    be possible, but without an audio or video component.
-    \value NetworkError A network error occurred.
-    \value AccessDeniedError There are not the appropriate permissions to play a media resource.
-    \value ServiceMissingError A valid playback service was not found, playback cannot proceed.
-*/
-
-// Signals
-/*!
-    \fn QMediaPlayer::error(QMediaPlayer::Error error)
-
-    Signals that an \a error condition has occurred.
-
-    \sa errorString()
-*/
-
-/*!
-    \fn void QMediaPlayer::stateChanged(State state)
-
-    Signal the \a state of the Player object has changed.
-*/
-
-/*!
-    \fn QMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status)
-
-    Signals that the \a status of the current media has changed.
-
-    \sa mediaStatus()
-*/
-
-/*!
-    \fn void QMediaPlayer::mediaChanged(const QMediaContent &media);
-
-    Signals that the current playing content will be obtained from \a media.
-
-    \sa media()
-*/
-
-/*!
-    \fn void QMediaPlayer::playbackRateChanged(qreal rate);
-
-    Signals the playbackRate has changed to \a rate.
-*/
-
-/*!
-    \fn void QMediaPlayer::seekableChanged(bool seekable);
-
-    Signals the \a seekable status of the player object has changed.
-*/
-
-// Properties
-/*!
-    \property QMediaPlayer::state
-    \brief the media player's playback state.
-
-    By default this property is QMediaPlayer::Stopped
-
-    \sa mediaStatus(), play(), pause(), stop()
-*/
-
-/*!
-    \property QMediaPlayer::error
-    \brief a string describing the last error condition.
-
-    \sa error()
-*/
-
-/*!
-    \property QMediaPlayer::media
-    \brief the active media source being used by the player object.
-
-    The player object will use the QMediaContent for selection of the content to
-    be played.
-
-    By default this property has a null QMediaContent.
-
-    Setting this property to a null QMediaContent will cause the player to discard all
-    information relating to the current media source and to cease all I/O operations related
-    to that media.
-
-    \sa QMediaContent
-*/
-
-/*!
-    \property QMediaPlayer::mediaStatus
-    \brief the status of the current media stream.
-
-    The stream status describes how the playback of the current stream is
-    progressing.
-
-    By default this property is QMediaPlayer::NoMedia
-
-    \sa state
-*/
-
-/*!
-    \property QMediaPlayer::duration
-    \brief the duration of the current media.
-
-    The value is the total playback time in milliseconds of the current media.
-    The value may change across the life time of the QMediaPlayer object and
-    may not be available when initial playback begins, connect to the
-    durationChanged() signal to receive status notifications.
-*/
-
-/*!
-    \property QMediaPlayer::position
-    \brief the playback position of the current media.
-
-    The value is the current playback position, expressed in milliseconds since
-    the beginning of the media. Periodically changes in the position will be
-    indicated with the signal positionChanged(), the interval between updates
-    can be set with QMediaObject's method setNotifyInterval().
-*/
-
-/*!
-    \property QMediaPlayer::volume
-    \brief the current playback volume.
-
-    The playback volume is a linear in effect and the value can range from 0 -
-    100, values outside this range will be clamped.
-*/
-
-/*!
-    \property QMediaPlayer::muted
-    \brief the muted state of the current media.
-
-    The value will be true if the playback volume is muted; otherwise false.
-*/
-
-/*!
-    \property QMediaPlayer::bufferStatus
-    \brief the percentage of the temporary buffer filled before playback begins.
-
-    When the player object is buffering; this property holds the percentage of
-    the temporary buffer that is filled. The buffer will need to reach 100%
-    filled before playback can resume, at which time the MediaStatus will be
-    BufferedMedia.
-
-    \sa mediaStatus()
-*/
-
-/*!
-    \property QMediaPlayer::audioAvailable
-    \brief the audio availabilty status for the current media.
-
-    As the life time of QMediaPlayer can be longer than the playback of one
-    QMediaContent, this property may change over time, the
-    audioAvailableChanged signal can be used to monitor it's status.
-*/
-
-/*!
-    \property QMediaPlayer::videoAvailable
-    \brief the video availability status for the current media.
-
-    If available, the QVideoWidget class can be used to view the video. As the
-    life time of QMediaPlayer can be longer than the playback of one
-    QMediaContent, this property may change over time, the
-    videoAvailableChanged signal can be used to monitor it's status.
-
-    \sa QVideoWidget, QMediaContent
-*/
-
-/*!
-    \property QMediaPlayer::seekable
-    \brief the seek-able status of the current media
-
-    If seeking is supported this property will be true; false otherwise. The
-    status of this property may change across the life time of the QMediaPlayer
-    object, use the seekableChanged signal to monitor changes.
-*/
-
-/*!
-    \property QMediaPlayer::playbackRate
-    \brief the playback rate of the current media.
-
-    This value is a multiplier applied to the media's standard play rate. By
-    default this value is 1.0, indicating that the media is playing at the
-    standard pace. Values higher than 1.0 will increase the rate of play.
-    Values less than zero can be set and indicate the media will rewind at the
-    multiplier of the standard pace.
-
-    Not all playback services support change of the playback rate. It is
-    framework defined as to the status and quality of audio and video
-    while fast forwarding or rewinding.
-*/
-
-/*!
-    \fn void QMediaPlayer::durationChanged(qint64 duration)
-
-    Signal the duration of the content has changed to \a duration, expressed in milliseconds.
-*/
-
-/*!
-    \fn void QMediaPlayer::positionChanged(qint64 position)
-
-    Signal the position of the content has changed to \a position, expressed in
-    milliseconds.
-*/
-
-/*!
-    \fn void QMediaPlayer::volumeChanged(int volume)
-
-    Signal the playback volume has changed to \a volume.
-*/
-
-/*!
-    \fn void QMediaPlayer::mutedChanged(bool muted)
-
-    Signal the mute state has changed to \a muted.
-*/
-
-/*!
-    \fn void QMediaPlayer::audioAvailableChanged(bool available)
-
-    Signals the availability of audio content has changed to \a available.
-*/
-
-/*!
-    \fn void QMediaPlayer::videoAvailableChanged(bool videoAvailable)
-
-    Signal the availability of visual content has changed to \a videoAvailable.
-*/
-
-/*!
-    \fn void QMediaPlayer::bufferStatusChanged(int percentFilled)
-
-    Signal the amount of the local buffer filled as a percentage by \a percentFilled.
-*/
-
-/*!
-    \enum QMediaPlayer::Flag
-
-    \value LowLatency
-            The player is expected to be used with simple audio formats,
-            but playback should start without significant delay.
-            Such playback service can be used for beeps, ringtones, etc.
-
-    \value StreamPlayback
-            The player is expected to play QIODevice based streams.
-            If passed to QMediaPlayer constructor, the service supporting
-            streams playback will be choosen.
-*/
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#include "moc_qmediaplayer.cpp"
diff --git a/src/multimedia/playback/qmediaplayer.h b/src/multimedia/playback/qmediaplayer.h
deleted file mode 100644
index 129b244..0000000
--- a/src/multimedia/playback/qmediaplayer.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYER_H
-#define QMEDIAPLAYER_H
-
-#include <QtMultimedia/qmediaserviceprovider.h>
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediacontent.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QMediaPlaylist;
-
-class QMediaPlayerPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlayer : public QMediaObject
-{
-    Q_OBJECT
-    Q_PROPERTY(QMediaContent media READ media WRITE setMedia NOTIFY mediaChanged)
-    Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged)
-    Q_PROPERTY(qint64 position READ position WRITE setPosition NOTIFY positionChanged)
-    Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged)
-    Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
-    Q_PROPERTY(int bufferStatus READ bufferStatus NOTIFY bufferStatusChanged)
-    Q_PROPERTY(bool audioAvailable READ isAudioAvailable NOTIFY audioAvailableChanged)
-    Q_PROPERTY(bool videoAvailable READ isVideoAvailable NOTIFY videoAvailableChanged)
-    Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged)
-    Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
-    Q_PROPERTY(State state READ state NOTIFY stateChanged)
-    Q_PROPERTY(MediaStatus mediaStatus READ mediaStatus NOTIFY mediaStatusChanged)
-    Q_PROPERTY(QString error READ errorString)
-    Q_ENUMS(State)
-    Q_ENUMS(MediaStatus)
-
-public:
-    enum State
-    {
-        StoppedState,
-        PlayingState,
-        PausedState
-    };
-
-    enum MediaStatus
-    {
-        UnknownMediaStatus,
-        NoMedia,
-        LoadingMedia,
-        LoadedMedia,
-        StalledMedia,
-        BufferingMedia,
-        BufferedMedia,
-        EndOfMedia,
-        InvalidMedia
-    };
-
-    enum Flag
-    {
-        LowLatency = 0x01,
-        StreamPlayback = 0x02
-    };
-    Q_DECLARE_FLAGS(Flags, Flag)
-
-    enum Error
-    {
-        NoError,
-        ResourceError,
-        FormatError,
-        NetworkError,
-        AccessDeniedError,
-        ServiceMissingError
-    };
-
-    QMediaPlayer(QObject *parent = 0, Flags flags = 0, QMediaServiceProvider *provider = QMediaServiceProvider::defaultServiceProvider());
-    ~QMediaPlayer();
-
-    static QtMultimedia::SupportEstimate hasSupport(const QString &mimeType,
-                                            const QStringList& codecs = QStringList(),
-                                            Flags flags = 0);
-    static QStringList supportedMimeTypes(Flags flags = 0);
-
-    QMediaContent media() const;
-    const QIODevice *mediaStream() const;
-
-    State state() const;
-    MediaStatus mediaStatus() const;
-
-    qint64 duration() const;
-    qint64 position() const;
-
-    int volume() const;
-    bool isMuted() const;
-    bool isAudioAvailable() const;
-    bool isVideoAvailable() const;
-
-    int bufferStatus() const;
-
-    bool isSeekable() const;
-    qreal playbackRate() const;
-
-    Error error() const;
-    QString errorString() const;
-
-public Q_SLOTS:
-    void play();
-    void pause();
-    void stop();
-
-    void setPosition(qint64 position);
-    void setVolume(int volume);
-    void setMuted(bool muted);
-
-    void setPlaybackRate(qreal rate);
-
-    void setMedia(const QMediaContent &media, QIODevice *stream = 0);
-
-Q_SIGNALS:
-    void mediaChanged(const QMediaContent &media);
-
-    void stateChanged(QMediaPlayer::State newState);
-    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
-
-    void durationChanged(qint64 duration);
-    void positionChanged(qint64 position);
-
-    void volumeChanged(int volume);
-    void mutedChanged(bool muted);
-    void audioAvailableChanged(bool audioAvailable);
-    void videoAvailableChanged(bool videoAvailable);
-
-    void bufferStatusChanged(int percentFilled);
-
-    void seekableChanged(bool seekable);
-    void playbackRateChanged(qreal rate);
-
-    void error(QMediaPlayer::Error error);
-
-public:
-    virtual void bind(QObject*);
-    virtual void unbind(QObject*);
-
-private:
-    Q_DISABLE_COPY(QMediaPlayer)
-    Q_DECLARE_PRIVATE(QMediaPlayer)
-    Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QMediaPlayer::State))
-    Q_PRIVATE_SLOT(d_func(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus))
-    Q_PRIVATE_SLOT(d_func(), void _q_error(int, const QString &))
-    Q_PRIVATE_SLOT(d_func(), void _q_updateMedia(const QMediaContent&))
-    Q_PRIVATE_SLOT(d_func(), void _q_playlistDestroyed())
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QMediaPlayer::State)
-Q_DECLARE_METATYPE(QMediaPlayer::MediaStatus)
-Q_DECLARE_METATYPE(QMediaPlayer::Error)
-
-QT_END_HEADER
-
-#endif  // QMEDIAPLAYER_H
diff --git a/src/multimedia/playback/qmediaplayercontrol.cpp b/src/multimedia/playback/qmediaplayercontrol.cpp
deleted file mode 100644
index 2129098..0000000
--- a/src/multimedia/playback/qmediaplayercontrol.cpp
+++ /dev/null
@@ -1,378 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/private/qmediacontrol_p.h>
-#include <QtMultimedia/qmediaplayer.h>
-
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
-    \class QMediaPlayerControl
-    \ingroup multimedia-serv
-    \since 4.7
-    \preliminary
-    \brief The QMediaPlayerControl class provides access to the media playing
-    functionality of a QMediaService.
-
-    If a QMediaService can play media is will implement QMediaPlayerControl.
-    This control provides a means to set the \l {setMedia()}{media} to play,
-    \l {play()}{start}, \l {pause()} {pause} and \l {stop()}{stop} playback,
-    \l {setPosition()}{seek}, and control the \l {setVolume()}{volume}.
-    It also provides feedback on the \l {duration()}{duration} of the media,
-    the current \l {position()}{position}, and \l {bufferStatus()}{buffering}
-    progress.
-
-    The functionality provided by this control is exposed to application
-    code through the QMediaPlayer class.
-
-    The interface name of QMediaPlayerControl is \c com.nokia.Qt.QMediaPlayerControl/1.0 as
-    defined in QMediaPlayerControl_iid.
-
-    \sa QMediaService::control(), QMediaPlayer
-*/
-
-/*!
-    \macro QMediaPlayerControl_iid
-
-    \c com.nokia.Qt.QMediaPlayerControl/1.0
-
-    Defines the interface name of the QMediaPlayerControl class.
-
-    \relates QMediaPlayerControl
-*/
-
-/*!
-    Destroys a media player control.
-*/
-QMediaPlayerControl::~QMediaPlayerControl()
-{
-}
-
-/*!
-    Constructs a new media player control with the given \a parent.
-*/
-QMediaPlayerControl::QMediaPlayerControl(QObject *parent):
-    QMediaControl(*new QMediaControlPrivate, parent)
-{
-}
-
-/*!
-    \fn QMediaPlayerControl::state() const
-
-    Returns the state of a player control.
-*/
-
-/*!
-    \fn QMediaPlayerControl::stateChanged(QMediaPlayer::State state)
-
-    Signals that the \a state of a player control has changed.
-
-    \sa state()
-*/
-
-/*!
-    \fn QMediaPlayerControl::mediaStatus() const
-
-    Returns the status of the current media.
-*/
-
-/*!
-    \fn QMediaPlayerControl::mediaStatusChanged(QMediaPlayer::MediaStatus status)
-
-    Signals that the \a status of the current media has changed.
-
-    \sa mediaStatus()
-*/
-
-
-/*!
-    \fn QMediaPlayerControl::duration() const
-
-    Returns the duration of the current media in milliseconds.
-*/
-
-/*!
-    \fn QMediaPlayerControl::durationChanged(qint64 duration)
-
-    Signals that the \a duration of the current media has changed.
-
-    \sa duration()
-*/
-
-/*!
-    \fn QMediaPlayerControl::position() const
-
-    Returns the current playback position in milliseconds.
-*/
-
-/*!
-    \fn QMediaPlayerControl::setPosition(qint64 position)
-
-    Sets the playback \a position of the current media.  This will initiate a seek and it may take
-    some time for playback to reach the position set.
-*/
-
-/*!
-    \fn QMediaPlayerControl::positionChanged(qint64 position)
-
-    Signals the playback \a position has changed.
-
-    This is only emitted in when there has been a discontinous change in the playback postion, such
-    as a seek or the position being reset.
-
-    \sa position()
-*/
-
-/*!
-    \fn QMediaPlayerControl::volume() const
-
-    Returns the audio volume of a player control.
-*/
-
-/*!
-    \fn QMediaPlayerControl::setVolume(int volume)
-
-    Sets the audio \a volume of a player control.
-*/
-
-/*!
-    \fn QMediaPlayerControl::volumeChanged(int volume)
-
-    Signals the audio \a volume of a player control has changed.
-
-    \sa volume()
-*/
-
-/*!
-    \fn QMediaPlayerControl::isMuted() const
-
-    Returns the mute state of a player control.
-*/
-
-/*!
-    \fn QMediaPlayerControl::setMuted(bool mute)
-
-    Sets the \a mute state of a player control.
-*/
-
-/*!
-    \fn QMediaPlayerControl::mutedChanged(bool mute)
-
-    Signals a change in the \a mute status of a player control.
-
-    \sa isMuted()
-*/
-
-/*!
-    \fn QMediaPlayerControl::bufferStatus() const
-
-    Returns the buffering progress of the current media.  Progress is measured in the percentage
-    of the buffer filled.
-*/
-
-/*!
-    \fn QMediaPlayerControl::bufferStatusChanged(int progress)
-
-    Signals that buffering \a progress has changed.
-
-    \sa bufferStatus()
-*/
-
-/*!
-    \fn QMediaPlayerControl::isAudioAvailable() const
-
-    Identifies if there is audio output available for the current media.
-
-    Returns true if audio output is available and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlayerControl::audioAvailableChanged(bool audio)
-
-    Signals that there has been a change in the availability of \a audio output.
-
-    \sa isAudioAvailable()
-*/
-
-/*!
-    \fn QMediaPlayerControl::isVideoAvailable() const
-
-    Identifies if there is video output available for the current media.
-
-    Returns true if video output is available and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlayerControl::videoAvailableChanged(bool video)
-
-    Signals that there has been a change in the availability of \a video output.
-
-    \sa isVideoAvailable()
-*/
-
-/*!
-    \fn QMediaPlayerControl::isSeekable() const
-
-    Identifies if the current media is seekable.
-
-    Returns true if it possible to seek within the current media, and false otherwise.
-*/
-
-/*!
-    \fn QMediaPlayerControl::seekableChanged(bool seekable)
-
-    Signals that the \a seekable state of a player control has changed.
-
-    \sa isSeekable()
-*/
-
-/*!
-    \fn QMediaPlayerControl::availablePlaybackRanges() const
-
-    Returns a range of times in milliseconds that can be played back.
-
-    Usually for local files this is a continuous interval equal to [0..duration()]
-    or an empty time range if seeking is not supported, but for network sources
-    it refers to the buffered parts of the media.
-*/
-
-/*!
-    \fn QMediaPlayerControl::availablePlaybackRangesChanged(const QMediaTimeRange &ranges)
-
-    Signals that the available media playback \a ranges have changed.
-
-    \sa QMediaPlayerControl::availablePlaybackRanges()
-*/
-
-/*!
-    \fn qreal QMediaPlayerControl::playbackRate() const
-
-    Returns the rate of playback.
-*/
-
-/*!
-    \fn QMediaPlayerControl::setPlaybackRate(qreal rate)
-
-    Sets the \a rate of playback.
-*/
-
-/*!
-    \fn QMediaPlayerControl::media() const
-
-    Returns the current media source.
-*/
-
-/*!
-    \fn QMediaPlayerControl::mediaStream() const
-
-    Returns the current media stream. This is only a valid if a stream was passed to setMedia().
-
-    \sa setMedia()
-*/
-
-/*!
-    \fn QMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream)
-
-    Sets the current \a media source.  If a \a stream is supplied; data will be read from that
-    instead of attempting to resolve the media source.  The media source may still be used to
-    supply media information such as mime type.
-
-    Setting the media to a null QMediaContent will cause the control to discard all
-    information relating to the current media source and to cease all I/O operations related
-    to that media.
-*/
-
-/*!
-    \fn QMediaPlayerControl::mediaChanged(const QMediaContent& content)
-
-    Signals that the current media \a content has changed.
-*/
-
-/*!
-    \fn QMediaPlayerControl::play()
-
-    Starts playback of the current media.
-
-    If successful the player control will immediately enter the \l {QMediaPlayer::PlayingState}
-    {playing} state.
-
-    \sa state()
-*/
-
-/*!
-    \fn QMediaPlayerControl::pause()
-
-    Pauses playback of the current media.
-
-    If sucessful the player control will immediately enter the \l {QMediaPlayer::PausedState}
-    {paused} state.
-
-    \sa state(), play(), stop()
-*/
-
-/*!
-    \fn QMediaPlayerControl::stop()
-
-    Stops playback of the current media.
-
-    If succesful the player control will immediately enter the \l {QMediaPlayer::StoppedState}
-    {stopped} state.
-*/
-
-/*!
-    \fn QMediaPlayerControl::error(int error, const QString &errorString)
-
-    Signals that an \a error has occurred.  The \a errorString provides a more detailed explanation.
-*/
-
-/*!
-    \fn QMediaPlayerControl::playbackRateChanged(qreal rate)
-
-    Signal emitted when playback rate changes to \a rate.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qmediaplayercontrol.cpp"
-
diff --git a/src/multimedia/playback/qmediaplayercontrol.h b/src/multimedia/playback/qmediaplayercontrol.h
deleted file mode 100644
index a7e418b..0000000
--- a/src/multimedia/playback/qmediaplayercontrol.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEDIAPLAYERCONTROL_H
-#define QMEDIAPLAYERCONTROL_H
-
-#include <QtCore/qpair.h>
-
-#include <QtMultimedia/qmediacontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
-#include <QtMultimedia/qmediatimerange.h>
-
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-
-class QMediaPlaylist;
-
-class Q_MULTIMEDIA_EXPORT QMediaPlayerControl : public QMediaControl
-{
-    Q_OBJECT
-
-public:
-    ~QMediaPlayerControl();
-
-    virtual QMediaPlayer::State state() const = 0;
-
-    virtual QMediaPlayer::MediaStatus mediaStatus() const = 0;
-
-    virtual qint64 duration() const = 0;
-
-    virtual qint64 position() const = 0;
-    virtual void setPosition(qint64 position) = 0;
-
-    virtual int volume() const = 0;
-    virtual void setVolume(int volume) = 0;
-
-    virtual bool isMuted() const = 0;
-    virtual void setMuted(bool muted) = 0;
-
-    virtual int bufferStatus() const = 0;
-
-    virtual bool isAudioAvailable() const = 0;
-    virtual bool isVideoAvailable() const = 0;
-
-    virtual bool isSeekable() const = 0;
-
-    virtual QMediaTimeRange availablePlaybackRanges() const = 0;
-
-    virtual qreal playbackRate() const = 0;
-    virtual void setPlaybackRate(qreal rate) = 0;
-
-    virtual QMediaContent media() const = 0;
-    virtual const QIODevice *mediaStream() const = 0;
-    virtual void setMedia(const QMediaContent &media, QIODevice *stream) = 0;
-
-    virtual void play() = 0;
-    virtual void pause() = 0;
-    virtual void stop() = 0;
-
-Q_SIGNALS:
-    void mediaChanged(const QMediaContent& content);
-    void durationChanged(qint64 duration);
-    void positionChanged(qint64 position);
-    void stateChanged(QMediaPlayer::State newState);
-    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
-    void volumeChanged(int volume);
-    void mutedChanged(bool muted);
-    void audioAvailableChanged(bool audioAvailable);
-    void videoAvailableChanged(bool videoAvailable);
-    void bufferStatusChanged(int percentFilled);
-    void seekableChanged(bool);
-    void availablePlaybackRangesChanged(const QMediaTimeRange&);
-    void playbackRateChanged(qreal rate);
-    void error(int error, const QString &errorString);
-
-protected:
-    QMediaPlayerControl(QObject* parent = 0);
-};
-
-#define QMediaPlayerControl_iid "com.nokia.Qt.QMediaPlayerControl/1.0"
-Q_MEDIA_DECLARE_CONTROL(QMediaPlayerControl, QMediaPlayerControl_iid)
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif  // QMEDIAPLAYERCONTROL_H
-
diff --git a/src/multimedia/video/qabstractvideobuffer.cpp b/src/multimedia/video/qabstractvideobuffer.cpp
deleted file mode 100644
index e9d30d0..0000000
--- a/src/multimedia/video/qabstractvideobuffer.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qabstractvideobuffer_p.h"
-
-#include <qvariant.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QAbstractVideoBuffer
-    \brief The QAbstractVideoBuffer class is an abstraction for video data.
-    \since 4.6
-
-    The QVideoFrame class makes use of a QAbstractVideoBuffer internally to reference a buffer of
-    video data.  Creating a subclass of QAbstractVideoBuffer will allow you to construct video
-    frames from preallocated or static buffers.
-
-    The contents of a buffer can be accessed by mapping the buffer to memory using the map()
-    function which returns a pointer to memory containing the contents of the the video buffer.
-    The memory returned by map() is released by calling the unmap() function.
-
-    The handle() of a buffer may also be used to manipulate it's contents using type specific APIs.
-    The type of a buffer's handle is given by the handleType() function.
-
-    \sa QVideoFrame
-*/
-
-/*!
-    \enum QAbstractVideoBuffer::HandleType
-
-    Identifies the type of a video buffers handle.
-
-    \value NoHandle The buffer has no handle, its data can only be accessed by mapping the buffer.
-    \value GLTextureHandle The handle of the buffer is an OpenGL texture ID.
-    \value XvShmImageHandle The handle contains pointer to shared memory XVideo image.
-    \value CoreImageHandle The handle contains pointer to Mac OS X CIImage.
-    \value UserHandle Start value for user defined handle types.
-
-    \sa handleType()
-*/
-
-/*!
-    \enum QAbstractVideoBuffer::MapMode
-
-    Enumerates how a video buffer's data is mapped to memory.
-
-    \value NotMapped The video buffer has is not mapped to memory.
-    \value ReadOnly The mapped memory is populated with data from the video buffer when mapped, but
-    the content of the mapped memory may be discarded when unmapped.
-    \value WriteOnly The mapped memory in unitialized when mapped, and the content will be used to
-    populate the video buffer when unmapped.
-    \value ReadWrite The mapped memory is populated with data from the video buffer, and the
-    video buffer is repopulated with the content of the mapped memory.
-
-    \sa mapMode(), map()
-*/
-
-/*!
-    Constructs an abstract video buffer of the given \a type.
-*/
-
-QAbstractVideoBuffer::QAbstractVideoBuffer(HandleType type)
-    : d_ptr(new QAbstractVideoBufferPrivate)
-{
-    Q_D(QAbstractVideoBuffer);
-
-    d->handleType = type;
-}
-
-/*!
-    \internal
-*/
-
-QAbstractVideoBuffer::QAbstractVideoBuffer(QAbstractVideoBufferPrivate &dd, HandleType type)
-    : d_ptr(&dd)
-{
-    Q_D(QAbstractVideoBuffer);
-
-    d->handleType = type;
-}
-
-/*!
-    Destroys an abstract video buffer.
-*/
-
-QAbstractVideoBuffer::~QAbstractVideoBuffer()
-{
-    delete d_ptr;
-}
-
-/*!
-    Returns the type of a video buffer's handle.
-
-    \sa handle()
-*/
-
-QAbstractVideoBuffer::HandleType QAbstractVideoBuffer::handleType() const
-{
-    return d_func()->handleType;
-}
-
-/*!
-    \fn QAbstractVideoBuffer::mapMode() const
-
-    Returns the mode a video buffer is mapped in.
-
-    \sa map()
-*/
-
-/*!
-    \fn QAbstractVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
-
-    Maps the contents of a video buffer to memory.
-
-    The map \a mode indicates whether the contents of the mapped memory should be read from and/or
-    written to the buffer.  If the map mode includes the QAbstractVideoBuffer::ReadOnly flag the
-    mapped memory will be populated with the content of the video buffer when mapped.  If the map
-    mode includes the QAbstractVideoBuffer::WriteOnly flag the content of the mapped memory will be
-    persisted in the buffer when unmapped.
-
-    When access to the data is no longer needed be sure to call the unmap() function to release the
-    mapped memory.
-
-    Returns a pointer to the mapped memory region, or a null pointer if the mapping failed.  The
-    size in bytes of the mapped memory region is returned in \a numBytes, and the line stride in \a
-    bytesPerLine.
-
-    When access to the data is no longer needed be sure to unmap() the buffer.
-
-    \note Writing to memory that is mapped as read-only is undefined, and may result in changes
-    to shared data.
-
-    \sa unmap(), mapMode()
-*/
-
-/*!
-    \fn QAbstractVideoBuffer::unmap()
-
-    Releases the memory mapped by the map() function
-
-    If the \l {QAbstractVideoBuffer::MapMode}{MapMode} included the QAbstractVideoBuffer::WriteOnly
-    flag this will persist the current content of the mapped memory to the video frame.
-
-    \sa map()
-*/
-
-/*!
-    Returns a type specific handle to the data buffer.
-
-    The type of the handle is given by handleType() function.
-
-    \sa handleType()
-*/
-
-QVariant QAbstractVideoBuffer::handle() const
-{
-    return QVariant();
-}
-
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/video/qabstractvideobuffer.h b/src/multimedia/video/qabstractvideobuffer.h
deleted file mode 100644
index a8389db..0000000
--- a/src/multimedia/video/qabstractvideobuffer.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTVIDEOBUFFER_H
-#define QABSTRACTVIDEOBUFFER_H
-
-#include <QtCore/qmetatype.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QVariant;
-
-class QAbstractVideoBufferPrivate;
-
-class Q_MULTIMEDIA_EXPORT QAbstractVideoBuffer
-{
-public:
-    enum HandleType
-    {
-        NoHandle,
-        GLTextureHandle,
-        XvShmImageHandle,
-        CoreImageHandle,
-        UserHandle = 1000
-    };
-
-    enum MapMode
-    {
-        NotMapped = 0x00,
-        ReadOnly  = 0x01,
-        WriteOnly = 0x02,
-        ReadWrite = ReadOnly | WriteOnly
-    };
-
-    QAbstractVideoBuffer(HandleType type);
-    virtual ~QAbstractVideoBuffer();
-
-    HandleType handleType() const;
-
-    virtual MapMode mapMode() const = 0;
-
-    virtual uchar *map(MapMode mode, int *numBytes, int *bytesPerLine) = 0;
-    virtual void unmap() = 0;
-
-    virtual QVariant handle() const;
-
-protected:
-    QAbstractVideoBuffer(QAbstractVideoBufferPrivate &dd, HandleType type);
-
-    QAbstractVideoBufferPrivate *d_ptr;
-
-private:
-    Q_DECLARE_PRIVATE(QAbstractVideoBuffer)
-    Q_DISABLE_COPY(QAbstractVideoBuffer)
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QAbstractVideoBuffer::HandleType)
-Q_DECLARE_METATYPE(QAbstractVideoBuffer::MapMode)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/video/qabstractvideobuffer_p.h b/src/multimedia/video/qabstractvideobuffer_p.h
deleted file mode 100644
index c72f303..0000000
--- a/src/multimedia/video/qabstractvideobuffer_p.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTVIDEOBUFFER_P_H
-#define QABSTRACTVIDEOBUFFER_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists purely as an
-// implementation detail.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qshareddata.h>
-#include <QtMultimedia/qabstractvideobuffer.h>
-
-QT_BEGIN_NAMESPACE
-
-class QAbstractVideoBufferPrivate
-{
-public:
-    QAbstractVideoBufferPrivate()
-        : handleType(QAbstractVideoBuffer::NoHandle)
-    {}
-
-    QAbstractVideoBuffer::HandleType handleType;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/video/qabstractvideosurface.cpp b/src/multimedia/video/qabstractvideosurface.cpp
deleted file mode 100644
index 3dabb6b..0000000
--- a/src/multimedia/video/qabstractvideosurface.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qabstractvideosurface_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QAbstractVideoSurface
-    \brief The QAbstractVideoSurface class is a base class for video presentation surfaces.
-    \since 4.6
-
-    The QAbstractVideoSurface class defines the standard interface that video producers use to
-    inter-operate with video presentation surfaces.  It is not supposed to be instantiated directly.
-    Instead, you should subclass it to create new video surfaces.
-
-    A video surface presents a continuous stream of identically formatted frames, where the format
-    of each frame is compatible with a stream format supplied when starting a presentation.
-
-    A list of pixel formats a surface can present is given by the supportedPixelFormats() function,
-    and the isFormatSupported() function will test if a video surface format is supported.  If a
-    format is not supported the nearestFormat() function may be able to suggest a similar format.
-    For example if a surface supports fixed set of resolutions it may suggest the smallest
-    supported resolution that contains the proposed resolution.
-
-    The start() function takes a supported format and enables a video surface.  Once started a
-    surface will begin displaying the frames it receives in the present() function.  Surfaces may
-    hold a reference to the buffer of a presented video frame until a new frame is presented or
-    streaming is stopped. The stop() function will disable a surface and a release any video
-    buffers it holds references to.
-*/
-
-/*!
-    \enum QAbstractVideoSurface::Error
-    This enum describes the errors that may be returned by the error() function.
-
-    \value NoError No error occurred.
-    \value UnsupportedFormatError A video format was not supported.
-    \value IncorrectFormatError A video frame was not compatible with the format of the surface.
-    \value StoppedError The surface has not been started.
-    \value ResourceError The surface could not allocate some resource.
-*/
-
-/*!
-    Constructs a video surface with the given \a parent.
-*/
-
-QAbstractVideoSurface::QAbstractVideoSurface(QObject *parent)
-    : QObject(*new QAbstractVideoSurfacePrivate, parent)
-{
-}
-
-/*!
-    \internal
-*/
-
-QAbstractVideoSurface::QAbstractVideoSurface(QAbstractVideoSurfacePrivate &dd, QObject *parent)
-    : QObject(dd, parent)
-{
-}
-
-/*!
-    Destroys a video surface.
-*/
-
-QAbstractVideoSurface::~QAbstractVideoSurface()
-{
-}
-
-/*!
-    \fn QAbstractVideoSurface::supportedPixelFormats(QAbstractVideoBuffer::HandleType type) const
-
-    Returns a list of pixel formats a video surface can present for a given handle \a type.
-
-    The pixel formats returned for the QAbstractVideoBuffer::NoHandle type are valid for any buffer
-    that can be mapped in read-only mode.
-
-    Types that are first in the list can be assumed to be faster to render.
-*/
-
-/*!
-    Tests a video surface \a format to determine if a surface can accept it.
-
-    Returns true if the format is supported by the surface, and false otherwise.
-*/
-
-bool QAbstractVideoSurface::isFormatSupported(const QVideoSurfaceFormat &format) const
-{
-    return supportedPixelFormats(format.handleType()).contains(format.pixelFormat());
-}
-
-/*!
-    Returns a supported video surface format that is similar to \a format.
-
-    A similar surface format is one that has the same \l {QVideoSurfaceFormat::pixelFormat()}{pixel
-    format} and \l {QVideoSurfaceFormat::handleType()}{handle type} but differs in some of the other
-    properties.  For example if there are restrictions on the \l {QVideoSurfaceFormat::frameSize()}
-    {frame sizes} a video surface can accept it may suggest a format with a larger frame size and
-    a \l {QVideoSurfaceFormat::viewport()}{viewport} the size of the original frame size.
-
-    If the format is already supported it will be returned unchanged, or if there is no similar
-    supported format an invalid format will be returned.
-*/
-
-QVideoSurfaceFormat QAbstractVideoSurface::nearestFormat(const QVideoSurfaceFormat &format) const
-{
-    return isFormatSupported(format)
-            ? format
-            : QVideoSurfaceFormat();
-}
-
-/*!
-    \fn QAbstractVideoSurface::supportedFormatsChanged()
-
-    Signals that the set of formats supported by a video surface has changed.
-
-    \sa supportedPixelFormats(), isFormatSupported()
-*/
-
-/*!
-    Returns the format of a video surface.
-*/
-
-QVideoSurfaceFormat QAbstractVideoSurface::surfaceFormat() const
-{
-    return d_func()->format;
-}
-
-/*!
-    \fn QAbstractVideoSurface::surfaceFormatChanged(const QVideoSurfaceFormat &format)
-
-    Signals that the configured \a format of a video surface has changed.
-
-    \sa surfaceFormat(), start()
-*/
-
-/*!
-    Starts a video surface presenting \a format frames.
-
-    Returns true if the surface was started, and false if an error occurred.
-
-    \sa isActive(), stop()
-*/
-
-bool QAbstractVideoSurface::start(const QVideoSurfaceFormat &format)
-{
-    Q_D(QAbstractVideoSurface);
-
-    bool wasActive  = d->active;
-
-    d->active = true;
-    d->format = format;
-    d->error = NoError;
-
-    emit surfaceFormatChanged(d->format);
-
-    if (!wasActive)
-        emit activeChanged(true);
-
-    return true;
-}
-
-/*!
-    Stops a video surface presenting frames and releases any resources acquired in start().
-
-    \sa isActive(), start()
-*/
-
-void QAbstractVideoSurface::stop()
-{
-    Q_D(QAbstractVideoSurface);
-
-    if (d->active) {
-        d->format = QVideoSurfaceFormat();
-        d->active = false;
-
-        emit activeChanged(false);
-        emit surfaceFormatChanged(d->format);
-    }
-}
-
-/*!
-    Indicates whether a video surface has been started.
-
-    Returns true if the surface has been started, and false otherwise.
-*/
-
-bool QAbstractVideoSurface::isActive() const
-{
-    return d_func()->active;
-}
-
-/*!
-    \fn QAbstractVideoSurface::activeChanged(bool active)
-
-    Signals that the \a active state of a video surface has changed.
-
-    \sa isActive(), start(), stop()
-*/
-
-/*!
-    \fn QAbstractVideoSurface::present(const QVideoFrame &frame)
-
-    Presents a video \a frame.
-
-    Returns true if the frame was presented, and false if an error occurred.
-
-    Not all surfaces will block until the presentation of a frame has completed.  Calling present()
-    on a non-blocking surface may fail if called before the presentation of a previous frame has
-    completed.  In such cases the surface may not return to a ready state until it's had an
-    opportunity to process events.
-
-    If present() fails for any other reason the surface will immediately enter the stopped state
-    and an error() value will be set.
-
-    A video surface must be in the started state for present() to succeed, and the format of the
-    video frame must be compatible with the current video surface format.
-
-    \sa error()
-*/
-
-/*!
-    Returns the last error that occurred.
-
-    If a surface fails to start(), or stops unexpectedly this function can be called to discover
-    what error occurred.
-*/
-
-QAbstractVideoSurface::Error QAbstractVideoSurface::error() const
-{
-    return d_func()->error;
-}
-
-/*!
-    Sets the value of error() to \a error.
-*/
-
-void QAbstractVideoSurface::setError(Error error)
-{
-    Q_D(QAbstractVideoSurface);
-
-    d->error = error;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/video/qabstractvideosurface.h b/src/multimedia/video/qabstractvideosurface.h
deleted file mode 100644
index f2cae17..0000000
--- a/src/multimedia/video/qabstractvideosurface.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTVIDEOSURFACE_H
-#define QABSTRACTVIDEOSURFACE_H
-
-#include <QtCore/qobject.h>
-#include <QtMultimedia/qvideoframe.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QRectF;
-class QVideoSurfaceFormat;
-
-class QAbstractVideoSurfacePrivate;
-
-class Q_MULTIMEDIA_EXPORT QAbstractVideoSurface : public QObject
-{
-    Q_OBJECT
-
-public:
-    enum Error
-    {
-        NoError,
-        UnsupportedFormatError,
-        IncorrectFormatError,
-        StoppedError,
-        ResourceError
-    };
-
-    explicit QAbstractVideoSurface(QObject *parent = 0);
-    ~QAbstractVideoSurface();
-
-    virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(
-            QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const = 0;
-    virtual bool isFormatSupported(const QVideoSurfaceFormat &format) const;
-    virtual QVideoSurfaceFormat nearestFormat(const QVideoSurfaceFormat &format) const;
-
-    QVideoSurfaceFormat surfaceFormat() const;
-
-    virtual bool start(const QVideoSurfaceFormat &format);
-    virtual void stop();
-
-    bool isActive() const;
-
-    virtual bool present(const QVideoFrame &frame) = 0;
-
-    Error error() const;
-
-Q_SIGNALS:
-    void activeChanged(bool active);
-    void surfaceFormatChanged(const QVideoSurfaceFormat &format);
-    void supportedFormatsChanged();
-
-protected:
-    QAbstractVideoSurface(QAbstractVideoSurfacePrivate &dd, QObject *parent);
-
-    void setError(Error error);
-
-private:
-    Q_DECLARE_PRIVATE(QAbstractVideoSurface)
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/video/qabstractvideosurface_p.h b/src/multimedia/video/qabstractvideosurface_p.h
deleted file mode 100644
index 42df112..0000000
--- a/src/multimedia/video/qabstractvideosurface_p.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QABSTRACTVIDEOSURFACE_P_H
-#define QABSTRACTVIDEOSURFACE_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists purely as an
-// implementation detail.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/qabstractvideosurface.h>
-#include <QtMultimedia/qvideosurfaceformat.h>
-#include <QtCore/private/qobject_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QAbstractVideoSurfacePrivate : public QObjectPrivate
-{
-public:
-    QAbstractVideoSurfacePrivate()
-        : error(QAbstractVideoSurface::NoError)
-        , active(false)
-    {
-    }
-
-    mutable QAbstractVideoSurface::Error error;
-    QVideoSurfaceFormat format;
-    bool active;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/video/qimagevideobuffer.cpp b/src/multimedia/video/qimagevideobuffer.cpp
deleted file mode 100644
index e3e1585..0000000
--- a/src/multimedia/video/qimagevideobuffer.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qimagevideobuffer_p.h"
-
-#include <private/qabstractvideobuffer_p.h>
-
-#include <qimage.h>
-#include <qvariant.h>
-
-QT_BEGIN_NAMESPACE
-
-class QImageVideoBufferPrivate : public QAbstractVideoBufferPrivate
-{
-public:
-    QImageVideoBufferPrivate()
-        : mapMode(QAbstractVideoBuffer::NotMapped)
-    {
-    }
-
-    QAbstractVideoBuffer::MapMode mapMode;
-    QImage image;
-};
-
-QImageVideoBuffer::QImageVideoBuffer(const QImage &image)
-    : QAbstractVideoBuffer(*new QImageVideoBufferPrivate, NoHandle)
-{
-    Q_D(QImageVideoBuffer);
-
-    d->image = image;
-}
-
-QImageVideoBuffer::~QImageVideoBuffer()
-{
-}
-
-QAbstractVideoBuffer::MapMode QImageVideoBuffer::mapMode() const
-{
-    return d_func()->mapMode;
-}
-
-uchar *QImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
-{
-    Q_D(QImageVideoBuffer);
-
-    if (d->mapMode == NotMapped && d->image.bits() && mode != NotMapped) {
-        d->mapMode = mode;
-
-        if (numBytes)
-            *numBytes = d->image.byteCount();
-
-        if (bytesPerLine)
-            *bytesPerLine = d->image.bytesPerLine();
-
-        return d->image.bits();
-    } else {
-        return 0;
-    }
-}
-
-void QImageVideoBuffer::unmap()
-{
-    Q_D(QImageVideoBuffer);
-
-    d->mapMode = NotMapped;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/video/qimagevideobuffer_p.h b/src/multimedia/video/qimagevideobuffer_p.h
deleted file mode 100644
index 82075d7..0000000
--- a/src/multimedia/video/qimagevideobuffer_p.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QIMAGEVIDEOBUFFER_P_H
-#define QIMAGEVIDEOBUFFER_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists purely as an
-// implementation detail.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/qabstractvideobuffer.h>
-
-QT_BEGIN_NAMESPACE
-
-class QImage;
-
-class QImageVideoBufferPrivate;
-
-class Q_MULTIMEDIA_EXPORT QImageVideoBuffer : public QAbstractVideoBuffer
-{
-    Q_DECLARE_PRIVATE(QImageVideoBuffer)
-public:
-    QImageVideoBuffer(const QImage &image);
-    ~QImageVideoBuffer();
-
-    MapMode mapMode() const;
-
-    uchar *map(MapMode mode, int *numBytes, int *bytesPerLine);
-    void unmap();
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/video/qmemoryvideobuffer.cpp b/src/multimedia/video/qmemoryvideobuffer.cpp
deleted file mode 100644
index 2e892b7..0000000
--- a/src/multimedia/video/qmemoryvideobuffer.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmemoryvideobuffer_p.h"
-
-#include <private/qabstractvideobuffer_p.h>
-#include <qbytearray.h>
-
-QT_BEGIN_NAMESPACE
-
-class QMemoryVideoBufferPrivate : public QAbstractVideoBufferPrivate
-{
-public:
-    QMemoryVideoBufferPrivate()
-        : bytesPerLine(0)
-        , mapMode(QAbstractVideoBuffer::NotMapped)
-    {
-    }
-
-    int bytesPerLine;
-    QAbstractVideoBuffer::MapMode mapMode;
-    QByteArray data;
-};
-
-/*!
-    \class QMemoryVideoBuffer
-    \brief The QMemoryVideoBuffer class provides a system memory allocated video data buffer.
-    \internal
-
-    QMemoryVideoBuffer is the default video buffer for allocating system memory.  It may be used to
-    allocate memory for a QVideoFrame without implementing your own QAbstractVideoBuffer.
-*/
-
-/*!
-    Constructs a video buffer with an image stride of \a bytesPerLine from a byte \a array.
-*/
-QMemoryVideoBuffer::QMemoryVideoBuffer(const QByteArray &array, int bytesPerLine)
-    : QAbstractVideoBuffer(*new QMemoryVideoBufferPrivate, NoHandle)
-{
-    Q_D(QMemoryVideoBuffer);
-
-    d->data = array;
-    d->bytesPerLine = bytesPerLine;
-}
-
-/*!
-    Destroys a system memory allocated video buffer.
-*/
-QMemoryVideoBuffer::~QMemoryVideoBuffer()
-{
-}
-
-/*!
-    \reimp
-*/
-QAbstractVideoBuffer::MapMode QMemoryVideoBuffer::mapMode() const
-{
-    return d_func()->mapMode;
-}
-
-/*!
-    \reimp
-*/
-uchar *QMemoryVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
-{
-    Q_D(QMemoryVideoBuffer);
-
-    if (d->mapMode == NotMapped && d->data.data() && mode != NotMapped) {
-        d->mapMode = mode;
-
-        if (numBytes)
-            *numBytes = d->data.size();
-
-        if (bytesPerLine)
-            *bytesPerLine = d->bytesPerLine;
-
-        return reinterpret_cast<uchar *>(d->data.data());
-    } else {
-        return 0;
-    }
-}
-
-/*!
-    \reimp
-*/
-void QMemoryVideoBuffer::unmap()
-{
-    d_func()->mapMode = NotMapped;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/video/qmemoryvideobuffer_p.h b/src/multimedia/video/qmemoryvideobuffer_p.h
deleted file mode 100644
index c66cf93..0000000
--- a/src/multimedia/video/qmemoryvideobuffer_p.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEMORYVIDEOBUFFER_P_H
-#define QMEMORYVIDEOBUFFER_P_H
-
-#include <QtMultimedia/qabstractvideobuffer.h>
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists purely as an
-// implementation detail.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QMemoryVideoBufferPrivate;
-
-class Q_MULTIMEDIA_EXPORT QMemoryVideoBuffer : public QAbstractVideoBuffer
-{
-    Q_DECLARE_PRIVATE(QMemoryVideoBuffer)
-public:
-    QMemoryVideoBuffer(const QByteArray &data, int bytesPerLine);
-    ~QMemoryVideoBuffer();
-
-    MapMode mapMode() const;
-
-    uchar *map(MapMode mode, int *numBytes, int *bytesPerLine);
-    void unmap();
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp
deleted file mode 100644
index 2d66d9e..0000000
--- a/src/multimedia/video/qvideoframe.cpp
+++ /dev/null
@@ -1,741 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qvideoframe.h"
-
-#include <private/qimagevideobuffer_p.h>
-#include <private/qmemoryvideobuffer_p.h>
-
-#include <qimage.h>
-#include <qpair.h>
-#include <qsize.h>
-#include <qvariant.h>
-#include <qvector.h>
-
-QT_BEGIN_NAMESPACE
-
-class QVideoFramePrivate : public QSharedData
-{
-public:
-    QVideoFramePrivate()
-        : startTime(-1)
-        , endTime(-1)
-        , data(0)
-        , mappedBytes(0)
-        , bytesPerLine(0)
-        , pixelFormat(QVideoFrame::Format_Invalid)
-        , fieldType(QVideoFrame::ProgressiveFrame)
-        , buffer(0)
-    {
-    }
-
-    QVideoFramePrivate(const QSize &size, QVideoFrame::PixelFormat format)
-        : size(size)
-        , startTime(-1)
-        , endTime(-1)
-        , data(0)
-        , mappedBytes(0)
-        , bytesPerLine(0)
-        , pixelFormat(format)
-        , fieldType(QVideoFrame::ProgressiveFrame)
-        , buffer(0)
-    {
-    }
-
-    ~QVideoFramePrivate()
-    {
-        delete buffer;
-    }
-
-    QSize size;
-    qint64 startTime;
-    qint64 endTime;
-    uchar *data;
-    int mappedBytes;
-    int bytesPerLine;
-    QVideoFrame::PixelFormat pixelFormat;
-    QVideoFrame::FieldType fieldType;
-    QAbstractVideoBuffer *buffer;
-
-private:
-    Q_DISABLE_COPY(QVideoFramePrivate)
-};
-
-/*!
-    \class QVideoFrame
-    \brief The QVideoFrame class provides a representation of a frame of video data.
-    \since 4.6
-
-    A QVideoFrame encapsulates the data of a video frame, and information about the frame.
-
-    The contents of a video frame can be mapped to memory using the map() function.  While
-    mapped the video data can accessed using the bits() function which returns a pointer to a
-    buffer, the total size of which is given by the mappedBytes(), and the size of each line is given
-    by bytesPerLine().  The return value of the handle() function may be used to access frame data
-    using the internal buffer's native APIs.
-
-    The video data in a QVideoFrame is encapsulated in a QAbstractVideoBuffer.  A QVideoFrame
-    may be constructed from any buffer type by subclassing the QAbstractVideoBuffer class.
-
-    \note QVideoFrame is explicitly shared, any change made to video frame will also apply to any
-    copies.
-*/
-
-/*!
-    \enum QVideoFrame::PixelFormat
-
-    Enumerates video data types.
-
-    \value Format_Invalid
-    The frame is invalid. 
- 
-    \value Format_ARGB32
-    The frame is stored using a 32-bit ARGB format (0xAARRGGBB).  This is equivalent to
-    QImage::Format_ARGB32.
- 
-    \value Format_ARGB32_Premultiplied
-    The frame stored using a premultiplied 32-bit ARGB format (0xAARRGGBB).  This is equivalent
-    to QImage::Format_ARGB32_Premultiplied.
- 
-    \value Format_RGB32
-    The frame stored using a 32-bit RGB format (0xffRRGGBB).  This is equivalent to
-    QImage::Format_RGB32
- 
-    \value Format_RGB24
-    The frame is stored using a 24-bit RGB format (8-8-8).  This is equivalent to
-    QImage::Format_RGB888
- 
-    \value Format_RGB565
-    The frame is stored using a 16-bit RGB format (5-6-5).  This is equivalent to
-    QImage::Format_RGB16.
- 
-    \value Format_RGB555
-    The frame is stored using a 16-bit RGB format (5-5-5).  This is equivalent to
-    QImage::Format_RGB555.
- 
-    \value Format_ARGB8565_Premultiplied
-    The frame is stored using a 24-bit premultiplied ARGB format (8-6-6-5).
- 
-    \value Format_BGRA32
-    The frame is stored using a 32-bit ARGB format (0xBBGGRRAA).
- 
-    \value Format_BGRA32_Premultiplied
-    The frame is stored using a premultiplied 32bit BGRA format.
- 
-    \value Format_BGR32
-    The frame is stored using a 32-bit BGR format (0xBBGGRRff).
- 
-    \value Format_BGR24
-    The frame is stored using a 24-bit BGR format (0xBBGGRR).
- 
-    \value Format_BGR565
-    The frame is stored using a 16-bit BGR format (5-6-5).
- 
-    \value Format_BGR555
-    The frame is stored using a 16-bit BGR format (5-5-5).
- 
-    \value Format_BGRA5658_Premultiplied
-    The frame is stored using a 24-bit premultiplied BGRA format (5-6-5-8).
- 
-    \value Format_AYUV444
-    The frame is stored using a packed 32-bit AYUV format (0xAAYYUUVV).
- 
-    \value Format_AYUV444_Premultiplied
-    The frame is stored using a packed premultiplied 32-bit AYUV format (0xAAYYUUVV).
-
-    \value Format_YUV444
-    The frame is stored using a 24-bit packed YUV format (8-8-8).
- 
-    \value Format_YUV420P
-    The frame is stored using an 8-bit per component planar YUV format with the U and V planes
-    horizontally and vertically sub-sampled, i.e. the height and width of the U and V planes are
-    half that of the Y plane.
- 
-    \value Format_YV12
-    The frame is stored using an 8-bit per component planar YVU format with the V and U planes
-    horizontally and vertically sub-sampled, i.e. the height and width of the V and U planes are
-    half that of the Y plane.
- 
-    \value Format_UYVY
-    The frame is stored using an 8-bit per component packed YUV format with the U and V planes
-    horizontally sub-sampled (U-Y-V-Y), i.e. two horizontally adjacent pixels are stored as a 32-bit
-    macropixel which has a Y value for each pixel and common U and V values.
- 
-    \value Format_YUYV
-    The frame is stored using an 8-bit per component packed YUV format with the U and V planes
-    horizontally sub-sampled (Y-U-Y-V), i.e. two horizontally adjacent pixels are stored as a 32-bit
-    macropixel which has a Y value for each pixel and common U and V values.
- 
-    \value Format_NV12
-    The frame is stored using an 8-bit per component semi-planar YUV format with a Y plane (Y)
-    followed by a horizontally and vertically sub-sampled, packed UV plane (U-V).
- 
-    \value Format_NV21
-    The frame is stored using an 8-bit per component semi-planar YUV format with a Y plane (Y)
-    followed by a horizontally and vertically sub-sampled, packed VU plane (V-U).
- 
-    \value Format_IMC1
-    The frame is stored using an 8-bit per component planar YUV format with the U and V planes
-    horizontally and vertically sub-sampled.  This is similar to the Format_YUV420P type, except
-    that the bytes per line of the U and V planes are padded out to the same stride as the Y plane.
-
-    \value Format_IMC2
-    The frame is stored using an 8-bit per component planar YUV format with the U and V planes
-    horizontally and vertically sub-sampled.  This is similar to the Format_YUV420P type, except
-    that the lines of the U and V planes are interleaved, i.e. each line of U data is followed by a
-    line of V data creating a single line of the same stride as the Y data.
- 
-    \value Format_IMC3
-    The frame is stored using an 8-bit per component planar YVU format with the V and U planes
-    horizontally and vertically sub-sampled.  This is similar to the Format_YV12 type, except that
-    the bytes per line of the V and U planes are padded out to the same stride as the Y plane.
- 
-    \value Format_IMC4
-    The frame is stored using an 8-bit per component planar YVU format with the V and U planes
-    horizontally and vertically sub-sampled.  This is similar to the Format_YV12 type, except that
-    the lines of the V and U planes are interleaved, i.e. each line of V data is followed by a line
-    of U data creating a single line of the same stride as the Y data.
- 
-    \value Format_Y8
-    The frame is stored using an 8-bit greyscale format.
- 
-    \value Format_Y16
-    The frame is stored using a 16-bit linear greyscale format.  Little endian.
-
-    \value Format_User
-    Start value for user defined pixel formats.
-*/
-
-/*!
-    \enum QVideoFrame::FieldType
-
-    Specifies the field an interlaced video frame belongs to.
-
-    \value ProgressiveFrame The frame is not interlaced.
-    \value TopField The frame contains a top field.
-    \value BottomField The frame contains a bottom field.
-    \value InterlacedFrame The frame contains a merged top and bottom field.
-*/
-
-/*!
-    Constructs a null video frame.
-*/
-
-QVideoFrame::QVideoFrame()
-    : d(new QVideoFramePrivate)
-{
-}
-
-/*!
-    Constructs a video frame from a \a buffer of the given pixel \a format and \a size in pixels.
-
-    \note This doesn't increment the reference count of the video buffer.
-*/
-
-QVideoFrame::QVideoFrame(
-        QAbstractVideoBuffer *buffer, const QSize &size, PixelFormat format)
-    : d(new QVideoFramePrivate(size, format))
-{
-    d->buffer = buffer;
-}
-
-/*!
-    Constructs a video frame of the given pixel \a format and \a size in pixels.
-
-    The \a bytesPerLine (stride) is the length of each scan line in bytes, and \a bytes is the total
-    number of bytes that must be allocated for the frame.
-*/
-
-QVideoFrame::QVideoFrame(int bytes, const QSize &size, int bytesPerLine, PixelFormat format)
-    : d(new QVideoFramePrivate(size, format))
-{
-    if (bytes > 0) {
-        QByteArray data;
-        data.resize(bytes);
-
-        // Check the memory was successfully allocated.
-        if (!data.isEmpty())
-            d->buffer = new QMemoryVideoBuffer(data, bytesPerLine);
-    }
-}
-
-/*!
-    Constructs a video frame from an \a image.
-
-    \note This will construct an invalid video frame if there is no frame type equivalent to the
-    image format.
-
-    \sa pixelFormatFromImageFormat()
-*/
-
-QVideoFrame::QVideoFrame(const QImage &image)
-    : d(new QVideoFramePrivate(
-            image.size(), pixelFormatFromImageFormat(image.format())))
-{
-    if (d->pixelFormat != Format_Invalid)
-        d->buffer = new QImageVideoBuffer(image);
-}
-
-/*!
-    Constructs a copy of \a other.
-*/
-
-QVideoFrame::QVideoFrame(const QVideoFrame &other)
-    : d(other.d)
-{
-}
-
-/*!
-    Assigns the contents of \a other to a video frame.
-*/
-
-QVideoFrame &QVideoFrame::operator =(const QVideoFrame &other)
-{
-    d = other.d;
-
-    return *this;
-}
-
-/*!
-    Destroys a video frame.
-*/
-
-QVideoFrame::~QVideoFrame()
-{
-}
-
-/*!
-    Identifies whether a video frame is valid.
-
-    An invalid frame has no video buffer associated with it.
-
-    Returns true if the frame is valid, and false if it is not.
-*/
-
-bool QVideoFrame::isValid() const
-{
-    return d->buffer != 0;
-}
-
-/*!
-    Returns the color format of a video frame.
-*/
-
-QVideoFrame::PixelFormat QVideoFrame::pixelFormat() const
-{
-    return d->pixelFormat;
-}
-
-/*!
-    Returns the type of a video frame's handle.
-*/
-
-QAbstractVideoBuffer::HandleType QVideoFrame::handleType() const
-{
-    return d->buffer ? d->buffer->handleType() : QAbstractVideoBuffer::NoHandle;
-}
-
-/*!
-    Returns the size of a video frame.
-*/
-
-QSize QVideoFrame::size() const
-{
-    return d->size;
-}
-
-/*!
-    Returns the width of a video frame.
-*/
-
-int QVideoFrame::width() const
-{
-    return d->size.width();
-}
-
-/*!
-    Returns the height of a video frame.
-*/
-
-int QVideoFrame::height() const
-{
-    return d->size.height();
-}
-
-/*!
-    Returns the field an interlaced video frame belongs to.
-
-    If the video is not interlaced this will return WholeFrame.
-*/
-
-QVideoFrame::FieldType QVideoFrame::fieldType() const
-{
-    return d->fieldType;
-}
-
-/*!
-    Sets the \a field an interlaced video frame belongs to.
-*/
-
-void QVideoFrame::setFieldType(QVideoFrame::FieldType field)
-{
-    d->fieldType = field;
-}
-
-/*!
-    Identifies if a video frame's contents are currently mapped to system memory.
-
-    This is a convenience function which checks that the \l {QAbstractVideoBuffer::MapMode}{MapMode}
-    of the frame is not equal to QAbstractVideoBuffer::NotMapped.
-
-    Returns true if the contents of the video frame are mapped to system memory, and false
-    otherwise.
-
-    \sa mapMode() QAbstractVideoBuffer::MapMode
-*/
-
-bool QVideoFrame::isMapped() const
-{
-    return d->buffer != 0 && d->buffer->mapMode() != QAbstractVideoBuffer::NotMapped;
-}
-
-/*!
-    Identifies if the mapped contents of a video frame will be persisted when the frame is unmapped.
-
-    This is a convenience function which checks if the \l {QAbstractVideoBuffer::MapMode}{MapMode}
-    contains the QAbstractVideoBuffer::WriteOnly flag.
-
-    Returns true if the video frame will be updated when unmapped, and false otherwise.
-
-    \note The result of altering the data of a frame that is mapped in read-only mode is undefined.
-    Depending on the buffer implementation the changes may be persisted, or worse alter a shared
-    buffer.
-
-    \sa mapMode(), QAbstractVideoBuffer::MapMode
-*/
-
-bool QVideoFrame::isWritable() const
-{
-    return d->buffer != 0 && (d->buffer->mapMode() & QAbstractVideoBuffer::WriteOnly);
-}
-
-/*!
-    Identifies if the mapped contents of a video frame were read from the frame when it was mapped.
-
-    This is a convenience function which checks if the \l {QAbstractVideoBuffer::MapMode}{MapMode}
-    contains the QAbstractVideoBuffer::WriteOnly flag.
-
-    Returns true if the contents of the mapped memory were read from the video frame, and false
-    otherwise.
-
-    \sa mapMode(), QAbstractVideoBuffer::MapMode
-*/
-
-bool QVideoFrame::isReadable() const
-{
-    return d->buffer != 0 && (d->buffer->mapMode() & QAbstractVideoBuffer::ReadOnly);
-}
-
-/*!
-    Returns the mode a video frame was mapped to system memory in.
-
-    \sa map(), QAbstractVideoBuffer::MapMode
-*/
-
-QAbstractVideoBuffer::MapMode QVideoFrame::mapMode() const
-{
-    return d->buffer != 0 ? d->buffer->mapMode() : QAbstractVideoBuffer::NotMapped;
-}
-
-/*!
-    Maps the contents of a video frame to memory.
-
-    The map \a mode indicates whether the contents of the mapped memory should be read from and/or
-    written to the frame.  If the map mode includes the QAbstractVideoBuffer::ReadOnly flag the
-    mapped memory will be populated with the content of the video frame when mapped.  If the map
-    mode inclues the QAbstractVideoBuffer::WriteOnly flag the content of the mapped memory will be
-    persisted in the frame when unmapped.
-
-    While mapped the contents of a video frame can be accessed directly through the pointer returned
-    by the bits() function.
-
-    When access to the data is no longer needed be sure to call the unmap() function to release the
-    mapped memory.
-
-    Returns true if the buffer was mapped to memory in the given \a mode and false otherwise.
-
-    \sa unmap(), mapMode(), bits()
-*/
-
-bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
-{
-    if (d->buffer != 0 && d->data == 0) {
-        Q_ASSERT(d->bytesPerLine == 0);
-        Q_ASSERT(d->mappedBytes == 0);
-
-        d->data = d->buffer->map(mode, &d->mappedBytes, &d->bytesPerLine);
-
-        return d->data != 0;
-    }
-
-    return false;
-}
-
-/*!
-    Releases the memory mapped by the map() function.
-
-    If the \l {QAbstractVideoBuffer::MapMode}{MapMode} included the QAbstractVideoBuffer::WriteOnly
-    flag this will persist the current content of the mapped memory to the video frame.
-
-    \sa map()
-*/
-
-void QVideoFrame::unmap()
-{
-    if (d->data != 0) {
-        d->mappedBytes = 0;
-        d->bytesPerLine = 0;
-        d->data = 0;
-
-        d->buffer->unmap();
-    }
-}
-
-/*!
-    Returns the number of bytes in a scan line.
-
-    \note This is the bytes per line of the first plane only.  The bytes per line of subsequent
-    planes should be calculated as per the frame type.
-
-    This value is only valid while the frame data is \l {map()}{mapped}.
-
-    \sa bits(), map(), mappedBytes()
-*/
-
-int QVideoFrame::bytesPerLine() const
-{
-    return d->bytesPerLine;
-}
-
-/*!
-    Returns a pointer to the start of the frame data buffer.
-
-    This value is only valid while the frame data is \l {map()}{mapped}.
-
-    \sa map(), mappedBytes(), bytesPerLine()
-*/
-
-uchar *QVideoFrame::bits()
-{
-    return d->data;
-}
-
-/*!
-    Returns a pointer to the start of the frame data buffer.
-
-    This value is only valid while the frame data is \l {map()}{mapped}.
-
-    \sa map(), mappedBytes(), bytesPerLine()
-*/
-
-const uchar *QVideoFrame::bits() const
-{
-    return d->data;
-}
-
-/*!
-    Returns the number of bytes occupied by the mapped frame data.
-
-    This value is only valid while the frame data is \l {map()}{mapped}.
-
-    \sa map()
-*/
-
-int QVideoFrame::mappedBytes() const
-{
-    return d->mappedBytes;
-}
-
-/*!
-    Returns a type specific handle to a video frame's buffer.
-
-    For an OpenGL texture this would be the texture ID.
-
-    \sa QAbstractVideoBuffer::handle()
-*/
-
-QVariant QVideoFrame::handle() const
-{
-    return d->buffer != 0 ? d->buffer->handle() : QVariant();
-}
-
-/*!
-    Returns the presentation time when the frame should be displayed.
-*/
-
-qint64 QVideoFrame::startTime() const
-{
-    return d->startTime;
-}
-
-/*!
-    Sets the presentation \a time when the frame should be displayed.
-*/
-
-void QVideoFrame::setStartTime(qint64 time)
-{
-    d->startTime = time;
-}
-
-/*!
-    Returns the presentation time when a frame should stop being displayed.
-*/
-
-qint64 QVideoFrame::endTime() const
-{
-    return d->endTime;
-}
-
-/*!
-    Sets the presentation \a time when a frame should stop being displayed.
-*/
-
-void QVideoFrame::setEndTime(qint64 time)
-{
-    d->endTime = time;
-}
-
-/*!
-    Returns an video pixel format equivalent to an image \a format.  If there is no equivalent
-    format QVideoFrame::InvalidType is returned instead.
-*/
-
-QVideoFrame::PixelFormat QVideoFrame::pixelFormatFromImageFormat(QImage::Format format)
-{
-    switch (format) {
-    case QImage::Format_Invalid:
-    case QImage::Format_Mono:
-    case QImage::Format_MonoLSB:
-    case QImage::Format_Indexed8:
-        return Format_Invalid;
-    case QImage::Format_RGB32:
-        return Format_RGB32;
-    case QImage::Format_ARGB32:
-        return Format_ARGB32;
-    case QImage::Format_ARGB32_Premultiplied:
-        return Format_ARGB32_Premultiplied;
-    case QImage::Format_RGB16:
-        return Format_RGB565;
-    case QImage::Format_ARGB8565_Premultiplied:
-    case QImage::Format_RGB666:
-    case QImage::Format_ARGB6666_Premultiplied:
-        return Format_Invalid;
-    case QImage::Format_RGB555:
-        return Format_RGB555;
-    case QImage::Format_ARGB8555_Premultiplied:
-        return Format_Invalid;
-    case QImage::Format_RGB888:
-        return Format_RGB24;
-    case QImage::Format_RGB444:
-    case QImage::Format_ARGB4444_Premultiplied:
-        return Format_Invalid;
-    case QImage::NImageFormats:
-        return Format_Invalid;
-    }
-    return Format_Invalid;
-}
-
-/*!
-    Returns an image format equivalent to a video frame pixel \a format.  If there is no equivalent
-    format QImage::Format_Invalid is returned instead.
-*/
-
-QImage::Format QVideoFrame::imageFormatFromPixelFormat(PixelFormat format)
-{
-    switch (format) {
-    case Format_Invalid:
-        return QImage::Format_Invalid;
-    case Format_ARGB32:
-        return QImage::Format_ARGB32;
-    case Format_ARGB32_Premultiplied:
-        return QImage::Format_ARGB32_Premultiplied;
-    case Format_RGB32:
-        return QImage::Format_RGB32;
-    case Format_RGB24:
-        return QImage::Format_RGB888;
-    case Format_RGB565:
-        return QImage::Format_RGB16;
-    case Format_RGB555:
-        return QImage::Format_RGB555;
-    case Format_ARGB8565_Premultiplied:
-        return QImage::Format_ARGB8565_Premultiplied;
-    case Format_BGRA32:
-    case Format_BGRA32_Premultiplied:
-    case Format_BGR32:
-    case Format_BGR24:
-        return QImage::Format_Invalid;
-    case Format_BGR565:
-    case Format_BGR555:
-    case Format_BGRA5658_Premultiplied:
-    case Format_AYUV444:
-    case Format_AYUV444_Premultiplied:
-    case Format_YUV444:
-    case Format_YUV420P:
-    case Format_YV12:
-    case Format_UYVY:
-    case Format_YUYV:
-    case Format_NV12:
-    case Format_NV21:
-    case Format_IMC1:
-    case Format_IMC2:
-    case Format_IMC3:
-    case Format_IMC4:
-    case Format_Y8:
-    case Format_Y16:
-        return QImage::Format_Invalid;
-    case Format_User:
-        return QImage::Format_Invalid;
-    }
-    return QImage::Format_Invalid;
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/multimedia/video/qvideoframe.h b/src/multimedia/video/qvideoframe.h
deleted file mode 100644
index 668a738..0000000
--- a/src/multimedia/video/qvideoframe.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOFRAME_H
-#define QVIDEOFRAME_H
-
-#include <QtCore/qmetatype.h>
-#include <QtCore/qshareddata.h>
-#include <QtGui/qimage.h>
-#include <QtMultimedia/qabstractvideobuffer.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QSize;
-class QVariant;
-
-class QVideoFramePrivate;
-
-class Q_MULTIMEDIA_EXPORT QVideoFrame
-{
-public:
-    enum FieldType
-    {
-        ProgressiveFrame,
-        TopField,
-        BottomField,
-        InterlacedFrame
-    };
-
-    enum PixelFormat
-    {
-        Format_Invalid,
-        Format_ARGB32,
-        Format_ARGB32_Premultiplied,
-        Format_RGB32,
-        Format_RGB24,
-        Format_RGB565,
-        Format_RGB555,
-        Format_ARGB8565_Premultiplied,
-        Format_BGRA32,
-        Format_BGRA32_Premultiplied,
-        Format_BGR32,
-        Format_BGR24,
-        Format_BGR565,
-        Format_BGR555,
-        Format_BGRA5658_Premultiplied,
-
-        Format_AYUV444,
-        Format_AYUV444_Premultiplied,
-        Format_YUV444,
-        Format_YUV420P,
-        Format_YV12,
-        Format_UYVY,
-        Format_YUYV,
-        Format_NV12,
-        Format_NV21,
-        Format_IMC1,
-        Format_IMC2,
-        Format_IMC3,
-        Format_IMC4,
-        Format_Y8,
-        Format_Y16,
-
-        Format_User = 1000
-    };
-
-    QVideoFrame();
-    QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, PixelFormat format);
-    QVideoFrame(int bytes, const QSize &size, int bytesPerLine, PixelFormat format);
-    QVideoFrame(const QImage &image);
-    QVideoFrame(const QVideoFrame &other);
-    ~QVideoFrame();
-
-    QVideoFrame &operator =(const QVideoFrame &other);
-
-    bool isValid() const;
-
-    PixelFormat pixelFormat() const;
-
-    QAbstractVideoBuffer::HandleType handleType() const;
-
-    QSize size() const;
-    int width() const;
-    int height() const;
-
-    FieldType fieldType() const;
-    void setFieldType(FieldType);
-
-    bool isMapped() const;
-    bool isReadable() const;
-    bool isWritable() const;
-
-    QAbstractVideoBuffer::MapMode mapMode() const;
-
-    bool map(QAbstractVideoBuffer::MapMode mode);
-    void unmap();
-
-    int bytesPerLine() const;
-
-    uchar *bits();
-    const uchar *bits() const;
-    int mappedBytes() const;
-
-    QVariant handle() const;
-
-    qint64 startTime() const;
-    void setStartTime(qint64 time);
-
-    qint64 endTime() const;
-    void setEndTime(qint64 time);
-
-    static PixelFormat pixelFormatFromImageFormat(QImage::Format format);
-    static QImage::Format imageFormatFromPixelFormat(PixelFormat format);
-
-private:
-    QExplicitlySharedDataPointer<QVideoFramePrivate> d;
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QVideoFrame::FieldType)
-Q_DECLARE_METATYPE(QVideoFrame::PixelFormat)
-
-QT_END_HEADER
-
-#endif
-
diff --git a/src/multimedia/video/qvideosurfaceformat.cpp b/src/multimedia/video/qvideosurfaceformat.cpp
deleted file mode 100644
index 1fc13a6..0000000
--- a/src/multimedia/video/qvideosurfaceformat.cpp
+++ /dev/null
@@ -1,704 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qvideosurfaceformat.h"
-
-#include <qdebug.h>
-#include <qmetatype.h>
-#include <qpair.h>
-#include <qvariant.h>
-#include <qvector.h>
-
-QT_BEGIN_NAMESPACE
-
-class QVideoSurfaceFormatPrivate : public QSharedData
-{
-public:
-    QVideoSurfaceFormatPrivate()
-        : pixelFormat(QVideoFrame::Format_Invalid)
-        , handleType(QAbstractVideoBuffer::NoHandle)
-        , scanLineDirection(QVideoSurfaceFormat::TopToBottom)
-        , pixelAspectRatio(1, 1)
-        , ycbcrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
-        , frameRate(0.0)
-    {
-    }
-
-    QVideoSurfaceFormatPrivate(
-            const QSize &size,
-            QVideoFrame::PixelFormat format,
-            QAbstractVideoBuffer::HandleType type)
-        : pixelFormat(format)
-        , handleType(type)
-        , scanLineDirection(QVideoSurfaceFormat::TopToBottom)
-        , frameSize(size)
-        , pixelAspectRatio(1, 1)
-        , ycbcrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
-        , viewport(QPoint(0, 0), size)
-        , frameRate(0.0)
-    {
-    }
-
-    QVideoSurfaceFormatPrivate(const QVideoSurfaceFormatPrivate &other)
-        : QSharedData(other)
-        , pixelFormat(other.pixelFormat)
-        , handleType(other.handleType)
-        , scanLineDirection(other.scanLineDirection)
-        , frameSize(other.frameSize)
-        , pixelAspectRatio(other.pixelAspectRatio)
-        , ycbcrColorSpace(other.ycbcrColorSpace)
-        , viewport(other.viewport)
-        , frameRate(other.frameRate)
-        , propertyNames(other.propertyNames)
-        , propertyValues(other.propertyValues)
-    {
-    }
-
-    bool operator ==(const QVideoSurfaceFormatPrivate &other) const
-    {
-        if (pixelFormat == other.pixelFormat
-            && handleType == other.handleType
-            && scanLineDirection == other.scanLineDirection
-            && frameSize == other.frameSize
-            && pixelAspectRatio == other.pixelAspectRatio
-            && viewport == other.viewport
-            && frameRatesEqual(frameRate, other.frameRate)
-            && ycbcrColorSpace == other.ycbcrColorSpace
-            && propertyNames.count() == other.propertyNames.count()) {
-            for (int i = 0; i < propertyNames.count(); ++i) {
-                int j = other.propertyNames.indexOf(propertyNames.at(i));
-
-                if (j == -1 || propertyValues.at(i) != other.propertyValues.at(j))
-                    return false;
-            }
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    inline static bool frameRatesEqual(qreal r1, qreal r2)
-    {
-        return qAbs(r1 - r2) <= 0.00001 * qMin(qAbs(r1), qAbs(r2));
-    }
-
-    QVideoFrame::PixelFormat pixelFormat;
-    QAbstractVideoBuffer::HandleType handleType;
-    QVideoSurfaceFormat::Direction scanLineDirection;
-    QSize frameSize;
-    QSize pixelAspectRatio;
-    QVideoSurfaceFormat::YCbCrColorSpace ycbcrColorSpace;
-    QRect viewport;
-    qreal frameRate;
-    QList<QByteArray> propertyNames;
-    QList<QVariant> propertyValues;
-};
-
-/*!
-    \class QVideoSurfaceFormat
-    \brief The QVideoSurfaceFormat class specifies the stream format of a video presentation
-    surface.
-    \since 4.6
-
-    A video surface presents a stream of video frames.  The surface's format describes the type of
-    the frames and determines how they should be presented.
-
-    The core properties of a video stream required to setup a video surface are the pixel format
-    given by pixelFormat(), and the frame dimensions given by frameSize().
-
-    If the surface is to present frames using a frame's handle a surface format will also include
-    a handle type which is given by the handleType() function.
-
-    The region of a frame that is actually displayed on a video surface is given by the viewport().
-    A stream may have a viewport less than the entire region of a frame to allow for videos smaller
-    than the nearest optimal size of a video frame.  For example the width of a frame may be
-    extended so that the start of each scan line is eight byte aligned.
-
-    Other common properties are the pixelAspectRatio(), scanLineDirection(), and frameRate().
-    Additionally a stream may have some additional type specific properties which are listed by the
-    dynamicPropertyNames() function and can be accessed using the property(), and setProperty()
-    functions.
-*/
-
-/*!
-    \enum QVideoSurfaceFormat::Direction
-
-    Enumerates the layout direction of video scan lines.
-
-    \value TopToBottom Scan lines are arranged from the top of the frame to the bottom.
-    \value BottomToTop Scan lines are arranged from the bottom of the frame to the top.
-*/
-
-/*! 
-    \enum QVideoSurfaceFormat::YCbCrColorSpace
- 
-    Enumerates the Y'CbCr color space of video frames.
- 
-    \value YCbCr_Undefined
-    No color space is specified.
-
-    \value YCbCr_BT601
-    A Y'CbCr color space defined by ITU-R recommendation BT.601
-    with Y value range from 16 to 235, and Cb/Cr range from 16 to 240.
-    Used in standard definition video.
- 
-    \value YCbCr_BT709
-    A Y'CbCr color space defined by ITU-R BT.709 with the same values range as YCbCr_BT601.  Used
-    for HDTV.
- 
-    \value YCbCr_xvYCC601
-    The BT.601 color space with the value range extended to 0 to 255.
-    It is backward compatibile with BT.601 and uses values outside BT.601 range to represent
-    wider colors range.
- 
-    \value YCbCr_xvYCC709
-    The BT.709 color space with the value range extended to 0 to 255.
- 
-    \value YCbCr_JPEG
-    The full range Y'CbCr color space used in JPEG files.
-*/
-
-/*!
-    Constructs a null video stream format.
-*/
-
-QVideoSurfaceFormat::QVideoSurfaceFormat()
-    : d(new QVideoSurfaceFormatPrivate)
-{
-}
-
-/*!
-    Contructs a description of stream which receives stream of \a type buffers with given frame
-    \a size and pixel \a format.
-*/
-
-QVideoSurfaceFormat::QVideoSurfaceFormat(
-        const QSize& size, QVideoFrame::PixelFormat format, QAbstractVideoBuffer::HandleType type)
-    : d(new QVideoSurfaceFormatPrivate(size, format, type))
-{
-}
-
-/*!
-    Constructs a copy of \a other.
-*/
-
-QVideoSurfaceFormat::QVideoSurfaceFormat(const QVideoSurfaceFormat &other)
-    : d(other.d)
-{
-}
-
-/*!
-    Assigns the values of \a other to a video stream description.
-*/
-
-QVideoSurfaceFormat &QVideoSurfaceFormat::operator =(const QVideoSurfaceFormat &other)
-{
-    d = other.d;
-
-    return *this;
-}
-
-/*!
-    Destroys a video stream description.
-*/
-
-QVideoSurfaceFormat::~QVideoSurfaceFormat()
-{
-}
-
-/*!
-    Identifies if a video surface format has a valid pixel format and frame size.
-
-    Returns true if the format is valid, and false otherwise.
-*/
-
-bool QVideoSurfaceFormat::isValid() const
-{
-    return d->pixelFormat == QVideoFrame::Format_Invalid && d->frameSize.isValid();
-}
-
-/*!
-    Returns true if \a other is the same as a video format, and false if they are the different.
-*/
-
-bool QVideoSurfaceFormat::operator ==(const QVideoSurfaceFormat &other) const
-{
-    return d == other.d || *d == *other.d;
-}
-
-/*!
-    Returns true if \a other is different to a video format, and false if they are the same.
-*/
-
-bool QVideoSurfaceFormat::operator !=(const QVideoSurfaceFormat &other) const
-{
-    return d != other.d && !(*d == *other.d);
-}
-
-/*!
-    Returns the pixel format of frames in a video stream.
-*/
-
-QVideoFrame::PixelFormat QVideoSurfaceFormat::pixelFormat() const
-{
-    return d->pixelFormat;
-}
-
-/*!
-    Returns the type of handle the surface uses to present the frame data.
-
-    If the handle type is QAbstractVideoBuffer::NoHandle buffers with any handle type are valid
-    provided they can be \l {QAbstractVideoBuffer::map()}{mapped} with the
-    QAbstractVideoBuffer::ReadOnly flag.  If the handleType() is not QAbstractVideoBuffer::NoHandle
-    then the handle type of the buffer be the same as that of the surface format.
-*/
-
-QAbstractVideoBuffer::HandleType QVideoSurfaceFormat::handleType() const
-{
-    return d->handleType;
-}
-
-/*!
-    Returns the size of frames in a video stream.
-
-    \sa frameWidth(), frameHeight()
-*/
-
-QSize QVideoSurfaceFormat::frameSize() const
-{
-    return d->frameSize;
-}
-
-/*!
-    Returns the width of frames in a video stream.
-
-    \sa frameSize(), frameHeight()
-*/
-
-int QVideoSurfaceFormat::frameWidth() const
-{
-    return d->frameSize.width();
-}
-
-/*!
-    Returns the height of frame in a video stream.
-*/
-
-int QVideoSurfaceFormat::frameHeight() const
-{
-    return d->frameSize.height();
-}
-
-/*!
-    Sets the size of frames in a video stream to \a size.
-
-    This will reset the viewport() to fill the entire frame.
-*/
-
-void QVideoSurfaceFormat::setFrameSize(const QSize &size)
-{
-    d->frameSize = size;
-    d->viewport = QRect(QPoint(0, 0), size);
-}
-
-/*!
-    \overload
-
-    Sets the \a width and \a height of frames in a video stream.
-
-    This will reset the viewport() to fill the entire frame.
-*/
-
-void QVideoSurfaceFormat::setFrameSize(int width, int height)
-{
-    d->frameSize = QSize(width, height);
-    d->viewport = QRect(0, 0, width, height);
-}
-
-/*!
-    Returns the viewport of a video stream.
-
-    The viewport is the region of a video frame that is actually displayed.
-
-    By default the viewport covers an entire frame.
-*/
-
-QRect QVideoSurfaceFormat::viewport() const
-{
-    return d->viewport;
-}
-
-/*!
-    Sets the viewport of a video stream to \a viewport.
-*/
-
-void QVideoSurfaceFormat::setViewport(const QRect &viewport)
-{
-    d->viewport = viewport;
-}
-
-/*!
-    Returns the direction of scan lines.
-*/
-
-QVideoSurfaceFormat::Direction QVideoSurfaceFormat::scanLineDirection() const
-{
-    return d->scanLineDirection;
-}
-
-/*!
-    Sets the \a direction of scan lines.
-*/
-
-void QVideoSurfaceFormat::setScanLineDirection(Direction direction)
-{
-    d->scanLineDirection = direction;
-}
-
-/*!
-    Returns the frame rate of a video stream in frames per second.
-*/
-
-qreal QVideoSurfaceFormat::frameRate() const
-{
-    return d->frameRate;
-}
-
-/*!
-    Sets the frame \a rate of a video stream in frames per second.
-*/
-
-void QVideoSurfaceFormat::setFrameRate(qreal rate)
-{
-    d->frameRate = rate;
-}
-
-/*!
-    Returns a video stream's pixel aspect ratio.
-*/
-
-QSize QVideoSurfaceFormat::pixelAspectRatio() const
-{
-    return d->pixelAspectRatio;
-}
-
-/*!
-    Sets a video stream's pixel aspect \a ratio.
-*/
-
-void QVideoSurfaceFormat::setPixelAspectRatio(const QSize &ratio)
-{
-    d->pixelAspectRatio = ratio;
-}
-
-/*!
-    \overload
-
-    Sets the \a horizontal and \a vertical elements of a video stream's pixel aspect ratio.
-*/
-
-void QVideoSurfaceFormat::setPixelAspectRatio(int horizontal, int vertical)
-{
-    d->pixelAspectRatio = QSize(horizontal, vertical);
-}
-
-/*!
-    Returns the Y'CbCr color space of a video stream.
-*/
-
-QVideoSurfaceFormat::YCbCrColorSpace QVideoSurfaceFormat::yCbCrColorSpace() const
-{
-    return d->ycbcrColorSpace;
-}
-
-/*!
-    Sets the Y'CbCr color \a space of a video stream.
-    It is only used with raw YUV frame types.
-*/
-
-void QVideoSurfaceFormat::setYCbCrColorSpace(QVideoSurfaceFormat::YCbCrColorSpace space)
-{
-    d->ycbcrColorSpace = space;
-}
-
-/*!
-    Returns a suggested size in pixels for the video stream.
-
-    This is the size of the viewport scaled according to the pixel aspect ratio.
-*/
-
-QSize QVideoSurfaceFormat::sizeHint() const
-{
-    QSize size = d->viewport.size();
-
-    if (d->pixelAspectRatio.height() != 0)
-        size.setWidth(size.width() * d->pixelAspectRatio.width() / d->pixelAspectRatio.height());
-
-    return size;
-}
-
-/*!
-    Returns a list of video format dynamic property names.
-*/
-
-QList<QByteArray> QVideoSurfaceFormat::propertyNames() const
-{
-    return (QList<QByteArray>()
-            << "handleType"
-            << "pixelFormat"
-            << "frameSize"
-            << "frameWidth"
-            << "viewport"
-            << "scanLineDirection"
-            << "frameRate"
-            << "pixelAspectRatio"
-            << "sizeHint"
-            << "yCbCrColorSpace")
-            + d->propertyNames;
-}
-
-/*!
-    Returns the value of the video format's \a name property.
-*/
-
-QVariant QVideoSurfaceFormat::property(const char *name) const
-{
-    if (qstrcmp(name, "handleType") == 0) {
-        return qVariantFromValue(d->handleType);
-    } else if (qstrcmp(name, "pixelFormat") == 0) {
-        return qVariantFromValue(d->pixelFormat);
-    } else if (qstrcmp(name, "handleType") == 0) {
-        return qVariantFromValue(d->handleType);
-    } else if (qstrcmp(name, "frameSize") == 0) {
-        return d->frameSize;
-    } else if (qstrcmp(name, "frameWidth") == 0) {
-        return d->frameSize.width();
-    } else if (qstrcmp(name, "frameHeight") == 0) {
-        return d->frameSize.height();
-    } else if (qstrcmp(name, "viewport") == 0) {
-        return d->viewport;
-    } else if (qstrcmp(name, "scanLineDirection") == 0) {
-        return qVariantFromValue(d->scanLineDirection);
-    } else if (qstrcmp(name, "frameRate") == 0) {
-        return qVariantFromValue(d->frameRate);
-    } else if (qstrcmp(name, "pixelAspectRatio") == 0) {
-        return qVariantFromValue(d->pixelAspectRatio);
-    } else if (qstrcmp(name, "sizeHint") == 0) {
-        return sizeHint();
-    } else if (qstrcmp(name, "yCbCrColorSpace") == 0) {
-        return qVariantFromValue(d->ycbcrColorSpace);
-    } else {
-        int id = 0;
-        for (; id < d->propertyNames.count() && d->propertyNames.at(id) != name; ++id) {}
-
-        return id < d->propertyValues.count()
-                ? d->propertyValues.at(id)
-                : QVariant();
-    }
-}
-
-/*!
-    Sets the video format's \a name property to \a value.
-*/
-
-void QVideoSurfaceFormat::setProperty(const char *name, const QVariant &value)
-{
-    if (qstrcmp(name, "handleType") == 0) {
-        // read only.
-    } else if (qstrcmp(name, "pixelFormat") == 0) {
-        // read only.
-    } else if (qstrcmp(name, "frameSize") == 0) {
-        if (qVariantCanConvert<QSize>(value)) {
-            d->frameSize = qvariant_cast<QSize>(value);
-            d->viewport = QRect(QPoint(0, 0), d->frameSize);
-        }
-    } else if (qstrcmp(name, "frameWidth") == 0) {
-        // read only.
-    } else if (qstrcmp(name, "frameHeight") == 0) {
-        // read only.
-    } else if (qstrcmp(name, "viewport") == 0) {
-        if (qVariantCanConvert<QRect>(value))
-            d->viewport = qvariant_cast<QRect>(value);
-    } else if (qstrcmp(name, "scanLineDirection") == 0) {
-        if (qVariantCanConvert<Direction>(value))
-            d->scanLineDirection = qvariant_cast<Direction>(value);
-    } else if (qstrcmp(name, "frameRate") == 0) {
-        if (qVariantCanConvert<qreal>(value))
-            d->frameRate = qvariant_cast<qreal>(value);
-    } else if (qstrcmp(name, "pixelAspectRatio") == 0) {
-        if (qVariantCanConvert<QSize>(value))
-            d->pixelAspectRatio = qvariant_cast<QSize>(value);
-    } else if (qstrcmp(name, "sizeHint") == 0) {
-        // read only.
-    } else if (qstrcmp(name, "yCbCrColorSpace") == 0) {
-          if (qVariantCanConvert<YCbCrColorSpace>(value))
-              d->ycbcrColorSpace = qvariant_cast<YCbCrColorSpace>(value);
-    } else {
-        int id = 0;
-        for (; id < d->propertyNames.count() && d->propertyNames.at(id) != name; ++id) {}
-
-        if (id < d->propertyValues.count()) {
-            if (value.isNull()) {
-                d->propertyNames.removeAt(id);
-                d->propertyValues.removeAt(id);
-            } else {
-                d->propertyValues[id] = value;
-            }
-        } else if (!value.isNull()) {
-            d->propertyNames.append(QByteArray(name));
-            d->propertyValues.append(value);
-        }
-    }
-}
-
-
-#ifndef QT_NO_DEBUG_STREAM
-QDebug operator<<(QDebug dbg, const QVideoSurfaceFormat &f)
-{
-    QString typeName;
-    switch (f.pixelFormat()) {
-    case QVideoFrame::Format_Invalid:
-        typeName = QLatin1String("Format_Invalid");
-        break;
-    case QVideoFrame::Format_ARGB32:
-        typeName = QLatin1String("Format_ARGB32");
-        break;
-    case QVideoFrame::Format_ARGB32_Premultiplied:
-        typeName = QLatin1String("Format_ARGB32_Premultiplied");
-        break;
-    case QVideoFrame::Format_RGB32:
-        typeName = QLatin1String("Format_RGB32");
-        break;
-    case QVideoFrame::Format_RGB24:
-        typeName = QLatin1String("Format_RGB24");
-        break;
-    case QVideoFrame::Format_RGB565:
-        typeName = QLatin1String("Format_RGB565");
-        break;
-    case QVideoFrame::Format_RGB555:
-        typeName = QLatin1String("Format_RGB555");
-        break;
-    case QVideoFrame::Format_ARGB8565_Premultiplied:
-        typeName = QLatin1String("Format_ARGB8565_Premultiplied");
-        break;
-    case QVideoFrame::Format_BGRA32:
-        typeName = QLatin1String("Format_BGRA32");
-        break;
-    case QVideoFrame::Format_BGRA32_Premultiplied:
-        typeName = QLatin1String("Format_BGRA32_Premultiplied");
-        break;
-    case QVideoFrame::Format_BGR32:
-        typeName = QLatin1String("Format_BGR32");
-        break;
-    case QVideoFrame::Format_BGR24:
-        typeName = QLatin1String("Format_BGR24");
-        break;
-    case QVideoFrame::Format_BGR565:
-        typeName = QLatin1String("Format_BGR565");
-        break;
-    case QVideoFrame::Format_BGR555:
-        typeName = QLatin1String("Format_BGR555");
-        break;
-    case QVideoFrame::Format_BGRA5658_Premultiplied:
-        typeName = QLatin1String("Format_BGRA5658_Premultiplied");
-        break;
-    case QVideoFrame::Format_AYUV444:
-        typeName = QLatin1String("Format_AYUV444");
-        break;
-    case QVideoFrame::Format_AYUV444_Premultiplied:
-        typeName = QLatin1String("Format_AYUV444_Premultiplied");
-        break;
-    case QVideoFrame::Format_YUV444:
-        typeName = QLatin1String("Format_YUV444");
-        break;
-    case QVideoFrame::Format_YUV420P:
-        typeName = QLatin1String("Format_YUV420P");
-        break;
-    case QVideoFrame::Format_YV12:
-        typeName = QLatin1String("Format_YV12");
-        break;
-    case QVideoFrame::Format_UYVY:
-        typeName = QLatin1String("Format_UYVY");
-        break;
-    case QVideoFrame::Format_YUYV:
-        typeName = QLatin1String("Format_YUYV");
-        break;
-    case QVideoFrame::Format_NV12:
-        typeName = QLatin1String("Format_NV12");
-        break;
-    case QVideoFrame::Format_NV21:
-        typeName = QLatin1String("Format_NV21");
-        break;
-    case QVideoFrame::Format_IMC1:
-        typeName = QLatin1String("Format_IMC1");
-        break;
-    case QVideoFrame::Format_IMC2:
-        typeName = QLatin1String("Format_IMC2");
-        break;
-    case QVideoFrame::Format_IMC3:
-        typeName = QLatin1String("Format_IMC3");
-        break;
-    case QVideoFrame::Format_IMC4:
-        typeName = QLatin1String("Format_IMC4");
-        break;
-    case QVideoFrame::Format_Y8:
-        typeName = QLatin1String("Format_Y8");
-        break;
-    case QVideoFrame::Format_Y16:
-        typeName = QLatin1String("Format_Y16");
-    default:
-        typeName = QString(QLatin1String("UserType(%1)" )).arg(int(f.pixelFormat()));
-    }
-
-    dbg.nospace() << "QVideoSurfaceFormat(" << typeName;
-    dbg.nospace() << ", " << f.frameSize();
-    dbg.nospace() << ", viewport=" << f.viewport();
-    dbg.nospace() << ", pixelAspectRatio=" << f.pixelAspectRatio();
-    dbg.nospace() << ")";
-
-    foreach(const QByteArray& propertyName, f.propertyNames())
-        dbg << "\n    " << propertyName.data() << " = " << f.property(propertyName.data());
-
-    return dbg.space();
-}
-#endif
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/video/qvideosurfaceformat.h b/src/multimedia/video/qvideosurfaceformat.h
deleted file mode 100644
index 9c73f5f..0000000
--- a/src/multimedia/video/qvideosurfaceformat.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOSURFACEFORMAT_H
-#define QVIDEOSURFACEFORMAT_H
-
-#include <QtCore/qlist.h>
-#include <QtCore/qpair.h>
-#include <QtCore/qshareddata.h>
-#include <QtCore/qsize.h>
-#include <QtGui/qimage.h>
-#include <QtMultimedia/qvideoframe.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Multimedia)
-
-class QDebug;
-
-class QVideoSurfaceFormatPrivate;
-
-class Q_MULTIMEDIA_EXPORT QVideoSurfaceFormat
-{
-public:
-    enum Direction
-    {
-        TopToBottom,
-        BottomToTop
-    };
-
-    enum YCbCrColorSpace
-    {
-        YCbCr_Undefined,
-        YCbCr_BT601,
-        YCbCr_BT709,
-        YCbCr_xvYCC601,
-        YCbCr_xvYCC709,
-        YCbCr_JPEG,
-#ifndef qdoc
-        YCbCr_CustomMatrix
-#endif
-    };
-
-    QVideoSurfaceFormat();
-    QVideoSurfaceFormat(
-            const QSize &size,
-            QVideoFrame::PixelFormat pixelFormat,
-            QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle);
-    QVideoSurfaceFormat(const QVideoSurfaceFormat &format);
-    ~QVideoSurfaceFormat();
-
-    QVideoSurfaceFormat &operator =(const QVideoSurfaceFormat &format);
-
-    bool operator ==(const QVideoSurfaceFormat &format) const;
-    bool operator !=(const QVideoSurfaceFormat &format) const;
-
-    bool isValid() const;
-
-    QVideoFrame::PixelFormat pixelFormat() const;
-    QAbstractVideoBuffer::HandleType handleType() const;
-
-    QSize frameSize() const;
-    void setFrameSize(const QSize &size);
-    void setFrameSize(int width, int height);
-
-    int frameWidth() const;
-    int frameHeight() const;
-
-    QRect viewport() const;
-    void setViewport(const QRect &viewport);
-
-    Direction scanLineDirection() const;
-    void setScanLineDirection(Direction direction);
-
-    qreal frameRate() const;
-    void setFrameRate(qreal rate);
-
-    QSize pixelAspectRatio() const;
-    void setPixelAspectRatio(const QSize &ratio);
-    void setPixelAspectRatio(int width, int height);
-
-    YCbCrColorSpace yCbCrColorSpace() const;
-    void setYCbCrColorSpace(YCbCrColorSpace colorSpace);
-
-    QSize sizeHint() const;
-
-    QList<QByteArray> propertyNames() const;
-    QVariant property(const char *name) const;
-    void setProperty(const char *name, const QVariant &value);
-
-private:
-    QSharedDataPointer<QVideoSurfaceFormatPrivate> d;
-};
-
-#ifndef QT_NO_DEBUG_STREAM
-Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug, const QVideoSurfaceFormat &);
-#endif
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QVideoSurfaceFormat::Direction)
-Q_DECLARE_METATYPE(QVideoSurfaceFormat::YCbCrColorSpace)
-
-QT_END_HEADER
-
-#endif
-
diff --git a/src/multimedia/video/video.pri b/src/multimedia/video/video.pri
deleted file mode 100644
index 0547a4c..0000000
--- a/src/multimedia/video/video.pri
+++ /dev/null
@@ -1,21 +0,0 @@
-
-INCLUDEPATH += $$PWD
-
-HEADERS += \
-    $$PWD/qabstractvideobuffer.h \
-    $$PWD/qabstractvideobuffer_p.h \
-    $$PWD/qabstractvideosurface.h \
-    $$PWD/qabstractvideosurface_p.h \
-    $$PWD/qimagevideobuffer_p.h \
-    $$PWD/qmemoryvideobuffer_p.h \
-    $$PWD/qvideoframe.h \
-    $$PWD/qvideosurfaceformat.h
-
-SOURCES += \
-    $$PWD/qabstractvideobuffer.cpp \
-    $$PWD/qabstractvideosurface.cpp \
-    $$PWD/qimagevideobuffer.cpp \
-    $$PWD/qmemoryvideobuffer.cpp \
-    $$PWD/qvideoframe.cpp \
-    $$PWD/qvideosurfaceformat.cpp
-
diff --git a/src/plugins/mediaservices/directshow/directshow.pro b/src/plugins/mediaservices/directshow/directshow.pro
index ea133f9..973c2b1 100644
--- a/src/plugins/mediaservices/directshow/directshow.pro
+++ b/src/plugins/mediaservices/directshow/directshow.pro
@@ -1,7 +1,7 @@
-TARGET = dsengine
+TARGET = qdsengine
 include(../../qpluginbase.pri)
 
-QT += multimedia
+QT += mediaservices
 
 HEADERS += dsserviceplugin.h
 SOURCES += dsserviceplugin.cpp
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
index 2faac13..d7e3499 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
@@ -42,7 +42,7 @@
 #ifndef DIRECTSHOWAUDIOENDPOINTCONTROL_H
 #define DIRECTSHOWAUDIOENDPOINTCONTROL_H
 
-#include <QtMultimedia/qmediacontrol.h>
+#include <QtMediaservices/qmediacontrol.h>
 
 #include <dshow.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp
index 89821c4..53b8787 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp
@@ -57,76 +57,76 @@ namespace
 {
     struct QWMMetaDataKeyLookup
     {
-        QtMultimedia::MetaData key;
+        QtMediaservices::MetaData key;
         const wchar_t *token;
     };
 }
 
 static const QWMMetaDataKeyLookup qt_wmMetaDataKeys[] =
 {
-    { QtMultimedia::Title, L"Title" },
-    { QtMultimedia::SubTitle, L"WM/SubTitle" },
-    { QtMultimedia::Author, L"Author" },
-    { QtMultimedia::Comment, L"Comment" },
-    { QtMultimedia::Description, L"Description" },
-    { QtMultimedia::Category, L"WM/Category" },
-    { QtMultimedia::Genre, L"WM/Genre" },
-    //{ QtMultimedia::Date, 0 },
-    { QtMultimedia::Year, L"WM/Year" },
-    { QtMultimedia::UserRating, L"UserRating" },
-    //{ QtMultimedia::MetaDatawords, 0 },
-    { QtMultimedia::Language, L"Language" },
-    { QtMultimedia::Publisher, L"WM/Publisher" },
-    { QtMultimedia::Copyright, L"Copyright" },
-    { QtMultimedia::ParentalRating, L"ParentalRating" },
-    { QtMultimedia::RatingOrganisation, L"RatingOrganisation" },
+    { QtMediaservices::Title, L"Title" },
+    { QtMediaservices::SubTitle, L"WM/SubTitle" },
+    { QtMediaservices::Author, L"Author" },
+    { QtMediaservices::Comment, L"Comment" },
+    { QtMediaservices::Description, L"Description" },
+    { QtMediaservices::Category, L"WM/Category" },
+    { QtMediaservices::Genre, L"WM/Genre" },
+    //{ QtMediaservices::Date, 0 },
+    { QtMediaservices::Year, L"WM/Year" },
+    { QtMediaservices::UserRating, L"UserRating" },
+    //{ QtMediaservices::MetaDatawords, 0 },
+    { QtMediaservices::Language, L"Language" },
+    { QtMediaservices::Publisher, L"WM/Publisher" },
+    { QtMediaservices::Copyright, L"Copyright" },
+    { QtMediaservices::ParentalRating, L"ParentalRating" },
+    { QtMediaservices::RatingOrganisation, L"RatingOrganisation" },
 
     // Media
-    { QtMultimedia::Size, L"FileSize" },
-    { QtMultimedia::MediaType, L"MediaType" },
-    { QtMultimedia::Duration, L"Duration" },
+    { QtMediaservices::Size, L"FileSize" },
+    { QtMediaservices::MediaType, L"MediaType" },
+    { QtMediaservices::Duration, L"Duration" },
 
     // Audio
-    { QtMultimedia::AudioBitRate, L"AudioBitRate" },
-    { QtMultimedia::AudioCodec, L"AudioCodec" },
-    { QtMultimedia::ChannelCount, L"ChannelCount" },
-    { QtMultimedia::SampleRate, L"Frequency" },
+    { QtMediaservices::AudioBitRate, L"AudioBitRate" },
+    { QtMediaservices::AudioCodec, L"AudioCodec" },
+    { QtMediaservices::ChannelCount, L"ChannelCount" },
+    { QtMediaservices::SampleRate, L"Frequency" },
 
     // Music
-    { QtMultimedia::AlbumTitle, L"WM/AlbumTitle" },
-    { QtMultimedia::AlbumArtist, L"WM/AlbumArtist" },
-    { QtMultimedia::ContributingArtist, L"Author" },
-    { QtMultimedia::Composer, L"WM/Composer" },
-    { QtMultimedia::Conductor, L"WM/Conductor" },
-    { QtMultimedia::Lyrics, L"WM/Lyrics" },
-    { QtMultimedia::Mood, L"WM/Mood" },
-    { QtMultimedia::TrackNumber, L"WM/TrackNumber" },
-    //{ QtMultimedia::TrackCount, 0 },
-    //{ QtMultimedia::CoverArtUriSmall, 0 },
-    //{ QtMultimedia::CoverArtUriLarge, 0 },
+    { QtMediaservices::AlbumTitle, L"WM/AlbumTitle" },
+    { QtMediaservices::AlbumArtist, L"WM/AlbumArtist" },
+    { QtMediaservices::ContributingArtist, L"Author" },
+    { QtMediaservices::Composer, L"WM/Composer" },
+    { QtMediaservices::Conductor, L"WM/Conductor" },
+    { QtMediaservices::Lyrics, L"WM/Lyrics" },
+    { QtMediaservices::Mood, L"WM/Mood" },
+    { QtMediaservices::TrackNumber, L"WM/TrackNumber" },
+    //{ QtMediaservices::TrackCount, 0 },
+    //{ QtMediaservices::CoverArtUriSmall, 0 },
+    //{ QtMediaservices::CoverArtUriLarge, 0 },
 
     // Image/Video
-    //{ QtMultimedia::Resolution, 0 },
-    //{ QtMultimedia::PixelAspectRatio, 0 },
+    //{ QtMediaservices::Resolution, 0 },
+    //{ QtMediaservices::PixelAspectRatio, 0 },
 
     // Video
-    //{ QtMultimedia::FrameRate, 0 },
-    { QtMultimedia::VideoBitRate, L"VideoBitRate" },
-    { QtMultimedia::VideoCodec, L"VideoCodec" },
+    //{ QtMediaservices::FrameRate, 0 },
+    { QtMediaservices::VideoBitRate, L"VideoBitRate" },
+    { QtMediaservices::VideoCodec, L"VideoCodec" },
 
-    //{ QtMultimedia::PosterUri, 0 },
+    //{ QtMediaservices::PosterUri, 0 },
 
     // Movie
-    { QtMultimedia::ChapterNumber, L"ChapterNumber" },
-    { QtMultimedia::Director, L"WM/Director" },
-    { QtMultimedia::LeadPerformer, L"LeadPerformer" },
-    { QtMultimedia::Writer, L"WM/Writer" },
+    { QtMediaservices::ChapterNumber, L"ChapterNumber" },
+    { QtMediaservices::Director, L"WM/Director" },
+    { QtMediaservices::LeadPerformer, L"LeadPerformer" },
+    { QtMediaservices::Writer, L"WM/Writer" },
 
     // Photos
-    { QtMultimedia::CameraManufacturer, L"CameraManufacturer" },
-    { QtMultimedia::CameraModel, L"CameraModel" },
-    { QtMultimedia::Event, L"Event" },
-    { QtMultimedia::Subject, L"Subject" }
+    { QtMediaservices::CameraManufacturer, L"CameraManufacturer" },
+    { QtMediaservices::CameraModel, L"CameraModel" },
+    { QtMediaservices::Event, L"Event" },
+    { QtMediaservices::Subject, L"Subject" }
 };
 
 static QVariant getValue(IWMHeaderInfo *header, const wchar_t *key)
@@ -257,7 +257,7 @@ bool DirectShowMetaDataControl::isMetaDataAvailable() const
 #endif
 }
 
-QVariant DirectShowMetaDataControl::metaData(QtMultimedia::MetaData key) const
+QVariant DirectShowMetaDataControl::metaData(QtMediaservices::MetaData key) const
 {
     QVariant value;
 
@@ -277,19 +277,19 @@ QVariant DirectShowMetaDataControl::metaData(QtMultimedia::MetaData key) const
         BSTR string = 0;
 
         switch (key) {
-        case QtMultimedia::Author:
+        case QtMediaservices::Author:
             m_content->get_AuthorName(&string);
             break;
-        case QtMultimedia::Title:
+        case QtMediaservices::Title:
             m_content->get_Title(&string);
             break;
-        case QtMultimedia::ParentalRating:
+        case QtMediaservices::ParentalRating:
             m_content->get_Rating(&string);
             break;
-        case QtMultimedia::Description:
+        case QtMediaservices::Description:
             m_content->get_Description(&string);
             break;
-        case QtMultimedia::Copyright:
+        case QtMediaservices::Copyright:
             m_content->get_Copyright(&string);
             break;
         default:
@@ -305,13 +305,13 @@ QVariant DirectShowMetaDataControl::metaData(QtMultimedia::MetaData key) const
     return value;
 }
 
-void DirectShowMetaDataControl::setMetaData(QtMultimedia::MetaData, const QVariant &)
+void DirectShowMetaDataControl::setMetaData(QtMediaservices::MetaData, const QVariant &)
 {
 }
 
-QList<QtMultimedia::MetaData> DirectShowMetaDataControl::availableMetaData() const
+QList<QtMediaservices::MetaData> DirectShowMetaDataControl::availableMetaData() const
 {
-    return QList<QtMultimedia::MetaData>();
+    return QList<QtMediaservices::MetaData>();
 }
 
 QVariant DirectShowMetaDataControl::extendedMetaData(const QString &) const
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h
index 9a81ba8..c67c6eb 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h
@@ -44,7 +44,7 @@
 
 #include "directshowglobal.h"
 
-#include <QtMultimedia/qmetadatacontrol.h>
+#include <QtMediaservices/qmetadatacontrol.h>
 
 #include <qnetwork.h>
 
@@ -72,9 +72,9 @@ public:
     bool isWritable() const;
     bool isMetaDataAvailable() const;
 
-    QVariant metaData(QtMultimedia::MetaData key) const;
-    void setMetaData(QtMultimedia::MetaData key, const QVariant &value);
-    QList<QtMultimedia::MetaData> availableMetaData() const;
+    QVariant metaData(QtMediaservices::MetaData key) const;
+    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
+    QList<QtMediaservices::MetaData> availableMetaData() const;
 
     QVariant extendedMetaData(const QString &key) const;
     void setExtendedMetaData(const QString &key, const QVariant &value);
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp
index 19f65da..4dd9b0e 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp
@@ -41,7 +41,7 @@
 
 #include "directshowpinenum.h"
 
-#include <QtMultimedia>
+#include <QtMediaservices>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h
index dd25d30..b22a45b 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h
@@ -42,8 +42,8 @@
 #ifndef DIRECTSHOWPLAYERCONTROL_H
 #define DIRECTSHOWPLAYERCONTROL_H
 
-#include <QtMultimedia/qmediacontent.h>
-#include <QtMultimedia/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
 
 #include <QtCore/qcoreevent.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp
index a5f143f..93ae3ad 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp
@@ -49,7 +49,7 @@
 #include "directshowvideorenderercontrol.h"
 #include "vmr9videowindowcontrol.h"
 
-#include <QtMultimedia/qmediacontent.h>
+#include <QtMediaservices/qmediacontent.h>
 
 #include <QtCore/qcoreapplication.h>
 #include <QtCore/qdatetime.h>
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
index d3ef809..1a90b7e 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
@@ -42,10 +42,10 @@
 #ifndef DIRECTSHOWPLAYERSERVICE_H
 #define DIRECTSHOWPLAYERSERVICE_H
 
-#include <QtMultimedia/qmediaplayer.h>
-#include <QtMultimedia/qmediaresource.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediatimerange.h>
+#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaservices/qmediaresource.h>
+#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaservices/qmediatimerange.h>
 
 #include "directshoweventloop.h"
 #include "directshowglobal.h"
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h
index acb2937..c4e9bed 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h
@@ -42,7 +42,7 @@
 #ifndef DIRECTSHOWVIDEOUTPUTCONTROL_H
 #define DIRECTSHOWVIDEOOUPUTCONTROL_H
 
-#include <QtMultimedia/qvideooutputcontrol.h>
+#include <QtMediaservices/qvideooutputcontrol.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h
index 6b4f4a2..c341487 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h
@@ -42,7 +42,7 @@
 #ifndef DIRECTSHOWVIDEORENDERERCONTROL_H
 #define DIRECTSHOWVIDEORENDERERCONTROL_H
 
-#include <QtMultimedia/qvideorenderercontrol.h>
+#include <QtMediaservices/qvideorenderercontrol.h>
 
 #include <dshow.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h b/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
index 06dc31c..5820225 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
@@ -42,7 +42,7 @@
 #ifndef MEDIASAMPLEVIDEOBUFFER_H
 #define MEDIASAMPLEVIDEOBUFFER_H
 
-#include <QtMultimedia/qabstractvideobuffer.h>
+#include <QtMediaservices/qabstractvideobuffer.h>
 
 #include <dshow.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h
index beac433..9906fae 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h
@@ -42,7 +42,7 @@
 #ifndef VMR9VIDEOWINDOWCONTROL_H
 #define VMR9VIDEOWINDOWCONTROL_H
 
-#include <QtMultimedia/qvideowindowcontrol.h>
+#include <QtMediaservices/qvideowindowcontrol.h>
 
 #include <dshow.h>
 #include <d3d9.h>
diff --git a/src/plugins/mediaservices/gstreamer/gstreamer.pro b/src/plugins/mediaservices/gstreamer/gstreamer.pro
index d1bfe44..0273139 100644
--- a/src/plugins/mediaservices/gstreamer/gstreamer.pro
+++ b/src/plugins/mediaservices/gstreamer/gstreamer.pro
@@ -1,7 +1,7 @@
-TARGET = gstengine
+TARGET = qgstengine
 include(../../qpluginbase.pri)
 
-QT += multimedia
+QT += mediaservices
 
 unix:contains(QT_CONFIG, alsa) {
     DEFINES += HAVE_ALSA
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
index eff6ea4..05b924a 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
@@ -49,77 +49,77 @@ QT_BEGIN_NAMESPACE
 
 struct QGstreamerMetaDataKeyLookup
 {
-    QtMultimedia::MetaData key;
+    QtMediaservices::MetaData key;
     const char *token;
 };
 
 static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] =
 {
-    { QtMultimedia::Title, GST_TAG_TITLE },
-    //{ QtMultimedia::SubTitle, 0 },
-    //{ QtMultimedia::Author, 0 },
-    { QtMultimedia::Comment, GST_TAG_COMMENT },
-    { QtMultimedia::Description, GST_TAG_DESCRIPTION },
-    //{ QtMultimedia::Category, 0 },
-    { QtMultimedia::Genre, GST_TAG_GENRE },
-    { QtMultimedia::Year, "year" },
-    //{ QtMultimedia::UserRating, 0 },
-
-    { QtMultimedia::Language, GST_TAG_LANGUAGE_CODE },
-
-    { QtMultimedia::Publisher, GST_TAG_ORGANIZATION },
-    { QtMultimedia::Copyright, GST_TAG_COPYRIGHT },
-    //{ QtMultimedia::ParentalRating, 0 },
-    //{ QtMultimedia::RatingOrganisation, 0 },
+    { QtMediaservices::Title, GST_TAG_TITLE },
+    //{ QtMediaservices::SubTitle, 0 },
+    //{ QtMediaservices::Author, 0 },
+    { QtMediaservices::Comment, GST_TAG_COMMENT },
+    { QtMediaservices::Description, GST_TAG_DESCRIPTION },
+    //{ QtMediaservices::Category, 0 },
+    { QtMediaservices::Genre, GST_TAG_GENRE },
+    { QtMediaservices::Year, "year" },
+    //{ QtMediaservices::UserRating, 0 },
+
+    { QtMediaservices::Language, GST_TAG_LANGUAGE_CODE },
+
+    { QtMediaservices::Publisher, GST_TAG_ORGANIZATION },
+    { QtMediaservices::Copyright, GST_TAG_COPYRIGHT },
+    //{ QtMediaservices::ParentalRating, 0 },
+    //{ QtMediaservices::RatingOrganisation, 0 },
 
     // Media
-    //{ QtMultimedia::Size, 0 },
-    //{ QtMultimedia::MediaType, 0 },
-    { QtMultimedia::Duration, GST_TAG_DURATION },
+    //{ QtMediaservices::Size, 0 },
+    //{ QtMediaservices::MediaType, 0 },
+    { QtMediaservices::Duration, GST_TAG_DURATION },
 
     // Audio
-    { QtMultimedia::AudioBitRate, GST_TAG_BITRATE },
-    { QtMultimedia::AudioCodec, GST_TAG_AUDIO_CODEC },
-    //{ QtMultimedia::ChannelCount, 0 },
-    //{ QtMultimedia::Frequency, 0 },
+    { QtMediaservices::AudioBitRate, GST_TAG_BITRATE },
+    { QtMediaservices::AudioCodec, GST_TAG_AUDIO_CODEC },
+    //{ QtMediaservices::ChannelCount, 0 },
+    //{ QtMediaservices::Frequency, 0 },
 
     // Music
-    { QtMultimedia::AlbumTitle, GST_TAG_ALBUM },
-    { QtMultimedia::AlbumArtist,  GST_TAG_ARTIST},
-    { QtMultimedia::ContributingArtist, GST_TAG_PERFORMER },
+    { QtMediaservices::AlbumTitle, GST_TAG_ALBUM },
+    { QtMediaservices::AlbumArtist,  GST_TAG_ARTIST},
+    { QtMediaservices::ContributingArtist, GST_TAG_PERFORMER },
 #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19)
-    { QtMultimedia::Composer, GST_TAG_COMPOSER },
+    { QtMediaservices::Composer, GST_TAG_COMPOSER },
 #endif
-    //{ QtMultimedia::Conductor, 0 },
-    //{ QtMultimedia::Lyrics, 0 },
-    //{ QtMultimedia::Mood, 0 },
-    { QtMultimedia::TrackNumber, GST_TAG_TRACK_NUMBER },
+    //{ QtMediaservices::Conductor, 0 },
+    //{ QtMediaservices::Lyrics, 0 },
+    //{ QtMediaservices::Mood, 0 },
+    { QtMediaservices::TrackNumber, GST_TAG_TRACK_NUMBER },
 
-    //{ QtMultimedia::CoverArtUrlSmall, 0 },
-    //{ QtMultimedia::CoverArtUrlLarge, 0 },
+    //{ QtMediaservices::CoverArtUrlSmall, 0 },
+    //{ QtMediaservices::CoverArtUrlLarge, 0 },
 
     // Image/Video
-    //{ QtMultimedia::Resolution, 0 },
-    //{ QtMultimedia::PixelAspectRatio, 0 },
+    //{ QtMediaservices::Resolution, 0 },
+    //{ QtMediaservices::PixelAspectRatio, 0 },
 
     // Video
-    //{ QtMultimedia::VideoFrameRate, 0 },
-    //{ QtMultimedia::VideoBitRate, 0 },
-    { QtMultimedia::VideoCodec, GST_TAG_VIDEO_CODEC },
+    //{ QtMediaservices::VideoFrameRate, 0 },
+    //{ QtMediaservices::VideoBitRate, 0 },
+    { QtMediaservices::VideoCodec, GST_TAG_VIDEO_CODEC },
 
-    //{ QtMultimedia::PosterUrl, 0 },
+    //{ QtMediaservices::PosterUrl, 0 },
 
     // Movie
-    //{ QtMultimedia::ChapterNumber, 0 },
-    //{ QtMultimedia::Director, 0 },
-    { QtMultimedia::LeadPerformer, GST_TAG_PERFORMER },
-    //{ QtMultimedia::Writer, 0 },
+    //{ QtMediaservices::ChapterNumber, 0 },
+    //{ QtMediaservices::Director, 0 },
+    { QtMediaservices::LeadPerformer, GST_TAG_PERFORMER },
+    //{ QtMediaservices::Writer, 0 },
 
     // Photos
-    //{ QtMultimedia::CameraManufacturer, 0 },
-    //{ QtMultimedia::CameraModel, 0 },
-    //{ QtMultimedia::Event, 0 },
-    //{ QtMultimedia::Subject, 0 }
+    //{ QtMediaservices::CameraManufacturer, 0 },
+    //{ QtMediaservices::CameraModel, 0 },
+    //{ QtMediaservices::Event, 0 },
+    //{ QtMediaservices::Subject, 0 }
 };
 
 QGstreamerMetaDataProvider::QGstreamerMetaDataProvider(QGstreamerPlayerSession *session, QObject *parent)
@@ -142,7 +142,7 @@ bool QGstreamerMetaDataProvider::isWritable() const
     return false;
 }
 
-QVariant QGstreamerMetaDataProvider::metaData(QtMultimedia::MetaData key) const
+QVariant QGstreamerMetaDataProvider::metaData(QtMediaservices::MetaData key) const
 {
     static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
 
@@ -154,15 +154,15 @@ QVariant QGstreamerMetaDataProvider::metaData(QtMultimedia::MetaData key) const
     return QVariant();
 }
 
-void QGstreamerMetaDataProvider::setMetaData(QtMultimedia::MetaData key, QVariant const &value)
+void QGstreamerMetaDataProvider::setMetaData(QtMediaservices::MetaData key, QVariant const &value)
 {
     Q_UNUSED(key);
     Q_UNUSED(value);
 }
 
-QList<QtMultimedia::MetaData> QGstreamerMetaDataProvider::availableMetaData() const
+QList<QtMediaservices::MetaData> QGstreamerMetaDataProvider::availableMetaData() const
 {
-    static QMap<QByteArray, QtMultimedia::MetaData> keysMap;
+    static QMap<QByteArray, QtMediaservices::MetaData> keysMap;
     if (keysMap.isEmpty()) {
         const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
         for (int i = 0; i < count; ++i) {
@@ -170,9 +170,9 @@ QList<QtMultimedia::MetaData> QGstreamerMetaDataProvider::availableMetaData() co
         }
     }
 
-    QList<QtMultimedia::MetaData> res;
+    QList<QtMediaservices::MetaData> res;
     foreach (const QByteArray &key, m_session->tags().keys()) {
-        QtMultimedia::MetaData tag = keysMap.value(key, QtMultimedia::MetaData(-1));
+        QtMediaservices::MetaData tag = keysMap.value(key, QtMultimedia::MetaData(-1));
         if (tag != -1)
             res.append(tag);
     }
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h
index 267c2d7..98803c2 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERMETADATAPROVIDER_H
 #define QGSTREAMERMETADATAPROVIDER_H
 
-#include <QtMultimedia/qmetadatacontrol.h>
+#include <QtMediaservices/qmetadatacontrol.h>
 
 
 QT_BEGIN_HEADER
@@ -61,9 +61,9 @@ public:
     bool isMetaDataAvailable() const;
     bool isWritable() const;
 
-    QVariant metaData(QtMultimedia::MetaData key) const;
-    void setMetaData(QtMultimedia::MetaData key, const QVariant &value);
-    QList<QtMultimedia::MetaData> availableMetaData() const;
+    QVariant metaData(QtMediaservices::MetaData key) const;
+    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
+    QList<QtMediaservices::MetaData> availableMetaData() const;
 
     QVariant extendedMetaData(const QString &key) const ;
     void setExtendedMetaData(const QString &key, const QVariant &value);
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
index 1764eb0..bb77eff 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
@@ -44,8 +44,8 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservies/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 #include <limits.h>
 
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index 56cdb04..33454d4 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -812,7 +812,7 @@ void QGstreamerPlayerSession::getStreamsInfo()
 
     for (int i=0; i<m_streamTypes.count(); i++) {
         QMediaStreamsControl::StreamType streamType = m_streamTypes[i];
-        QMap<QtMultimedia::MetaData, QVariant> streamProperties;
+        QMap<QtMediaservices::MetaData, QVariant> streamProperties;
 
         int streamIndex = i - m_playbin2StreamOffset[streamType];
 
@@ -834,7 +834,7 @@ void QGstreamerPlayerSession::getStreamsInfo()
         if (tags && gst_is_tag_list(tags)) {
             gchar *languageCode = 0;
             if (gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &languageCode))
-                streamProperties[QtMultimedia::Language] = QString::fromUtf8(languageCode);
+                streamProperties[QtMediaservices::Language] = QString::fromUtf8(languageCode);
 
             //qDebug() << "language for setream" << i << QString::fromUtf8(languageCode);
             g_free (languageCode);
@@ -889,8 +889,8 @@ void QGstreamerPlayerSession::getStreamsInfo()
 //            break;
 //        }
 //
-//        QMap<QtMultimedia::MetaData, QVariant> streamProperties;
-//        streamProperties[QtMultimedia::Language] = QString::fromUtf8(languageCode);
+//        QMap<QtMediaservices::MetaData, QVariant> streamProperties;
+//        streamProperties[QtMediaservices::Language] = QString::fromUtf8(languageCode);
 //
 //        m_streamProperties.append(streamProperties);
 //        m_streamTypes.append(streamType);
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h
index 867a0e0..61b5f51 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h
@@ -46,7 +46,7 @@
 #include <QUrl>
 #include "qgstreamerplayercontrol.h"
 #include "qgstreamerbushelper.h"
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qmediaplayer.h>
 //#include <qmediastreamscontrol.h>
 
 #include <gst/gst.h>
@@ -92,7 +92,7 @@ public:
     void setPlaybackRate(qreal rate);
 
     QMap<QByteArray ,QVariant> tags() const { return m_tags; }
-    QMap<QtMultimedia::MetaData,QVariant> streamProperties(int streamNumber) const { return m_streamProperties[streamNumber]; }
+    QMap<QtMediaservices::MetaData,QVariant> streamProperties(int streamNumber) const { return m_streamProperties[streamNumber]; }
 //    int streamCount() const { return m_streamProperties.count(); }
 //    QMediaStreamsControl::StreamType streamType(int streamNumber) { return m_streamTypes.value(streamNumber, QMediaStreamsControl::UnknownStream); }
 //
@@ -153,7 +153,7 @@ private:
     QGstreamerVideoRendererInterface *m_renderer;
 
     QMap<QByteArray, QVariant> m_tags;
-    QList< QMap<QtMultimedia::MetaData,QVariant> > m_streamProperties;
+    QList< QMap<QtMediaservices::MetaData,QVariant> > m_streamProperties;
 //    QList<QMediaStreamsControl::StreamType> m_streamTypes;
 //    QMap<QMediaStreamsControl::StreamType, int> m_playbin2StreamOffset;
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp
index 98068ac..443e738 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp
+++ b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp
@@ -52,7 +52,7 @@
 #ifdef QMEDIA_GSTREAMER_CAPTURE
 #include "qgstreamercaptureservice.h"
 #endif
-#include <QtMultimedia/qmediaserviceprovider.h>
+#include <QtMediaservices/qmediaserviceprovider.h>
 
 #ifdef QMEDIA_GSTREAMER_CAPTURE
 #include <linux/types.h>
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h
index d6d6899..6908bb3 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h
@@ -43,7 +43,7 @@
 #ifndef QGSTREAMERSERVICEPLUGIN_H
 #define QGSTREAMERSERVICEPLUGIN_H
 
-#include <QtMultimedia/qmediaserviceproviderplugin.h>
+#include <QtMediaservices/qmediaserviceproviderplugin.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h b/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h
index 6762bab..35174cf 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOINPUTDEVICECONTROL_H
 #define QGSTREAMERVIDEOINPUTDEVICECONTROL_H
 
-#include <QtMultimedia/qvideodevicecontrol.h>
+#include <QtMediaservices/qvideodevicecontrol.h>
 #include <QtCore/qstringlist.h>
 
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h b/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h
index 7685239..c4d76a4 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOOUTPUTCONTROL_H
 #define QGSTREAMERVIDEOOUTPUTCONTROL_H
 
-#include <QtMultimedia/qvideooutputcontrol.h>
+#include <QtMediaservices/qvideooutputcontrol.h>
 
 #include <gst/gst.h>
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h b/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h
index 1188074..63079c8 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOOVERLAY_H
 #define QGSTREAMERVIDEOOVERLAY_H
 
-#include <QtMultimedia/qvideowindowcontrol.h>
+#include <QtMediaservices/qvideowindowcontrol.h>
 
 #include "qgstreamervideorendererinterface.h"
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h b/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h
index ba3f806..903ffbb 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEORENDERER_H
 #define QGSTREAMERVIDEORENDERER_H
 
-#include <QtMultimedia/qvideorenderercontrol.h>
+#include <QtMediaservices/qvideorenderercontrol.h>
 #include "qvideosurfacegstsink.h"
 
 #include "qgstreamervideorendererinterface.h"
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h b/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h
index 28b48af..e99a3cf 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOWIDGET_H
 #define QGSTREAMERVIDEOWIDGET_H
 
-#include <QtMultimedia/qvideowidgetcontrol.h>
+#include <QtMediaservices/qvideowidgetcontrol.h>
 
 #include "qgstreamervideorendererinterface.h"
 
diff --git a/src/plugins/mediaservices/mediaservices.pro b/src/plugins/mediaservices/mediaservices.pro
index 19d678b..6a00a14 100644
--- a/src/plugins/mediaservices/mediaservices.pro
+++ b/src/plugins/mediaservices/mediaservices.pro
@@ -1,6 +1,6 @@
 TEMPLATE = subdirs
 
-contains(QT_CONFIG, mediaservice) {
+contains(QT_CONFIG, media-backend) {
     win32:!wince*: SUBDIRS += directshow
 
     mac: SUBDIRS += qt7
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h
index 907d13d..a546ca1 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h
@@ -45,8 +45,8 @@
 #include <QtCore/qobject.h>
 #include <QtGui/qmacdefines_mac.h>
 
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm
index 0f4ac41..90c6035 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm
@@ -42,7 +42,7 @@
 #include "qt7playercontrol.h"
 #include "qt7playersession.h"
 
-#include <QtMultimedia/qmediaplaylistnavigator.h>
+#include <QtMediaservices/qmediaplaylistnavigator.h>
 
 #include <QtCore/qurl.h>
 #include <QtCore/qdebug.h>
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h
index f16807a..e13df95 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h
@@ -42,7 +42,7 @@
 #ifndef QT7PLAYERMETADATACONTROL_H
 #define QT7PLAYERMETADATACONTROL_H
 
-#include <QtMultimedia/qmetadatacontrol.h>
+#include <QtMediaservices/qmetadatacontrol.h>
 
 
 QT_BEGIN_HEADER
@@ -61,9 +61,9 @@ public:
     bool isMetaDataAvailable() const;
     bool isWritable() const;
 
-    QVariant metaData(QtMultimedia::MetaData key) const;
-    void setMetaData(QtMultimedia::MetaData key, const QVariant &value);
-    QList<QtMultimedia::MetaData> availableMetaData() const;
+    QVariant metaData(QtMediaservices::MetaData key) const;
+    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
+    QList<QtMediaservices::MetaData> availableMetaData() const;
 
     QVariant extendedMetaData(const QString &key) const ;
     void setExtendedMetaData(const QString &key, const QVariant &value);
@@ -74,7 +74,7 @@ private slots:
 
 private:
     QT7PlayerSession *m_session;
-    QMap<QtMultimedia::MetaData, QVariant> m_tags;
+    QMap<QtMediaservices::MetaData, QVariant> m_tags;
 };
 
 QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
index 59d01a2..e12daf5 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
@@ -72,18 +72,18 @@ bool QT7PlayerMetaDataControl::isWritable() const
     return false;
 }
 
-QVariant QT7PlayerMetaDataControl::metaData(QtMultimedia::MetaData key) const
+QVariant QT7PlayerMetaDataControl::metaData(QtMediaservices::MetaData key) const
 {
     return m_tags.value(key);
 }
 
-void QT7PlayerMetaDataControl::setMetaData(QtMultimedia::MetaData key, QVariant const &value)
+void QT7PlayerMetaDataControl::setMetaData(QtMediaservices::MetaData key, QVariant const &value)
 {
     Q_UNUSED(key);
     Q_UNUSED(value);
 }
 
-QList<QtMultimedia::MetaData> QT7PlayerMetaDataControl::availableMetaData() const
+QList<QtMediaservices::MetaData> QT7PlayerMetaDataControl::availableMetaData() const
 {
     return m_tags.keys();
 }
@@ -256,13 +256,13 @@ void QT7PlayerMetaDataControl::updateTags()
         metaMap.insert(QLatin1String("nam"), QString::fromUtf8([name UTF8String]));
 #endif // QUICKTIME_C_API_AVAILABLE
 
-        m_tags.insert(QtMultimedia::AlbumArtist, metaMap.value(QLatin1String("ART")));
-        m_tags.insert(QtMultimedia::AlbumTitle, metaMap.value(QLatin1String("alb")));
-        m_tags.insert(QtMultimedia::Title, metaMap.value(QLatin1String("nam")));
-        m_tags.insert(QtMultimedia::Date, metaMap.value(QLatin1String("day")));
-        m_tags.insert(QtMultimedia::Genre, metaMap.value(QLatin1String("gnre")));
-        m_tags.insert(QtMultimedia::TrackNumber, metaMap.value(QLatin1String("trk")));
-        m_tags.insert(QtMultimedia::Description, metaMap.value(QLatin1String("des")));
+        m_tags.insert(QtMediaservices::AlbumArtist, metaMap.value(QLatin1String("ART")));
+        m_tags.insert(QtMediaservices::AlbumTitle, metaMap.value(QLatin1String("alb")));
+        m_tags.insert(QtMediaservices::Title, metaMap.value(QLatin1String("nam")));
+        m_tags.insert(QtMediaservices::Date, metaMap.value(QLatin1String("day")));
+        m_tags.insert(QtMediaservices::Genre, metaMap.value(QLatin1String("gnre")));
+        m_tags.insert(QtMediaservices::TrackNumber, metaMap.value(QLatin1String("trk")));
+        m_tags.insert(QtMediaservices::Description, metaMap.value(QLatin1String("des")));
     }
 
     if (!wasEmpty || !m_tags.isEmpty())
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h
index d4b30b8..3d3a3ff 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h
@@ -43,7 +43,7 @@
 #define QT7PLAYERSERVICE_H
 
 #include <QtCore/qobject.h>
-#include <QtMultimedia/qmediaservice.h>
+#include <QtMediaservices/qmediaservice.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm
index 205e862..0b3505e 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm
@@ -54,8 +54,8 @@
 #include "qt7movievideowidget.h"
 #include "qt7playermetadata.h"
 
-#include <QtMultimedia/qmediaplaylistnavigator.h>
-#include <QtMultimedia/qmediaplaylist.h>
+#include <QtMediaservices/qmediaplaylistnavigator.h>
+#include <QtMediaservices/qmediaplaylist.h>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h
index 0ba3041..780776c 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h
@@ -45,8 +45,8 @@
 #include <QtCore/qobject.h>
 #include <QtGui/qmacdefines_mac.h>
 
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
index 65c9f7d..863b3c8 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
@@ -49,7 +49,7 @@
 #include "qt7videooutputcontrol.h"
 
 #include <QtNetwork/qnetworkcookie.h>
-#include <QtMultimedia/qmediaplaylistnavigator.h>
+#include <QtMediaservices/qmediaplaylistnavigator.h>
 
 #include <CoreFoundation/CoreFoundation.h>
 #include <Foundation/Foundation.h>
diff --git a/src/plugins/mediaservices/qt7/qt7.pro b/src/plugins/mediaservices/qt7/qt7.pro
index 8791d73..baac224 100644
--- a/src/plugins/mediaservices/qt7/qt7.pro
+++ b/src/plugins/mediaservices/qt7/qt7.pro
@@ -1,7 +1,7 @@
-TARGET = qt7
+TARGET = qqt7
 include(../../qpluginbase.pri)
 
-QT += opengl multimedia
+QT += opengl mediaservices
 
 LIBS += -framework AppKit -framework AudioUnit \
         -framework AudioToolbox -framework CoreAudio \
diff --git a/src/plugins/mediaservices/qt7/qt7movieviewoutput.h b/src/plugins/mediaservices/qt7/qt7movieviewoutput.h
index 0fee41c..ed3eebc 100644
--- a/src/plugins/mediaservices/qt7/qt7movieviewoutput.h
+++ b/src/plugins/mediaservices/qt7/qt7movieviewoutput.h
@@ -44,8 +44,8 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMultimedia/qvideowindowcontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qvideowindowcontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 #include <QtGui/qmacdefines_mac.h>
 #include "qt7videooutputcontrol.h"
diff --git a/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h b/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h
index 0b515ae..334ea6a 100644
--- a/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h
+++ b/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h
@@ -45,8 +45,8 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qmutex.h>
 
-#include <QtMultimedia/qvideowindowcontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qvideowindowcontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 #include <QtGui/qmacdefines_mac.h>
 #include "qt7videooutputcontrol.h"
diff --git a/src/plugins/mediaservices/qt7/qt7serviceplugin.h b/src/plugins/mediaservices/qt7/qt7serviceplugin.h
index c5afda1..7e8acf9 100644
--- a/src/plugins/mediaservices/qt7/qt7serviceplugin.h
+++ b/src/plugins/mediaservices/qt7/qt7serviceplugin.h
@@ -43,7 +43,7 @@
 #ifndef QT7SERVICEPLUGIN_H
 #define QT7SERVICEPLUGIN_H
 
-#include <QtMultimedia/qmediaserviceproviderplugin.h>
+#include <QtMediaservices/qmediaserviceproviderplugin.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/plugins/mediaservices/qt7/qt7serviceplugin.mm b/src/plugins/mediaservices/qt7/qt7serviceplugin.mm
index c59a453..fe4ca44 100644
--- a/src/plugins/mediaservices/qt7/qt7serviceplugin.mm
+++ b/src/plugins/mediaservices/qt7/qt7serviceplugin.mm
@@ -45,7 +45,7 @@
 #include "qt7serviceplugin.h"
 #include "qt7playerservice.h"
 
-#include <QtMultimedia/qmediaserviceprovider.h>
+#include <QtMediaservices/qmediaserviceprovider.h>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h b/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h
index 3c74cb8..39a13ee 100644
--- a/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h
+++ b/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h
@@ -45,11 +45,11 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qsize.h>
 
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideowindowcontrol.h>
-#include <QtMultimedia/qvideowidgetcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaservices/qvideooutputcontrol.h>
+#include <QtMediaservices/qvideowindowcontrol.h>
+#include <QtMediaservices/qvideowidgetcontrol.h>
+#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMediaservices/qmediaplayer.h>
 
 #include <QtGui/qmacdefines_mac.h>
 
diff --git a/src/src.pro b/src/src.pro
index c74b0ca..e8a3e98 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -17,6 +17,7 @@ contains(QT_CONFIG, openvg): SRC_SUBDIRS += src_openvg
 contains(QT_CONFIG, xmlpatterns): SRC_SUBDIRS += src_xmlpatterns
 contains(QT_CONFIG, phonon): SRC_SUBDIRS += src_phonon
 contains(QT_CONFIG, multimedia): SRC_SUBDIRS += src_multimedia
+contains(QT_CONFIG, mediaservices): SRC_SUBDIRS += src_mediaservices
 contains(QT_CONFIG, svg): SRC_SUBDIRS += src_svg
 contains(QT_CONFIG, webkit)  {
     exists($$QT_SOURCE_TREE/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro): SRC_SUBDIRS += src_javascriptcore
@@ -66,8 +67,10 @@ src_qt3support.subdir = $$QT_SOURCE_TREE/src/qt3support
 src_qt3support.target = sub-qt3support
 src_phonon.subdir = $$QT_SOURCE_TREE/src/phonon
 src_phonon.target = sub-phonon
-src_multimedia.subdir = $$QT_SOURCE_TREE/src/multimedia
+src_multimedia.subdir = $$QT_SOURCE_TREE/src/multimedia/multimedia
 src_multimedia.target = sub-multimedia
+src_mediaservices.subdir = $$QT_SOURCE_TREE/src/multimedia/mediaservices
+src_mediaservices.target = sub-mediaservices
 src_activeqt.subdir = $$QT_SOURCE_TREE/src/activeqt
 src_activeqt.target = sub-activeqt
 src_plugins.subdir = $$QT_SOURCE_TREE/src/plugins
@@ -105,6 +108,7 @@ src_declarative.target = sub-declarative
    src_phonon.depends = src_gui
    src_multimedia.depends = src_gui
    contains(QT_CONFIG, opengl):src_multimedia.depends += src_opengl
+   src_mediaservices.depends = src_multimedia
    src_tools_activeqt.depends = src_tools_idc src_gui
    src_declarative.depends = src_xml src_gui src_script src_network src_svg
    src_plugins.depends = src_gui src_sql src_svg src_multimedia
@@ -112,7 +116,7 @@ src_declarative.target = sub-declarative
    src_imports.depends = src_gui src_declarative
    contains(QT_CONFIG, webkit)  {
       src_webkit.depends = src_gui src_sql src_network src_xml 
-      contains(QT_CONFIG, multimedia):src_webkit.depends += src_multimedia
+      contains(QT_CONFIG, mediaservices):src_webkit.depends += src_mediaservices
       contains(QT_CONFIG, xmlpatterns): src_webkit.depends += src_xmlpatterns
       contains(QT_CONFIG, declarative):src_declarative.depends += src_webkit
       src_imports.depends += src_webkit
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index c0004f7..12ebc75 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -16,6 +16,7 @@ unix:!embedded:contains(QT_CONFIG, dbus):   SUBDIRS += dbus.pro
 contains(QT_CONFIG, script):                SUBDIRS += script.pro
 contains(QT_CONFIG, webkit):                SUBDIRS += webkit.pro
 contains(QT_CONFIG, multimedia):            SUBDIRS += multimedia.pro
+contains(QT_CONFIG, mediaservices):         SUBDIRS += mediaservices.pro
 contains(QT_CONFIG, phonon):                SUBDIRS += phonon.pro
 contains(QT_CONFIG, svg):                   SUBDIRS += svg.pro
 contains(QT_CONFIG, declarative):           SUBDIRS += declarative.pro
diff --git a/tests/auto/mediaservices.pro b/tests/auto/mediaservices.pro
new file mode 100644
index 0000000..1b50cd7
--- /dev/null
+++ b/tests/auto/mediaservices.pro
@@ -0,0 +1,19 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+    qsoundeffect \
+    qdeclarativeaudio \
+    qdeclarativevideo \
+    qgraphicsvideoitem \
+    qmediacontent \
+    qmediaobject \
+    qmediaplayer \
+    qmediaplaylist \
+    qmediaplaylistnavigator \
+    qmediapluginloader \
+    qmediaresource \
+    qmediaservice \
+    qmediaserviceprovider \
+    qmediatimerange \
+    qvideowidget
+
+
diff --git a/tests/auto/multimedia.pro b/tests/auto/multimedia.pro
index f55d6e4..876b932 100644
--- a/tests/auto/multimedia.pro
+++ b/tests/auto/multimedia.pro
@@ -6,21 +6,7 @@ SUBDIRS=\
     qaudioformat \
     qaudioinput \
     qaudiooutput \
-    qsoundeffect \
-    qdeclarativeaudio \
-    qdeclarativevideo \
-    qgraphicsvideoitem \
-    qmediacontent \
-    qmediaobject \
-    qmediaplayer \
-    qmediaplaylist \
-    qmediaplaylistnavigator \
-    qmediapluginloader \
-    qmediaresource \
-    qmediaservice \
-    qmediaserviceprovider \
-    qmediatimerange \
     qvideoframe \
     qvideosurfaceformat \
-    qvideowidget \
+    qvideowidget
 
diff --git a/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro b/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro
index 7779efc..ecfe299 100644
--- a/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro
+++ b/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro
@@ -11,4 +11,4 @@ SOURCES += \
         $$PWD/../../../src/imports/multimedia/qdeclarativemediabase.cpp \
         $$PWD/../../../src/imports/multimedia/qmetadatacontrolmetaobject.cpp
 
-QT += multimedia declarative
+QT += mediaservices declarative
diff --git a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
index 4cd4c71..c2bcdfe 100644
--- a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
+++ b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
@@ -11,4 +11,4 @@ SOURCES += \
         $$PWD/../../../src/imports/multimedia/qdeclarativemediabase.cpp \
         $$PWD/../../../src/imports/multimedia/qmetadatacontrolmetaobject.cpp
 
-QT += multimedia declarative
+QT += mediaservices declarative
diff --git a/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro b/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro
index da00baf..60e1933 100644
--- a/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro
+++ b/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro
@@ -1,5 +1,5 @@
 load(qttest_p4)
 SOURCES += tst_qgraphicsvideoitem.cpp
 
-QT += multimedia
-requires(contains(QT_CONFIG, multimedia))
+QT += mediaservices
+requires(contains(QT_CONFIG, mediaservices))
diff --git a/tests/auto/qmediacontent/qmediacontent.pro b/tests/auto/qmediacontent/qmediacontent.pro
index 6c13c8b..e20b4db 100644
--- a/tests/auto/qmediacontent/qmediacontent.pro
+++ b/tests/auto/qmediacontent/qmediacontent.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES += tst_qmediacontent.cpp
 
-QT = core network multimedia
+QT = core network mediaservices
 
diff --git a/tests/auto/qmediaobject/qmediaobject.pro b/tests/auto/qmediaobject/qmediaobject.pro
index e59bfdc..d6a0f7b 100644
--- a/tests/auto/qmediaobject/qmediaobject.pro
+++ b/tests/auto/qmediaobject/qmediaobject.pro
@@ -1,4 +1,4 @@
 load(qttest_p4)
 
 SOURCES += tst_qmediaobject.cpp
-QT = core multimedia
+QT = core mediaservices
diff --git a/tests/auto/qmediaplayer/qmediaplayer.pro b/tests/auto/qmediaplayer/qmediaplayer.pro
index 21008f9..f355078 100644
--- a/tests/auto/qmediaplayer/qmediaplayer.pro
+++ b/tests/auto/qmediaplayer/qmediaplayer.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES += tst_qmediaplayer.cpp
 
-QT = core multimedia
+QT = core mediaservices
 
diff --git a/tests/auto/qmediaplaylist/qmediaplaylist.pro b/tests/auto/qmediaplaylist/qmediaplaylist.pro
index b114bda..809473b 100644
--- a/tests/auto/qmediaplaylist/qmediaplaylist.pro
+++ b/tests/auto/qmediaplaylist/qmediaplaylist.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediaplaylist.cpp
 
-QT = core multimedia
+QT = core mediaservices
 
diff --git a/tests/auto/qmediaplaylistnavigator/qmediaplaylistnavigator.pro b/tests/auto/qmediaplaylistnavigator/qmediaplaylistnavigator.pro
index ea9bc0f..3265762 100644
--- a/tests/auto/qmediaplaylistnavigator/qmediaplaylistnavigator.pro
+++ b/tests/auto/qmediaplaylistnavigator/qmediaplaylistnavigator.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediaplaylistnavigator.cpp
 
-QT = core multimedia
+QT = core mediaservices
 
diff --git a/tests/auto/qmediapluginloader/qmediapluginloader.pro b/tests/auto/qmediapluginloader/qmediapluginloader.pro
index 66950e9..a47cc57 100644
--- a/tests/auto/qmediapluginloader/qmediapluginloader.pro
+++ b/tests/auto/qmediapluginloader/qmediapluginloader.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediapluginloader.cpp
 
-QT = core multimedia
+QT = core mediaservices
 
diff --git a/tests/auto/qmediaresource/qmediaresource.pro b/tests/auto/qmediaresource/qmediaresource.pro
index c8e3d9c..64669a2 100644
--- a/tests/auto/qmediaresource/qmediaresource.pro
+++ b/tests/auto/qmediaresource/qmediaresource.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediaresource.cpp
 
-QT = core multimedia network
+QT = core mediaservices network
 
diff --git a/tests/auto/qmediaservice/qmediaservice.pro b/tests/auto/qmediaservice/qmediaservice.pro
index f877665..8acd03a 100644
--- a/tests/auto/qmediaservice/qmediaservice.pro
+++ b/tests/auto/qmediaservice/qmediaservice.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediaservice.cpp
 
-QT = core gui multimedia
+QT = core gui mediaservices
 
diff --git a/tests/auto/qmediaserviceprovider/qmediaserviceprovider.pro b/tests/auto/qmediaserviceprovider/qmediaserviceprovider.pro
index 9aaa9e5..69b3864 100644
--- a/tests/auto/qmediaserviceprovider/qmediaserviceprovider.pro
+++ b/tests/auto/qmediaserviceprovider/qmediaserviceprovider.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediaserviceprovider.cpp
 
-QT = core gui multimedia
+QT = core gui mediaservices
 
diff --git a/tests/auto/qmediatimerange/qmediatimerange.pro b/tests/auto/qmediatimerange/qmediatimerange.pro
index b1b436e..98c415b 100644
--- a/tests/auto/qmediatimerange/qmediatimerange.pro
+++ b/tests/auto/qmediatimerange/qmediatimerange.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediatimerange.cpp
 
-QT = core multimedia
+QT = core media 
 
diff --git a/tests/auto/qsoundeffect/qsoundeffect.pro b/tests/auto/qsoundeffect/qsoundeffect.pro
index eaa35b2..4ed7407 100644
--- a/tests/auto/qsoundeffect/qsoundeffect.pro
+++ b/tests/auto/qsoundeffect/qsoundeffect.pro
@@ -2,7 +2,7 @@ load(qttest_p4)
 
 SOURCES += tst_qsoundeffect.cpp
 
-QT = core multimedia
+QT = core media
 
 wince* {
     deploy.sources += 4.wav
diff --git a/tests/auto/qvideowidget/qvideowidget.pro b/tests/auto/qvideowidget/qvideowidget.pro
index ca0fc24..fde9030 100644
--- a/tests/auto/qvideowidget/qvideowidget.pro
+++ b/tests/auto/qvideowidget/qvideowidget.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qvideowidget.cpp
 
-QT = core gui multimedia
+QT = core gui media
 
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index dfd1196..2afc94b 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -247,8 +247,9 @@ Configure::Configure( int& argc, char** argv )
     dictionary[ "PHONON" ]          = "auto";
     dictionary[ "PHONON_BACKEND" ]  = "yes";
     dictionary[ "MULTIMEDIA" ]      = "yes";
+    dictionary[ "MEDIASERVICES" ]   = "yes";
     dictionary[ "AUDIO_BACKEND" ]   = "auto";
-    dictionary[ "MEDIASERVICE"]     = "auto";
+    dictionary[ "MEDIA_BACKEND"]     = "auto";
     dictionary[ "WMSDK" ]           = "auto";
     dictionary[ "DIRECTSHOW" ]      = "no";
     dictionary[ "WEBKIT" ]          = "auto";
@@ -905,14 +906,18 @@ void Configure::parseCmdLine()
             dictionary[ "MULTIMEDIA" ] = "no";
         } else if( configCmdLine.at(i) == "-multimedia" ) {
             dictionary[ "MULTIMEDIA" ] = "yes";
+        } else if( configCmdLine.at(i) == "-no-mediaservices" ) {
+            dictionary[ "MEDIASERVICES" ] = "no";
+        } else if( configCmdLine.at(i) == "-mediaservices" ) {
+            dictionary[ "MEDIASERVICES" ] = "yes";
         } else if( configCmdLine.at(i) == "-audio-backend" ) {
             dictionary[ "AUDIO_BACKEND" ] = "yes";
         } else if( configCmdLine.at(i) == "-no-audio-backend" ) {
             dictionary[ "AUDIO_BACKEND" ] = "no";
-        } else if( configCmdLine.at(i) == "-mediaservice") {
-            dictionary[ "MEDIASERVICE" ] = "yes";
-        } else if (configCmdLine.at(i) == "-no-mediaservice") {
-            dictionary[ "MEDIASERVICE" ] = "no";
+        } else if( configCmdLine.at(i) == "-media-backend") {
+            dictionary[ "MEDIA_BACKEND" ] = "yes";
+        } else if (configCmdLine.at(i) == "-no-media-backend") {
+            dictionary[ "MEDIA_BACKEND" ] = "no";
         } else if( configCmdLine.at(i) == "-no-phonon" ) {
             dictionary[ "PHONON" ] = "no";
         } else if( configCmdLine.at(i) == "-phonon" ) {
@@ -1598,7 +1603,7 @@ bool Configure::displayHelp()
                     "[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-no-phonon]\n"
                     "[-phonon] [-no-phonon-backend] [-phonon-backend]\n"
                     "[-no-multimedia] [-multimedia] [-no-audio-backend] [-audio-backend]\n"
-                    "[-no-mediaservice] [-mediaservice]\n"
+                    "[-no-mediaservices] [-mediaservices] [-no-media-backend] [-media-backend]\n"
                     "[-no-script] [-script] [-no-scripttools] [-scripttools]\n"
                     "[-no-webkit] [-webkit] [-graphicssystem raster|opengl|openvg]\n\n", 0, 7);
 
@@ -1783,8 +1788,10 @@ bool Configure::displayHelp()
         desc("MULTIMEDIA", "yes","-multimedia",         "Compile in multimedia module");
         desc("AUDIO_BACKEND", "no","-no-audio-backend", "Do not compile in the platform audio backend into QtMultimedia");
         desc("AUDIO_BACKEND", "yes","-audio-backend",   "Compile in the platform audio backend into QtMultimedia");
-        desc("MEDIASERVICE", "no","-no-mediaservice",   "Do not compile in the platform-specific QtMultimedia media service.");
-        desc("MEDIASERVICE", "yes","-mediaservice",     "Compile in the platform-specific QtMultimedia media service.");
+        desc("MEDIASERVICES", "no", "-no-mediaservices","Do not compile the QtMediaservices module");
+        desc("MEDIASERVICES", "yes","-mediaservices",   "Compile in QtMediaservices module");
+        desc("MEDIA_BACKEND", "no","-no-media-backend", "Do not compile in the platform-specific QtMediaservices media service.");
+        desc("MEDIA_BACKEND", "yes","-media-backend",   "Compile in the platform-specific QtMediaservices media service.");
         desc("WEBKIT", "no",    "-no-webkit",           "Do not compile in the WebKit module");
         desc("WEBKIT", "yes",   "-webkit",              "Compile in the WebKit module (WebKit is built if a decent C++ compiler is used.)");
         desc("SCRIPT", "no",    "-no-script",           "Do not build the QtScript module.");
@@ -2066,7 +2073,7 @@ bool Configure::checkAvailability(const QString &part)
                && dictionary.value("QMAKESPEC") != "win32-msvc.net" // Leave for now, since we can't be sure if they are using 2002 or 2003 with this spec
                && dictionary.value("QMAKESPEC") != "win32-msvc2002"
                && dictionary.value("EXCEPTIONS") == "yes";
-    } else if (part == "PHONON" || part == "MEDIASERVICE") {
+    } else if (part == "PHONON" || part == "MEDIA_BACKEND") {
         available = findFile("vmr9.h") && findFile("dshow.h") && findFile("dmo.h") && findFile("dmodshow.h")
             && (findFile("strmiids.lib") || findFile("libstrmiids.a"))
             && (findFile("dmoguids.lib") || findFile("libdmoguids.a"))
@@ -2226,8 +2233,8 @@ void Configure::autoDetection()
         dictionary["DECLARATIVE"] = dictionary["SCRIPT"] == "yes" ? "yes" : "no";
     if (dictionary["AUDIO_BACKEND"] == "auto")
         dictionary["AUDIO_BACKEND"] = checkAvailability("AUDIO_BACKEND") ? "yes" : "no";
-    if (dictionary["MEDIASERVICE"] == "auto")
-        dictionary["MEDIASERVICE"] = checkAvailability("MEDIASERVICE") ? "yes" : "no";
+    if (dictionary["MEDIA_BACKEND"] == "auto")
+        dictionary["MEDIA_BACKEND"] = checkAvailability("MEDIA_BACKEND") ? "yes" : "no";
     if (dictionary["WMSDK"] == "auto")
         dictionary["WMSDK"] = checkAvailability("WMSDK") ? "yes" : "no";
 
@@ -2628,10 +2635,13 @@ void Configure::generateOutputVars()
         qtConfig += "multimedia";
         if (dictionary["AUDIO_BACKEND"] == "yes")
             qtConfig += "audio-backend";
-        if (dictionary["MEDIASERVICE"] == "yes") {
-            qtConfig += "mediaservice";
-            if (dictionary["WMSDK"] == "yes")
-                qtConfig += "wmsdk";
+        if (dictionary["MEDIASERVICES"] == "yes") {
+            qtConfig += "mediaservices";
+            if (dictionary["MEDIA_BACKEND"] == "yes") {
+                qtConfig += "media-backend";
+                if (dictionary["WMSDK"] == "yes")
+                    qtConfig += "wmsdk";
+            }
         }
     }
 
@@ -3034,6 +3044,7 @@ void Configure::generateConfigfiles()
         if(dictionary["DECLARATIVE"] == "no")       qconfigList += "QT_NO_DECLARATIVE";
         if(dictionary["PHONON"] == "no")            qconfigList += "QT_NO_PHONON";
         if(dictionary["MULTIMEDIA"] == "no")        qconfigList += "QT_NO_MULTIMEDIA";
+        if(dictionary["MEDIASERVICES"] == "no")     qconfigList += "QT_NO_MEDIASERVICES";
         if(dictionary["XMLPATTERNS"] == "no")       qconfigList += "QT_NO_XMLPATTERNS";
         if(dictionary["SCRIPT"] == "no")            qconfigList += "QT_NO_SCRIPT";
         if(dictionary["SCRIPTTOOLS"] == "no")       qconfigList += "QT_NO_SCRIPTTOOLS";
@@ -3336,6 +3347,7 @@ void Configure::displayConfig()
     cout << "QtXmlPatterns support......." << dictionary[ "XMLPATTERNS" ] << endl;
     cout << "Phonon support.............." << dictionary[ "PHONON" ] << endl;
     cout << "QtMultimedia support........" << dictionary[ "MULTIMEDIA" ] << endl;
+    cout << "QtMediaservices support....." << dictionary[ "MEDIASERVICES" ] << endl;
     cout << "WebKit support.............." << dictionary[ "WEBKIT" ] << endl;
     cout << "Declarative support........." << dictionary[ "DECLARATIVE" ] << endl;
     cout << "QtScript support............" << dictionary[ "SCRIPT" ] << endl;
-- 
cgit v0.12


From ba0d2829f3e173d4c95c49f3bbbe0cd030ff3f5f Mon Sep 17 00:00:00 2001
From: Kurt Korbatits <kurt.korbatits@nokia.com>
Date: Fri, 16 Apr 2010 09:41:10 +1000
Subject: Fixed compile errors with gstreamer plugin

Reviewed-by:Justin McPherson
---
 .../mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp  | 2 +-
 .../mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h       | 2 +-
 .../mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h       | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
index 05b924a..51d68f9 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
@@ -172,7 +172,7 @@ QList<QtMediaservices::MetaData> QGstreamerMetaDataProvider::availableMetaData()
 
     QList<QtMediaservices::MetaData> res;
     foreach (const QByteArray &key, m_session->tags().keys()) {
-        QtMediaservices::MetaData tag = keysMap.value(key, QtMultimedia::MetaData(-1));
+        QtMediaservices::MetaData tag = keysMap.value(key, QtMediaservices::MetaData(-1));
         if (tag != -1)
             res.append(tag);
     }
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
index bb77eff..5239464 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
@@ -44,7 +44,7 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMediaservies/qmediaplayercontrol.h>
+#include <QtMediaservices/qmediaplayercontrol.h>
 #include <QtMediaservices/qmediaplayer.h>
 
 #include <limits.h>
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h
index f60c72e..fe4a8a9 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h
@@ -45,7 +45,7 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qiodevice.h>
 
-#include <QtMultimedia/qmediaservice.h>
+#include <QtMediaservices/qmediaservice.h>
 
 #include "qgstreamervideooutputcontrol.h"
 
-- 
cgit v0.12


From 506a39d19961aadf02946db1b4496bf98d494d8d Mon Sep 17 00:00:00 2001
From: Andrew den Exter <andrew.den-exter@nokia.com>
Date: Fri, 16 Apr 2010 10:08:15 +1000
Subject: Rebuild configure.exe following
 e85223d233c0e1d6beca748332b8fbaba3ebbf2d

---
 configure.exe | Bin 1225728 -> 1318400 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/configure.exe b/configure.exe
index bc1ee20..ab97e1e 100755
Binary files a/configure.exe and b/configure.exe differ
-- 
cgit v0.12


From 16c6227415a05b8bc50162eb2a4941cb993c3377 Mon Sep 17 00:00:00 2001
From: Kurt Korbatits <kurt.korbatits@nokia.com>
Date: Fri, 16 Apr 2010 10:18:00 +1000
Subject: Fixed compile errors in pulseaudio backend for soundeffect

Reviewed-by:Dmytro Poplavskiy
---
 src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
index e834280..3e3dd91 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
@@ -51,7 +51,7 @@
 //
 
 #include <QtCore/qcoreapplication.h>
-#include <QtMediaservices/qaudioformat.h>
+#include <QtMultimedia/qaudioformat.h>
 #include <QtNetwork>
 #include <QTime>
 
-- 
cgit v0.12


From 30cd548679d5e2ae026eb5e435e9bdceac6e4987 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Fri, 16 Apr 2010 10:44:47 +1000
Subject: configure; Fixes for changes to use mediaservices.

Reviewed-by: Dmytro Poplavskiy
---
 configure | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index 12a7710..9cbb0f7 100755
--- a/configure
+++ b/configure
@@ -5196,7 +5196,7 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
     fi
 
     # Auto-detect GStreamer support (needed for both Phonon & QtMultimedia)
-    if [ "$CFG_PHONON" = "yes" -o "$CFG_MULTIMEDIA" = "yes" ]; then
+    if [ "$CFG_PHONON" = "yes" -o "$CFG_MEDIASERVICES" = "yes" ]; then
         if [ "$CFG_GLIB" = "yes" -a "$CFG_GSTREAMER" != "no" ]; then
             if [ -n "$PKG_CONFIG" ]; then
                 QT_CFLAGS_GSTREAMER=`$PKG_CONFIG --cflags gstreamer-0.10 gstreamer-plugins-base-0.10 2>/dev/null`
@@ -6872,7 +6872,7 @@ if [ "$CFG_MEDIASERVICES" = "no" ]; then
     QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_MEDIASERVICES"
 else
     QT_CONFIG="$QT_CONFIG mediaservices"
-    if [ "$CFG_MEDIA_BACKEND" = "yes" ]; then
+    if [ "$CFG_MEDIA_BACKEND" != "no" ]; then
         QT_CONFIG="$QT_CONFIG media-backend"
     fi
 fi
-- 
cgit v0.12


From 24d5c396903c1ce12578a32c2cc10e0ae391e6d5 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Fri, 16 Apr 2010 11:25:04 +1000
Subject: QtMediaservices -> QtMediaServices.

Reviewed-by: Dmytro Poplavskiy
---
 bin/syncqt                                         |   2 +-
 configure                                          |   4 +-
 demos/multimedia/player/player.cpp                 |  12 +-
 demos/multimedia/player/playercontrols.h           |   2 +-
 demos/multimedia/player/videowidget.h              |   2 +-
 mkspecs/features/qt.prf                            |   2 +-
 src/imports/multimedia/multimedia.cpp              |   2 +-
 src/imports/multimedia/qdeclarativeaudio.cpp       |   2 +-
 src/imports/multimedia/qdeclarativemediabase.cpp   |   8 +-
 src/imports/multimedia/qdeclarativemediabase_p.h   |   2 +-
 src/imports/multimedia/qdeclarativevideo.cpp       | 152 ++++++++++-----------
 src/imports/multimedia/qdeclarativevideo_p.h       |   2 +-
 .../multimedia/qmetadatacontrolmetaobject.cpp      | 152 ++++++++++-----------
 .../multimedia/qmetadatacontrolmetaobject_p.h      |   2 +-
 .../mediaservices/base/qgraphicsvideoitem.cpp      |  12 +-
 .../mediaservices/base/qgraphicsvideoitem.h        |   4 +-
 .../base/qlocalmediaplaylistprovider.cpp           |   6 +-
 .../base/qlocalmediaplaylistprovider.h             |   4 +-
 .../mediaservices/base/qmediacontent.cpp           |   4 +-
 src/multimedia/mediaservices/base/qmediacontent.h  |   4 +-
 .../mediaservices/base/qmediacontrol.cpp           |   6 +-
 src/multimedia/mediaservices/base/qmediacontrol.h  |   2 +-
 .../mediaservices/base/qmediacontrol_p.h           |   2 +-
 src/multimedia/mediaservices/base/qmediaobject.cpp |  16 +--
 src/multimedia/mediaservices/base/qmediaobject.h   |  12 +-
 src/multimedia/mediaservices/base/qmediaobject_p.h |   4 +-
 .../mediaservices/base/qmediaplaylist.cpp          |  16 +--
 src/multimedia/mediaservices/base/qmediaplaylist.h |   6 +-
 .../mediaservices/base/qmediaplaylist_p.h          |  12 +-
 .../mediaservices/base/qmediaplaylistcontrol.cpp   |   4 +-
 .../mediaservices/base/qmediaplaylistcontrol.h     |   6 +-
 .../mediaservices/base/qmediaplaylistioplugin.cpp  |   4 +-
 .../mediaservices/base/qmediaplaylistioplugin.h    |   4 +-
 .../mediaservices/base/qmediaplaylistnavigator.cpp |   8 +-
 .../mediaservices/base/qmediaplaylistnavigator.h   |   6 +-
 .../mediaservices/base/qmediaplaylistprovider.cpp  |   4 +-
 .../mediaservices/base/qmediaplaylistprovider.h    |   6 +-
 .../mediaservices/base/qmediaplaylistprovider_p.h  |   4 +-
 .../mediaservices/base/qmediapluginloader.cpp      |   4 +-
 .../mediaservices/base/qmediapluginloader_p.h      |   2 +-
 .../mediaservices/base/qmediaresource.cpp          |   4 +-
 src/multimedia/mediaservices/base/qmediaresource.h |   2 +-
 .../mediaservices/base/qmediaservice.cpp           |   4 +-
 src/multimedia/mediaservices/base/qmediaservice.h  |   4 +-
 .../mediaservices/base/qmediaservice_p.h           |   2 +-
 .../mediaservices/base/qmediaserviceprovider.cpp   |  32 ++---
 .../mediaservices/base/qmediaserviceprovider.h     |   6 +-
 .../base/qmediaserviceproviderplugin.h             |   6 +-
 .../mediaservices/base/qmediatimerange.cpp         |   4 +-
 .../mediaservices/base/qmediatimerange.h           |   4 +-
 .../mediaservices/base/qmetadatacontrol.cpp        |  10 +-
 .../mediaservices/base/qmetadatacontrol.h          |  14 +-
 .../mediaservices/base/qpaintervideosurface.cpp    |   2 +-
 .../base/qpaintervideosurface_mac_p.h              |   2 +-
 .../mediaservices/base/qpaintervideosurface_p.h    |   2 +-
 .../mediaservices/base/qtmedianamespace.h          |   4 +-
 .../mediaservices/base/qvideodevicecontrol.cpp     |   4 +-
 .../mediaservices/base/qvideodevicecontrol.h       |   4 +-
 .../mediaservices/base/qvideooutputcontrol.cpp     |   4 +-
 .../mediaservices/base/qvideooutputcontrol.h       |   4 +-
 .../mediaservices/base/qvideorenderercontrol.cpp   |   4 +-
 .../mediaservices/base/qvideorenderercontrol.h     |   4 +-
 src/multimedia/mediaservices/base/qvideowidget.cpp |  14 +-
 src/multimedia/mediaservices/base/qvideowidget.h   |   2 +-
 src/multimedia/mediaservices/base/qvideowidget_p.h |   4 +-
 .../mediaservices/base/qvideowidgetcontrol.cpp     |   4 +-
 .../mediaservices/base/qvideowidgetcontrol.h       |   6 +-
 .../mediaservices/base/qvideowindowcontrol.cpp     |   4 +-
 .../mediaservices/base/qvideowindowcontrol.h       |   6 +-
 .../mediaservices/effects/qsoundeffect_p.h         |   2 +-
 .../mediaservices/effects/qsoundeffect_pulse_p.cpp |   2 +-
 .../mediaservices/effects/qsoundeffect_pulse_p.h   |   4 +-
 .../effects/qsoundeffect_qmedia_p.cpp              |   6 +-
 .../mediaservices/effects/qsoundeffect_qmedia_p.h  |   4 +-
 .../effects/qsoundeffect_qsound_p.cpp              |   2 +-
 .../mediaservices/effects/qsoundeffect_qsound_p.h  |   2 +-
 .../mediaservices/effects/wavedecoder_p.cpp        |   2 +-
 .../mediaservices/effects/wavedecoder_p.h          |   2 +-
 src/multimedia/mediaservices/mediaservices.pro     |   2 +-
 .../mediaservices/playback/qmediaplayer.cpp        |  22 +--
 .../mediaservices/playback/qmediaplayer.h          |  10 +-
 .../mediaservices/playback/qmediaplayercontrol.cpp |   8 +-
 .../mediaservices/playback/qmediaplayercontrol.h   |   8 +-
 .../mediaplayer/directshowaudioendpointcontrol.h   |   2 +-
 .../mediaplayer/directshowmetadatacontrol.cpp      | 116 ++++++++--------
 .../mediaplayer/directshowmetadatacontrol.h        |   8 +-
 .../directshow/mediaplayer/directshowpinenum.cpp   |   2 +-
 .../mediaplayer/directshowplayercontrol.h          |   4 +-
 .../mediaplayer/directshowplayerservice.cpp        |   2 +-
 .../mediaplayer/directshowplayerservice.h          |   8 +-
 .../mediaplayer/directshowvideooutputcontrol.h     |   2 +-
 .../mediaplayer/directshowvideorenderercontrol.h   |   2 +-
 .../mediaplayer/mediasamplevideobuffer.h           |   2 +-
 .../mediaplayer/vmr9videowindowcontrol.h           |   2 +-
 .../mediaplayer/qgstreamermetadataprovider.cpp     | 108 +++++++--------
 .../mediaplayer/qgstreamermetadataprovider.h       |   8 +-
 .../mediaplayer/qgstreamerplayercontrol.h          |   4 +-
 .../mediaplayer/qgstreamerplayerservice.h          |   2 +-
 .../mediaplayer/qgstreamerplayersession.cpp        |   8 +-
 .../mediaplayer/qgstreamerplayersession.h          |   6 +-
 .../gstreamer/qgstreamerserviceplugin.cpp          |   2 +-
 .../gstreamer/qgstreamerserviceplugin.h            |   2 +-
 .../gstreamer/qgstreamervideoinputdevicecontrol.h  |   2 +-
 .../gstreamer/qgstreamervideooutputcontrol.h       |   2 +-
 .../gstreamer/qgstreamervideooverlay.h             |   2 +-
 .../gstreamer/qgstreamervideorenderer.h            |   2 +-
 .../gstreamer/qgstreamervideowidget.h              |   2 +-
 .../qt7/mediaplayer/qt7playercontrol.h             |   4 +-
 .../qt7/mediaplayer/qt7playercontrol.mm            |   2 +-
 .../qt7/mediaplayer/qt7playermetadata.h            |  10 +-
 .../qt7/mediaplayer/qt7playermetadata.mm           |  20 +--
 .../qt7/mediaplayer/qt7playerservice.h             |   2 +-
 .../qt7/mediaplayer/qt7playerservice.mm            |   4 +-
 .../qt7/mediaplayer/qt7playersession.h             |   4 +-
 .../qt7/mediaplayer/qt7playersession.mm            |   2 +-
 src/plugins/mediaservices/qt7/qt7movieviewoutput.h |   4 +-
 .../mediaservices/qt7/qt7movieviewrenderer.h       |   4 +-
 src/plugins/mediaservices/qt7/qt7serviceplugin.h   |   2 +-
 src/plugins/mediaservices/qt7/qt7serviceplugin.mm  |   2 +-
 .../mediaservices/qt7/qt7videooutputcontrol.h      |  10 +-
 tools/configure/configureapp.cpp                   |  10 +-
 121 files changed, 565 insertions(+), 565 deletions(-)

diff --git a/bin/syncqt b/bin/syncqt
index 9fe0009..e36eeb6 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -51,7 +51,7 @@ my %modules = ( # path to module name map
         "QtWebKit" => "$basedir/src/3rdparty/webkit/WebCore",
         "phonon" => "$basedir/src/phonon",
         "QtMultimedia" => "$basedir/src/multimedia/multimedia",
-        "QtMediaservices" => "$basedir/src/multimedia/mediaservices",
+        "QtMediaServices" => "$basedir/src/multimedia/mediaservices",
 );
 my %moduleheaders = ( # restrict the module headers to those found in relative path
         "QtWebKit" => "../WebKit/qt/Api",
diff --git a/configure b/configure
index 9cbb0f7..fc26a7a 100755
--- a/configure
+++ b/configure
@@ -3555,8 +3555,8 @@ fi
     -no-audio-backend .. Do not build the platform audio backend into QtMultimedia.
  +  -audio-backend ..... Build the platform audio backend into QtMultimedia if available.
 
-    -no-mediaservices... Do not build the QtMediaservices module.
- +  -mediaservices...... Build the QtMediaservices module.
+    -no-mediaservices... Do not build the QtMediaServices module.
+ +  -mediaservices...... Build the QtMediaServices module.
 
     -no-media-backend... Do not build platform mediaservices plugin.
  +  -media-backend..... Build the platform mediaservices plugin.
diff --git a/demos/multimedia/player/player.cpp b/demos/multimedia/player/player.cpp
index 20341bc..6ba19fd 100644
--- a/demos/multimedia/player/player.cpp
+++ b/demos/multimedia/player/player.cpp
@@ -45,8 +45,8 @@
 #include "playlistmodel.h"
 #include "videowidget.h"
 
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediaplaylist.h>
 
 #include <QtGui>
 
@@ -204,14 +204,14 @@ void Player::positionChanged(qint64 progress)
 
 void Player::metaDataChanged()
 {
-    //qDebug() << "update metadata" << player->metaData(QtMediaservices::Title).toString();
+    //qDebug() << "update metadata" << player->metaData(QtMediaServices::Title).toString();
     if (player->isMetaDataAvailable()) {
         setTrackInfo(QString("%1 - %2")
-                .arg(player->metaData(QtMediaservices::AlbumArtist).toString())
-                .arg(player->metaData(QtMediaservices::Title).toString()));
+                .arg(player->metaData(QtMediaServices::AlbumArtist).toString())
+                .arg(player->metaData(QtMediaServices::Title).toString()));
 
         if (coverLabel) {
-            QUrl url = player->metaData(QtMediaservices::CoverArtUrlLarge).value<QUrl>();
+            QUrl url = player->metaData(QtMediaServices::CoverArtUrlLarge).value<QUrl>();
 
             coverLabel->setPixmap(!url.isEmpty()
                     ? QPixmap(url.toString())
diff --git a/demos/multimedia/player/playercontrols.h b/demos/multimedia/player/playercontrols.h
index 0b0b0e6..d2229bd 100644
--- a/demos/multimedia/player/playercontrols.h
+++ b/demos/multimedia/player/playercontrols.h
@@ -42,7 +42,7 @@
 #ifndef PLAYERCONTROLS_H
 #define PLAYERCONTROLS_H
 
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 #include <QtGui/qwidget.h>
 
diff --git a/demos/multimedia/player/videowidget.h b/demos/multimedia/player/videowidget.h
index 0251bfe..b5bf581 100644
--- a/demos/multimedia/player/videowidget.h
+++ b/demos/multimedia/player/videowidget.h
@@ -41,7 +41,7 @@
 #ifndef VIDEOWIDGET_H
 #define VIDEOWIDGET_H
 
-#include <QtMediaservices/qvideowidget.h>
+#include <QtMediaServices/qvideowidget.h>
 
 
 QT_BEGIN_HEADER
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index ff4e986..7b0b4af 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -175,7 +175,7 @@ for(QTLIB, $$list($$lower($$unique(QT)))) {
        }
    } else:isEqual(QTLIB, declarative):qlib = QtDeclarative
    else:isEqual(QTLIB, multimedia):qlib = QtMultimedia
-   else:isEqual(QTLIB, mediaservices):qlib = QtMediaservices
+   else:isEqual(QTLIB, mediaservices):qlib = QtMediaServices
    else:message("Unknown QT: $$QTLIB"):qlib =
    !isEmpty(qlib) {
       target_qt:isEqual(TARGET, qlib) {
diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp
index 46ceb34..e2a2821 100644
--- a/src/imports/multimedia/multimedia.cpp
+++ b/src/imports/multimedia/multimedia.cpp
@@ -41,7 +41,7 @@
 
 #include <QtDeclarative/qdeclarativeextensionplugin.h>
 #include <QtDeclarative/qdeclarative.h>
-#include <QtMediaservices/private/qsoundeffect_p.h>
+#include <QtMediaServices/private/qsoundeffect_p.h>
 
 #include "qdeclarativevideo_p.h"
 #include "qdeclarativeaudio_p.h"
diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp
index 3367e08..49eabc2 100644
--- a/src/imports/multimedia/qdeclarativeaudio.cpp
+++ b/src/imports/multimedia/qdeclarativeaudio.cpp
@@ -41,7 +41,7 @@
 
 #include "qdeclarativeaudio_p.h"
 
-#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/imports/multimedia/qdeclarativemediabase.cpp b/src/imports/multimedia/qdeclarativemediabase.cpp
index 5ed602a..ee0737b 100644
--- a/src/imports/multimedia/qdeclarativemediabase.cpp
+++ b/src/imports/multimedia/qdeclarativemediabase.cpp
@@ -44,10 +44,10 @@
 #include <QtCore/qcoreevent.h>
 #include <QtCore/qurl.h>
 
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qmediaserviceprovider.h>
-#include <QtMediaservices/qmetadatacontrol.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 #include "qmetadatacontrolmetaobject_p.h"
 
 
diff --git a/src/imports/multimedia/qdeclarativemediabase_p.h b/src/imports/multimedia/qdeclarativemediabase_p.h
index e5115de..34875f9 100644
--- a/src/imports/multimedia/qdeclarativemediabase_p.h
+++ b/src/imports/multimedia/qdeclarativemediabase_p.h
@@ -54,7 +54,7 @@
 //
 
 #include <QtCore/qbasictimer.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/imports/multimedia/qdeclarativevideo.cpp b/src/imports/multimedia/qdeclarativevideo.cpp
index 6a91656..774c9a4 100644
--- a/src/imports/multimedia/qdeclarativevideo.cpp
+++ b/src/imports/multimedia/qdeclarativevideo.cpp
@@ -41,11 +41,11 @@
 
 #include "qdeclarativevideo_p.h"
 
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/private/qpaintervideosurface_p.h>
-#include <QtMediaservices/qvideooutputcontrol.h>
-#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/private/qpaintervideosurface_p.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 
 
 QT_BEGIN_NAMESPACE
@@ -435,7 +435,7 @@ QT_END_NAMESPACE
 
     This property holds the tile of the media.
 
-    \sa {QtMediaservices::Title}
+    \sa {QtMediaServices::Title}
 */
 
 /*!
@@ -443,7 +443,7 @@ QT_END_NAMESPACE
 
     This property holds the sub-title of the media.
 
-    \sa {QtMediaservices::SubTitle}
+    \sa {QtMediaServices::SubTitle}
 */
 
 /*!
@@ -451,7 +451,7 @@ QT_END_NAMESPACE
 
     This property holds the author of the media.
 
-    \sa {QtMediaservices::Author}
+    \sa {QtMediaServices::Author}
 */
 
 /*!
@@ -459,7 +459,7 @@ QT_END_NAMESPACE
 
     This property holds a user comment about the media.
 
-    \sa {QtMediaservices::Comment}
+    \sa {QtMediaServices::Comment}
 */
 
 /*!
@@ -467,7 +467,7 @@ QT_END_NAMESPACE
 
     This property holds a description of the media.
 
-    \sa {QtMediaservices::Description}
+    \sa {QtMediaServices::Description}
 */
 
 /*!
@@ -475,7 +475,7 @@ QT_END_NAMESPACE
 
     This property holds the category of the media
 
-    \sa {QtMediaservices::Category}
+    \sa {QtMediaServices::Category}
 */
 
 /*!
@@ -483,7 +483,7 @@ QT_END_NAMESPACE
 
     This property holds the genre of the media.
 
-    \sa {QtMediaservices::Genre}
+    \sa {QtMediaServices::Genre}
 */
 
 /*!
@@ -491,7 +491,7 @@ QT_END_NAMESPACE
 
     This property holds the year of release of the media.
 
-    \sa {QtMediaservices::Year}
+    \sa {QtMediaServices::Year}
 */
 
 /*!
@@ -499,7 +499,7 @@ QT_END_NAMESPACE
 
     This property holds the date of the media.
 
-    \sa {QtMediaservices::Date}
+    \sa {QtMediaServices::Date}
 */
 
 /*!
@@ -507,7 +507,7 @@ QT_END_NAMESPACE
 
     This property holds a user rating of the media in the range of 0 to 100.
 
-    \sa {QtMediaservices::UserRating}
+    \sa {QtMediaServices::UserRating}
 */
 
 /*!
@@ -515,7 +515,7 @@ QT_END_NAMESPACE
 
     This property holds a list of keywords describing the media.
 
-    \sa {QtMediaservices::Keywords}
+    \sa {QtMediaServices::Keywords}
 */
 
 /*!
@@ -523,7 +523,7 @@ QT_END_NAMESPACE
 
     This property holds the language of the media, as an ISO 639-2 code.
 
-    \sa {QtMediaservices::Language}
+    \sa {QtMediaServices::Language}
 */
 
 /*!
@@ -531,7 +531,7 @@ QT_END_NAMESPACE
 
     This property holds the publisher of the media.
 
-    \sa {QtMediaservices::Publisher}
+    \sa {QtMediaServices::Publisher}
 */
 
 /*!
@@ -539,7 +539,7 @@ QT_END_NAMESPACE
 
     This property holds the media's copyright notice.
 
-    \sa {QtMediaservices::Copyright}
+    \sa {QtMediaServices::Copyright}
 */
 
 /*!
@@ -547,7 +547,7 @@ QT_END_NAMESPACE
 
     This property holds the parental rating of the media.
 
-    \sa {QtMediaservices::ParentalRating}
+    \sa {QtMediaServices::ParentalRating}
 */
 
 /*!
@@ -556,7 +556,7 @@ QT_END_NAMESPACE
     This property holds the name of the rating organisation responsible for the
     parental rating of the media.
 
-    \sa {QtMediaservices::RatingOrganisation}
+    \sa {QtMediaServices::RatingOrganisation}
 */
 
 /*!
@@ -564,7 +564,7 @@ QT_END_NAMESPACE
 
     This property property holds the size of the media in bytes.
 
-    \sa {QtMediaservices::Size}
+    \sa {QtMediaServices::Size}
 */
 
 /*!
@@ -572,7 +572,7 @@ QT_END_NAMESPACE
 
     This property holds the type of the media.
 
-    \sa {QtMediaservices::MediaType}
+    \sa {QtMediaServices::MediaType}
 */
 
 /*!
@@ -581,7 +581,7 @@ QT_END_NAMESPACE
     This property holds the bit rate of the media's audio stream ni bits per
     second.
 
-    \sa {QtMediaservices::AudioBitRate}
+    \sa {QtMediaServices::AudioBitRate}
 */
 
 /*!
@@ -589,7 +589,7 @@ QT_END_NAMESPACE
 
     This property holds the encoding of the media audio stream.
 
-    \sa {QtMediaservices::AudioCodec}
+    \sa {QtMediaServices::AudioCodec}
 */
 
 /*!
@@ -597,7 +597,7 @@ QT_END_NAMESPACE
 
     This property holds the average volume level of the media.
 
-    \sa {QtMediaservices::AverageLevel}
+    \sa {QtMediaServices::AverageLevel}
 */
 
 /*!
@@ -605,7 +605,7 @@ QT_END_NAMESPACE
 
     This property holds the number of channels in the media's audio stream.
 
-    \sa {QtMediaservices::ChannelCount}
+    \sa {QtMediaServices::ChannelCount}
 */
 
 /*!
@@ -613,7 +613,7 @@ QT_END_NAMESPACE
 
     This property holds the peak volume of media's audio stream.
 
-    \sa {QtMediaservices::PeakValue}
+    \sa {QtMediaServices::PeakValue}
 */
 
 /*!
@@ -621,7 +621,7 @@ QT_END_NAMESPACE
 
     This property holds the sample rate of the media's audio stream in hertz.
 
-    \sa {QtMediaservices::SampleRate}
+    \sa {QtMediaServices::SampleRate}
 */
 
 /*!
@@ -629,7 +629,7 @@ QT_END_NAMESPACE
 
     This property holds the title of the album the media belongs to.
 
-    \sa {QtMediaservices::AlbumTitle}
+    \sa {QtMediaServices::AlbumTitle}
 */
 
 /*!
@@ -638,7 +638,7 @@ QT_END_NAMESPACE
     This property holds the name of the principal artist of the album the media
     belongs to.
 
-    \sa {QtMediaservices::AlbumArtist}
+    \sa {QtMediaServices::AlbumArtist}
 */
 
 /*!
@@ -646,7 +646,7 @@ QT_END_NAMESPACE
 
     This property holds the names of artists contributing to the media.
 
-    \sa {QtMediaservices::ContributingArtist}
+    \sa {QtMediaServices::ContributingArtist}
 */
 
 /*!
@@ -654,7 +654,7 @@ QT_END_NAMESPACE
 
     This property holds the composer of the media.
 
-    \sa {QtMediaservices::Composer}
+    \sa {QtMediaServices::Composer}
 */
 
 /*!
@@ -662,7 +662,7 @@ QT_END_NAMESPACE
 
     This property holds the conductor of the media.
 
-    \sa {QtMediaservices::Conductor}
+    \sa {QtMediaServices::Conductor}
 */
 
 /*!
@@ -670,7 +670,7 @@ QT_END_NAMESPACE
 
     This property holds the lyrics to the media.
 
-    \sa {QtMediaservices::Lyrics}
+    \sa {QtMediaServices::Lyrics}
 */
 
 /*!
@@ -678,7 +678,7 @@ QT_END_NAMESPACE
 
     This property holds the mood of the media.
 
-    \sa {QtMediaservices::Mood}
+    \sa {QtMediaServices::Mood}
 */
 
 /*!
@@ -686,7 +686,7 @@ QT_END_NAMESPACE
 
     This property holds the track number of the media.
 
-    \sa {QtMediaservices::TrackNumber}
+    \sa {QtMediaServices::TrackNumber}
 */
 
 /*!
@@ -694,7 +694,7 @@ QT_END_NAMESPACE
 
     This property holds the number of track on the album containing the media.
 
-    \sa {QtMediaservices::TrackNumber}
+    \sa {QtMediaServices::TrackNumber}
 */
 
 /*!
@@ -702,7 +702,7 @@ QT_END_NAMESPACE
 
     This property holds the URL of a small cover art image.
 
-    \sa {QtMediaservices::CoverArtUrlSmall}
+    \sa {QtMediaServices::CoverArtUrlSmall}
 */
 
 /*!
@@ -710,7 +710,7 @@ QT_END_NAMESPACE
 
     This property holds the URL of a large cover art image.
 
-    \sa {QtMediaservices::CoverArtUrlLarge}
+    \sa {QtMediaServices::CoverArtUrlLarge}
 */
 
 /*!
@@ -718,7 +718,7 @@ QT_END_NAMESPACE
 
     This property holds the dimension of an image or video.
 
-    \sa {QtMediaservices::Resolution}
+    \sa {QtMediaServices::Resolution}
 */
 
 /*!
@@ -726,7 +726,7 @@ QT_END_NAMESPACE
 
     This property holds the pixel aspect ratio of an image or video.
 
-    \sa {QtMediaservices::PixelAspectRatio}
+    \sa {QtMediaServices::PixelAspectRatio}
 */
 
 /*!
@@ -734,7 +734,7 @@ QT_END_NAMESPACE
 
     This property holds the frame rate of the media's video stream.
 
-    \sa {QtMediaservices::VideoFrameRate}
+    \sa {QtMediaServices::VideoFrameRate}
 */
 
 /*!
@@ -743,7 +743,7 @@ QT_END_NAMESPACE
     This property holds the bit rate of the media's video stream in bits per
     second.
 
-    \sa {QtMediaservices::VideoBitRate}
+    \sa {QtMediaServices::VideoBitRate}
 */
 
 /*!
@@ -751,7 +751,7 @@ QT_END_NAMESPACE
 
     This property holds the encoding of the media's video stream.
 
-    \sa {QtMediaservices::VideoCodec}
+    \sa {QtMediaServices::VideoCodec}
 */
 
 /*!
@@ -759,7 +759,7 @@ QT_END_NAMESPACE
 
     This property holds the URL of a poster image.
 
-    \sa {QtMediaservices::PosterUrl}
+    \sa {QtMediaServices::PosterUrl}
 */
 
 /*!
@@ -767,7 +767,7 @@ QT_END_NAMESPACE
 
     This property holds the chapter number of the media.
 
-    \sa {QtMediaservices::ChapterNumber}
+    \sa {QtMediaServices::ChapterNumber}
 */
 
 /*!
@@ -775,7 +775,7 @@ QT_END_NAMESPACE
 
     This property holds the director of the media.
 
-    \sa {QtMediaservices::Director}
+    \sa {QtMediaServices::Director}
 */
 
 /*!
@@ -783,7 +783,7 @@ QT_END_NAMESPACE
 
     This property holds the lead performer in the media.
 
-    \sa {QtMediaservices::LeadPerformer}
+    \sa {QtMediaServices::LeadPerformer}
 */
 
 /*!
@@ -791,7 +791,7 @@ QT_END_NAMESPACE
 
     This property holds the writer of the media.
 
-    \sa {QtMediaservices::Writer}
+    \sa {QtMediaServices::Writer}
 */
 
 // The remaining properties are related to photos, and are technically
@@ -801,157 +801,157 @@ QT_END_NAMESPACE
 /*!
     \qmlproperty variant Video::cameraManufacturer
 
-    \sa {QtMediaservices::CameraManufacturer}
+    \sa {QtMediaServices::CameraManufacturer}
 */
 
 /*!
     \qmlproperty variant Video::cameraModel
 
-    \sa {QtMediaservices::CameraModel}
+    \sa {QtMediaServices::CameraModel}
 */
 
 /*!
     \qmlproperty variant Video::event
 
-    \sa {QtMediaservices::Event}
+    \sa {QtMediaServices::Event}
 */
 
 /*!
     \qmlproperty variant Video::subject
 
-    \sa {QtMediaservices::Subject}
+    \sa {QtMediaServices::Subject}
 */
 
 /*!
     \qmlproperty variant Video::orientation
 
-    \sa {QtMediaservices::Orientation}
+    \sa {QtMediaServices::Orientation}
 */
 
 /*!
     \qmlproperty variant Video::exposureTime
 
-    \sa {QtMediaservices::ExposureTime}
+    \sa {QtMediaServices::ExposureTime}
 */
 
 /*!
     \qmlproperty variant Video::fNumber
 
-    \sa {QtMediaservices::FNumber}
+    \sa {QtMediaServices::FNumber}
 */
 
 /*!
     \qmlproperty variant Video::exposureProgram
 
-    \sa {QtMediaservices::ExposureProgram}
+    \sa {QtMediaServices::ExposureProgram}
 */
 
 /*!
     \qmlproperty variant Video::isoSpeedRatings
 
-    \sa {QtMediaservices::ISOSpeedRatings}
+    \sa {QtMediaServices::ISOSpeedRatings}
 */
 
 /*!
     \qmlproperty variant Video::exposureBiasValue
 
-    \sa {QtMediaservices::ExposureBiasValue}
+    \sa {QtMediaServices::ExposureBiasValue}
 */
 
 /*!
     \qmlproperty variant Video::dateTimeDigitized
 
-    \sa {QtMediaservices::DateTimeDigitized}
+    \sa {QtMediaServices::DateTimeDigitized}
 */
 
 /*!
     \qmlproperty variant Video::subjectDistance
 
-    \sa {QtMediaservices::SubjectDistance}
+    \sa {QtMediaServices::SubjectDistance}
 */
 
 /*!
     \qmlproperty variant Video::meteringMode
 
-    \sa {QtMediaservices::MeteringMode}
+    \sa {QtMediaServices::MeteringMode}
 */
 
 /*!
     \qmlproperty variant Video::lightSource
 
-    \sa {QtMediaservices::LightSource}
+    \sa {QtMediaServices::LightSource}
 */
 
 /*!
     \qmlproperty variant Video::flash
 
-    \sa {QtMediaservices::Flash}
+    \sa {QtMediaServices::Flash}
 */
 
 /*!
     \qmlproperty variant Video::focalLength
 
-    \sa {QtMediaservices::FocalLength}
+    \sa {QtMediaServices::FocalLength}
 */
 
 /*!
     \qmlproperty variant Video::exposureMode
 
-    \sa {QtMediaservices::ExposureMode}
+    \sa {QtMediaServices::ExposureMode}
 */
 
 /*!
     \qmlproperty variant Video::whiteBalance
 
-    \sa {QtMediaservices::WhiteBalance}
+    \sa {QtMediaServices::WhiteBalance}
 */
 
 /*!
     \qmlproperty variant Video::DigitalZoomRatio
 
-    \sa {QtMediaservices::DigitalZoomRatio}
+    \sa {QtMediaServices::DigitalZoomRatio}
 */
 
 /*!
     \qmlproperty variant Video::focalLengthIn35mmFilm
 
-    \sa {QtMediaservices::FocalLengthIn35mmFile}
+    \sa {QtMediaServices::FocalLengthIn35mmFile}
 */
 
 /*!
     \qmlproperty variant Video::sceneCaptureType
 
-    \sa {QtMediaservices::SceneCaptureType}
+    \sa {QtMediaServices::SceneCaptureType}
 */
 
 /*!
     \qmlproperty variant Video::gainControl
 
-    \sa {QtMediaservices::GainControl}
+    \sa {QtMediaServices::GainControl}
 */
 
 /*!
     \qmlproperty variant Video::contrast
 
-    \sa {QtMediaservices::contrast}
+    \sa {QtMediaServices::contrast}
 */
 
 /*!
     \qmlproperty variant Video::saturation
 
-    \sa {QtMediaservices::Saturation}
+    \sa {QtMediaServices::Saturation}
 */
 
 /*!
     \qmlproperty variant Video::sharpness
 
-    \sa {QtMediaservices::Sharpness}
+    \sa {QtMediaServices::Sharpness}
 */
 
 /*!
     \qmlproperty variant Video::deviceSettingDescription
 
-    \sa {QtMediaservices::DeviceSettingDescription}
+    \sa {QtMediaServices::DeviceSettingDescription}
 */
 
 #endif
diff --git a/src/imports/multimedia/qdeclarativevideo_p.h b/src/imports/multimedia/qdeclarativevideo_p.h
index 99882ac..c048b7d 100644
--- a/src/imports/multimedia/qdeclarativevideo_p.h
+++ b/src/imports/multimedia/qdeclarativevideo_p.h
@@ -55,7 +55,7 @@
 
 #include "qdeclarativemediabase_p.h"
 
-#include <QtMediaservices/qgraphicsvideoitem.h>
+#include <QtMediaServices/qgraphicsvideoitem.h>
 
 #include <QtCore/qbasictimer.h>
 #include <QtDeclarative/qdeclarativeitem.h>
diff --git a/src/imports/multimedia/qmetadatacontrolmetaobject.cpp b/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
index 2f45b50..5235a87 100644
--- a/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
+++ b/src/imports/multimedia/qmetadatacontrolmetaobject.cpp
@@ -40,7 +40,7 @@
 ****************************************************************************/
 
 #include "qmetadatacontrolmetaobject_p.h"
-#include <QtMediaservices/qmetadatacontrol.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 
 
 QT_BEGIN_NAMESPACE
@@ -106,101 +106,101 @@ namespace
 {
     struct MetaDataKey
     {
-        QtMediaservices::MetaData key;
+        QtMediaServices::MetaData key;
         const char *name;
     };
 
     const MetaDataKey qt_metaDataKeys[] =
     {
-        { QtMediaservices::Title, "title" },
-        { QtMediaservices::SubTitle, "subTitle" },
-        { QtMediaservices::Author, "author" },
-        { QtMediaservices::Comment, "comment" },
-        { QtMediaservices::Description, "description" },
-        { QtMediaservices::Category, "category" },
-        { QtMediaservices::Genre, "genre" },
-        { QtMediaservices::Year, "year" },
-        { QtMediaservices::Date, "date" },
-        { QtMediaservices::UserRating, "userRating" },
-        { QtMediaservices::Keywords, "keywords" },
-        { QtMediaservices::Language, "language" },
-        { QtMediaservices::Publisher, "publisher" },
-        { QtMediaservices::Copyright, "copyright" },
-        { QtMediaservices::ParentalRating, "parentalRating" },
-        { QtMediaservices::RatingOrganisation, "ratingOrganisation" },
+        { QtMediaServices::Title, "title" },
+        { QtMediaServices::SubTitle, "subTitle" },
+        { QtMediaServices::Author, "author" },
+        { QtMediaServices::Comment, "comment" },
+        { QtMediaServices::Description, "description" },
+        { QtMediaServices::Category, "category" },
+        { QtMediaServices::Genre, "genre" },
+        { QtMediaServices::Year, "year" },
+        { QtMediaServices::Date, "date" },
+        { QtMediaServices::UserRating, "userRating" },
+        { QtMediaServices::Keywords, "keywords" },
+        { QtMediaServices::Language, "language" },
+        { QtMediaServices::Publisher, "publisher" },
+        { QtMediaServices::Copyright, "copyright" },
+        { QtMediaServices::ParentalRating, "parentalRating" },
+        { QtMediaServices::RatingOrganisation, "ratingOrganisation" },
 
         // Media
-        { QtMediaservices::Size, "size" },
-        { QtMediaservices::MediaType, "mediaType" },
-//        { QtMediaservices::Duration, "duration" },
+        { QtMediaServices::Size, "size" },
+        { QtMediaServices::MediaType, "mediaType" },
+//        { QtMediaServices::Duration, "duration" },
 
         // Audio
-        { QtMediaservices::AudioBitRate, "audioBitRate" },
-        { QtMediaservices::AudioCodec, "audioCodec" },
-        { QtMediaservices::AverageLevel, "averageLevel" },
-        { QtMediaservices::ChannelCount, "channelCount" },
-        { QtMediaservices::PeakValue, "peakValue" },
-        { QtMediaservices::SampleRate, "sampleRate" },
+        { QtMediaServices::AudioBitRate, "audioBitRate" },
+        { QtMediaServices::AudioCodec, "audioCodec" },
+        { QtMediaServices::AverageLevel, "averageLevel" },
+        { QtMediaServices::ChannelCount, "channelCount" },
+        { QtMediaServices::PeakValue, "peakValue" },
+        { QtMediaServices::SampleRate, "sampleRate" },
 
         // Music
-        { QtMediaservices::AlbumTitle, "albumTitle" },
-        { QtMediaservices::AlbumArtist, "albumArtist" },
-        { QtMediaservices::ContributingArtist, "contributingArtist" },
-        { QtMediaservices::Composer, "composer" },
-        { QtMediaservices::Conductor, "conductor" },
-        { QtMediaservices::Lyrics, "lyrics" },
-        { QtMediaservices::Mood, "mood" },
-        { QtMediaservices::TrackNumber, "trackNumber" },
-        { QtMediaservices::TrackCount, "trackCount" },
-
-        { QtMediaservices::CoverArtUrlSmall, "coverArtUrlSmall" },
-        { QtMediaservices::CoverArtUrlLarge, "coverArtUrlLarge" },
+        { QtMediaServices::AlbumTitle, "albumTitle" },
+        { QtMediaServices::AlbumArtist, "albumArtist" },
+        { QtMediaServices::ContributingArtist, "contributingArtist" },
+        { QtMediaServices::Composer, "composer" },
+        { QtMediaServices::Conductor, "conductor" },
+        { QtMediaServices::Lyrics, "lyrics" },
+        { QtMediaServices::Mood, "mood" },
+        { QtMediaServices::TrackNumber, "trackNumber" },
+        { QtMediaServices::TrackCount, "trackCount" },
+
+        { QtMediaServices::CoverArtUrlSmall, "coverArtUrlSmall" },
+        { QtMediaServices::CoverArtUrlLarge, "coverArtUrlLarge" },
 
         // Image/Video
-        { QtMediaservices::Resolution, "resolution" },
-        { QtMediaservices::PixelAspectRatio, "pixelAspectRatio" },
+        { QtMediaServices::Resolution, "resolution" },
+        { QtMediaServices::PixelAspectRatio, "pixelAspectRatio" },
 
         // Video
-        { QtMediaservices::VideoFrameRate, "videoFrameRate" },
-        { QtMediaservices::VideoBitRate, "videoBitRate" },
-        { QtMediaservices::VideoCodec, "videoCodec" },
+        { QtMediaServices::VideoFrameRate, "videoFrameRate" },
+        { QtMediaServices::VideoBitRate, "videoBitRate" },
+        { QtMediaServices::VideoCodec, "videoCodec" },
 
-        { QtMediaservices::PosterUrl, "posterUrl" },
+        { QtMediaServices::PosterUrl, "posterUrl" },
 
         // Movie
-        { QtMediaservices::ChapterNumber, "chapterNumber" },
-        { QtMediaservices::Director, "director" },
-        { QtMediaservices::LeadPerformer, "leadPerformer" },
-        { QtMediaservices::Writer, "writer" },
+        { QtMediaServices::ChapterNumber, "chapterNumber" },
+        { QtMediaServices::Director, "director" },
+        { QtMediaServices::LeadPerformer, "leadPerformer" },
+        { QtMediaServices::Writer, "writer" },
 
         // Photos
-        { QtMediaservices::CameraManufacturer, "cameraManufacturer" },
-        { QtMediaservices::CameraModel, "cameraModel" },
-        { QtMediaservices::Event, "event" },
-        { QtMediaservices::Subject, "subject" },
-        { QtMediaservices::Orientation, "orientation" },
-        { QtMediaservices::ExposureTime, "exposureTime" },
-        { QtMediaservices::FNumber, "fNumber" },
-        { QtMediaservices::ExposureProgram, "exposureProgram" },
-        { QtMediaservices::ISOSpeedRatings, "isoSpeedRatings" },
-        { QtMediaservices::ExposureBiasValue, "exposureBiasValue" },
-        { QtMediaservices::DateTimeOriginal, "dateTimeOriginal" },
-        { QtMediaservices::DateTimeDigitized, "dateTimeDigitized" },
-        { QtMediaservices::SubjectDistance, "subjectDistance" },
-        { QtMediaservices::MeteringMode, "meteringMode" },
-        { QtMediaservices::LightSource, "lightSource" },
-        { QtMediaservices::Flash, "flash" },
-        { QtMediaservices::FocalLength, "focalLength" },
-        { QtMediaservices::ExposureMode, "exposureMode" },
-        { QtMediaservices::WhiteBalance, "whiteBalance" },
-        { QtMediaservices::DigitalZoomRatio, "digitalZoomRatio" },
-        { QtMediaservices::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
-        { QtMediaservices::SceneCaptureType, "sceneCaptureType" },
-        { QtMediaservices::GainControl, "gainControl" },
-        { QtMediaservices::Contrast, "contrast" },
-        { QtMediaservices::Saturation, "saturation" },
-        { QtMediaservices::Sharpness, "sharpness" },
-        { QtMediaservices::DeviceSettingDescription, "deviceSettingDescription" }
+        { QtMediaServices::CameraManufacturer, "cameraManufacturer" },
+        { QtMediaServices::CameraModel, "cameraModel" },
+        { QtMediaServices::Event, "event" },
+        { QtMediaServices::Subject, "subject" },
+        { QtMediaServices::Orientation, "orientation" },
+        { QtMediaServices::ExposureTime, "exposureTime" },
+        { QtMediaServices::FNumber, "fNumber" },
+        { QtMediaServices::ExposureProgram, "exposureProgram" },
+        { QtMediaServices::ISOSpeedRatings, "isoSpeedRatings" },
+        { QtMediaServices::ExposureBiasValue, "exposureBiasValue" },
+        { QtMediaServices::DateTimeOriginal, "dateTimeOriginal" },
+        { QtMediaServices::DateTimeDigitized, "dateTimeDigitized" },
+        { QtMediaServices::SubjectDistance, "subjectDistance" },
+        { QtMediaServices::MeteringMode, "meteringMode" },
+        { QtMediaServices::LightSource, "lightSource" },
+        { QtMediaServices::Flash, "flash" },
+        { QtMediaServices::FocalLength, "focalLength" },
+        { QtMediaServices::ExposureMode, "exposureMode" },
+        { QtMediaServices::WhiteBalance, "whiteBalance" },
+        { QtMediaServices::DigitalZoomRatio, "digitalZoomRatio" },
+        { QtMediaServices::FocalLengthIn35mmFilm, "focalLengthIn35mmFilm" },
+        { QtMediaServices::SceneCaptureType, "sceneCaptureType" },
+        { QtMediaServices::GainControl, "gainControl" },
+        { QtMediaServices::Contrast, "contrast" },
+        { QtMediaServices::Saturation, "saturation" },
+        { QtMediaServices::Sharpness, "sharpness" },
+        { QtMediaServices::DeviceSettingDescription, "deviceSettingDescription" }
     };
 
     class QMetaDataControlObject : public QObject
diff --git a/src/imports/multimedia/qmetadatacontrolmetaobject_p.h b/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
index 128eaa4..bbbc6fe 100644
--- a/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
+++ b/src/imports/multimedia/qmetadatacontrolmetaobject_p.h
@@ -54,7 +54,7 @@
 //
 
 #include <QtCore/qmetaobject.h>
-#include <QtMediaservices/qtmedianamespace.h>
+#include <QtMediaServices/qtmedianamespace.h>
 
 #include <QtCore/private/qobject_p.h>
 
diff --git a/src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp b/src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp
index 8494c2e..d80dec5 100644
--- a/src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp
+++ b/src/multimedia/mediaservices/base/qgraphicsvideoitem.cpp
@@ -39,13 +39,13 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qgraphicsvideoitem.h>
+#include <QtMediaServices/qgraphicsvideoitem.h>
 
-#include <QtMediaservices/qmediaobject.h>
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/private/qpaintervideosurface_p.h>
-#include <QtMediaservices/qvideooutputcontrol.h>
-#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/private/qpaintervideosurface_p.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 #include <QtMultimedia/qvideosurfaceformat.h>
 
 #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_1_CL) && !defined(QT_OPENGL_ES_1)
diff --git a/src/multimedia/mediaservices/base/qgraphicsvideoitem.h b/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
index 62e66e8..bb41075 100644
--- a/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
+++ b/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -44,7 +44,7 @@
 
 #include <QtGui/qgraphicsitem.h>
 
-#include <QtMediaservices/qvideowidget.h>
+#include <QtMediaServices/qvideowidget.h>
 
 #if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW
 
diff --git a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp
index 818b285..51e3bfb 100644
--- a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp
+++ b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices  module of the Qt Toolkit.
+** This file is part of the QtMediaServices  module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,9 +39,9 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qlocalmediaplaylistprovider.h>
+#include <QtMediaServices/qlocalmediaplaylistprovider.h>
 #include "qmediaplaylistprovider_p.h"
-#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaServices/qmediacontent.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
index 73ff82d..e6b6dca 100644
--- a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
+++ b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,7 +42,7 @@
 #ifndef QLOCALMEDIAPAYLISTPROVIDER_H
 #define QLOCALMEDIAPAYLISTPROVIDER_H
 
-#include <QtMediaservices/qmediaplaylistprovider.h>
+#include <QtMediaServices/qmediaplaylistprovider.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/multimedia/mediaservices/base/qmediacontent.cpp b/src/multimedia/mediaservices/base/qmediacontent.cpp
index f89e901..50d8e46 100644
--- a/src/multimedia/mediaservices/base/qmediacontent.cpp
+++ b/src/multimedia/mediaservices/base/qmediacontent.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,7 +42,7 @@
 #include <QtCore/qurl.h>
 #include <QtCore/qvariant.h>
 
-#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaServices/qmediacontent.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qmediacontent.h b/src/multimedia/mediaservices/base/qmediacontent.h
index 20f0525..47fa6e1 100644
--- a/src/multimedia/mediaservices/base/qmediacontent.h
+++ b/src/multimedia/mediaservices/base/qmediacontent.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -45,7 +45,7 @@
 #include <QtCore/qmetatype.h>
 #include <QtCore/qshareddata.h>
 
-#include <QtMediaservices/qmediaresource.h>
+#include <QtMediaServices/qmediaresource.h>
 #include <QtNetwork/qnetworkrequest.h>
 
 
diff --git a/src/multimedia/mediaservices/base/qmediacontrol.cpp b/src/multimedia/mediaservices/base/qmediacontrol.cpp
index 98db9fe..09996c8 100644
--- a/src/multimedia/mediaservices/base/qmediacontrol.cpp
+++ b/src/multimedia/mediaservices/base/qmediacontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,8 +42,8 @@
 #include <QtCore/qmetaobject.h>
 #include <QtCore/qtimer.h>
 
-#include <QtMediaservices//qmediacontrol.h>
-#include <QtMediaservices/private/qmediacontrol_p.h>
+#include <QtMediaServices//qmediacontrol.h>
+#include <QtMediaServices/private/qmediacontrol_p.h>
 
 
 
diff --git a/src/multimedia/mediaservices/base/qmediacontrol.h b/src/multimedia/mediaservices/base/qmediacontrol.h
index be5d95d..819c959 100644
--- a/src/multimedia/mediaservices/base/qmediacontrol.h
+++ b/src/multimedia/mediaservices/base/qmediacontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qmediacontrol_p.h b/src/multimedia/mediaservices/base/qmediacontrol_p.h
index ad7e947..3f9755b 100644
--- a/src/multimedia/mediaservices/base/qmediacontrol_p.h
+++ b/src/multimedia/mediaservices/base/qmediacontrol_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qmediaobject.cpp b/src/multimedia/mediaservices/base/qmediaobject.cpp
index 3d92b12..68fb29e 100644
--- a/src/multimedia/mediaservices/base/qmediaobject.cpp
+++ b/src/multimedia/mediaservices/base/qmediaobject.cpp
@@ -43,8 +43,8 @@
 
 #include "qmediaobject_p.h"
 
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qmetadatacontrol.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 
 
 QT_BEGIN_NAMESPACE
@@ -97,9 +97,9 @@ QMediaObject::~QMediaObject()
     Returns the service availability error state.
 */
 
-QtMediaservices::AvailabilityError QMediaObject::availabilityError() const
+QtMediaServices::AvailabilityError QMediaObject::availabilityError() const
 {
-    return QtMediaservices::ServiceMissingError;
+    return QtMediaServices::ServiceMissingError;
 }
 
 /*!
@@ -306,7 +306,7 @@ bool QMediaObject::isMetaDataWritable() const
 /*!
     Returns the value associated with a meta-data \a key.
 */
-QVariant QMediaObject::metaData(QtMediaservices::MetaData key) const
+QVariant QMediaObject::metaData(QtMediaServices::MetaData key) const
 {
     Q_D(const QMediaObject);
 
@@ -318,7 +318,7 @@ QVariant QMediaObject::metaData(QtMediaservices::MetaData key) const
 /*!
     Sets a \a value for a meta-data \a key.
 */
-void QMediaObject::setMetaData(QtMediaservices::MetaData key, const QVariant &value)
+void QMediaObject::setMetaData(QtMediaServices::MetaData key, const QVariant &value)
 {
     Q_D(QMediaObject);
 
@@ -329,13 +329,13 @@ void QMediaObject::setMetaData(QtMediaservices::MetaData key, const QVariant &va
 /*!
     Returns a list of keys there is meta-data available for.
 */
-QList<QtMediaservices::MetaData> QMediaObject::availableMetaData() const
+QList<QtMediaServices::MetaData> QMediaObject::availableMetaData() const
 {
     Q_D(const QMediaObject);
 
     return d->metaDataControl
             ? d->metaDataControl->availableMetaData()
-            : QList<QtMediaservices::MetaData>();
+            : QList<QtMediaServices::MetaData>();
 }
 
 /*!
diff --git a/src/multimedia/mediaservices/base/qmediaobject.h b/src/multimedia/mediaservices/base/qmediaobject.h
index 461e056..70b4f33 100644
--- a/src/multimedia/mediaservices/base/qmediaobject.h
+++ b/src/multimedia/mediaservices/base/qmediaobject.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -45,7 +45,7 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qstringlist.h>
 
-#include <QtMediaservices/qtmedianamespace.h>
+#include <QtMediaServices/qtmedianamespace.h>
 
 QT_BEGIN_HEADER
 
@@ -67,7 +67,7 @@ public:
     ~QMediaObject();
 
     virtual bool isAvailable() const;
-    virtual QtMediaservices::AvailabilityError availabilityError() const;
+    virtual QtMediaServices::AvailabilityError availabilityError() const;
 
     virtual QMediaService* service() const;
 
@@ -80,9 +80,9 @@ public:
     bool isMetaDataAvailable() const;
     bool isMetaDataWritable() const;
 
-    QVariant metaData(QtMediaservices::MetaData key) const;
-    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
-    QList<QtMediaservices::MetaData> availableMetaData() const;
+    QVariant metaData(QtMediaServices::MetaData key) const;
+    void setMetaData(QtMediaServices::MetaData key, const QVariant &value);
+    QList<QtMediaServices::MetaData> availableMetaData() const;
 
     QVariant extendedMetaData(const QString &key) const;
     void setExtendedMetaData(const QString &key, const QVariant &value);
diff --git a/src/multimedia/mediaservices/base/qmediaobject_p.h b/src/multimedia/mediaservices/base/qmediaobject_p.h
index 4589f03..c31ad46 100644
--- a/src/multimedia/mediaservices/base/qmediaobject_p.h
+++ b/src/multimedia/mediaservices/base/qmediaobject_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -57,7 +57,7 @@
 #include <QtCore/qset.h>
 #include <QtCore/qtimer.h>
 
-#include <QtMediaservices/qmediaobject.h>
+#include <QtMediaServices/qmediaobject.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/multimedia/mediaservices/base/qmediaplaylist.cpp b/src/multimedia/mediaservices/base/qmediaplaylist.cpp
index 174a8ac..93278fe 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylist.cpp
+++ b/src/multimedia/mediaservices/base/qmediaplaylist.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -45,14 +45,14 @@
 #include <QtCore/qcoreevent.h>
 #include <QtCore/qcoreapplication.h>
 
-#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylist.h>
 #include "qmediaplaylist_p.h"
-#include <QtMediaservices/qmediaplaylistprovider.h>
-#include <QtMediaservices/qlocalmediaplaylistprovider.h>
-#include <QtMediaservices/qmediaplaylistioplugin.h>
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qmediaplaylistcontrol.h>
-#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaplaylistprovider.h>
+#include <QtMediaServices/qlocalmediaplaylistprovider.h>
+#include <QtMediaServices/qmediaplaylistioplugin.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediaplaylistcontrol.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
 
 #include "qmediapluginloader_p.h"
 
diff --git a/src/multimedia/mediaservices/base/qmediaplaylist.h b/src/multimedia/mediaservices/base/qmediaplaylist.h
index 132b58c..9125fd6 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylist.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylist.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -44,8 +44,8 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMediaservices/qmediacontent.h>
-#include <QtMediaservices/qmediaobject.h>
+#include <QtMediaServices/qmediacontent.h>
+#include <QtMediaServices/qmediaobject.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qmediaplaylist_p.h b/src/multimedia/mediaservices/base/qmediaplaylist_p.h
index 57c2723..a5f290e 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylist_p.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylist_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -53,11 +53,11 @@
 // We mean it.
 //
 
-#include <QtMediaservices/qmediaplaylist.h>
-#include <QtMediaservices/qmediaplaylistcontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/qlocalmediaplaylistprovider.h>
+#include <QtMediaServices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylistcontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qlocalmediaplaylistprovider.h>
 #include "qmediaobject_p.h"
 
 #include <QtCore/qdebug.h>
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp
index 6f3b2fe..016c55d 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp
+++ b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -40,7 +40,7 @@
 ****************************************************************************/
 
 
-#include <QtMediaservices/qmediaplaylistcontrol.h>
+#include <QtMediaServices/qmediaplaylistcontrol.h>
 #include "qmediacontrol_p.h"
 
 
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
index cf489e3..36f00ae 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -43,8 +43,8 @@
 #ifndef QMEDIAPLAYLISTCONTROL_H
 #define QMEDIAPLAYLISTCONTROL_H
 
-#include <QtMediaservices/qmediacontrol.h>
-#include <QtMediaservices/qmediaplaylistnavigator.h>
+#include <QtMediaServices/qmediacontrol.h>
+#include <QtMediaServices/qmediaplaylistnavigator.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp
index ba5dc81..60e80e5 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp
+++ b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qmediaplaylistioplugin.h>
+#include <QtMediaServices/qmediaplaylistioplugin.h>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
index 6bc0418..5fc10f7 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -46,7 +46,7 @@
 #include <QtCore/qplugin.h>
 #include <QtCore/qfactoryinterface.h>
 
-#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaServices/qmediacontent.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp
index 134ae77..e3eec5e 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp
+++ b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,9 +39,9 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qmediaplaylistnavigator.h>
-#include <QtMediaservices/qmediaplaylistprovider.h>
-#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylistnavigator.h>
+#include <QtMediaServices/qmediaplaylistprovider.h>
+#include <QtMediaServices/qmediaplaylist.h>
 #include "qmediaobject_p.h"
 
 #include <QtCore/qdebug.h>
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
index b6d3d96..6cb9d9c 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -44,8 +44,8 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMediaservices/qmediaplaylistprovider.h>
-#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylistprovider.h>
+#include <QtMediaServices/qmediaplaylist.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp b/src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp
index c546899..3cd766b 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp
+++ b/src/multimedia/mediaservices/base/qmediaplaylistprovider.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -41,7 +41,7 @@
 
 #include <QtCore/qurl.h>
 
-#include <QtMediaservices/qmediaplaylistprovider.h>
+#include <QtMediaServices/qmediaplaylistprovider.h>
 #include "qmediaplaylistprovider_p.h"
 
 
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistprovider.h b/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
index 4929287..31e6d5f 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -44,8 +44,8 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMediaservices/qmediacontent.h>
-#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaServices/qmediacontent.h>
+#include <QtMediaServices/qmediaplaylist.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h b/src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h
index 03f72ac..00d1cca 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistprovider_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -53,7 +53,7 @@
 // We mean it.
 //
 
-#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylist.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/multimedia/mediaservices/base/qmediapluginloader.cpp b/src/multimedia/mediaservices/base/qmediapluginloader.cpp
index a1975ab..d6da0ba 100644
--- a/src/multimedia/mediaservices/base/qmediapluginloader.cpp
+++ b/src/multimedia/mediaservices/base/qmediapluginloader.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -45,7 +45,7 @@
 #include <QtCore/qdir.h>
 #include <QtCore/qdebug.h>
 
-#include <QtMediaservices/qmediaserviceproviderplugin.h>
+#include <QtMediaServices/qmediaserviceproviderplugin.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qmediapluginloader_p.h b/src/multimedia/mediaservices/base/qmediapluginloader_p.h
index 194f6ee..d911180 100644
--- a/src/multimedia/mediaservices/base/qmediapluginloader_p.h
+++ b/src/multimedia/mediaservices/base/qmediapluginloader_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qmediaresource.cpp b/src/multimedia/mediaservices/base/qmediaresource.cpp
index 9577092..33bd396 100644
--- a/src/multimedia/mediaservices/base/qmediaresource.cpp
+++ b/src/multimedia/mediaservices/base/qmediaresource.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -43,7 +43,7 @@
 #include <QtCore/qurl.h>
 #include <QtCore/qvariant.h>
 
-#include <QtMediaservices/qmediaresource.h>
+#include <QtMediaServices/qmediaresource.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qmediaresource.h b/src/multimedia/mediaservices/base/qmediaresource.h
index 69078cc..5c381ba 100644
--- a/src/multimedia/mediaservices/base/qmediaresource.h
+++ b/src/multimedia/mediaservices/base/qmediaresource.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qmediaservice.cpp b/src/multimedia/mediaservices/base/qmediaservice.cpp
index 5d522dc..b343887 100644
--- a/src/multimedia/mediaservices/base/qmediaservice.cpp
+++ b/src/multimedia/mediaservices/base/qmediaservice.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -41,7 +41,7 @@
 
 #include <QtCore/qtimer.h>
 
-#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaServices/qmediaservice.h>
 #include "qmediaservice_p.h"
 
 
diff --git a/src/multimedia/mediaservices/base/qmediaservice.h b/src/multimedia/mediaservices/base/qmediaservice.h
index 060019b..3963348 100644
--- a/src/multimedia/mediaservices/base/qmediaservice.h
+++ b/src/multimedia/mediaservices/base/qmediaservice.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -45,7 +45,7 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qstringlist.h>
 
-#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaServices/qmediacontrol.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/multimedia/mediaservices/base/qmediaservice_p.h b/src/multimedia/mediaservices/base/qmediaservice_p.h
index e60e669..bebae11 100644
--- a/src/multimedia/mediaservices/base/qmediaservice_p.h
+++ b/src/multimedia/mediaservices/base/qmediaservice_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qmediaserviceprovider.cpp b/src/multimedia/mediaservices/base/qmediaserviceprovider.cpp
index 48d245d..f27628b 100644
--- a/src/multimedia/mediaservices/base/qmediaserviceprovider.cpp
+++ b/src/multimedia/mediaservices/base/qmediaserviceprovider.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,11 +42,11 @@
 #include <QtCore/qdebug.h>
 #include <QtCore/qmap.h>
 
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qmediaserviceprovider.h>
-#include <QtMediaservices/qmediaserviceproviderplugin.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmediaserviceproviderplugin.h>
 #include "qmediapluginloader_p.h"
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 QT_BEGIN_NAMESPACE
 
@@ -337,9 +337,9 @@ public:
                 }
                 break;
             case QMediaServiceProviderHint::ContentType: {
-                    QtMediaservices::SupportEstimate estimate = QtMediaservices::NotSupported;
+                    QtMediaServices::SupportEstimate estimate = QtMediaServices::NotSupported;
                     foreach (QMediaServiceProviderPlugin *currentPlugin, plugins) {
-                        QtMediaservices::SupportEstimate currentEstimate = QtMediaservices::MaybeSupported;
+                        QtMediaServices::SupportEstimate currentEstimate = QtMediaServices::MaybeSupported;
                         QMediaServiceSupportedFormatsInterface *iface =
                                 qobject_cast<QMediaServiceSupportedFormatsInterface*>(currentPlugin);
 
@@ -350,7 +350,7 @@ public:
                             estimate = currentEstimate;
                             plugin = currentPlugin;
 
-                            if (currentEstimate == QtMediaservices::PreferredService)
+                            if (currentEstimate == QtMediaServices::PreferredService)
                                 break;
                         }
                     }
@@ -381,7 +381,7 @@ public:
         }
     }
 
-    QtMediaservices::SupportEstimate hasSupport(const QByteArray &serviceType,
+    QtMediaServices::SupportEstimate hasSupport(const QByteArray &serviceType,
                                      const QString &mimeType,
                                      const QStringList& codecs,
                                      int flags) const
@@ -390,10 +390,10 @@ public:
                 QString::fromLatin1(serviceType.constData(),serviceType.length()));
 
         if (instances.isEmpty())
-            return QtMediaservices::NotSupported;
+            return QtMediaServices::NotSupported;
 
         bool allServicesProvideInterface = true;
-        QtMediaservices::SupportEstimate supportEstimate = QtMediaservices::NotSupported;
+        QtMediaServices::SupportEstimate supportEstimate = QtMediaServices::NotSupported;
 
         foreach(QObject *obj, instances) {
             QMediaServiceSupportedFormatsInterface *iface =
@@ -427,12 +427,12 @@ public:
         }
 
         //don't return PreferredService
-        supportEstimate = qMin(supportEstimate, QtMediaservices::ProbablySupported);
+        supportEstimate = qMin(supportEstimate, QtMediaServices::ProbablySupported);
 
         //Return NotSupported only if no services are available of serviceType
         //or all the services returned NotSupported, otherwise return at least MaybeSupported
         if (!allServicesProvideInterface)
-            supportEstimate = qMax(QtMediaservices::MaybeSupported, supportEstimate);
+            supportEstimate = qMax(QtMediaServices::MaybeSupported, supportEstimate);
 
         return supportEstimate;
     }
@@ -540,13 +540,13 @@ Q_GLOBAL_STATIC(QPluginServiceProvider, pluginProvider);
 */
 
 /*!
-    \fn QtMediaservices::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType, const QString &mimeType, const QStringList& codecs, int flags) const
+    \fn QtMediaServices::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType, const QString &mimeType, const QStringList& codecs, int flags) const
 
     Returns how confident a media service provider is that is can provide a \a serviceType
     service that is able to play media of a specific \a mimeType that is encoded using the listed
     \a codecs while adhearing to constraints identified in \a flags.
 */
-QtMediaservices::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType,
+QtMediaServices::SupportEstimate QMediaServiceProvider::hasSupport(const QByteArray &serviceType,
                                                         const QString &mimeType,
                                                         const QStringList& codecs,
                                                         int flags) const
@@ -556,7 +556,7 @@ QtMediaservices::SupportEstimate QMediaServiceProvider::hasSupport(const QByteAr
     Q_UNUSED(codecs);
     Q_UNUSED(flags);
 
-    return QtMediaservices::MaybeSupported;
+    return QtMediaServices::MaybeSupported;
 }
 
 /*!
diff --git a/src/multimedia/mediaservices/base/qmediaserviceprovider.h b/src/multimedia/mediaservices/base/qmediaserviceprovider.h
index 45021c7..24d2078 100644
--- a/src/multimedia/mediaservices/base/qmediaserviceprovider.h
+++ b/src/multimedia/mediaservices/base/qmediaserviceprovider.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -45,7 +45,7 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qshareddata.h>
 
-#include <QtMediaservices/qtmedianamespace.h>
+#include <QtMediaServices/qtmedianamespace.h>
 
 QT_BEGIN_HEADER
 
@@ -106,7 +106,7 @@ public:
     virtual QMediaService* requestService(const QByteArray &type, const QMediaServiceProviderHint &hint = QMediaServiceProviderHint()) = 0;
     virtual void releaseService(QMediaService *service) = 0;
 
-    virtual QtMediaservices::SupportEstimate hasSupport(const QByteArray &serviceType,
+    virtual QtMediaServices::SupportEstimate hasSupport(const QByteArray &serviceType,
                                              const QString &mimeType,
                                              const QStringList& codecs,
                                              int flags = 0) const;
diff --git a/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h b/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
index bc41845..ab55f84 100644
--- a/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
+++ b/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -46,7 +46,7 @@
 #include <QtCore/qplugin.h>
 #include <QtCore/qfactoryinterface.h>
 
-#include <QtMediaservices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
 
 #ifdef Q_MOC_RUN
 # pragma Q_MOC_EXPAND_MACROS
@@ -76,7 +76,7 @@ Q_DECLARE_INTERFACE(QMediaServiceProviderFactoryInterface, QMediaServiceProvider
 struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedFormatsInterface
 {
     virtual ~QMediaServiceSupportedFormatsInterface() {}
-    virtual QtMediaservices::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const = 0;
+    virtual QtMediaServices::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const = 0;
     virtual QStringList supportedMimeTypes() const = 0;
 };
 
diff --git a/src/multimedia/mediaservices/base/qmediatimerange.cpp b/src/multimedia/mediaservices/base/qmediatimerange.cpp
index 74f54dd..2dba20c 100644
--- a/src/multimedia/mediaservices/base/qmediatimerange.cpp
+++ b/src/multimedia/mediaservices/base/qmediatimerange.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qmediatimerange.h>
+#include <QtMediaServices/qmediatimerange.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qmediatimerange.h b/src/multimedia/mediaservices/base/qmediatimerange.h
index 94beaad..33b2f27 100644
--- a/src/multimedia/mediaservices/base/qmediatimerange.h
+++ b/src/multimedia/mediaservices/base/qmediatimerange.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -43,7 +43,7 @@
 #define QMEDIATIMERANGE_H
 
 #include <QtCore/qshareddata.h>
-#include <QtMediaservices/qtmedianamespace.h>
+#include <QtMediaServices/qtmedianamespace.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qmetadatacontrol.cpp b/src/multimedia/mediaservices/base/qmetadatacontrol.cpp
index 32be987..8bfec7e 100644
--- a/src/multimedia/mediaservices/base/qmetadatacontrol.cpp
+++ b/src/multimedia/mediaservices/base/qmetadatacontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qmetadatacontrol.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 #include "qmediacontrol_p.h"
 
 
@@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE
     its current media it will implement QMetaDataControl.  This control
     provides functions for both retrieving and setting meta-data values.
     Meta-data may be addressed by the well defined keys in the
-    QtMediaservices::MetaData enumeration using the metaData() functions, or by
+    QtMediaServices::MetaData enumeration using the metaData() functions, or by
     string keys using the extendedMetaData() functions.
 
     The functionality provided by this control is exposed to application
@@ -117,13 +117,13 @@ QMetaDataControl::~QMetaDataControl()
 */
 
 /*!
-    \fn QVariant QMetaDataControl::metaData(QtMediaservices::MetaData key) const
+    \fn QVariant QMetaDataControl::metaData(QtMediaServices::MetaData key) const
 
     Returns the meta-data for the given \a key.
 */
 
 /*!
-    \fn void QMetaDataControl::setMetaData(QtMediaservices::MetaData key, const QVariant &value)
+    \fn void QMetaDataControl::setMetaData(QtMediaServices::MetaData key, const QVariant &value)
 
     Sets the \a value of the meta-data element with the given \a key.
 */
diff --git a/src/multimedia/mediaservices/base/qmetadatacontrol.h b/src/multimedia/mediaservices/base/qmetadatacontrol.h
index cf4a0d3..e91c88b 100644
--- a/src/multimedia/mediaservices/base/qmetadatacontrol.h
+++ b/src/multimedia/mediaservices/base/qmetadatacontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,9 +42,9 @@
 #ifndef QMETADATACONTROL_H
 #define QMETADATACONTROL_H
 
-#include <QtMediaservices/qmediacontrol.h>
-#include <QtMediaservices/qmediaobject.h>
-#include <QtMediaservices/qmediaresource.h>
+#include <QtMediaServices/qmediacontrol.h>
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediaresource.h>
 
 
 QT_BEGIN_HEADER
@@ -63,9 +63,9 @@ public:
     virtual bool isWritable() const = 0;
     virtual bool isMetaDataAvailable() const = 0;
 
-    virtual QVariant metaData(QtMediaservices::MetaData key) const = 0;
-    virtual void setMetaData(QtMediaservices::MetaData key, const QVariant &value) = 0;
-    virtual QList<QtMediaservices::MetaData> availableMetaData() const = 0;
+    virtual QVariant metaData(QtMediaServices::MetaData key) const = 0;
+    virtual void setMetaData(QtMediaServices::MetaData key, const QVariant &value) = 0;
+    virtual QList<QtMediaServices::MetaData> availableMetaData() const = 0;
 
     virtual QVariant extendedMetaData(const QString &key) const = 0;
     virtual void setExtendedMetaData(const QString &key, const QVariant &value) = 0;
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface.cpp b/src/multimedia/mediaservices/base/qpaintervideosurface.cpp
index b3e0dd5..302e772 100644
--- a/src/multimedia/mediaservices/base/qpaintervideosurface.cpp
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h b/src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h
index 13c22c2..4f8a7a6 100644
--- a/src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface_mac_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface_p.h b/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
index de9c24a..20628c4 100644
--- a/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qtmedianamespace.h b/src/multimedia/mediaservices/base/qtmedianamespace.h
index 7db7aa8..917c646 100644
--- a/src/multimedia/mediaservices/base/qtmedianamespace.h
+++ b/src/multimedia/mediaservices/base/qtmedianamespace.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE
 
 QT_MODULE(Multimedia)
 
-namespace QtMediaservices
+namespace QtMediaServices
 {
     enum MetaData
     {
diff --git a/src/multimedia/mediaservices/base/qvideodevicecontrol.cpp b/src/multimedia/mediaservices/base/qvideodevicecontrol.cpp
index 128cee9..30c56cf 100644
--- a/src/multimedia/mediaservices/base/qvideodevicecontrol.cpp
+++ b/src/multimedia/mediaservices/base/qvideodevicecontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qvideodevicecontrol.h>
+#include <QtMediaServices/qvideodevicecontrol.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qvideodevicecontrol.h b/src/multimedia/mediaservices/base/qvideodevicecontrol.h
index df1d4fa..b86a35c 100644
--- a/src/multimedia/mediaservices/base/qvideodevicecontrol.h
+++ b/src/multimedia/mediaservices/base/qvideodevicecontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,7 +42,7 @@
 #ifndef QVIDEODEVICECONTROL_H
 #define QVIDEODEVICECONTROL_H
 
-#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaServices/qmediacontrol.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qvideooutputcontrol.cpp b/src/multimedia/mediaservices/base/qvideooutputcontrol.cpp
index 7d7ed4b..532c892 100644
--- a/src/multimedia/mediaservices/base/qvideooutputcontrol.cpp
+++ b/src/multimedia/mediaservices/base/qvideooutputcontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qvideooutputcontrol.h b/src/multimedia/mediaservices/base/qvideooutputcontrol.h
index 05bc164..ad69911 100644
--- a/src/multimedia/mediaservices/base/qvideooutputcontrol.h
+++ b/src/multimedia/mediaservices/base/qvideooutputcontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,7 +42,7 @@
 #ifndef QVIDEOOUTPUTCONTROL_H
 #define QVIDEOOUTPUTCONTROL_H
 
-#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaServices/qmediacontrol.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qvideorenderercontrol.cpp b/src/multimedia/mediaservices/base/qvideorenderercontrol.cpp
index bd7c78d..6cc3138 100644
--- a/src/multimedia/mediaservices/base/qvideorenderercontrol.cpp
+++ b/src/multimedia/mediaservices/base/qvideorenderercontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 
 #include "qmediacontrol_p.h"
 
diff --git a/src/multimedia/mediaservices/base/qvideorenderercontrol.h b/src/multimedia/mediaservices/base/qvideorenderercontrol.h
index fd130ac..29a66ea 100644
--- a/src/multimedia/mediaservices/base/qvideorenderercontrol.h
+++ b/src/multimedia/mediaservices/base/qvideorenderercontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,7 +42,7 @@
 #ifndef QVIDEORENDERERCONTROL_H
 #define QVIDEORENDERERCONTROL_H
 
-#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaServices/qmediacontrol.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/multimedia/mediaservices/base/qvideowidget.cpp b/src/multimedia/mediaservices/base/qvideowidget.cpp
index 52291b0..d39b1f4 100644
--- a/src/multimedia/mediaservices/base/qvideowidget.cpp
+++ b/src/multimedia/mediaservices/base/qvideowidget.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -41,14 +41,14 @@
 
 #include "qvideowidget_p.h"
 
-#include <QtMediaservices/qmediaobject.h>
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qvideooutputcontrol.h>
-#include <QtMediaservices/qvideowindowcontrol.h>
-#include <QtMediaservices/qvideowidgetcontrol.h>
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
+#include <QtMediaServices/qvideowidgetcontrol.h>
 
 #include "qpaintervideosurface_p.h"
-#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 #include <QtMultimedia/qvideosurfaceformat.h>
 #include <qpainter.h>
 
diff --git a/src/multimedia/mediaservices/base/qvideowidget.h b/src/multimedia/mediaservices/base/qvideowidget.h
index 080e19c..8033d40 100644
--- a/src/multimedia/mediaservices/base/qvideowidget.h
+++ b/src/multimedia/mediaservices/base/qvideowidget.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/base/qvideowidget_p.h b/src/multimedia/mediaservices/base/qvideowidget_p.h
index 4f67117..bb44dfa 100644
--- a/src/multimedia/mediaservices/base/qvideowidget_p.h
+++ b/src/multimedia/mediaservices/base/qvideowidget_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -53,7 +53,7 @@
 // We mean it.
 //
 
-#include <QtMediaservices/qvideowidget.h>
+#include <QtMediaServices/qvideowidget.h>
 
 #ifndef QT_NO_OPENGL
 #include <QGLWidget>
diff --git a/src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp b/src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp
index 1cc7eaf..538f158 100644
--- a/src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp
+++ b/src/multimedia/mediaservices/base/qvideowidgetcontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qvideowidgetcontrol.h>
+#include <QtMediaServices/qvideowidgetcontrol.h>
 #include "qmediacontrol_p.h"
 
 
diff --git a/src/multimedia/mediaservices/base/qvideowidgetcontrol.h b/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
index a8105ac..1fe43cc 100644
--- a/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
+++ b/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -44,8 +44,8 @@
 
 #include <QtGui/qwidget.h>
 
-#include <QtMediaservices/qvideowidget.h>
-#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaServices/qvideowidget.h>
+#include <QtMediaServices/qmediacontrol.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/base/qvideowindowcontrol.cpp b/src/multimedia/mediaservices/base/qvideowindowcontrol.cpp
index f73b187..967a2d6 100644
--- a/src/multimedia/mediaservices/base/qvideowindowcontrol.cpp
+++ b/src/multimedia/mediaservices/base/qvideowindowcontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,7 +39,7 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qvideowindowcontrol.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qvideowindowcontrol.h b/src/multimedia/mediaservices/base/qvideowindowcontrol.h
index 0fabce9..74c1786 100644
--- a/src/multimedia/mediaservices/base/qvideowindowcontrol.h
+++ b/src/multimedia/mediaservices/base/qvideowindowcontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -44,8 +44,8 @@
 
 #include <QtGui/qwidget.h>
 
-#include <QtMediaservices/qmediacontrol.h>
-#include <QtMediaservices/qvideowidget.h>
+#include <QtMediaServices/qmediacontrol.h>
+#include <QtMediaServices/qvideowidget.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_p.h
index 8c8985a..419e4f8 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_p.h
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
index 3e3dd91..c856157 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h
index ef6bff1..1327bf5 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_pulse_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -58,7 +58,7 @@
 
 #include <QtCore/qobject.h>
 #include <QtCore/qdatetime.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayer.h>
 #include <pulse/pulseaudio.h>
 
 
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp
index 8cc2675..5e40bed 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -54,8 +54,8 @@
 
 #include <QtCore/qcoreapplication.h>
 
-#include <QtMediaservices/qmediacontent.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediacontent.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h
index 5abdcad..82ea000 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qmedia_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -56,7 +56,7 @@
 
 #include <QtCore/qobject.h>
 #include <QtCore/qurl.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp
index 7746f0c..9247aba 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h
index 133e6ec..dad7b6f 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_qsound_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/effects/wavedecoder_p.cpp b/src/multimedia/mediaservices/effects/wavedecoder_p.cpp
index 2208461..1c26c8f 100644
--- a/src/multimedia/mediaservices/effects/wavedecoder_p.cpp
+++ b/src/multimedia/mediaservices/effects/wavedecoder_p.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/effects/wavedecoder_p.h b/src/multimedia/mediaservices/effects/wavedecoder_p.h
index bb22907..dcc5453 100644
--- a/src/multimedia/mediaservices/effects/wavedecoder_p.h
+++ b/src/multimedia/mediaservices/effects/wavedecoder_p.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
diff --git a/src/multimedia/mediaservices/mediaservices.pro b/src/multimedia/mediaservices/mediaservices.pro
index 908f60a..ef552e3 100644
--- a/src/multimedia/mediaservices/mediaservices.pro
+++ b/src/multimedia/mediaservices/mediaservices.pro
@@ -1,4 +1,4 @@
-TARGET = QtMediaservices
+TARGET = QtMediaServices
 QPRO_PWD = $$PWD
 QT = core gui multimedia
 
diff --git a/src/multimedia/mediaservices/playback/qmediaplayer.cpp b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
index b15464f..e91a64c 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayer.cpp
+++ b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -45,16 +45,16 @@
 #include <QtCore/qpointer.h>
 #include <QtCore/qdebug.h>
 
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayer.h>
 
-#include <QtMediaservices/private/qmediaobject_p.h>
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/qmediaserviceprovider.h>
-#include <QtMediaservices/qmediaplaylist.h>
-#include <QtMediaservices/qmediaplaylistcontrol.h>
-#include <QtMediaservices/qvideowidget.h>
-#include <QtMediaservices/qgraphicsvideoitem.h>
+#include <QtMediaServices/private/qmediaobject_p.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylistcontrol.h>
+#include <QtMediaServices/qvideowidget.h>
+#include <QtMediaServices/qgraphicsvideoitem.h>
 
 //#define DEBUG_PLAYER_STATE
 
@@ -682,7 +682,7 @@ void QMediaPlayer::unbind(QObject *obj)
     The \a flags argument allows additional requirements such as performance indicators to be
     specified.
 */
-QtMediaservices::SupportEstimate QMediaPlayer::hasSupport(const QString &mimeType,
+QtMediaServices::SupportEstimate QMediaPlayer::hasSupport(const QString &mimeType,
                                                const QStringList& codecs,
                                                Flags flags)
 {
diff --git a/src/multimedia/mediaservices/playback/qmediaplayer.h b/src/multimedia/mediaservices/playback/qmediaplayer.h
index 2b4c443..be66a63 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayer.h
+++ b/src/multimedia/mediaservices/playback/qmediaplayer.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -42,9 +42,9 @@
 #ifndef QMEDIAPLAYER_H
 #define QMEDIAPLAYER_H
 
-#include <QtMediaservices/qmediaserviceprovider.h>
-#include <QtMediaservices/qmediaobject.h>
-#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediacontent.h>
 
 
 QT_BEGIN_HEADER
@@ -117,7 +117,7 @@ public:
     QMediaPlayer(QObject *parent = 0, Flags flags = 0, QMediaServiceProvider *provider = QMediaServiceProvider::defaultServiceProvider());
     ~QMediaPlayer();
 
-    static QtMediaservices::SupportEstimate hasSupport(const QString &mimeType,
+    static QtMediaServices::SupportEstimate hasSupport(const QString &mimeType,
                                             const QStringList& codecs = QStringList(),
                                             Flags flags = 0);
     static QStringList supportedMimeTypes(Flags flags = 0);
diff --git a/src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp b/src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp
index 3b63d93..ca58ce4 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp
+++ b/src/multimedia/mediaservices/playback/qmediaplayercontrol.cpp
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -39,9 +39,9 @@
 **
 ****************************************************************************/
 
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/private/qmediacontrol_p.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/private/qmediacontrol_p.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/multimedia/mediaservices/playback/qmediaplayercontrol.h b/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
index be10713..25bc2f5 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
+++ b/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
@@ -4,7 +4,7 @@
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
-** This file is part of the QtMediaservices module of the Qt Toolkit.
+** This file is part of the QtMediaServices module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** No Commercial Usage
@@ -44,9 +44,9 @@
 
 #include <QtCore/qpair.h>
 
-#include <QtMediaservices/qmediacontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
-#include <QtMediaservices/qmediatimerange.h>
+#include <QtMediaServices/qmediacontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
+#include <QtMediaServices/qmediatimerange.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
index d7e3499..5dd36c3 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
@@ -42,7 +42,7 @@
 #ifndef DIRECTSHOWAUDIOENDPOINTCONTROL_H
 #define DIRECTSHOWAUDIOENDPOINTCONTROL_H
 
-#include <QtMediaservices/qmediacontrol.h>
+#include <QtMediaServices/qmediacontrol.h>
 
 #include <dshow.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp
index 53b8787..7f67a82 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp
@@ -57,76 +57,76 @@ namespace
 {
     struct QWMMetaDataKeyLookup
     {
-        QtMediaservices::MetaData key;
+        QtMediaServices::MetaData key;
         const wchar_t *token;
     };
 }
 
 static const QWMMetaDataKeyLookup qt_wmMetaDataKeys[] =
 {
-    { QtMediaservices::Title, L"Title" },
-    { QtMediaservices::SubTitle, L"WM/SubTitle" },
-    { QtMediaservices::Author, L"Author" },
-    { QtMediaservices::Comment, L"Comment" },
-    { QtMediaservices::Description, L"Description" },
-    { QtMediaservices::Category, L"WM/Category" },
-    { QtMediaservices::Genre, L"WM/Genre" },
-    //{ QtMediaservices::Date, 0 },
-    { QtMediaservices::Year, L"WM/Year" },
-    { QtMediaservices::UserRating, L"UserRating" },
-    //{ QtMediaservices::MetaDatawords, 0 },
-    { QtMediaservices::Language, L"Language" },
-    { QtMediaservices::Publisher, L"WM/Publisher" },
-    { QtMediaservices::Copyright, L"Copyright" },
-    { QtMediaservices::ParentalRating, L"ParentalRating" },
-    { QtMediaservices::RatingOrganisation, L"RatingOrganisation" },
+    { QtMediaServices::Title, L"Title" },
+    { QtMediaServices::SubTitle, L"WM/SubTitle" },
+    { QtMediaServices::Author, L"Author" },
+    { QtMediaServices::Comment, L"Comment" },
+    { QtMediaServices::Description, L"Description" },
+    { QtMediaServices::Category, L"WM/Category" },
+    { QtMediaServices::Genre, L"WM/Genre" },
+    //{ QtMediaServices::Date, 0 },
+    { QtMediaServices::Year, L"WM/Year" },
+    { QtMediaServices::UserRating, L"UserRating" },
+    //{ QtMediaServices::MetaDatawords, 0 },
+    { QtMediaServices::Language, L"Language" },
+    { QtMediaServices::Publisher, L"WM/Publisher" },
+    { QtMediaServices::Copyright, L"Copyright" },
+    { QtMediaServices::ParentalRating, L"ParentalRating" },
+    { QtMediaServices::RatingOrganisation, L"RatingOrganisation" },
 
     // Media
-    { QtMediaservices::Size, L"FileSize" },
-    { QtMediaservices::MediaType, L"MediaType" },
-    { QtMediaservices::Duration, L"Duration" },
+    { QtMediaServices::Size, L"FileSize" },
+    { QtMediaServices::MediaType, L"MediaType" },
+    { QtMediaServices::Duration, L"Duration" },
 
     // Audio
-    { QtMediaservices::AudioBitRate, L"AudioBitRate" },
-    { QtMediaservices::AudioCodec, L"AudioCodec" },
-    { QtMediaservices::ChannelCount, L"ChannelCount" },
-    { QtMediaservices::SampleRate, L"Frequency" },
+    { QtMediaServices::AudioBitRate, L"AudioBitRate" },
+    { QtMediaServices::AudioCodec, L"AudioCodec" },
+    { QtMediaServices::ChannelCount, L"ChannelCount" },
+    { QtMediaServices::SampleRate, L"Frequency" },
 
     // Music
-    { QtMediaservices::AlbumTitle, L"WM/AlbumTitle" },
-    { QtMediaservices::AlbumArtist, L"WM/AlbumArtist" },
-    { QtMediaservices::ContributingArtist, L"Author" },
-    { QtMediaservices::Composer, L"WM/Composer" },
-    { QtMediaservices::Conductor, L"WM/Conductor" },
-    { QtMediaservices::Lyrics, L"WM/Lyrics" },
-    { QtMediaservices::Mood, L"WM/Mood" },
-    { QtMediaservices::TrackNumber, L"WM/TrackNumber" },
-    //{ QtMediaservices::TrackCount, 0 },
-    //{ QtMediaservices::CoverArtUriSmall, 0 },
-    //{ QtMediaservices::CoverArtUriLarge, 0 },
+    { QtMediaServices::AlbumTitle, L"WM/AlbumTitle" },
+    { QtMediaServices::AlbumArtist, L"WM/AlbumArtist" },
+    { QtMediaServices::ContributingArtist, L"Author" },
+    { QtMediaServices::Composer, L"WM/Composer" },
+    { QtMediaServices::Conductor, L"WM/Conductor" },
+    { QtMediaServices::Lyrics, L"WM/Lyrics" },
+    { QtMediaServices::Mood, L"WM/Mood" },
+    { QtMediaServices::TrackNumber, L"WM/TrackNumber" },
+    //{ QtMediaServices::TrackCount, 0 },
+    //{ QtMediaServices::CoverArtUriSmall, 0 },
+    //{ QtMediaServices::CoverArtUriLarge, 0 },
 
     // Image/Video
-    //{ QtMediaservices::Resolution, 0 },
-    //{ QtMediaservices::PixelAspectRatio, 0 },
+    //{ QtMediaServices::Resolution, 0 },
+    //{ QtMediaServices::PixelAspectRatio, 0 },
 
     // Video
-    //{ QtMediaservices::FrameRate, 0 },
-    { QtMediaservices::VideoBitRate, L"VideoBitRate" },
-    { QtMediaservices::VideoCodec, L"VideoCodec" },
+    //{ QtMediaServices::FrameRate, 0 },
+    { QtMediaServices::VideoBitRate, L"VideoBitRate" },
+    { QtMediaServices::VideoCodec, L"VideoCodec" },
 
-    //{ QtMediaservices::PosterUri, 0 },
+    //{ QtMediaServices::PosterUri, 0 },
 
     // Movie
-    { QtMediaservices::ChapterNumber, L"ChapterNumber" },
-    { QtMediaservices::Director, L"WM/Director" },
-    { QtMediaservices::LeadPerformer, L"LeadPerformer" },
-    { QtMediaservices::Writer, L"WM/Writer" },
+    { QtMediaServices::ChapterNumber, L"ChapterNumber" },
+    { QtMediaServices::Director, L"WM/Director" },
+    { QtMediaServices::LeadPerformer, L"LeadPerformer" },
+    { QtMediaServices::Writer, L"WM/Writer" },
 
     // Photos
-    { QtMediaservices::CameraManufacturer, L"CameraManufacturer" },
-    { QtMediaservices::CameraModel, L"CameraModel" },
-    { QtMediaservices::Event, L"Event" },
-    { QtMediaservices::Subject, L"Subject" }
+    { QtMediaServices::CameraManufacturer, L"CameraManufacturer" },
+    { QtMediaServices::CameraModel, L"CameraModel" },
+    { QtMediaServices::Event, L"Event" },
+    { QtMediaServices::Subject, L"Subject" }
 };
 
 static QVariant getValue(IWMHeaderInfo *header, const wchar_t *key)
@@ -257,7 +257,7 @@ bool DirectShowMetaDataControl::isMetaDataAvailable() const
 #endif
 }
 
-QVariant DirectShowMetaDataControl::metaData(QtMediaservices::MetaData key) const
+QVariant DirectShowMetaDataControl::metaData(QtMediaServices::MetaData key) const
 {
     QVariant value;
 
@@ -277,19 +277,19 @@ QVariant DirectShowMetaDataControl::metaData(QtMediaservices::MetaData key) cons
         BSTR string = 0;
 
         switch (key) {
-        case QtMediaservices::Author:
+        case QtMediaServices::Author:
             m_content->get_AuthorName(&string);
             break;
-        case QtMediaservices::Title:
+        case QtMediaServices::Title:
             m_content->get_Title(&string);
             break;
-        case QtMediaservices::ParentalRating:
+        case QtMediaServices::ParentalRating:
             m_content->get_Rating(&string);
             break;
-        case QtMediaservices::Description:
+        case QtMediaServices::Description:
             m_content->get_Description(&string);
             break;
-        case QtMediaservices::Copyright:
+        case QtMediaServices::Copyright:
             m_content->get_Copyright(&string);
             break;
         default:
@@ -305,13 +305,13 @@ QVariant DirectShowMetaDataControl::metaData(QtMediaservices::MetaData key) cons
     return value;
 }
 
-void DirectShowMetaDataControl::setMetaData(QtMediaservices::MetaData, const QVariant &)
+void DirectShowMetaDataControl::setMetaData(QtMediaServices::MetaData, const QVariant &)
 {
 }
 
-QList<QtMediaservices::MetaData> DirectShowMetaDataControl::availableMetaData() const
+QList<QtMediaServices::MetaData> DirectShowMetaDataControl::availableMetaData() const
 {
-    return QList<QtMediaservices::MetaData>();
+    return QList<QtMediaServices::MetaData>();
 }
 
 QVariant DirectShowMetaDataControl::extendedMetaData(const QString &) const
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h
index c67c6eb..e368f00 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h
@@ -44,7 +44,7 @@
 
 #include "directshowglobal.h"
 
-#include <QtMediaservices/qmetadatacontrol.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 
 #include <qnetwork.h>
 
@@ -72,9 +72,9 @@ public:
     bool isWritable() const;
     bool isMetaDataAvailable() const;
 
-    QVariant metaData(QtMediaservices::MetaData key) const;
-    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
-    QList<QtMediaservices::MetaData> availableMetaData() const;
+    QVariant metaData(QtMediaServices::MetaData key) const;
+    void setMetaData(QtMediaServices::MetaData key, const QVariant &value);
+    QList<QtMediaServices::MetaData> availableMetaData() const;
 
     QVariant extendedMetaData(const QString &key) const;
     void setExtendedMetaData(const QString &key, const QVariant &value);
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp
index 4dd9b0e..02b1a3b 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowpinenum.cpp
@@ -41,7 +41,7 @@
 
 #include "directshowpinenum.h"
 
-#include <QtMediaservices>
+#include <QtMediaServices>
 
 
 QT_BEGIN_NAMESPACE
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h
index b22a45b..6b5203e 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.h
@@ -42,8 +42,8 @@
 #ifndef DIRECTSHOWPLAYERCONTROL_H
 #define DIRECTSHOWPLAYERCONTROL_H
 
-#include <QtMediaservices/qmediacontent.h>
-#include <QtMediaservices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediacontent.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
 
 #include <QtCore/qcoreevent.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp
index 93ae3ad..8ad8cff 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp
@@ -49,7 +49,7 @@
 #include "directshowvideorenderercontrol.h"
 #include "vmr9videowindowcontrol.h"
 
-#include <QtMediaservices/qmediacontent.h>
+#include <QtMediaServices/qmediacontent.h>
 
 #include <QtCore/qcoreapplication.h>
 #include <QtCore/qdatetime.h>
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
index 1a90b7e..a3f94e1 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
@@ -42,10 +42,10 @@
 #ifndef DIRECTSHOWPLAYERSERVICE_H
 #define DIRECTSHOWPLAYERSERVICE_H
 
-#include <QtMediaservices/qmediaplayer.h>
-#include <QtMediaservices/qmediaresource.h>
-#include <QtMediaservices/qmediaservice.h>
-#include <QtMediaservices/qmediatimerange.h>
+#include <QtMediaServices/qmediaplayer.h>
+#include <QtMediaServices/qmediaresource.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediatimerange.h>
 
 #include "directshoweventloop.h"
 #include "directshowglobal.h"
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h
index c4e9bed..9b857ce 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideooutputcontrol.h
@@ -42,7 +42,7 @@
 #ifndef DIRECTSHOWVIDEOUTPUTCONTROL_H
 #define DIRECTSHOWVIDEOOUPUTCONTROL_H
 
-#include <QtMediaservices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h
index c341487..adaa0f8 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowvideorenderercontrol.h
@@ -42,7 +42,7 @@
 #ifndef DIRECTSHOWVIDEORENDERERCONTROL_H
 #define DIRECTSHOWVIDEORENDERERCONTROL_H
 
-#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 
 #include <dshow.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h b/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
index 5820225..1b3776d 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
@@ -42,7 +42,7 @@
 #ifndef MEDIASAMPLEVIDEOBUFFER_H
 #define MEDIASAMPLEVIDEOBUFFER_H
 
-#include <QtMediaservices/qabstractvideobuffer.h>
+#include <QtMediaServices/qabstractvideobuffer.h>
 
 #include <dshow.h>
 
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h
index 9906fae..702dfd6 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.h
@@ -42,7 +42,7 @@
 #ifndef VMR9VIDEOWINDOWCONTROL_H
 #define VMR9VIDEOWINDOWCONTROL_H
 
-#include <QtMediaservices/qvideowindowcontrol.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
 
 #include <dshow.h>
 #include <d3d9.h>
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
index 51d68f9..f51d024 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
@@ -49,77 +49,77 @@ QT_BEGIN_NAMESPACE
 
 struct QGstreamerMetaDataKeyLookup
 {
-    QtMediaservices::MetaData key;
+    QtMediaServices::MetaData key;
     const char *token;
 };
 
 static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] =
 {
-    { QtMediaservices::Title, GST_TAG_TITLE },
-    //{ QtMediaservices::SubTitle, 0 },
-    //{ QtMediaservices::Author, 0 },
-    { QtMediaservices::Comment, GST_TAG_COMMENT },
-    { QtMediaservices::Description, GST_TAG_DESCRIPTION },
-    //{ QtMediaservices::Category, 0 },
-    { QtMediaservices::Genre, GST_TAG_GENRE },
-    { QtMediaservices::Year, "year" },
-    //{ QtMediaservices::UserRating, 0 },
-
-    { QtMediaservices::Language, GST_TAG_LANGUAGE_CODE },
-
-    { QtMediaservices::Publisher, GST_TAG_ORGANIZATION },
-    { QtMediaservices::Copyright, GST_TAG_COPYRIGHT },
-    //{ QtMediaservices::ParentalRating, 0 },
-    //{ QtMediaservices::RatingOrganisation, 0 },
+    { QtMediaServices::Title, GST_TAG_TITLE },
+    //{ QtMediaServices::SubTitle, 0 },
+    //{ QtMediaServices::Author, 0 },
+    { QtMediaServices::Comment, GST_TAG_COMMENT },
+    { QtMediaServices::Description, GST_TAG_DESCRIPTION },
+    //{ QtMediaServices::Category, 0 },
+    { QtMediaServices::Genre, GST_TAG_GENRE },
+    { QtMediaServices::Year, "year" },
+    //{ QtMediaServices::UserRating, 0 },
+
+    { QtMediaServices::Language, GST_TAG_LANGUAGE_CODE },
+
+    { QtMediaServices::Publisher, GST_TAG_ORGANIZATION },
+    { QtMediaServices::Copyright, GST_TAG_COPYRIGHT },
+    //{ QtMediaServices::ParentalRating, 0 },
+    //{ QtMediaServices::RatingOrganisation, 0 },
 
     // Media
-    //{ QtMediaservices::Size, 0 },
-    //{ QtMediaservices::MediaType, 0 },
-    { QtMediaservices::Duration, GST_TAG_DURATION },
+    //{ QtMediaServices::Size, 0 },
+    //{ QtMediaServices::MediaType, 0 },
+    { QtMediaServices::Duration, GST_TAG_DURATION },
 
     // Audio
-    { QtMediaservices::AudioBitRate, GST_TAG_BITRATE },
-    { QtMediaservices::AudioCodec, GST_TAG_AUDIO_CODEC },
-    //{ QtMediaservices::ChannelCount, 0 },
-    //{ QtMediaservices::Frequency, 0 },
+    { QtMediaServices::AudioBitRate, GST_TAG_BITRATE },
+    { QtMediaServices::AudioCodec, GST_TAG_AUDIO_CODEC },
+    //{ QtMediaServices::ChannelCount, 0 },
+    //{ QtMediaServices::Frequency, 0 },
 
     // Music
-    { QtMediaservices::AlbumTitle, GST_TAG_ALBUM },
-    { QtMediaservices::AlbumArtist,  GST_TAG_ARTIST},
-    { QtMediaservices::ContributingArtist, GST_TAG_PERFORMER },
+    { QtMediaServices::AlbumTitle, GST_TAG_ALBUM },
+    { QtMediaServices::AlbumArtist,  GST_TAG_ARTIST},
+    { QtMediaServices::ContributingArtist, GST_TAG_PERFORMER },
 #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19)
-    { QtMediaservices::Composer, GST_TAG_COMPOSER },
+    { QtMediaServices::Composer, GST_TAG_COMPOSER },
 #endif
-    //{ QtMediaservices::Conductor, 0 },
-    //{ QtMediaservices::Lyrics, 0 },
-    //{ QtMediaservices::Mood, 0 },
-    { QtMediaservices::TrackNumber, GST_TAG_TRACK_NUMBER },
+    //{ QtMediaServices::Conductor, 0 },
+    //{ QtMediaServices::Lyrics, 0 },
+    //{ QtMediaServices::Mood, 0 },
+    { QtMediaServices::TrackNumber, GST_TAG_TRACK_NUMBER },
 
-    //{ QtMediaservices::CoverArtUrlSmall, 0 },
-    //{ QtMediaservices::CoverArtUrlLarge, 0 },
+    //{ QtMediaServices::CoverArtUrlSmall, 0 },
+    //{ QtMediaServices::CoverArtUrlLarge, 0 },
 
     // Image/Video
-    //{ QtMediaservices::Resolution, 0 },
-    //{ QtMediaservices::PixelAspectRatio, 0 },
+    //{ QtMediaServices::Resolution, 0 },
+    //{ QtMediaServices::PixelAspectRatio, 0 },
 
     // Video
-    //{ QtMediaservices::VideoFrameRate, 0 },
-    //{ QtMediaservices::VideoBitRate, 0 },
-    { QtMediaservices::VideoCodec, GST_TAG_VIDEO_CODEC },
+    //{ QtMediaServices::VideoFrameRate, 0 },
+    //{ QtMediaServices::VideoBitRate, 0 },
+    { QtMediaServices::VideoCodec, GST_TAG_VIDEO_CODEC },
 
-    //{ QtMediaservices::PosterUrl, 0 },
+    //{ QtMediaServices::PosterUrl, 0 },
 
     // Movie
-    //{ QtMediaservices::ChapterNumber, 0 },
-    //{ QtMediaservices::Director, 0 },
-    { QtMediaservices::LeadPerformer, GST_TAG_PERFORMER },
-    //{ QtMediaservices::Writer, 0 },
+    //{ QtMediaServices::ChapterNumber, 0 },
+    //{ QtMediaServices::Director, 0 },
+    { QtMediaServices::LeadPerformer, GST_TAG_PERFORMER },
+    //{ QtMediaServices::Writer, 0 },
 
     // Photos
-    //{ QtMediaservices::CameraManufacturer, 0 },
-    //{ QtMediaservices::CameraModel, 0 },
-    //{ QtMediaservices::Event, 0 },
-    //{ QtMediaservices::Subject, 0 }
+    //{ QtMediaServices::CameraManufacturer, 0 },
+    //{ QtMediaServices::CameraModel, 0 },
+    //{ QtMediaServices::Event, 0 },
+    //{ QtMediaServices::Subject, 0 }
 };
 
 QGstreamerMetaDataProvider::QGstreamerMetaDataProvider(QGstreamerPlayerSession *session, QObject *parent)
@@ -142,7 +142,7 @@ bool QGstreamerMetaDataProvider::isWritable() const
     return false;
 }
 
-QVariant QGstreamerMetaDataProvider::metaData(QtMediaservices::MetaData key) const
+QVariant QGstreamerMetaDataProvider::metaData(QtMediaServices::MetaData key) const
 {
     static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
 
@@ -154,15 +154,15 @@ QVariant QGstreamerMetaDataProvider::metaData(QtMediaservices::MetaData key) con
     return QVariant();
 }
 
-void QGstreamerMetaDataProvider::setMetaData(QtMediaservices::MetaData key, QVariant const &value)
+void QGstreamerMetaDataProvider::setMetaData(QtMediaServices::MetaData key, QVariant const &value)
 {
     Q_UNUSED(key);
     Q_UNUSED(value);
 }
 
-QList<QtMediaservices::MetaData> QGstreamerMetaDataProvider::availableMetaData() const
+QList<QtMediaServices::MetaData> QGstreamerMetaDataProvider::availableMetaData() const
 {
-    static QMap<QByteArray, QtMediaservices::MetaData> keysMap;
+    static QMap<QByteArray, QtMediaServices::MetaData> keysMap;
     if (keysMap.isEmpty()) {
         const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
         for (int i = 0; i < count; ++i) {
@@ -170,9 +170,9 @@ QList<QtMediaservices::MetaData> QGstreamerMetaDataProvider::availableMetaData()
         }
     }
 
-    QList<QtMediaservices::MetaData> res;
+    QList<QtMediaServices::MetaData> res;
     foreach (const QByteArray &key, m_session->tags().keys()) {
-        QtMediaservices::MetaData tag = keysMap.value(key, QtMediaservices::MetaData(-1));
+        QtMediaServices::MetaData tag = keysMap.value(key, QtMediaServices::MetaData(-1));
         if (tag != -1)
             res.append(tag);
     }
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h
index 98803c2..4cf716a 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERMETADATAPROVIDER_H
 #define QGSTREAMERMETADATAPROVIDER_H
 
-#include <QtMediaservices/qmetadatacontrol.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 
 
 QT_BEGIN_HEADER
@@ -61,9 +61,9 @@ public:
     bool isMetaDataAvailable() const;
     bool isWritable() const;
 
-    QVariant metaData(QtMediaservices::MetaData key) const;
-    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
-    QList<QtMediaservices::MetaData> availableMetaData() const;
+    QVariant metaData(QtMediaServices::MetaData key) const;
+    void setMetaData(QtMediaServices::MetaData key, const QVariant &value);
+    QList<QtMediaServices::MetaData> availableMetaData() const;
 
     QVariant extendedMetaData(const QString &key) const ;
     void setExtendedMetaData(const QString &key, const QVariant &value);
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
index 5239464..c95f37a 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.h
@@ -44,8 +44,8 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 #include <limits.h>
 
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h
index fe4a8a9..1283966 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.h
@@ -45,7 +45,7 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qiodevice.h>
 
-#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaServices/qmediaservice.h>
 
 #include "qgstreamervideooutputcontrol.h"
 
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index 33454d4..724a595 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -812,7 +812,7 @@ void QGstreamerPlayerSession::getStreamsInfo()
 
     for (int i=0; i<m_streamTypes.count(); i++) {
         QMediaStreamsControl::StreamType streamType = m_streamTypes[i];
-        QMap<QtMediaservices::MetaData, QVariant> streamProperties;
+        QMap<QtMediaServices::MetaData, QVariant> streamProperties;
 
         int streamIndex = i - m_playbin2StreamOffset[streamType];
 
@@ -834,7 +834,7 @@ void QGstreamerPlayerSession::getStreamsInfo()
         if (tags && gst_is_tag_list(tags)) {
             gchar *languageCode = 0;
             if (gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &languageCode))
-                streamProperties[QtMediaservices::Language] = QString::fromUtf8(languageCode);
+                streamProperties[QtMediaServices::Language] = QString::fromUtf8(languageCode);
 
             //qDebug() << "language for setream" << i << QString::fromUtf8(languageCode);
             g_free (languageCode);
@@ -889,8 +889,8 @@ void QGstreamerPlayerSession::getStreamsInfo()
 //            break;
 //        }
 //
-//        QMap<QtMediaservices::MetaData, QVariant> streamProperties;
-//        streamProperties[QtMediaservices::Language] = QString::fromUtf8(languageCode);
+//        QMap<QtMediaServices::MetaData, QVariant> streamProperties;
+//        streamProperties[QtMediaServices::Language] = QString::fromUtf8(languageCode);
 //
 //        m_streamProperties.append(streamProperties);
 //        m_streamTypes.append(streamType);
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h
index 61b5f51..6499a84 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.h
@@ -46,7 +46,7 @@
 #include <QUrl>
 #include "qgstreamerplayercontrol.h"
 #include "qgstreamerbushelper.h"
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayer.h>
 //#include <qmediastreamscontrol.h>
 
 #include <gst/gst.h>
@@ -92,7 +92,7 @@ public:
     void setPlaybackRate(qreal rate);
 
     QMap<QByteArray ,QVariant> tags() const { return m_tags; }
-    QMap<QtMediaservices::MetaData,QVariant> streamProperties(int streamNumber) const { return m_streamProperties[streamNumber]; }
+    QMap<QtMediaServices::MetaData,QVariant> streamProperties(int streamNumber) const { return m_streamProperties[streamNumber]; }
 //    int streamCount() const { return m_streamProperties.count(); }
 //    QMediaStreamsControl::StreamType streamType(int streamNumber) { return m_streamTypes.value(streamNumber, QMediaStreamsControl::UnknownStream); }
 //
@@ -153,7 +153,7 @@ private:
     QGstreamerVideoRendererInterface *m_renderer;
 
     QMap<QByteArray, QVariant> m_tags;
-    QList< QMap<QtMediaservices::MetaData,QVariant> > m_streamProperties;
+    QList< QMap<QtMediaServices::MetaData,QVariant> > m_streamProperties;
 //    QList<QMediaStreamsControl::StreamType> m_streamTypes;
 //    QMap<QMediaStreamsControl::StreamType, int> m_playbin2StreamOffset;
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp
index 443e738..0ca7d54 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp
+++ b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.cpp
@@ -52,7 +52,7 @@
 #ifdef QMEDIA_GSTREAMER_CAPTURE
 #include "qgstreamercaptureservice.h"
 #endif
-#include <QtMediaservices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
 
 #ifdef QMEDIA_GSTREAMER_CAPTURE
 #include <linux/types.h>
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h
index 6908bb3..e0a5dfd 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamerserviceplugin.h
@@ -43,7 +43,7 @@
 #ifndef QGSTREAMERSERVICEPLUGIN_H
 #define QGSTREAMERSERVICEPLUGIN_H
 
-#include <QtMediaservices/qmediaserviceproviderplugin.h>
+#include <QtMediaServices/qmediaserviceproviderplugin.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h b/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h
index 35174cf..7994f9c 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOINPUTDEVICECONTROL_H
 #define QGSTREAMERVIDEOINPUTDEVICECONTROL_H
 
-#include <QtMediaservices/qvideodevicecontrol.h>
+#include <QtMediaServices/qvideodevicecontrol.h>
 #include <QtCore/qstringlist.h>
 
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h b/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h
index c4d76a4..6d7d47f 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOOUTPUTCONTROL_H
 #define QGSTREAMERVIDEOOUTPUTCONTROL_H
 
-#include <QtMediaservices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
 
 #include <gst/gst.h>
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h b/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h
index 63079c8..f44c25b 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOOVERLAY_H
 #define QGSTREAMERVIDEOOVERLAY_H
 
-#include <QtMediaservices/qvideowindowcontrol.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
 
 #include "qgstreamervideorendererinterface.h"
 
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h b/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h
index 903ffbb..0fbbd63 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEORENDERER_H
 #define QGSTREAMERVIDEORENDERER_H
 
-#include <QtMediaservices/qvideorenderercontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 #include "qvideosurfacegstsink.h"
 
 #include "qgstreamervideorendererinterface.h"
diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h b/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h
index e99a3cf..d54a1fc 100644
--- a/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h
+++ b/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.h
@@ -42,7 +42,7 @@
 #ifndef QGSTREAMERVIDEOWIDGET_H
 #define QGSTREAMERVIDEOWIDGET_H
 
-#include <QtMediaservices/qvideowidgetcontrol.h>
+#include <QtMediaServices/qvideowidgetcontrol.h>
 
 #include "qgstreamervideorendererinterface.h"
 
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h
index a546ca1..5ac97b1 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.h
@@ -45,8 +45,8 @@
 #include <QtCore/qobject.h>
 #include <QtGui/qmacdefines_mac.h>
 
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm
index 90c6035..ba22552 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playercontrol.mm
@@ -42,7 +42,7 @@
 #include "qt7playercontrol.h"
 #include "qt7playersession.h"
 
-#include <QtMediaservices/qmediaplaylistnavigator.h>
+#include <QtMediaServices/qmediaplaylistnavigator.h>
 
 #include <QtCore/qurl.h>
 #include <QtCore/qdebug.h>
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h
index e13df95..8cbc29a 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.h
@@ -42,7 +42,7 @@
 #ifndef QT7PLAYERMETADATACONTROL_H
 #define QT7PLAYERMETADATACONTROL_H
 
-#include <QtMediaservices/qmetadatacontrol.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 
 
 QT_BEGIN_HEADER
@@ -61,9 +61,9 @@ public:
     bool isMetaDataAvailable() const;
     bool isWritable() const;
 
-    QVariant metaData(QtMediaservices::MetaData key) const;
-    void setMetaData(QtMediaservices::MetaData key, const QVariant &value);
-    QList<QtMediaservices::MetaData> availableMetaData() const;
+    QVariant metaData(QtMediaServices::MetaData key) const;
+    void setMetaData(QtMediaServices::MetaData key, const QVariant &value);
+    QList<QtMediaServices::MetaData> availableMetaData() const;
 
     QVariant extendedMetaData(const QString &key) const ;
     void setExtendedMetaData(const QString &key, const QVariant &value);
@@ -74,7 +74,7 @@ private slots:
 
 private:
     QT7PlayerSession *m_session;
-    QMap<QtMediaservices::MetaData, QVariant> m_tags;
+    QMap<QtMediaServices::MetaData, QVariant> m_tags;
 };
 
 QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
index e12daf5..2ea778d 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm
@@ -72,18 +72,18 @@ bool QT7PlayerMetaDataControl::isWritable() const
     return false;
 }
 
-QVariant QT7PlayerMetaDataControl::metaData(QtMediaservices::MetaData key) const
+QVariant QT7PlayerMetaDataControl::metaData(QtMediaServices::MetaData key) const
 {
     return m_tags.value(key);
 }
 
-void QT7PlayerMetaDataControl::setMetaData(QtMediaservices::MetaData key, QVariant const &value)
+void QT7PlayerMetaDataControl::setMetaData(QtMediaServices::MetaData key, QVariant const &value)
 {
     Q_UNUSED(key);
     Q_UNUSED(value);
 }
 
-QList<QtMediaservices::MetaData> QT7PlayerMetaDataControl::availableMetaData() const
+QList<QtMediaServices::MetaData> QT7PlayerMetaDataControl::availableMetaData() const
 {
     return m_tags.keys();
 }
@@ -256,13 +256,13 @@ void QT7PlayerMetaDataControl::updateTags()
         metaMap.insert(QLatin1String("nam"), QString::fromUtf8([name UTF8String]));
 #endif // QUICKTIME_C_API_AVAILABLE
 
-        m_tags.insert(QtMediaservices::AlbumArtist, metaMap.value(QLatin1String("ART")));
-        m_tags.insert(QtMediaservices::AlbumTitle, metaMap.value(QLatin1String("alb")));
-        m_tags.insert(QtMediaservices::Title, metaMap.value(QLatin1String("nam")));
-        m_tags.insert(QtMediaservices::Date, metaMap.value(QLatin1String("day")));
-        m_tags.insert(QtMediaservices::Genre, metaMap.value(QLatin1String("gnre")));
-        m_tags.insert(QtMediaservices::TrackNumber, metaMap.value(QLatin1String("trk")));
-        m_tags.insert(QtMediaservices::Description, metaMap.value(QLatin1String("des")));
+        m_tags.insert(QtMediaServices::AlbumArtist, metaMap.value(QLatin1String("ART")));
+        m_tags.insert(QtMediaServices::AlbumTitle, metaMap.value(QLatin1String("alb")));
+        m_tags.insert(QtMediaServices::Title, metaMap.value(QLatin1String("nam")));
+        m_tags.insert(QtMediaServices::Date, metaMap.value(QLatin1String("day")));
+        m_tags.insert(QtMediaServices::Genre, metaMap.value(QLatin1String("gnre")));
+        m_tags.insert(QtMediaServices::TrackNumber, metaMap.value(QLatin1String("trk")));
+        m_tags.insert(QtMediaServices::Description, metaMap.value(QLatin1String("des")));
     }
 
     if (!wasEmpty || !m_tags.isEmpty())
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h
index 3d3a3ff..9a22c31 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.h
@@ -43,7 +43,7 @@
 #define QT7PLAYERSERVICE_H
 
 #include <QtCore/qobject.h>
-#include <QtMediaservices/qmediaservice.h>
+#include <QtMediaServices/qmediaservice.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm
index 0b3505e..cf79622 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm
@@ -54,8 +54,8 @@
 #include "qt7movievideowidget.h"
 #include "qt7playermetadata.h"
 
-#include <QtMediaservices/qmediaplaylistnavigator.h>
-#include <QtMediaservices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylistnavigator.h>
+#include <QtMediaServices/qmediaplaylist.h>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h
index 780776c..2450cf8 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h
@@ -45,8 +45,8 @@
 #include <QtCore/qobject.h>
 #include <QtGui/qmacdefines_mac.h>
 
-#include <QtMediaservices/qmediaplayercontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 
 QT_BEGIN_HEADER
diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
index 863b3c8..024f7b0 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
@@ -49,7 +49,7 @@
 #include "qt7videooutputcontrol.h"
 
 #include <QtNetwork/qnetworkcookie.h>
-#include <QtMediaservices/qmediaplaylistnavigator.h>
+#include <QtMediaServices/qmediaplaylistnavigator.h>
 
 #include <CoreFoundation/CoreFoundation.h>
 #include <Foundation/Foundation.h>
diff --git a/src/plugins/mediaservices/qt7/qt7movieviewoutput.h b/src/plugins/mediaservices/qt7/qt7movieviewoutput.h
index ed3eebc..d6bfd14 100644
--- a/src/plugins/mediaservices/qt7/qt7movieviewoutput.h
+++ b/src/plugins/mediaservices/qt7/qt7movieviewoutput.h
@@ -44,8 +44,8 @@
 
 #include <QtCore/qobject.h>
 
-#include <QtMediaservices/qvideowindowcontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 #include <QtGui/qmacdefines_mac.h>
 #include "qt7videooutputcontrol.h"
diff --git a/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h b/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h
index 334ea6a..fa4db4d 100644
--- a/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h
+++ b/src/plugins/mediaservices/qt7/qt7movieviewrenderer.h
@@ -45,8 +45,8 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qmutex.h>
 
-#include <QtMediaservices/qvideowindowcontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 #include <QtGui/qmacdefines_mac.h>
 #include "qt7videooutputcontrol.h"
diff --git a/src/plugins/mediaservices/qt7/qt7serviceplugin.h b/src/plugins/mediaservices/qt7/qt7serviceplugin.h
index 7e8acf9..3871e10 100644
--- a/src/plugins/mediaservices/qt7/qt7serviceplugin.h
+++ b/src/plugins/mediaservices/qt7/qt7serviceplugin.h
@@ -43,7 +43,7 @@
 #ifndef QT7SERVICEPLUGIN_H
 #define QT7SERVICEPLUGIN_H
 
-#include <QtMediaservices/qmediaserviceproviderplugin.h>
+#include <QtMediaServices/qmediaserviceproviderplugin.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/plugins/mediaservices/qt7/qt7serviceplugin.mm b/src/plugins/mediaservices/qt7/qt7serviceplugin.mm
index fe4ca44..92b472f 100644
--- a/src/plugins/mediaservices/qt7/qt7serviceplugin.mm
+++ b/src/plugins/mediaservices/qt7/qt7serviceplugin.mm
@@ -45,7 +45,7 @@
 #include "qt7serviceplugin.h"
 #include "qt7playerservice.h"
 
-#include <QtMediaservices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h b/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h
index 39a13ee..76066ba 100644
--- a/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h
+++ b/src/plugins/mediaservices/qt7/qt7videooutputcontrol.h
@@ -45,11 +45,11 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qsize.h>
 
-#include <QtMediaservices/qvideooutputcontrol.h>
-#include <QtMediaservices/qvideowindowcontrol.h>
-#include <QtMediaservices/qvideowidgetcontrol.h>
-#include <QtMediaservices/qvideorenderercontrol.h>
-#include <QtMediaservices/qmediaplayer.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
+#include <QtMediaServices/qvideowidgetcontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 #include <QtGui/qmacdefines_mac.h>
 
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 2afc94b..d803e74 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -1788,10 +1788,10 @@ bool Configure::displayHelp()
         desc("MULTIMEDIA", "yes","-multimedia",         "Compile in multimedia module");
         desc("AUDIO_BACKEND", "no","-no-audio-backend", "Do not compile in the platform audio backend into QtMultimedia");
         desc("AUDIO_BACKEND", "yes","-audio-backend",   "Compile in the platform audio backend into QtMultimedia");
-        desc("MEDIASERVICES", "no", "-no-mediaservices","Do not compile the QtMediaservices module");
-        desc("MEDIASERVICES", "yes","-mediaservices",   "Compile in QtMediaservices module");
-        desc("MEDIA_BACKEND", "no","-no-media-backend", "Do not compile in the platform-specific QtMediaservices media service.");
-        desc("MEDIA_BACKEND", "yes","-media-backend",   "Compile in the platform-specific QtMediaservices media service.");
+        desc("MEDIASERVICES", "no", "-no-mediaservices","Do not compile the QtMediaServices module");
+        desc("MEDIASERVICES", "yes","-mediaservices",   "Compile in QtMediaServices module");
+        desc("MEDIA_BACKEND", "no","-no-media-backend", "Do not compile in the platform-specific QtMediaServices media service.");
+        desc("MEDIA_BACKEND", "yes","-media-backend",   "Compile in the platform-specific QtMediaServices media service.");
         desc("WEBKIT", "no",    "-no-webkit",           "Do not compile in the WebKit module");
         desc("WEBKIT", "yes",   "-webkit",              "Compile in the WebKit module (WebKit is built if a decent C++ compiler is used.)");
         desc("SCRIPT", "no",    "-no-script",           "Do not build the QtScript module.");
@@ -3347,7 +3347,7 @@ void Configure::displayConfig()
     cout << "QtXmlPatterns support......." << dictionary[ "XMLPATTERNS" ] << endl;
     cout << "Phonon support.............." << dictionary[ "PHONON" ] << endl;
     cout << "QtMultimedia support........" << dictionary[ "MULTIMEDIA" ] << endl;
-    cout << "QtMediaservices support....." << dictionary[ "MEDIASERVICES" ] << endl;
+    cout << "QtMediaServices support....." << dictionary[ "MEDIASERVICES" ] << endl;
     cout << "WebKit support.............." << dictionary[ "WEBKIT" ] << endl;
     cout << "Declarative support........." << dictionary[ "DECLARATIVE" ] << endl;
     cout << "QtScript support............" << dictionary[ "SCRIPT" ] << endl;
-- 
cgit v0.12


From 690e0f27ae23189200d98e9300b63914d8e1fe30 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Fri, 16 Apr 2010 12:24:01 +1000
Subject: WebKit; build with change to mediaservices.

Reviewed-by: Dmytro Poplavskiy
---
 .../webkit/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp    | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
index 66ffe23..5db94a8 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
@@ -77,7 +77,7 @@ MediaPlayer::SupportsType MediaPlayerPrivate::supportsType(const String& mime, c
     if (!mime.startsWith("audio/") && !mime.startsWith("video/"))
         return MediaPlayer::IsNotSupported;
 
-    if (QMediaPlayer::hasSupport(mime, QStringList(codec)) >= QtMultimedia::ProbablySupported)
+    if (QMediaPlayer::hasSupport(mime, QStringList(codec)) >= QtMediaServices::ProbablySupported)
         return MediaPlayer::IsSupported;
 
     return MediaPlayer::MayBeSupported;
@@ -344,8 +344,8 @@ unsigned MediaPlayerPrivate::bytesLoaded() const
 
 unsigned MediaPlayerPrivate::totalBytes() const
 {
-    if (m_mediaPlayer->availableMetaData().contains(QtMultimedia::Size))
-        return m_mediaPlayer->metaData(QtMultimedia::Size).toInt();
+    if (m_mediaPlayer->availableMetaData().contains(QtMediaServices::Size))
+        return m_mediaPlayer->metaData(QtMediaServices::Size).toInt();
 
     return 100;
 }
-- 
cgit v0.12


From 2a26cf1a76c954f8e619b24d61650a0adf655551 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Fri, 16 Apr 2010 12:53:44 +1000
Subject: Fixed configure check for gstreamer.

Gstreamer should be detected not only when phonon or mediaservices
are enabled, but also when they are not disabled.

Reviewed-by: Justin McPherson
---
 configure | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/configure b/configure
index fc26a7a..fa7c018 100755
--- a/configure
+++ b/configure
@@ -5196,7 +5196,7 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
     fi
 
     # Auto-detect GStreamer support (needed for both Phonon & QtMultimedia)
-    if [ "$CFG_PHONON" = "yes" -o "$CFG_MEDIASERVICES" = "yes" ]; then
+    if [ "$CFG_PHONON" != "no" -o "$CFG_MEDIASERVICES" != "no" ]; then
         if [ "$CFG_GLIB" = "yes" -a "$CFG_GSTREAMER" != "no" ]; then
             if [ -n "$PKG_CONFIG" ]; then
                 QT_CFLAGS_GSTREAMER=`$PKG_CONFIG --cflags gstreamer-0.10 gstreamer-plugins-base-0.10 2>/dev/null`
-- 
cgit v0.12


From 6514ecd97cb455082b6e6a3521dee7c623e6393d Mon Sep 17 00:00:00 2001
From: Andrew den Exter <andrew.den-exter@nokia.com>
Date: Fri, 16 Apr 2010 13:06:10 +1000
Subject: Add EXPORT defines for QtMediaServices library.

Reviewed-by: Justin McPherson
---
 src/corelib/global/qglobal.h                             |  8 ++++++++
 src/multimedia/mediaservices/base/qgraphicsvideoitem.h   |  2 +-
 .../mediaservices/base/qlocalmediaplaylistprovider.h     |  2 +-
 src/multimedia/mediaservices/base/qmediacontent.h        |  2 +-
 src/multimedia/mediaservices/base/qmediacontrol.h        |  2 +-
 src/multimedia/mediaservices/base/qmediaobject.h         |  2 +-
 src/multimedia/mediaservices/base/qmediaplaylist.h       |  2 +-
 .../mediaservices/base/qmediaplaylistcontrol.h           |  2 +-
 .../mediaservices/base/qmediaplaylistioplugin.h          |  8 ++++----
 .../mediaservices/base/qmediaplaylistnavigator.h         |  2 +-
 .../mediaservices/base/qmediaplaylistprovider.h          |  2 +-
 src/multimedia/mediaservices/base/qmediaresource.h       |  2 +-
 src/multimedia/mediaservices/base/qmediaservice.h        |  2 +-
 .../mediaservices/base/qmediaserviceprovider.h           |  4 ++--
 .../mediaservices/base/qmediaserviceproviderplugin.h     | 10 +++++-----
 src/multimedia/mediaservices/base/qmediatimerange.h      | 16 ++++++++--------
 src/multimedia/mediaservices/base/qmetadatacontrol.h     |  2 +-
 .../mediaservices/base/qpaintervideosurface_p.h          |  2 +-
 src/multimedia/mediaservices/base/qvideodevicecontrol.h  |  2 +-
 src/multimedia/mediaservices/base/qvideooutputcontrol.h  |  2 +-
 .../mediaservices/base/qvideorenderercontrol.h           |  2 +-
 src/multimedia/mediaservices/base/qvideowidget.h         |  2 +-
 src/multimedia/mediaservices/base/qvideowidgetcontrol.h  |  2 +-
 src/multimedia/mediaservices/base/qvideowindowcontrol.h  |  2 +-
 src/multimedia/mediaservices/effects/qsoundeffect_p.h    |  2 +-
 src/multimedia/mediaservices/playback/qmediaplayer.h     |  2 +-
 .../mediaservices/playback/qmediaplayercontrol.h         |  2 +-
 27 files changed, 49 insertions(+), 41 deletions(-)

diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 3118f8f..8359637 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -1243,6 +1243,11 @@ class QDataStream;
 #    else
 #      define Q_MULTIMEDIA_EXPORT Q_DECL_IMPORT
 #    endif
+#    if  defined(QT_BUILD_MEDIASERVICES_LIB)
+#      define Q_MEDIASERVICES_EXPORT Q_DECL_EXPORT
+#    else
+#      define Q_MEDIASERVICES_EXPORT Q_DECL_IMPORT
+#    endif
 #    if defined(QT_BUILD_OPENVG_LIB)
 #      define Q_OPENVG_EXPORT Q_DECL_EXPORT
 #    else
@@ -1289,6 +1294,7 @@ class QDataStream;
 #    define Q_CANVAS_EXPORT Q_DECL_IMPORT
 #    define Q_OPENGL_EXPORT Q_DECL_IMPORT
 #    define Q_MULTIMEDIA_EXPORT Q_DECL_IMPORT
+#    define Q_MEDIASERVICES_EXPORT Q_DECL_IMPORT
 #    define Q_OPENVG_EXPORT Q_DECL_IMPORT
 #    define Q_XML_EXPORT Q_DECL_IMPORT
 #    define Q_XMLPATTERNS_EXPORT Q_DECL_IMPORT
@@ -1317,6 +1323,7 @@ class QDataStream;
 #    define Q_DECLARATIVE_EXPORT Q_DECL_EXPORT
 #    define Q_OPENGL_EXPORT Q_DECL_EXPORT
 #    define Q_MULTIMEDIA_EXPORT Q_DECL_EXPORT
+#    define Q_MEDIASERVICES_EXPORT Q_DECL_EXPORT
 #    define Q_OPENVG_EXPORT Q_DECL_EXPORT
 #    define Q_XML_EXPORT Q_DECL_EXPORT
 #    define Q_XMLPATTERNS_EXPORT Q_DECL_EXPORT
@@ -1332,6 +1339,7 @@ class QDataStream;
 #    define Q_DECLARATIVE_EXPORT
 #    define Q_OPENGL_EXPORT
 #    define Q_MULTIMEDIA_EXPORT
+#    define Q_MEDIASERVICES_EXPORT
 #    define Q_XML_EXPORT
 #    define Q_XMLPATTERNS_EXPORT
 #    define Q_SCRIPT_EXPORT
diff --git a/src/multimedia/mediaservices/base/qgraphicsvideoitem.h b/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
index bb41075..679b353 100644
--- a/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
+++ b/src/multimedia/mediaservices/base/qgraphicsvideoitem.h
@@ -57,7 +57,7 @@ QT_MODULE(Multimedia)
 class QVideoSurfaceFormat;
 
 class QGraphicsVideoItemPrivate;
-class Q_MULTIMEDIA_EXPORT QGraphicsVideoItem : public QGraphicsObject
+class Q_MEDIASERVICES_EXPORT QGraphicsVideoItem : public QGraphicsObject
 {
     Q_OBJECT
     Q_PROPERTY(QMediaObject* mediaObject READ mediaObject WRITE setMediaObject)
diff --git a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
index e6b6dca..4dd53df 100644
--- a/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
+++ b/src/multimedia/mediaservices/base/qlocalmediaplaylistprovider.h
@@ -52,7 +52,7 @@ QT_MODULE(Multimedia)
 
 
 class QLocalMediaPlaylistProviderPrivate;
-class Q_MULTIMEDIA_EXPORT QLocalMediaPlaylistProvider : public QMediaPlaylistProvider
+class Q_MEDIASERVICES_EXPORT QLocalMediaPlaylistProvider : public QMediaPlaylistProvider
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qmediacontent.h b/src/multimedia/mediaservices/base/qmediacontent.h
index 47fa6e1..c00e443 100644
--- a/src/multimedia/mediaservices/base/qmediacontent.h
+++ b/src/multimedia/mediaservices/base/qmediacontent.h
@@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE
 QT_MODULE(Multimedia)
 
 class QMediaContentPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaContent
+class Q_MEDIASERVICES_EXPORT QMediaContent
 {
 public:
     QMediaContent();
diff --git a/src/multimedia/mediaservices/base/qmediacontrol.h b/src/multimedia/mediaservices/base/qmediacontrol.h
index 819c959..941c004 100644
--- a/src/multimedia/mediaservices/base/qmediacontrol.h
+++ b/src/multimedia/mediaservices/base/qmediacontrol.h
@@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE
 QT_MODULE(Multimedia)
 
 class QMediaControlPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaControl : public QObject
+class Q_MEDIASERVICES_EXPORT QMediaControl : public QObject
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qmediaobject.h b/src/multimedia/mediaservices/base/qmediaobject.h
index 70b4f33..067bb56 100644
--- a/src/multimedia/mediaservices/base/qmediaobject.h
+++ b/src/multimedia/mediaservices/base/qmediaobject.h
@@ -56,7 +56,7 @@ QT_MODULE(Multimedia)
 class QMediaService;
 
 class QMediaObjectPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaObject : public QObject
+class Q_MEDIASERVICES_EXPORT QMediaObject : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(int notifyInterval READ notifyInterval WRITE setNotifyInterval NOTIFY notifyIntervalChanged)
diff --git a/src/multimedia/mediaservices/base/qmediaplaylist.h b/src/multimedia/mediaservices/base/qmediaplaylist.h
index 9125fd6..6cae7c5 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylist.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylist.h
@@ -57,7 +57,7 @@ QT_MODULE(Multimedia)
 class QMediaPlaylistProvider;
 
 class QMediaPlaylistPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlaylist : public QObject
+class Q_MEDIASERVICES_EXPORT QMediaPlaylist : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode NOTIFY playbackModeChanged)
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
index 36f00ae..2dc4575 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistcontrol.h
@@ -56,7 +56,7 @@ QT_MODULE(Multimedia)
 
 class QMediaPlaylistProvider;
 
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QMediaPlaylistControl : public QMediaControl
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
index 5fc10f7..ed8e832 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistioplugin.h
@@ -62,7 +62,7 @@ class QByteArray;
 class QIODevice;
 class QStringList;
 
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistReader
+class Q_MEDIASERVICES_EXPORT QMediaPlaylistReader
 {
 public:
     virtual ~QMediaPlaylistReader();
@@ -72,7 +72,7 @@ public:
     virtual void close() = 0;
 };
 
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistWriter
+class Q_MEDIASERVICES_EXPORT QMediaPlaylistWriter
 {
 public:
     virtual ~QMediaPlaylistWriter();
@@ -81,7 +81,7 @@ public:
     virtual void close() = 0;
 };
 
-struct Q_MULTIMEDIA_EXPORT QMediaPlaylistIOInterface : public QFactoryInterface
+struct Q_MEDIASERVICES_EXPORT QMediaPlaylistIOInterface : public QFactoryInterface
 {
     virtual bool canRead(QIODevice *device, const QByteArray &format = QByteArray() ) const = 0;
     virtual bool canRead(const QUrl& location, const QByteArray &format = QByteArray()) const = 0;
@@ -97,7 +97,7 @@ struct Q_MULTIMEDIA_EXPORT QMediaPlaylistIOInterface : public QFactoryInterface
 #define QMediaPlaylistIOInterface_iid "com.nokia.Qt.QMediaPlaylistIOInterface"
 Q_DECLARE_INTERFACE(QMediaPlaylistIOInterface, QMediaPlaylistIOInterface_iid);
 
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistIOPlugin : public QObject, public QMediaPlaylistIOInterface
+class Q_MEDIASERVICES_EXPORT QMediaPlaylistIOPlugin : public QObject, public QMediaPlaylistIOInterface
 {
     Q_OBJECT
     Q_INTERFACES(QMediaPlaylistIOInterface:QFactoryInterface)
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
index 6cb9d9c..42c76f9 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistnavigator.h
@@ -56,7 +56,7 @@ QT_MODULE(Multimedia)
 
 
 class QMediaPlaylistNavigatorPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistNavigator : public QObject
+class Q_MEDIASERVICES_EXPORT QMediaPlaylistNavigator : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode NOTIFY playbackModeChanged)
diff --git a/src/multimedia/mediaservices/base/qmediaplaylistprovider.h b/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
index 31e6d5f..c68ed89 100644
--- a/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
+++ b/src/multimedia/mediaservices/base/qmediaplaylistprovider.h
@@ -58,7 +58,7 @@ class QString;
 
 
 class QMediaPlaylistProviderPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlaylistProvider : public QObject
+class Q_MEDIASERVICES_EXPORT QMediaPlaylistProvider : public QObject
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qmediaresource.h b/src/multimedia/mediaservices/base/qmediaresource.h
index 5c381ba..0ecf008 100644
--- a/src/multimedia/mediaservices/base/qmediaresource.h
+++ b/src/multimedia/mediaservices/base/qmediaresource.h
@@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE
 QT_MODULE(Multimedia)
 
 
-class Q_MULTIMEDIA_EXPORT QMediaResource
+class Q_MEDIASERVICES_EXPORT QMediaResource
 {
 public:
     QMediaResource();
diff --git a/src/multimedia/mediaservices/base/qmediaservice.h b/src/multimedia/mediaservices/base/qmediaservice.h
index 3963348..5df3fd7 100644
--- a/src/multimedia/mediaservices/base/qmediaservice.h
+++ b/src/multimedia/mediaservices/base/qmediaservice.h
@@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE
 QT_MODULE(Multimedia)
 
 class QMediaServicePrivate;
-class Q_MULTIMEDIA_EXPORT QMediaService : public QObject
+class Q_MEDIASERVICES_EXPORT QMediaService : public QObject
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qmediaserviceprovider.h b/src/multimedia/mediaservices/base/qmediaserviceprovider.h
index 24d2078..eeea5d2 100644
--- a/src/multimedia/mediaservices/base/qmediaserviceprovider.h
+++ b/src/multimedia/mediaservices/base/qmediaserviceprovider.h
@@ -57,7 +57,7 @@ QT_MODULE(Multimedia)
 class QMediaService;
 
 class QMediaServiceProviderHintPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaServiceProviderHint
+class Q_MEDIASERVICES_EXPORT QMediaServiceProviderHint
 {
 public:
     enum Type { Null, ContentType, Device, SupportedFeatures };
@@ -98,7 +98,7 @@ private:
     QSharedDataPointer<QMediaServiceProviderHintPrivate> d;
 };
 
-class Q_MULTIMEDIA_EXPORT QMediaServiceProvider : public QObject
+class Q_MEDIASERVICES_EXPORT QMediaServiceProvider : public QObject
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h b/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
index ab55f84..ca25f91 100644
--- a/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
+++ b/src/multimedia/mediaservices/base/qmediaserviceproviderplugin.h
@@ -61,7 +61,7 @@ QT_MODULE(Multimedia)
 class QMediaService;
 
 
-struct Q_MULTIMEDIA_EXPORT QMediaServiceProviderFactoryInterface : public QFactoryInterface
+struct Q_MEDIASERVICES_EXPORT QMediaServiceProviderFactoryInterface : public QFactoryInterface
 {
     virtual QStringList keys() const = 0;
     virtual QMediaService* create(QString const& key) = 0;
@@ -73,7 +73,7 @@ struct Q_MULTIMEDIA_EXPORT QMediaServiceProviderFactoryInterface : public QFacto
 Q_DECLARE_INTERFACE(QMediaServiceProviderFactoryInterface, QMediaServiceProviderFactoryInterface_iid)
 
 
-struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedFormatsInterface
+struct Q_MEDIASERVICES_EXPORT QMediaServiceSupportedFormatsInterface
 {
     virtual ~QMediaServiceSupportedFormatsInterface() {}
     virtual QtMediaServices::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const = 0;
@@ -85,7 +85,7 @@ struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedFormatsInterface
 Q_DECLARE_INTERFACE(QMediaServiceSupportedFormatsInterface, QMediaServiceSupportedFormatsInterface_iid)
 
 
-struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedDevicesInterface
+struct Q_MEDIASERVICES_EXPORT QMediaServiceSupportedDevicesInterface
 {
     virtual ~QMediaServiceSupportedDevicesInterface() {}
     virtual QList<QByteArray> devices(const QByteArray &service) const = 0;
@@ -97,7 +97,7 @@ struct Q_MULTIMEDIA_EXPORT QMediaServiceSupportedDevicesInterface
 Q_DECLARE_INTERFACE(QMediaServiceSupportedDevicesInterface, QMediaServiceSupportedDevicesInterface_iid)
 
 
-struct Q_MULTIMEDIA_EXPORT QMediaServiceFeaturesInterface
+struct Q_MEDIASERVICES_EXPORT QMediaServiceFeaturesInterface
 {
     virtual ~QMediaServiceFeaturesInterface() {}
     virtual QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const = 0;
@@ -107,7 +107,7 @@ struct Q_MULTIMEDIA_EXPORT QMediaServiceFeaturesInterface
     "com.nokia.Qt.QMediaServiceFeaturesInterface/1.0"
 Q_DECLARE_INTERFACE(QMediaServiceFeaturesInterface, QMediaServiceFeaturesInterface_iid)
 
-class Q_MULTIMEDIA_EXPORT QMediaServiceProviderPlugin : public QObject, public QMediaServiceProviderFactoryInterface
+class Q_MEDIASERVICES_EXPORT QMediaServiceProviderPlugin : public QObject, public QMediaServiceProviderFactoryInterface
 {
     Q_OBJECT
     Q_INTERFACES(QMediaServiceProviderFactoryInterface:QFactoryInterface)
diff --git a/src/multimedia/mediaservices/base/qmediatimerange.h b/src/multimedia/mediaservices/base/qmediatimerange.h
index 33b2f27..5983db2 100644
--- a/src/multimedia/mediaservices/base/qmediatimerange.h
+++ b/src/multimedia/mediaservices/base/qmediatimerange.h
@@ -54,7 +54,7 @@ QT_MODULE(Multimedia)
 
 class QMediaTimeRangePrivate;
 
-class Q_MULTIMEDIA_EXPORT QMediaTimeInterval
+class Q_MEDIASERVICES_EXPORT QMediaTimeInterval
 {
 public:
     QMediaTimeInterval();
@@ -78,10 +78,10 @@ private:
     qint64 e;
 };
 
-Q_MULTIMEDIA_EXPORT bool operator==(const QMediaTimeInterval&, const QMediaTimeInterval&);
-Q_MULTIMEDIA_EXPORT bool operator!=(const QMediaTimeInterval&, const QMediaTimeInterval&);
+Q_MEDIASERVICES_EXPORT bool operator==(const QMediaTimeInterval&, const QMediaTimeInterval&);
+Q_MEDIASERVICES_EXPORT bool operator!=(const QMediaTimeInterval&, const QMediaTimeInterval&);
 
-class Q_MULTIMEDIA_EXPORT QMediaTimeRange
+class Q_MEDIASERVICES_EXPORT QMediaTimeRange
 {
 public:
 
@@ -122,10 +122,10 @@ private:
     QSharedDataPointer<QMediaTimeRangePrivate> d;
 };
 
-Q_MULTIMEDIA_EXPORT bool operator==(const QMediaTimeRange&, const QMediaTimeRange&);
-Q_MULTIMEDIA_EXPORT bool operator!=(const QMediaTimeRange&, const QMediaTimeRange&);
-Q_MULTIMEDIA_EXPORT QMediaTimeRange operator+(const QMediaTimeRange&, const QMediaTimeRange&);
-Q_MULTIMEDIA_EXPORT QMediaTimeRange operator-(const QMediaTimeRange&, const QMediaTimeRange&);
+Q_MEDIASERVICES_EXPORT bool operator==(const QMediaTimeRange&, const QMediaTimeRange&);
+Q_MEDIASERVICES_EXPORT bool operator!=(const QMediaTimeRange&, const QMediaTimeRange&);
+Q_MEDIASERVICES_EXPORT QMediaTimeRange operator+(const QMediaTimeRange&, const QMediaTimeRange&);
+Q_MEDIASERVICES_EXPORT QMediaTimeRange operator-(const QMediaTimeRange&, const QMediaTimeRange&);
 
 
 QT_END_NAMESPACE
diff --git a/src/multimedia/mediaservices/base/qmetadatacontrol.h b/src/multimedia/mediaservices/base/qmetadatacontrol.h
index e91c88b..48206fa 100644
--- a/src/multimedia/mediaservices/base/qmetadatacontrol.h
+++ b/src/multimedia/mediaservices/base/qmetadatacontrol.h
@@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE
 
 QT_MODULE(Multimedia)
 
-class Q_MULTIMEDIA_EXPORT QMetaDataControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QMetaDataControl : public QMediaControl
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qpaintervideosurface_p.h b/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
index 20628c4..07b7e01 100644
--- a/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
+++ b/src/multimedia/mediaservices/base/qpaintervideosurface_p.h
@@ -89,7 +89,7 @@ public:
     virtual void updateColors(int brightness, int contrast, int hue, int saturation) = 0;
 };
 
-class Q_MULTIMEDIA_EXPORT QPainterVideoSurface : public QAbstractVideoSurface
+class Q_MEDIASERVICES_EXPORT QPainterVideoSurface : public QAbstractVideoSurface
 {
     Q_OBJECT
 public:
diff --git a/src/multimedia/mediaservices/base/qvideodevicecontrol.h b/src/multimedia/mediaservices/base/qvideodevicecontrol.h
index b86a35c..0b9235b 100644
--- a/src/multimedia/mediaservices/base/qvideodevicecontrol.h
+++ b/src/multimedia/mediaservices/base/qvideodevicecontrol.h
@@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE
 
 QT_MODULE(Multimedia)
 
-class Q_MULTIMEDIA_EXPORT QVideoDeviceControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QVideoDeviceControl : public QMediaControl
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qvideooutputcontrol.h b/src/multimedia/mediaservices/base/qvideooutputcontrol.h
index ad69911..f87bb3c 100644
--- a/src/multimedia/mediaservices/base/qvideooutputcontrol.h
+++ b/src/multimedia/mediaservices/base/qvideooutputcontrol.h
@@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE
 QT_MODULE(Multimedia)
 
 
-class Q_MULTIMEDIA_EXPORT QVideoOutputControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QVideoOutputControl : public QMediaControl
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qvideorenderercontrol.h b/src/multimedia/mediaservices/base/qvideorenderercontrol.h
index 29a66ea..28e3d85 100644
--- a/src/multimedia/mediaservices/base/qvideorenderercontrol.h
+++ b/src/multimedia/mediaservices/base/qvideorenderercontrol.h
@@ -53,7 +53,7 @@ QT_MODULE(Multimedia)
 
 class QAbstractVideoSurface;
 
-class Q_MULTIMEDIA_EXPORT QVideoRendererControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QVideoRendererControl : public QMediaControl
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qvideowidget.h b/src/multimedia/mediaservices/base/qvideowidget.h
index 8033d40..3722857 100644
--- a/src/multimedia/mediaservices/base/qvideowidget.h
+++ b/src/multimedia/mediaservices/base/qvideowidget.h
@@ -55,7 +55,7 @@ QT_MODULE(Multimedia)
 class QMediaObject;
 
 class QVideoWidgetPrivate;
-class Q_MULTIMEDIA_EXPORT QVideoWidget : public QWidget
+class Q_MEDIASERVICES_EXPORT QVideoWidget : public QWidget
 {
     Q_OBJECT
     Q_PROPERTY(QMediaObject* mediaObject READ mediaObject WRITE setMediaObject)
diff --git a/src/multimedia/mediaservices/base/qvideowidgetcontrol.h b/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
index 1fe43cc..1013beb 100644
--- a/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
+++ b/src/multimedia/mediaservices/base/qvideowidgetcontrol.h
@@ -57,7 +57,7 @@ QT_MODULE(Multimedia)
 
 class QVideoWidgetControlPrivate;
 
-class Q_MULTIMEDIA_EXPORT QVideoWidgetControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QVideoWidgetControl : public QMediaControl
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/base/qvideowindowcontrol.h b/src/multimedia/mediaservices/base/qvideowindowcontrol.h
index 74c1786..47ba520 100644
--- a/src/multimedia/mediaservices/base/qvideowindowcontrol.h
+++ b/src/multimedia/mediaservices/base/qvideowindowcontrol.h
@@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE
 QT_MODULE(Multimedia)
 
 
-class Q_MULTIMEDIA_EXPORT QVideoWindowControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QVideoWindowControl : public QMediaControl
 {
     Q_OBJECT
 
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect_p.h b/src/multimedia/mediaservices/effects/qsoundeffect_p.h
index 419e4f8..64ddb77 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect_p.h
+++ b/src/multimedia/mediaservices/effects/qsoundeffect_p.h
@@ -63,7 +63,7 @@ QT_BEGIN_HEADER
 QT_BEGIN_NAMESPACE
 
 class QSoundEffectPrivate;
-class Q_MULTIMEDIA_EXPORT QSoundEffect : public QObject
+class Q_MEDIASERVICES_EXPORT QSoundEffect : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
diff --git a/src/multimedia/mediaservices/playback/qmediaplayer.h b/src/multimedia/mediaservices/playback/qmediaplayer.h
index be66a63..d75c58a 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayer.h
+++ b/src/multimedia/mediaservices/playback/qmediaplayer.h
@@ -57,7 +57,7 @@ QT_MODULE(Multimedia)
 class QMediaPlaylist;
 
 class QMediaPlayerPrivate;
-class Q_MULTIMEDIA_EXPORT QMediaPlayer : public QMediaObject
+class Q_MEDIASERVICES_EXPORT QMediaPlayer : public QMediaObject
 {
     Q_OBJECT
     Q_PROPERTY(QMediaContent media READ media WRITE setMedia NOTIFY mediaChanged)
diff --git a/src/multimedia/mediaservices/playback/qmediaplayercontrol.h b/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
index 25bc2f5..7a3c24e 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
+++ b/src/multimedia/mediaservices/playback/qmediaplayercontrol.h
@@ -58,7 +58,7 @@ QT_MODULE(Multimedia)
 
 class QMediaPlaylist;
 
-class Q_MULTIMEDIA_EXPORT QMediaPlayerControl : public QMediaControl
+class Q_MEDIASERVICES_EXPORT QMediaPlayerControl : public QMediaControl
 {
     Q_OBJECT
 
-- 
cgit v0.12


From 9471428742ba59dbb174fc275742052e4bb629ff Mon Sep 17 00:00:00 2001
From: Andrew den Exter <andrew.den-exter@nokia.com>
Date: Fri, 16 Apr 2010 16:03:10 +1000
Subject: Fix compile errors in Direct Show media service.

The service links against the multimedia library in addition to the
mediaservices libarary, and QAbstractVideoSurface is defined in
QtMultimedia, no QtMediaServices.
---
 src/plugins/mediaservices/directshow/directshow.pro                     | 2 +-
 .../mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/plugins/mediaservices/directshow/directshow.pro b/src/plugins/mediaservices/directshow/directshow.pro
index 973c2b1..065e391 100644
--- a/src/plugins/mediaservices/directshow/directshow.pro
+++ b/src/plugins/mediaservices/directshow/directshow.pro
@@ -1,7 +1,7 @@
 TARGET = qdsengine
 include(../../qpluginbase.pri)
 
-QT += mediaservices
+QT += multimedia mediaservices
 
 HEADERS += dsserviceplugin.h
 SOURCES += dsserviceplugin.cpp
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h b/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
index 1b3776d..06dc31c 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/mediasamplevideobuffer.h
@@ -42,7 +42,7 @@
 #ifndef MEDIASAMPLEVIDEOBUFFER_H
 #define MEDIASAMPLEVIDEOBUFFER_H
 
-#include <QtMediaServices/qabstractvideobuffer.h>
+#include <QtMultimedia/qabstractvideobuffer.h>
 
 #include <dshow.h>
 
-- 
cgit v0.12


From 095d5b74e571c71e04cc98ba4d372e3c5c2b1f9c Mon Sep 17 00:00:00 2001
From: Espen Riskedal <espenr@trolltech.com>
Date: Fri, 16 Apr 2010 15:51:28 +0200
Subject: Three fixes from Shane after QtMultimedia was split into two dlls.

Fix1: QtMultimedia to get .def files from the correct location

multimedia was split into 2 subdirectories, which means the general
purpose rule in qbase.pri no longer works.
Task-number: QTBUG-9983
Reviewed-by: Miikka Heikkinen

Fix2: Fix QtMultimedia .def files

As a result of the split of multimedia into two DLLs, made the following
changes:
1. Revert QtMultimediau.def to v4.6.2 (compatibility baseline)
2. Freeze QtMultimedia and QtMediaServices
This is compatible with 4.6.2, but not compatible with any previous 4.7
build.
Task-number: QTBUG-9983

Fix3: Add QtMediaServices.dll to Qt.sis

The new dll will now be installed by the symbian sis package.
Task-number: QTBUG-9983
Reviewed-by: Miikka Heikkinen
---
 src/multimedia/mediaservices/mediaservices.pro |   7 +-
 src/multimedia/multimedia/multimedia.pro       |   7 +-
 src/s60installs/bwins/QtMediaServicesu.def     | 673 ++++++++++++++++++++++++
 src/s60installs/bwins/QtMultimediau.def        | 686 +------------------------
 src/s60installs/eabi/QtMediaServicesu.def      | 674 ++++++++++++++++++++++++
 src/s60installs/eabi/QtMultimediau.def         | 682 +-----------------------
 src/s60installs/s60installs.pro                |   1 +
 7 files changed, 1370 insertions(+), 1360 deletions(-)
 create mode 100644 src/s60installs/bwins/QtMediaServicesu.def
 create mode 100644 src/s60installs/eabi/QtMediaServicesu.def

diff --git a/src/multimedia/mediaservices/mediaservices.pro b/src/multimedia/mediaservices/mediaservices.pro
index ef552e3..d5b0e4c 100644
--- a/src/multimedia/mediaservices/mediaservices.pro
+++ b/src/multimedia/mediaservices/mediaservices.pro
@@ -12,5 +12,10 @@ include(base/base.pri)
 include(playback/playback.pri)
 include(effects/effects.pri)
 
-symbian: TARGET.UID3 = 0x2001E631
+symbian: {
+    TARGET.UID3 = 0x2001E631
+    contains(CONFIG, def_files) {
+        DEF_FILE=../../s60installs
+    }
+}
 
diff --git a/src/multimedia/multimedia/multimedia.pro b/src/multimedia/multimedia/multimedia.pro
index 8d130bd..ee700b6 100644
--- a/src/multimedia/multimedia/multimedia.pro
+++ b/src/multimedia/multimedia/multimedia.pro
@@ -11,4 +11,9 @@ include(../../qbase.pri)
 include(audio/audio.pri)
 include(video/video.pri)
 
-symbian: TARGET.UID3 = 0x2001E627
+symbian: {
+    TARGET.UID3 = 0x2001E627
+    contains(CONFIG, def_files) {
+        DEF_FILE=../../s60installs
+    }
+}
diff --git a/src/s60installs/bwins/QtMediaServicesu.def b/src/s60installs/bwins/QtMediaServicesu.def
new file mode 100644
index 0000000..d674d12
--- /dev/null
+++ b/src/s60installs/bwins/QtMediaServicesu.def
@@ -0,0 +1,673 @@
+EXPORTS
+	??0QGraphicsVideoItem@@QAE@PAVQGraphicsItem@@@Z @ 1 NONAME ; QGraphicsVideoItem::QGraphicsVideoItem(class QGraphicsItem *)
+	??0QLocalMediaPlaylistProvider@@QAE@PAVQObject@@@Z @ 2 NONAME ; QLocalMediaPlaylistProvider::QLocalMediaPlaylistProvider(class QObject *)
+	??0QMediaContent@@QAE@ABV0@@Z @ 3 NONAME ; QMediaContent::QMediaContent(class QMediaContent const &)
+	??0QMediaContent@@QAE@ABV?$QList@VQMediaResource@@@@@Z @ 4 NONAME ; QMediaContent::QMediaContent(class QList<class QMediaResource> const &)
+	??0QMediaContent@@QAE@ABVQMediaResource@@@Z @ 5 NONAME ; QMediaContent::QMediaContent(class QMediaResource const &)
+	??0QMediaContent@@QAE@ABVQNetworkRequest@@@Z @ 6 NONAME ; QMediaContent::QMediaContent(class QNetworkRequest const &)
+	??0QMediaContent@@QAE@ABVQUrl@@@Z @ 7 NONAME ; QMediaContent::QMediaContent(class QUrl const &)
+	??0QMediaContent@@QAE@XZ @ 8 NONAME ; QMediaContent::QMediaContent(void)
+	??0QMediaControl@@IAE@AAVQMediaControlPrivate@@PAVQObject@@@Z @ 9 NONAME ; QMediaControl::QMediaControl(class QMediaControlPrivate &, class QObject *)
+	??0QMediaControl@@IAE@PAVQObject@@@Z @ 10 NONAME ; QMediaControl::QMediaControl(class QObject *)
+	??0QMediaObject@@IAE@AAVQMediaObjectPrivate@@PAVQObject@@PAVQMediaService@@@Z @ 11 NONAME ; QMediaObject::QMediaObject(class QMediaObjectPrivate &, class QObject *, class QMediaService *)
+	??0QMediaObject@@IAE@PAVQObject@@PAVQMediaService@@@Z @ 12 NONAME ; QMediaObject::QMediaObject(class QObject *, class QMediaService *)
+	??0QMediaPlayer@@QAE@PAVQObject@@V?$QFlags@W4Flag@QMediaPlayer@@@@PAVQMediaServiceProvider@@@Z @ 13 NONAME ; QMediaPlayer::QMediaPlayer(class QObject *, class QFlags<enum QMediaPlayer::Flag>, class QMediaServiceProvider *)
+	??0QMediaPlayerControl@@IAE@PAVQObject@@@Z @ 14 NONAME ; QMediaPlayerControl::QMediaPlayerControl(class QObject *)
+	??0QMediaPlaylist@@QAE@PAVQObject@@@Z @ 15 NONAME ; QMediaPlaylist::QMediaPlaylist(class QObject *)
+	??0QMediaPlaylistControl@@IAE@PAVQObject@@@Z @ 16 NONAME ; QMediaPlaylistControl::QMediaPlaylistControl(class QObject *)
+	??0QMediaPlaylistIOPlugin@@QAE@PAVQObject@@@Z @ 17 NONAME ; QMediaPlaylistIOPlugin::QMediaPlaylistIOPlugin(class QObject *)
+	??0QMediaPlaylistNavigator@@QAE@PAVQMediaPlaylistProvider@@PAVQObject@@@Z @ 18 NONAME ; QMediaPlaylistNavigator::QMediaPlaylistNavigator(class QMediaPlaylistProvider *, class QObject *)
+	??0QMediaPlaylistProvider@@IAE@AAVQMediaPlaylistProviderPrivate@@PAVQObject@@@Z @ 19 NONAME ; QMediaPlaylistProvider::QMediaPlaylistProvider(class QMediaPlaylistProviderPrivate &, class QObject *)
+	??0QMediaPlaylistProvider@@QAE@PAVQObject@@@Z @ 20 NONAME ; QMediaPlaylistProvider::QMediaPlaylistProvider(class QObject *)
+	??0QMediaResource@@QAE@ABV0@@Z @ 21 NONAME ; QMediaResource::QMediaResource(class QMediaResource const &)
+	??0QMediaResource@@QAE@ABVQNetworkRequest@@ABVQString@@@Z @ 22 NONAME ; QMediaResource::QMediaResource(class QNetworkRequest const &, class QString const &)
+	??0QMediaResource@@QAE@ABVQUrl@@ABVQString@@@Z @ 23 NONAME ; QMediaResource::QMediaResource(class QUrl const &, class QString const &)
+	??0QMediaResource@@QAE@XZ @ 24 NONAME ; QMediaResource::QMediaResource(void)
+	??0QMediaService@@IAE@AAVQMediaServicePrivate@@PAVQObject@@@Z @ 25 NONAME ; QMediaService::QMediaService(class QMediaServicePrivate &, class QObject *)
+	??0QMediaService@@IAE@PAVQObject@@@Z @ 26 NONAME ; QMediaService::QMediaService(class QObject *)
+	??0QMediaServiceProviderHint@@QAE@ABV0@@Z @ 27 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QMediaServiceProviderHint const &)
+	??0QMediaServiceProviderHint@@QAE@ABVQByteArray@@@Z @ 28 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QByteArray const &)
+	??0QMediaServiceProviderHint@@QAE@ABVQString@@ABVQStringList@@@Z @ 29 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QString const &, class QStringList const &)
+	??0QMediaServiceProviderHint@@QAE@V?$QFlags@W4Feature@QMediaServiceProviderHint@@@@@Z @ 30 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QFlags<enum QMediaServiceProviderHint::Feature>)
+	??0QMediaServiceProviderHint@@QAE@XZ @ 31 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(void)
+	??0QMediaTimeInterval@@QAE@ABV0@@Z @ 32 NONAME ; QMediaTimeInterval::QMediaTimeInterval(class QMediaTimeInterval const &)
+	??0QMediaTimeInterval@@QAE@XZ @ 33 NONAME ; QMediaTimeInterval::QMediaTimeInterval(void)
+	??0QMediaTimeInterval@@QAE@_J0@Z @ 34 NONAME ; QMediaTimeInterval::QMediaTimeInterval(long long, long long)
+	??0QMediaTimeRange@@QAE@ABV0@@Z @ 35 NONAME ; QMediaTimeRange::QMediaTimeRange(class QMediaTimeRange const &)
+	??0QMediaTimeRange@@QAE@ABVQMediaTimeInterval@@@Z @ 36 NONAME ; QMediaTimeRange::QMediaTimeRange(class QMediaTimeInterval const &)
+	??0QMediaTimeRange@@QAE@XZ @ 37 NONAME ; QMediaTimeRange::QMediaTimeRange(void)
+	??0QMediaTimeRange@@QAE@_J0@Z @ 38 NONAME ; QMediaTimeRange::QMediaTimeRange(long long, long long)
+	??0QMetaDataControl@@IAE@PAVQObject@@@Z @ 39 NONAME ; QMetaDataControl::QMetaDataControl(class QObject *)
+	??0QPainterVideoSurface@@QAE@PAVQObject@@@Z @ 40 NONAME ; QPainterVideoSurface::QPainterVideoSurface(class QObject *)
+	??0QSoundEffect@@QAE@PAVQObject@@@Z @ 41 NONAME ; QSoundEffect::QSoundEffect(class QObject *)
+	??0QVideoDeviceControl@@IAE@PAVQObject@@@Z @ 42 NONAME ; QVideoDeviceControl::QVideoDeviceControl(class QObject *)
+	??0QVideoOutputControl@@IAE@PAVQObject@@@Z @ 43 NONAME ; QVideoOutputControl::QVideoOutputControl(class QObject *)
+	??0QVideoRendererControl@@IAE@PAVQObject@@@Z @ 44 NONAME ; QVideoRendererControl::QVideoRendererControl(class QObject *)
+	??0QVideoWidget@@QAE@PAVQWidget@@@Z @ 45 NONAME ; QVideoWidget::QVideoWidget(class QWidget *)
+	??0QVideoWidgetControl@@IAE@PAVQObject@@@Z @ 46 NONAME ; QVideoWidgetControl::QVideoWidgetControl(class QObject *)
+	??0QVideoWindowControl@@IAE@PAVQObject@@@Z @ 47 NONAME ; QVideoWindowControl::QVideoWindowControl(class QObject *)
+	??1QGraphicsVideoItem@@UAE@XZ @ 48 NONAME ; QGraphicsVideoItem::~QGraphicsVideoItem(void)
+	??1QLocalMediaPlaylistProvider@@UAE@XZ @ 49 NONAME ; QLocalMediaPlaylistProvider::~QLocalMediaPlaylistProvider(void)
+	??1QMediaContent@@QAE@XZ @ 50 NONAME ; QMediaContent::~QMediaContent(void)
+	??1QMediaControl@@UAE@XZ @ 51 NONAME ; QMediaControl::~QMediaControl(void)
+	??1QMediaObject@@UAE@XZ @ 52 NONAME ; QMediaObject::~QMediaObject(void)
+	??1QMediaPlayer@@UAE@XZ @ 53 NONAME ; QMediaPlayer::~QMediaPlayer(void)
+	??1QMediaPlayerControl@@UAE@XZ @ 54 NONAME ; QMediaPlayerControl::~QMediaPlayerControl(void)
+	??1QMediaPlaylist@@UAE@XZ @ 55 NONAME ; QMediaPlaylist::~QMediaPlaylist(void)
+	??1QMediaPlaylistControl@@UAE@XZ @ 56 NONAME ; QMediaPlaylistControl::~QMediaPlaylistControl(void)
+	??1QMediaPlaylistIOInterface@@UAE@XZ @ 57 NONAME ; QMediaPlaylistIOInterface::~QMediaPlaylistIOInterface(void)
+	??1QMediaPlaylistIOPlugin@@UAE@XZ @ 58 NONAME ; QMediaPlaylistIOPlugin::~QMediaPlaylistIOPlugin(void)
+	??1QMediaPlaylistNavigator@@UAE@XZ @ 59 NONAME ; QMediaPlaylistNavigator::~QMediaPlaylistNavigator(void)
+	??1QMediaPlaylistProvider@@UAE@XZ @ 60 NONAME ; QMediaPlaylistProvider::~QMediaPlaylistProvider(void)
+	??1QMediaPlaylistReader@@UAE@XZ @ 61 NONAME ; QMediaPlaylistReader::~QMediaPlaylistReader(void)
+	??1QMediaPlaylistWriter@@UAE@XZ @ 62 NONAME ; QMediaPlaylistWriter::~QMediaPlaylistWriter(void)
+	??1QMediaResource@@QAE@XZ @ 63 NONAME ; QMediaResource::~QMediaResource(void)
+	??1QMediaService@@UAE@XZ @ 64 NONAME ; QMediaService::~QMediaService(void)
+	??1QMediaServiceFeaturesInterface@@UAE@XZ @ 65 NONAME ; QMediaServiceFeaturesInterface::~QMediaServiceFeaturesInterface(void)
+	??1QMediaServiceProvider@@UAE@XZ @ 66 NONAME ; QMediaServiceProvider::~QMediaServiceProvider(void)
+	??1QMediaServiceProviderHint@@QAE@XZ @ 67 NONAME ; QMediaServiceProviderHint::~QMediaServiceProviderHint(void)
+	??1QMediaServiceSupportedDevicesInterface@@UAE@XZ @ 68 NONAME ; QMediaServiceSupportedDevicesInterface::~QMediaServiceSupportedDevicesInterface(void)
+	??1QMediaServiceSupportedFormatsInterface@@UAE@XZ @ 69 NONAME ; QMediaServiceSupportedFormatsInterface::~QMediaServiceSupportedFormatsInterface(void)
+	??1QMediaTimeRange@@QAE@XZ @ 70 NONAME ; QMediaTimeRange::~QMediaTimeRange(void)
+	??1QMetaDataControl@@UAE@XZ @ 71 NONAME ; QMetaDataControl::~QMetaDataControl(void)
+	??1QPainterVideoSurface@@UAE@XZ @ 72 NONAME ; QPainterVideoSurface::~QPainterVideoSurface(void)
+	??1QSoundEffect@@UAE@XZ @ 73 NONAME ; QSoundEffect::~QSoundEffect(void)
+	??1QVideoDeviceControl@@UAE@XZ @ 74 NONAME ; QVideoDeviceControl::~QVideoDeviceControl(void)
+	??1QVideoOutputControl@@UAE@XZ @ 75 NONAME ; QVideoOutputControl::~QVideoOutputControl(void)
+	??1QVideoRendererControl@@UAE@XZ @ 76 NONAME ; QVideoRendererControl::~QVideoRendererControl(void)
+	??1QVideoWidget@@UAE@XZ @ 77 NONAME ; QVideoWidget::~QVideoWidget(void)
+	??1QVideoWidgetControl@@UAE@XZ @ 78 NONAME ; QVideoWidgetControl::~QVideoWidgetControl(void)
+	??1QVideoWindowControl@@UAE@XZ @ 79 NONAME ; QVideoWindowControl::~QVideoWindowControl(void)
+	??4QMediaContent@@QAEAAV0@ABV0@@Z @ 80 NONAME ; class QMediaContent & QMediaContent::operator=(class QMediaContent const &)
+	??4QMediaResource@@QAEAAV0@ABV0@@Z @ 81 NONAME ; class QMediaResource & QMediaResource::operator=(class QMediaResource const &)
+	??4QMediaServiceProviderHint@@QAEAAV0@ABV0@@Z @ 82 NONAME ; class QMediaServiceProviderHint & QMediaServiceProviderHint::operator=(class QMediaServiceProviderHint const &)
+	??4QMediaTimeRange@@QAEAAV0@ABV0@@Z @ 83 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator=(class QMediaTimeRange const &)
+	??4QMediaTimeRange@@QAEAAV0@ABVQMediaTimeInterval@@@Z @ 84 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator=(class QMediaTimeInterval const &)
+	??8@YA_NABVQMediaTimeInterval@@0@Z @ 85 NONAME ; bool operator==(class QMediaTimeInterval const &, class QMediaTimeInterval const &)
+	??8@YA_NABVQMediaTimeRange@@0@Z @ 86 NONAME ; bool operator==(class QMediaTimeRange const &, class QMediaTimeRange const &)
+	??8QMediaContent@@QBE_NABV0@@Z @ 87 NONAME ; bool QMediaContent::operator==(class QMediaContent const &) const
+	??8QMediaResource@@QBE_NABV0@@Z @ 88 NONAME ; bool QMediaResource::operator==(class QMediaResource const &) const
+	??8QMediaServiceProviderHint@@QBE_NABV0@@Z @ 89 NONAME ; bool QMediaServiceProviderHint::operator==(class QMediaServiceProviderHint const &) const
+	??9@YA_NABVQMediaTimeInterval@@0@Z @ 90 NONAME ; bool operator!=(class QMediaTimeInterval const &, class QMediaTimeInterval const &)
+	??9@YA_NABVQMediaTimeRange@@0@Z @ 91 NONAME ; bool operator!=(class QMediaTimeRange const &, class QMediaTimeRange const &)
+	??9QMediaContent@@QBE_NABV0@@Z @ 92 NONAME ; bool QMediaContent::operator!=(class QMediaContent const &) const
+	??9QMediaResource@@QBE_NABV0@@Z @ 93 NONAME ; bool QMediaResource::operator!=(class QMediaResource const &) const
+	??9QMediaServiceProviderHint@@QBE_NABV0@@Z @ 94 NONAME ; bool QMediaServiceProviderHint::operator!=(class QMediaServiceProviderHint const &) const
+	??G@YA?AVQMediaTimeRange@@ABV0@0@Z @ 95 NONAME ; class QMediaTimeRange operator-(class QMediaTimeRange const &, class QMediaTimeRange const &)
+	??H@YA?AVQMediaTimeRange@@ABV0@0@Z @ 96 NONAME ; class QMediaTimeRange operator+(class QMediaTimeRange const &, class QMediaTimeRange const &)
+	??YQMediaTimeRange@@QAEAAV0@ABV0@@Z @ 97 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator+=(class QMediaTimeRange const &)
+	??YQMediaTimeRange@@QAEAAV0@ABVQMediaTimeInterval@@@Z @ 98 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator+=(class QMediaTimeInterval const &)
+	??ZQMediaTimeRange@@QAEAAV0@ABV0@@Z @ 99 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator-=(class QMediaTimeRange const &)
+	??ZQMediaTimeRange@@QAEAAV0@ABVQMediaTimeInterval@@@Z @ 100 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator-=(class QMediaTimeInterval const &)
+	??_EQGraphicsVideoItem@@UAE@I@Z @ 101 NONAME ; QGraphicsVideoItem::~QGraphicsVideoItem(unsigned int)
+	??_EQLocalMediaPlaylistProvider@@UAE@I@Z @ 102 NONAME ; QLocalMediaPlaylistProvider::~QLocalMediaPlaylistProvider(unsigned int)
+	??_EQMediaControl@@UAE@I@Z @ 103 NONAME ; QMediaControl::~QMediaControl(unsigned int)
+	??_EQMediaObject@@UAE@I@Z @ 104 NONAME ; QMediaObject::~QMediaObject(unsigned int)
+	??_EQMediaPlayer@@UAE@I@Z @ 105 NONAME ; QMediaPlayer::~QMediaPlayer(unsigned int)
+	??_EQMediaPlayerControl@@UAE@I@Z @ 106 NONAME ; QMediaPlayerControl::~QMediaPlayerControl(unsigned int)
+	??_EQMediaPlaylist@@UAE@I@Z @ 107 NONAME ; QMediaPlaylist::~QMediaPlaylist(unsigned int)
+	??_EQMediaPlaylistControl@@UAE@I@Z @ 108 NONAME ; QMediaPlaylistControl::~QMediaPlaylistControl(unsigned int)
+	??_EQMediaPlaylistIOInterface@@UAE@I@Z @ 109 NONAME ; QMediaPlaylistIOInterface::~QMediaPlaylistIOInterface(unsigned int)
+	??_EQMediaPlaylistIOPlugin@@UAE@I@Z @ 110 NONAME ; QMediaPlaylistIOPlugin::~QMediaPlaylistIOPlugin(unsigned int)
+	??_EQMediaPlaylistNavigator@@UAE@I@Z @ 111 NONAME ; QMediaPlaylistNavigator::~QMediaPlaylistNavigator(unsigned int)
+	??_EQMediaPlaylistProvider@@UAE@I@Z @ 112 NONAME ; QMediaPlaylistProvider::~QMediaPlaylistProvider(unsigned int)
+	??_EQMediaPlaylistReader@@UAE@I@Z @ 113 NONAME ; QMediaPlaylistReader::~QMediaPlaylistReader(unsigned int)
+	??_EQMediaPlaylistWriter@@UAE@I@Z @ 114 NONAME ; QMediaPlaylistWriter::~QMediaPlaylistWriter(unsigned int)
+	??_EQMediaService@@UAE@I@Z @ 115 NONAME ; QMediaService::~QMediaService(unsigned int)
+	??_EQMediaServiceFeaturesInterface@@UAE@I@Z @ 116 NONAME ; QMediaServiceFeaturesInterface::~QMediaServiceFeaturesInterface(unsigned int)
+	??_EQMediaServiceProvider@@UAE@I@Z @ 117 NONAME ; QMediaServiceProvider::~QMediaServiceProvider(unsigned int)
+	??_EQMediaServiceSupportedDevicesInterface@@UAE@I@Z @ 118 NONAME ; QMediaServiceSupportedDevicesInterface::~QMediaServiceSupportedDevicesInterface(unsigned int)
+	??_EQMediaServiceSupportedFormatsInterface@@UAE@I@Z @ 119 NONAME ; QMediaServiceSupportedFormatsInterface::~QMediaServiceSupportedFormatsInterface(unsigned int)
+	??_EQMetaDataControl@@UAE@I@Z @ 120 NONAME ; QMetaDataControl::~QMetaDataControl(unsigned int)
+	??_EQPainterVideoSurface@@UAE@I@Z @ 121 NONAME ; QPainterVideoSurface::~QPainterVideoSurface(unsigned int)
+	??_EQSoundEffect@@UAE@I@Z @ 122 NONAME ; QSoundEffect::~QSoundEffect(unsigned int)
+	??_EQVideoDeviceControl@@UAE@I@Z @ 123 NONAME ; QVideoDeviceControl::~QVideoDeviceControl(unsigned int)
+	??_EQVideoOutputControl@@UAE@I@Z @ 124 NONAME ; QVideoOutputControl::~QVideoOutputControl(unsigned int)
+	??_EQVideoRendererControl@@UAE@I@Z @ 125 NONAME ; QVideoRendererControl::~QVideoRendererControl(unsigned int)
+	??_EQVideoWidget@@UAE@I@Z @ 126 NONAME ; QVideoWidget::~QVideoWidget(unsigned int)
+	??_EQVideoWidgetControl@@UAE@I@Z @ 127 NONAME ; QVideoWidgetControl::~QVideoWidgetControl(unsigned int)
+	??_EQVideoWindowControl@@UAE@I@Z @ 128 NONAME ; QVideoWindowControl::~QVideoWindowControl(unsigned int)
+	?activated@QMediaPlaylistNavigator@@IAEXABVQMediaContent@@@Z @ 129 NONAME ; void QMediaPlaylistNavigator::activated(class QMediaContent const &)
+	?addInterval@QMediaTimeRange@@QAEXABVQMediaTimeInterval@@@Z @ 130 NONAME ; void QMediaTimeRange::addInterval(class QMediaTimeInterval const &)
+	?addInterval@QMediaTimeRange@@QAEX_J0@Z @ 131 NONAME ; void QMediaTimeRange::addInterval(long long, long long)
+	?addMedia@QLocalMediaPlaylistProvider@@UAE_NABV?$QList@VQMediaContent@@@@@Z @ 132 NONAME ; bool QLocalMediaPlaylistProvider::addMedia(class QList<class QMediaContent> const &)
+	?addMedia@QLocalMediaPlaylistProvider@@UAE_NABVQMediaContent@@@Z @ 133 NONAME ; bool QLocalMediaPlaylistProvider::addMedia(class QMediaContent const &)
+	?addMedia@QMediaPlaylist@@QAE_NABV?$QList@VQMediaContent@@@@@Z @ 134 NONAME ; bool QMediaPlaylist::addMedia(class QList<class QMediaContent> const &)
+	?addMedia@QMediaPlaylist@@QAE_NABVQMediaContent@@@Z @ 135 NONAME ; bool QMediaPlaylist::addMedia(class QMediaContent const &)
+	?addMedia@QMediaPlaylistProvider@@UAE_NABV?$QList@VQMediaContent@@@@@Z @ 136 NONAME ; bool QMediaPlaylistProvider::addMedia(class QList<class QMediaContent> const &)
+	?addMedia@QMediaPlaylistProvider@@UAE_NABVQMediaContent@@@Z @ 137 NONAME ; bool QMediaPlaylistProvider::addMedia(class QMediaContent const &)
+	?addPropertyWatch@QMediaObject@@IAEXABVQByteArray@@@Z @ 138 NONAME ; void QMediaObject::addPropertyWatch(class QByteArray const &)
+	?addTimeRange@QMediaTimeRange@@QAEXABV1@@Z @ 139 NONAME ; void QMediaTimeRange::addTimeRange(class QMediaTimeRange const &)
+	?aspectRatioMode@QGraphicsVideoItem@@QBE?AW4AspectRatioMode@Qt@@XZ @ 140 NONAME ; enum Qt::AspectRatioMode QGraphicsVideoItem::aspectRatioMode(void) const
+	?aspectRatioMode@QVideoWidget@@QBE?AW4AspectRatioMode@Qt@@XZ @ 141 NONAME ; enum Qt::AspectRatioMode QVideoWidget::aspectRatioMode(void) const
+	?audioAvailableChanged@QMediaPlayer@@IAEX_N@Z @ 142 NONAME ; void QMediaPlayer::audioAvailableChanged(bool)
+	?audioAvailableChanged@QMediaPlayerControl@@IAEX_N@Z @ 143 NONAME ; void QMediaPlayerControl::audioAvailableChanged(bool)
+	?audioBitRate@QMediaResource@@QBEHXZ @ 144 NONAME ; int QMediaResource::audioBitRate(void) const
+	?audioCodec@QMediaResource@@QBE?AVQString@@XZ @ 145 NONAME ; class QString QMediaResource::audioCodec(void) const
+	?availabilityChanged@QMediaObject@@IAEX_N@Z @ 146 NONAME ; void QMediaObject::availabilityChanged(bool)
+	?availabilityError@QMediaObject@@UBE?AW4AvailabilityError@QtMediaServices@@XZ @ 147 NONAME ; enum QtMediaServices::AvailabilityError QMediaObject::availabilityError(void) const
+	?availableExtendedMetaData@QMediaObject@@QBE?AVQStringList@@XZ @ 148 NONAME ; class QStringList QMediaObject::availableExtendedMetaData(void) const
+	?availableMetaData@QMediaObject@@QBE?AV?$QList@W4MetaData@QtMediaServices@@@@XZ @ 149 NONAME ; class QList<enum QtMediaServices::MetaData> QMediaObject::availableMetaData(void) const
+	?availableOutputsChanged@QVideoOutputControl@@IAEXABV?$QList@W4Output@QVideoOutputControl@@@@@Z @ 150 NONAME ; void QVideoOutputControl::availableOutputsChanged(class QList<enum QVideoOutputControl::Output> const &)
+	?availablePlaybackRangesChanged@QMediaPlayerControl@@IAEXABVQMediaTimeRange@@@Z @ 151 NONAME ; void QMediaPlayerControl::availablePlaybackRangesChanged(class QMediaTimeRange const &)
+	?bind@QMediaObject@@UAEXPAVQObject@@@Z @ 152 NONAME ; void QMediaObject::bind(class QObject *)
+	?bind@QMediaPlayer@@UAEXPAVQObject@@@Z @ 153 NONAME ; void QMediaPlayer::bind(class QObject *)
+	?boundingRect@QGraphicsVideoItem@@UBE?AVQRectF@@XZ @ 154 NONAME ; class QRectF QGraphicsVideoItem::boundingRect(void) const
+	?brightness@QPainterVideoSurface@@QBEHXZ @ 155 NONAME ; int QPainterVideoSurface::brightness(void) const
+	?brightness@QVideoWidget@@QBEHXZ @ 156 NONAME ; int QVideoWidget::brightness(void) const
+	?brightnessChanged@QVideoWidget@@IAEXH@Z @ 157 NONAME ; void QVideoWidget::brightnessChanged(int)
+	?brightnessChanged@QVideoWidgetControl@@IAEXH@Z @ 158 NONAME ; void QVideoWidgetControl::brightnessChanged(int)
+	?brightnessChanged@QVideoWindowControl@@IAEXH@Z @ 159 NONAME ; void QVideoWindowControl::brightnessChanged(int)
+	?bufferStatus@QMediaPlayer@@QBEHXZ @ 160 NONAME ; int QMediaPlayer::bufferStatus(void) const
+	?bufferStatusChanged@QMediaPlayer@@IAEXH@Z @ 161 NONAME ; void QMediaPlayer::bufferStatusChanged(int)
+	?bufferStatusChanged@QMediaPlayerControl@@IAEXH@Z @ 162 NONAME ; void QMediaPlayerControl::bufferStatusChanged(int)
+	?canonicalRequest@QMediaContent@@QBE?AVQNetworkRequest@@XZ @ 163 NONAME ; class QNetworkRequest QMediaContent::canonicalRequest(void) const
+	?canonicalResource@QMediaContent@@QBE?AVQMediaResource@@XZ @ 164 NONAME ; class QMediaResource QMediaContent::canonicalResource(void) const
+	?canonicalUrl@QMediaContent@@QBE?AVQUrl@@XZ @ 165 NONAME ; class QUrl QMediaContent::canonicalUrl(void) const
+	?channelCount@QMediaResource@@QBEHXZ @ 166 NONAME ; int QMediaResource::channelCount(void) const
+	?clear@QLocalMediaPlaylistProvider@@UAE_NXZ @ 167 NONAME ; bool QLocalMediaPlaylistProvider::clear(void)
+	?clear@QMediaPlaylist@@QAE_NXZ @ 168 NONAME ; bool QMediaPlaylist::clear(void)
+	?clear@QMediaPlaylistProvider@@UAE_NXZ @ 169 NONAME ; bool QMediaPlaylistProvider::clear(void)
+	?clear@QMediaTimeRange@@QAEXXZ @ 170 NONAME ; void QMediaTimeRange::clear(void)
+	?codecs@QMediaServiceProviderHint@@QBE?AVQStringList@@XZ @ 171 NONAME ; class QStringList QMediaServiceProviderHint::codecs(void) const
+	?contains@QMediaTimeInterval@@QBE_N_J@Z @ 172 NONAME ; bool QMediaTimeInterval::contains(long long) const
+	?contains@QMediaTimeRange@@QBE_N_J@Z @ 173 NONAME ; bool QMediaTimeRange::contains(long long) const
+	?contrast@QPainterVideoSurface@@QBEHXZ @ 174 NONAME ; int QPainterVideoSurface::contrast(void) const
+	?contrast@QVideoWidget@@QBEHXZ @ 175 NONAME ; int QVideoWidget::contrast(void) const
+	?contrastChanged@QVideoWidget@@IAEXH@Z @ 176 NONAME ; void QVideoWidget::contrastChanged(int)
+	?contrastChanged@QVideoWidgetControl@@IAEXH@Z @ 177 NONAME ; void QVideoWidgetControl::contrastChanged(int)
+	?contrastChanged@QVideoWindowControl@@IAEXH@Z @ 178 NONAME ; void QVideoWindowControl::contrastChanged(int)
+	?createPainter@QPainterVideoSurface@@AAEXXZ @ 179 NONAME ; void QPainterVideoSurface::createPainter(void)
+	?currentIndex@QMediaPlaylist@@QBEHXZ @ 180 NONAME ; int QMediaPlaylist::currentIndex(void) const
+	?currentIndex@QMediaPlaylistNavigator@@QBEHXZ @ 181 NONAME ; int QMediaPlaylistNavigator::currentIndex(void) const
+	?currentIndexChanged@QMediaPlaylist@@IAEXH@Z @ 182 NONAME ; void QMediaPlaylist::currentIndexChanged(int)
+	?currentIndexChanged@QMediaPlaylistControl@@IAEXH@Z @ 183 NONAME ; void QMediaPlaylistControl::currentIndexChanged(int)
+	?currentIndexChanged@QMediaPlaylistNavigator@@IAEXH@Z @ 184 NONAME ; void QMediaPlaylistNavigator::currentIndexChanged(int)
+	?currentItem@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@XZ @ 185 NONAME ; class QMediaContent QMediaPlaylistNavigator::currentItem(void) const
+	?currentMedia@QMediaPlaylist@@QBE?AVQMediaContent@@XZ @ 186 NONAME ; class QMediaContent QMediaPlaylist::currentMedia(void) const
+	?currentMediaChanged@QMediaPlaylist@@IAEXABVQMediaContent@@@Z @ 187 NONAME ; void QMediaPlaylist::currentMediaChanged(class QMediaContent const &)
+	?currentMediaChanged@QMediaPlaylistControl@@IAEXABVQMediaContent@@@Z @ 188 NONAME ; void QMediaPlaylistControl::currentMediaChanged(class QMediaContent const &)
+	?d_func@QGraphicsVideoItem@@AAEPAVQGraphicsVideoItemPrivate@@XZ @ 189 NONAME ; class QGraphicsVideoItemPrivate * QGraphicsVideoItem::d_func(void)
+	?d_func@QGraphicsVideoItem@@ABEPBVQGraphicsVideoItemPrivate@@XZ @ 190 NONAME ; class QGraphicsVideoItemPrivate const * QGraphicsVideoItem::d_func(void) const
+	?d_func@QLocalMediaPlaylistProvider@@AAEPAVQLocalMediaPlaylistProviderPrivate@@XZ @ 191 NONAME ; class QLocalMediaPlaylistProviderPrivate * QLocalMediaPlaylistProvider::d_func(void)
+	?d_func@QLocalMediaPlaylistProvider@@ABEPBVQLocalMediaPlaylistProviderPrivate@@XZ @ 192 NONAME ; class QLocalMediaPlaylistProviderPrivate const * QLocalMediaPlaylistProvider::d_func(void) const
+	?d_func@QMediaControl@@AAEPAVQMediaControlPrivate@@XZ @ 193 NONAME ; class QMediaControlPrivate * QMediaControl::d_func(void)
+	?d_func@QMediaControl@@ABEPBVQMediaControlPrivate@@XZ @ 194 NONAME ; class QMediaControlPrivate const * QMediaControl::d_func(void) const
+	?d_func@QMediaObject@@AAEPAVQMediaObjectPrivate@@XZ @ 195 NONAME ; class QMediaObjectPrivate * QMediaObject::d_func(void)
+	?d_func@QMediaObject@@ABEPBVQMediaObjectPrivate@@XZ @ 196 NONAME ; class QMediaObjectPrivate const * QMediaObject::d_func(void) const
+	?d_func@QMediaPlayer@@AAEPAVQMediaPlayerPrivate@@XZ @ 197 NONAME ; class QMediaPlayerPrivate * QMediaPlayer::d_func(void)
+	?d_func@QMediaPlayer@@ABEPBVQMediaPlayerPrivate@@XZ @ 198 NONAME ; class QMediaPlayerPrivate const * QMediaPlayer::d_func(void) const
+	?d_func@QMediaPlaylist@@AAEPAVQMediaPlaylistPrivate@@XZ @ 199 NONAME ; class QMediaPlaylistPrivate * QMediaPlaylist::d_func(void)
+	?d_func@QMediaPlaylist@@ABEPBVQMediaPlaylistPrivate@@XZ @ 200 NONAME ; class QMediaPlaylistPrivate const * QMediaPlaylist::d_func(void) const
+	?d_func@QMediaPlaylistNavigator@@AAEPAVQMediaPlaylistNavigatorPrivate@@XZ @ 201 NONAME ; class QMediaPlaylistNavigatorPrivate * QMediaPlaylistNavigator::d_func(void)
+	?d_func@QMediaPlaylistNavigator@@ABEPBVQMediaPlaylistNavigatorPrivate@@XZ @ 202 NONAME ; class QMediaPlaylistNavigatorPrivate const * QMediaPlaylistNavigator::d_func(void) const
+	?d_func@QMediaPlaylistProvider@@AAEPAVQMediaPlaylistProviderPrivate@@XZ @ 203 NONAME ; class QMediaPlaylistProviderPrivate * QMediaPlaylistProvider::d_func(void)
+	?d_func@QMediaPlaylistProvider@@ABEPBVQMediaPlaylistProviderPrivate@@XZ @ 204 NONAME ; class QMediaPlaylistProviderPrivate const * QMediaPlaylistProvider::d_func(void) const
+	?d_func@QMediaService@@AAEPAVQMediaServicePrivate@@XZ @ 205 NONAME ; class QMediaServicePrivate * QMediaService::d_func(void)
+	?d_func@QMediaService@@ABEPBVQMediaServicePrivate@@XZ @ 206 NONAME ; class QMediaServicePrivate const * QMediaService::d_func(void) const
+	?d_func@QVideoWidget@@AAEPAVQVideoWidgetPrivate@@XZ @ 207 NONAME ; class QVideoWidgetPrivate * QVideoWidget::d_func(void)
+	?d_func@QVideoWidget@@ABEPBVQVideoWidgetPrivate@@XZ @ 208 NONAME ; class QVideoWidgetPrivate const * QVideoWidget::d_func(void) const
+	?dataSize@QMediaResource@@QBE_JXZ @ 209 NONAME ; long long QMediaResource::dataSize(void) const
+	?defaultServiceProvider@QMediaServiceProvider@@SAPAV1@XZ @ 210 NONAME ; class QMediaServiceProvider * QMediaServiceProvider::defaultServiceProvider(void)
+	?device@QMediaServiceProviderHint@@QBE?AVQByteArray@@XZ @ 211 NONAME ; class QByteArray QMediaServiceProviderHint::device(void) const
+	?deviceDescription@QMediaServiceProvider@@UAE?AVQString@@ABVQByteArray@@0@Z @ 212 NONAME ; class QString QMediaServiceProvider::deviceDescription(class QByteArray const &, class QByteArray const &)
+	?devices@QMediaServiceProvider@@UBE?AV?$QList@VQByteArray@@@@ABVQByteArray@@@Z @ 213 NONAME ; class QList<class QByteArray> QMediaServiceProvider::devices(class QByteArray const &) const
+	?devicesChanged@QVideoDeviceControl@@IAEXXZ @ 214 NONAME ; void QVideoDeviceControl::devicesChanged(void)
+	?duration@QMediaPlayer@@QBE_JXZ @ 215 NONAME ; long long QMediaPlayer::duration(void) const
+	?durationChanged@QMediaPlayer@@IAEX_J@Z @ 216 NONAME ; void QMediaPlayer::durationChanged(long long)
+	?durationChanged@QMediaPlayerControl@@IAEX_J@Z @ 217 NONAME ; void QMediaPlayerControl::durationChanged(long long)
+	?earliestTime@QMediaTimeRange@@QBE_JXZ @ 218 NONAME ; long long QMediaTimeRange::earliestTime(void) const
+	?end@QMediaTimeInterval@@QBE_JXZ @ 219 NONAME ; long long QMediaTimeInterval::end(void) const
+	?error@QMediaPlayer@@IAEXW4Error@1@@Z @ 220 NONAME ; void QMediaPlayer::error(enum QMediaPlayer::Error)
+	?error@QMediaPlayer@@QBE?AW4Error@1@XZ @ 221 NONAME ; enum QMediaPlayer::Error QMediaPlayer::error(void) const
+	?error@QMediaPlayerControl@@IAEXHABVQString@@@Z @ 222 NONAME ; void QMediaPlayerControl::error(int, class QString const &)
+	?error@QMediaPlaylist@@QBE?AW4Error@1@XZ @ 223 NONAME ; enum QMediaPlaylist::Error QMediaPlaylist::error(void) const
+	?errorString@QMediaPlayer@@QBE?AVQString@@XZ @ 224 NONAME ; class QString QMediaPlayer::errorString(void) const
+	?errorString@QMediaPlaylist@@QBE?AVQString@@XZ @ 225 NONAME ; class QString QMediaPlaylist::errorString(void) const
+	?event@QGraphicsVideoItem@@MAE_NPAVQEvent@@@Z @ 226 NONAME ; bool QGraphicsVideoItem::event(class QEvent *)
+	?event@QVideoWidget@@MAE_NPAVQEvent@@@Z @ 227 NONAME ; bool QVideoWidget::event(class QEvent *)
+	?extendedMetaData@QMediaObject@@QBE?AVQVariant@@ABVQString@@@Z @ 228 NONAME ; class QVariant QMediaObject::extendedMetaData(class QString const &) const
+	?features@QMediaServiceProviderHint@@QBE?AV?$QFlags@W4Feature@QMediaServiceProviderHint@@@@XZ @ 229 NONAME ; class QFlags<enum QMediaServiceProviderHint::Feature> QMediaServiceProviderHint::features(void) const
+	?frameChanged@QPainterVideoSurface@@IAEXXZ @ 230 NONAME ; void QPainterVideoSurface::frameChanged(void)
+	?fullScreenChanged@QVideoWidget@@IAEX_N@Z @ 231 NONAME ; void QVideoWidget::fullScreenChanged(bool)
+	?fullScreenChanged@QVideoWidgetControl@@IAEX_N@Z @ 232 NONAME ; void QVideoWidgetControl::fullScreenChanged(bool)
+	?fullScreenChanged@QVideoWindowControl@@IAEX_N@Z @ 233 NONAME ; void QVideoWindowControl::fullScreenChanged(bool)
+	?getStaticMetaObject@QGraphicsVideoItem@@SAABUQMetaObject@@XZ @ 234 NONAME ; struct QMetaObject const & QGraphicsVideoItem::getStaticMetaObject(void)
+	?getStaticMetaObject@QLocalMediaPlaylistProvider@@SAABUQMetaObject@@XZ @ 235 NONAME ; struct QMetaObject const & QLocalMediaPlaylistProvider::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaControl@@SAABUQMetaObject@@XZ @ 236 NONAME ; struct QMetaObject const & QMediaControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaObject@@SAABUQMetaObject@@XZ @ 237 NONAME ; struct QMetaObject const & QMediaObject::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaPlayer@@SAABUQMetaObject@@XZ @ 238 NONAME ; struct QMetaObject const & QMediaPlayer::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaPlayerControl@@SAABUQMetaObject@@XZ @ 239 NONAME ; struct QMetaObject const & QMediaPlayerControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaPlaylist@@SAABUQMetaObject@@XZ @ 240 NONAME ; struct QMetaObject const & QMediaPlaylist::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaPlaylistControl@@SAABUQMetaObject@@XZ @ 241 NONAME ; struct QMetaObject const & QMediaPlaylistControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaPlaylistIOPlugin@@SAABUQMetaObject@@XZ @ 242 NONAME ; struct QMetaObject const & QMediaPlaylistIOPlugin::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaPlaylistNavigator@@SAABUQMetaObject@@XZ @ 243 NONAME ; struct QMetaObject const & QMediaPlaylistNavigator::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaPlaylistProvider@@SAABUQMetaObject@@XZ @ 244 NONAME ; struct QMetaObject const & QMediaPlaylistProvider::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaService@@SAABUQMetaObject@@XZ @ 245 NONAME ; struct QMetaObject const & QMediaService::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaServiceProvider@@SAABUQMetaObject@@XZ @ 246 NONAME ; struct QMetaObject const & QMediaServiceProvider::getStaticMetaObject(void)
+	?getStaticMetaObject@QMediaServiceProviderPlugin@@SAABUQMetaObject@@XZ @ 247 NONAME ; struct QMetaObject const & QMediaServiceProviderPlugin::getStaticMetaObject(void)
+	?getStaticMetaObject@QMetaDataControl@@SAABUQMetaObject@@XZ @ 248 NONAME ; struct QMetaObject const & QMetaDataControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QPainterVideoSurface@@SAABUQMetaObject@@XZ @ 249 NONAME ; struct QMetaObject const & QPainterVideoSurface::getStaticMetaObject(void)
+	?getStaticMetaObject@QSoundEffect@@SAABUQMetaObject@@XZ @ 250 NONAME ; struct QMetaObject const & QSoundEffect::getStaticMetaObject(void)
+	?getStaticMetaObject@QVideoDeviceControl@@SAABUQMetaObject@@XZ @ 251 NONAME ; struct QMetaObject const & QVideoDeviceControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QVideoOutputControl@@SAABUQMetaObject@@XZ @ 252 NONAME ; struct QMetaObject const & QVideoOutputControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QVideoRendererControl@@SAABUQMetaObject@@XZ @ 253 NONAME ; struct QMetaObject const & QVideoRendererControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QVideoWidget@@SAABUQMetaObject@@XZ @ 254 NONAME ; struct QMetaObject const & QVideoWidget::getStaticMetaObject(void)
+	?getStaticMetaObject@QVideoWidgetControl@@SAABUQMetaObject@@XZ @ 255 NONAME ; struct QMetaObject const & QVideoWidgetControl::getStaticMetaObject(void)
+	?getStaticMetaObject@QVideoWindowControl@@SAABUQMetaObject@@XZ @ 256 NONAME ; struct QMetaObject const & QVideoWindowControl::getStaticMetaObject(void)
+	?hasSupport@QMediaPlayer@@SA?AW4SupportEstimate@QtMediaServices@@ABVQString@@ABVQStringList@@V?$QFlags@W4Flag@QMediaPlayer@@@@@Z @ 257 NONAME ; enum QtMediaServices::SupportEstimate QMediaPlayer::hasSupport(class QString const &, class QStringList const &, class QFlags<enum QMediaPlayer::Flag>)
+	?hasSupport@QMediaServiceProvider@@UBE?AW4SupportEstimate@QtMediaServices@@ABVQByteArray@@ABVQString@@ABVQStringList@@H@Z @ 258 NONAME ; enum QtMediaServices::SupportEstimate QMediaServiceProvider::hasSupport(class QByteArray const &, class QString const &, class QStringList const &, int) const
+	?hideEvent@QVideoWidget@@MAEXPAVQHideEvent@@@Z @ 259 NONAME ; void QVideoWidget::hideEvent(class QHideEvent *)
+	?hue@QPainterVideoSurface@@QBEHXZ @ 260 NONAME ; int QPainterVideoSurface::hue(void) const
+	?hue@QVideoWidget@@QBEHXZ @ 261 NONAME ; int QVideoWidget::hue(void) const
+	?hueChanged@QVideoWidget@@IAEXH@Z @ 262 NONAME ; void QVideoWidget::hueChanged(int)
+	?hueChanged@QVideoWidgetControl@@IAEXH@Z @ 263 NONAME ; void QVideoWidgetControl::hueChanged(int)
+	?hueChanged@QVideoWindowControl@@IAEXH@Z @ 264 NONAME ; void QVideoWindowControl::hueChanged(int)
+	?insertMedia@QLocalMediaPlaylistProvider@@UAE_NHABV?$QList@VQMediaContent@@@@@Z @ 265 NONAME ; bool QLocalMediaPlaylistProvider::insertMedia(int, class QList<class QMediaContent> const &)
+	?insertMedia@QLocalMediaPlaylistProvider@@UAE_NHABVQMediaContent@@@Z @ 266 NONAME ; bool QLocalMediaPlaylistProvider::insertMedia(int, class QMediaContent const &)
+	?insertMedia@QMediaPlaylist@@QAE_NHABV?$QList@VQMediaContent@@@@@Z @ 267 NONAME ; bool QMediaPlaylist::insertMedia(int, class QList<class QMediaContent> const &)
+	?insertMedia@QMediaPlaylist@@QAE_NHABVQMediaContent@@@Z @ 268 NONAME ; bool QMediaPlaylist::insertMedia(int, class QMediaContent const &)
+	?insertMedia@QMediaPlaylistProvider@@UAE_NHABV?$QList@VQMediaContent@@@@@Z @ 269 NONAME ; bool QMediaPlaylistProvider::insertMedia(int, class QList<class QMediaContent> const &)
+	?insertMedia@QMediaPlaylistProvider@@UAE_NHABVQMediaContent@@@Z @ 270 NONAME ; bool QMediaPlaylistProvider::insertMedia(int, class QMediaContent const &)
+	?intervals@QMediaTimeRange@@QBE?AV?$QList@VQMediaTimeInterval@@@@XZ @ 271 NONAME ; class QList<class QMediaTimeInterval> QMediaTimeRange::intervals(void) const
+	?isAudioAvailable@QMediaPlayer@@QBE_NXZ @ 272 NONAME ; bool QMediaPlayer::isAudioAvailable(void) const
+	?isAvailable@QMediaObject@@UBE_NXZ @ 273 NONAME ; bool QMediaObject::isAvailable(void) const
+	?isContinuous@QMediaTimeRange@@QBE_NXZ @ 274 NONAME ; bool QMediaTimeRange::isContinuous(void) const
+	?isEmpty@QMediaPlaylist@@QBE_NXZ @ 275 NONAME ; bool QMediaPlaylist::isEmpty(void) const
+	?isEmpty@QMediaTimeRange@@QBE_NXZ @ 276 NONAME ; bool QMediaTimeRange::isEmpty(void) const
+	?isFormatSupported@QPainterVideoSurface@@QBE_NABVQVideoSurfaceFormat@@PAV2@@Z @ 277 NONAME ; bool QPainterVideoSurface::isFormatSupported(class QVideoSurfaceFormat const &, class QVideoSurfaceFormat *) const
+	?isMetaDataAvailable@QMediaObject@@QBE_NXZ @ 278 NONAME ; bool QMediaObject::isMetaDataAvailable(void) const
+	?isMetaDataWritable@QMediaObject@@QBE_NXZ @ 279 NONAME ; bool QMediaObject::isMetaDataWritable(void) const
+	?isMuted@QMediaPlayer@@QBE_NXZ @ 280 NONAME ; bool QMediaPlayer::isMuted(void) const
+	?isMuted@QSoundEffect@@QBE_NXZ @ 281 NONAME ; bool QSoundEffect::isMuted(void) const
+	?isNormal@QMediaTimeInterval@@QBE_NXZ @ 282 NONAME ; bool QMediaTimeInterval::isNormal(void) const
+	?isNull@QMediaContent@@QBE_NXZ @ 283 NONAME ; bool QMediaContent::isNull(void) const
+	?isNull@QMediaResource@@QBE_NXZ @ 284 NONAME ; bool QMediaResource::isNull(void) const
+	?isNull@QMediaServiceProviderHint@@QBE_NXZ @ 285 NONAME ; bool QMediaServiceProviderHint::isNull(void) const
+	?isReadOnly@QLocalMediaPlaylistProvider@@UBE_NXZ @ 286 NONAME ; bool QLocalMediaPlaylistProvider::isReadOnly(void) const
+	?isReadOnly@QMediaPlaylist@@QBE_NXZ @ 287 NONAME ; bool QMediaPlaylist::isReadOnly(void) const
+	?isReadOnly@QMediaPlaylistProvider@@UBE_NXZ @ 288 NONAME ; bool QMediaPlaylistProvider::isReadOnly(void) const
+	?isReady@QPainterVideoSurface@@QBE_NXZ @ 289 NONAME ; bool QPainterVideoSurface::isReady(void) const
+	?isSeekable@QMediaPlayer@@QBE_NXZ @ 290 NONAME ; bool QMediaPlayer::isSeekable(void) const
+	?isVideoAvailable@QMediaPlayer@@QBE_NXZ @ 291 NONAME ; bool QMediaPlayer::isVideoAvailable(void) const
+	?itemAt@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@H@Z @ 292 NONAME ; class QMediaContent QMediaPlaylistNavigator::itemAt(int) const
+	?itemChange@QGraphicsVideoItem@@MAE?AVQVariant@@W4GraphicsItemChange@QGraphicsItem@@ABV2@@Z @ 293 NONAME ; class QVariant QGraphicsVideoItem::itemChange(enum QGraphicsItem::GraphicsItemChange, class QVariant const &)
+	?jump@QMediaPlaylistNavigator@@QAEXH@Z @ 294 NONAME ; void QMediaPlaylistNavigator::jump(int)
+	?language@QMediaResource@@QBE?AVQString@@XZ @ 295 NONAME ; class QString QMediaResource::language(void) const
+	?latestTime@QMediaTimeRange@@QBE_JXZ @ 296 NONAME ; long long QMediaTimeRange::latestTime(void) const
+	?load@QMediaPlaylist@@QAEXABVQUrl@@PBD@Z @ 297 NONAME ; void QMediaPlaylist::load(class QUrl const &, char const *)
+	?load@QMediaPlaylist@@QAEXPAVQIODevice@@PBD@Z @ 298 NONAME ; void QMediaPlaylist::load(class QIODevice *, char const *)
+	?load@QMediaPlaylistProvider@@UAE_NABVQUrl@@PBD@Z @ 299 NONAME ; bool QMediaPlaylistProvider::load(class QUrl const &, char const *)
+	?load@QMediaPlaylistProvider@@UAE_NPAVQIODevice@@PBD@Z @ 300 NONAME ; bool QMediaPlaylistProvider::load(class QIODevice *, char const *)
+	?loadFailed@QMediaPlaylist@@IAEXXZ @ 301 NONAME ; void QMediaPlaylist::loadFailed(void)
+	?loadFailed@QMediaPlaylistProvider@@IAEXW4Error@QMediaPlaylist@@ABVQString@@@Z @ 302 NONAME ; void QMediaPlaylistProvider::loadFailed(enum QMediaPlaylist::Error, class QString const &)
+	?loaded@QMediaPlaylist@@IAEXXZ @ 303 NONAME ; void QMediaPlaylist::loaded(void)
+	?loaded@QMediaPlaylistProvider@@IAEXXZ @ 304 NONAME ; void QMediaPlaylistProvider::loaded(void)
+	?loops@QSoundEffect@@QBEHXZ @ 305 NONAME ; int QSoundEffect::loops(void) const
+	?loopsChanged@QSoundEffect@@IAEXXZ @ 306 NONAME ; void QSoundEffect::loopsChanged(void)
+	?media@QLocalMediaPlaylistProvider@@UBE?AVQMediaContent@@H@Z @ 307 NONAME ; class QMediaContent QLocalMediaPlaylistProvider::media(int) const
+	?media@QMediaPlayer@@QBE?AVQMediaContent@@XZ @ 308 NONAME ; class QMediaContent QMediaPlayer::media(void) const
+	?media@QMediaPlaylist@@QBE?AVQMediaContent@@H@Z @ 309 NONAME ; class QMediaContent QMediaPlaylist::media(int) const
+	?mediaAboutToBeInserted@QMediaPlaylist@@IAEXHH@Z @ 310 NONAME ; void QMediaPlaylist::mediaAboutToBeInserted(int, int)
+	?mediaAboutToBeInserted@QMediaPlaylistProvider@@IAEXHH@Z @ 311 NONAME ; void QMediaPlaylistProvider::mediaAboutToBeInserted(int, int)
+	?mediaAboutToBeRemoved@QMediaPlaylist@@IAEXHH@Z @ 312 NONAME ; void QMediaPlaylist::mediaAboutToBeRemoved(int, int)
+	?mediaAboutToBeRemoved@QMediaPlaylistProvider@@IAEXHH@Z @ 313 NONAME ; void QMediaPlaylistProvider::mediaAboutToBeRemoved(int, int)
+	?mediaChanged@QMediaPlayer@@IAEXABVQMediaContent@@@Z @ 314 NONAME ; void QMediaPlayer::mediaChanged(class QMediaContent const &)
+	?mediaChanged@QMediaPlayerControl@@IAEXABVQMediaContent@@@Z @ 315 NONAME ; void QMediaPlayerControl::mediaChanged(class QMediaContent const &)
+	?mediaChanged@QMediaPlaylist@@IAEXHH@Z @ 316 NONAME ; void QMediaPlaylist::mediaChanged(int, int)
+	?mediaChanged@QMediaPlaylistProvider@@IAEXHH@Z @ 317 NONAME ; void QMediaPlaylistProvider::mediaChanged(int, int)
+	?mediaCount@QLocalMediaPlaylistProvider@@UBEHXZ @ 318 NONAME ; int QLocalMediaPlaylistProvider::mediaCount(void) const
+	?mediaCount@QMediaPlaylist@@QBEHXZ @ 319 NONAME ; int QMediaPlaylist::mediaCount(void) const
+	?mediaInserted@QMediaPlaylist@@IAEXHH@Z @ 320 NONAME ; void QMediaPlaylist::mediaInserted(int, int)
+	?mediaInserted@QMediaPlaylistProvider@@IAEXHH@Z @ 321 NONAME ; void QMediaPlaylistProvider::mediaInserted(int, int)
+	?mediaObject@QGraphicsVideoItem@@QBEPAVQMediaObject@@XZ @ 322 NONAME ; class QMediaObject * QGraphicsVideoItem::mediaObject(void) const
+	?mediaObject@QMediaPlaylist@@QBEPAVQMediaObject@@XZ @ 323 NONAME ; class QMediaObject * QMediaPlaylist::mediaObject(void) const
+	?mediaObject@QVideoWidget@@QBEPAVQMediaObject@@XZ @ 324 NONAME ; class QMediaObject * QVideoWidget::mediaObject(void) const
+	?mediaRemoved@QMediaPlaylist@@IAEXHH@Z @ 325 NONAME ; void QMediaPlaylist::mediaRemoved(int, int)
+	?mediaRemoved@QMediaPlaylistProvider@@IAEXHH@Z @ 326 NONAME ; void QMediaPlaylistProvider::mediaRemoved(int, int)
+	?mediaStatus@QMediaPlayer@@QBE?AW4MediaStatus@1@XZ @ 327 NONAME ; enum QMediaPlayer::MediaStatus QMediaPlayer::mediaStatus(void) const
+	?mediaStatusChanged@QMediaPlayer@@IAEXW4MediaStatus@1@@Z @ 328 NONAME ; void QMediaPlayer::mediaStatusChanged(enum QMediaPlayer::MediaStatus)
+	?mediaStatusChanged@QMediaPlayerControl@@IAEXW4MediaStatus@QMediaPlayer@@@Z @ 329 NONAME ; void QMediaPlayerControl::mediaStatusChanged(enum QMediaPlayer::MediaStatus)
+	?mediaStream@QMediaPlayer@@QBEPBVQIODevice@@XZ @ 330 NONAME ; class QIODevice const * QMediaPlayer::mediaStream(void) const
+	?metaData@QMediaObject@@QBE?AVQVariant@@W4MetaData@QtMediaServices@@@Z @ 331 NONAME ; class QVariant QMediaObject::metaData(enum QtMediaServices::MetaData) const
+	?metaDataAvailableChanged@QMediaObject@@IAEX_N@Z @ 332 NONAME ; void QMediaObject::metaDataAvailableChanged(bool)
+	?metaDataAvailableChanged@QMetaDataControl@@IAEX_N@Z @ 333 NONAME ; void QMetaDataControl::metaDataAvailableChanged(bool)
+	?metaDataChanged@QMediaObject@@IAEXXZ @ 334 NONAME ; void QMediaObject::metaDataChanged(void)
+	?metaDataChanged@QMetaDataControl@@IAEXXZ @ 335 NONAME ; void QMetaDataControl::metaDataChanged(void)
+	?metaDataWritableChanged@QMediaObject@@IAEX_N@Z @ 336 NONAME ; void QMediaObject::metaDataWritableChanged(bool)
+	?metaObject@QGraphicsVideoItem@@UBEPBUQMetaObject@@XZ @ 337 NONAME ; struct QMetaObject const * QGraphicsVideoItem::metaObject(void) const
+	?metaObject@QLocalMediaPlaylistProvider@@UBEPBUQMetaObject@@XZ @ 338 NONAME ; struct QMetaObject const * QLocalMediaPlaylistProvider::metaObject(void) const
+	?metaObject@QMediaControl@@UBEPBUQMetaObject@@XZ @ 339 NONAME ; struct QMetaObject const * QMediaControl::metaObject(void) const
+	?metaObject@QMediaObject@@UBEPBUQMetaObject@@XZ @ 340 NONAME ; struct QMetaObject const * QMediaObject::metaObject(void) const
+	?metaObject@QMediaPlayer@@UBEPBUQMetaObject@@XZ @ 341 NONAME ; struct QMetaObject const * QMediaPlayer::metaObject(void) const
+	?metaObject@QMediaPlayerControl@@UBEPBUQMetaObject@@XZ @ 342 NONAME ; struct QMetaObject const * QMediaPlayerControl::metaObject(void) const
+	?metaObject@QMediaPlaylist@@UBEPBUQMetaObject@@XZ @ 343 NONAME ; struct QMetaObject const * QMediaPlaylist::metaObject(void) const
+	?metaObject@QMediaPlaylistControl@@UBEPBUQMetaObject@@XZ @ 344 NONAME ; struct QMetaObject const * QMediaPlaylistControl::metaObject(void) const
+	?metaObject@QMediaPlaylistIOPlugin@@UBEPBUQMetaObject@@XZ @ 345 NONAME ; struct QMetaObject const * QMediaPlaylistIOPlugin::metaObject(void) const
+	?metaObject@QMediaPlaylistNavigator@@UBEPBUQMetaObject@@XZ @ 346 NONAME ; struct QMetaObject const * QMediaPlaylistNavigator::metaObject(void) const
+	?metaObject@QMediaPlaylistProvider@@UBEPBUQMetaObject@@XZ @ 347 NONAME ; struct QMetaObject const * QMediaPlaylistProvider::metaObject(void) const
+	?metaObject@QMediaService@@UBEPBUQMetaObject@@XZ @ 348 NONAME ; struct QMetaObject const * QMediaService::metaObject(void) const
+	?metaObject@QMediaServiceProvider@@UBEPBUQMetaObject@@XZ @ 349 NONAME ; struct QMetaObject const * QMediaServiceProvider::metaObject(void) const
+	?metaObject@QMediaServiceProviderPlugin@@UBEPBUQMetaObject@@XZ @ 350 NONAME ; struct QMetaObject const * QMediaServiceProviderPlugin::metaObject(void) const
+	?metaObject@QMetaDataControl@@UBEPBUQMetaObject@@XZ @ 351 NONAME ; struct QMetaObject const * QMetaDataControl::metaObject(void) const
+	?metaObject@QPainterVideoSurface@@UBEPBUQMetaObject@@XZ @ 352 NONAME ; struct QMetaObject const * QPainterVideoSurface::metaObject(void) const
+	?metaObject@QSoundEffect@@UBEPBUQMetaObject@@XZ @ 353 NONAME ; struct QMetaObject const * QSoundEffect::metaObject(void) const
+	?metaObject@QVideoDeviceControl@@UBEPBUQMetaObject@@XZ @ 354 NONAME ; struct QMetaObject const * QVideoDeviceControl::metaObject(void) const
+	?metaObject@QVideoOutputControl@@UBEPBUQMetaObject@@XZ @ 355 NONAME ; struct QMetaObject const * QVideoOutputControl::metaObject(void) const
+	?metaObject@QVideoRendererControl@@UBEPBUQMetaObject@@XZ @ 356 NONAME ; struct QMetaObject const * QVideoRendererControl::metaObject(void) const
+	?metaObject@QVideoWidget@@UBEPBUQMetaObject@@XZ @ 357 NONAME ; struct QMetaObject const * QVideoWidget::metaObject(void) const
+	?metaObject@QVideoWidgetControl@@UBEPBUQMetaObject@@XZ @ 358 NONAME ; struct QMetaObject const * QVideoWidgetControl::metaObject(void) const
+	?metaObject@QVideoWindowControl@@UBEPBUQMetaObject@@XZ @ 359 NONAME ; struct QMetaObject const * QVideoWindowControl::metaObject(void) const
+	?mimeType@QMediaResource@@QBE?AVQString@@XZ @ 360 NONAME ; class QString QMediaResource::mimeType(void) const
+	?mimeType@QMediaServiceProviderHint@@QBE?AVQString@@XZ @ 361 NONAME ; class QString QMediaServiceProviderHint::mimeType(void) const
+	?moveEvent@QVideoWidget@@MAEXPAVQMoveEvent@@@Z @ 362 NONAME ; void QVideoWidget::moveEvent(class QMoveEvent *)
+	?mutedChanged@QMediaPlayer@@IAEX_N@Z @ 363 NONAME ; void QMediaPlayer::mutedChanged(bool)
+	?mutedChanged@QMediaPlayerControl@@IAEX_N@Z @ 364 NONAME ; void QMediaPlayerControl::mutedChanged(bool)
+	?mutedChanged@QSoundEffect@@IAEXXZ @ 365 NONAME ; void QSoundEffect::mutedChanged(void)
+	?nativeSize@QGraphicsVideoItem@@QBE?AVQSizeF@@XZ @ 366 NONAME ; class QSizeF QGraphicsVideoItem::nativeSize(void) const
+	?nativeSizeChanged@QGraphicsVideoItem@@IAEXABVQSizeF@@@Z @ 367 NONAME ; void QGraphicsVideoItem::nativeSizeChanged(class QSizeF const &)
+	?nativeSizeChanged@QVideoWindowControl@@IAEXXZ @ 368 NONAME ; void QVideoWindowControl::nativeSizeChanged(void)
+	?next@QMediaPlaylist@@QAEXXZ @ 369 NONAME ; void QMediaPlaylist::next(void)
+	?next@QMediaPlaylistNavigator@@QAEXXZ @ 370 NONAME ; void QMediaPlaylistNavigator::next(void)
+	?nextIndex@QMediaPlaylist@@QBEHH@Z @ 371 NONAME ; int QMediaPlaylist::nextIndex(int) const
+	?nextIndex@QMediaPlaylistNavigator@@QBEHH@Z @ 372 NONAME ; int QMediaPlaylistNavigator::nextIndex(int) const
+	?nextItem@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@H@Z @ 373 NONAME ; class QMediaContent QMediaPlaylistNavigator::nextItem(int) const
+	?normalized@QMediaTimeInterval@@QBE?AV1@XZ @ 374 NONAME ; class QMediaTimeInterval QMediaTimeInterval::normalized(void) const
+	?notifyInterval@QMediaObject@@QBEHXZ @ 375 NONAME ; int QMediaObject::notifyInterval(void) const
+	?notifyIntervalChanged@QMediaObject@@IAEXH@Z @ 376 NONAME ; void QMediaObject::notifyIntervalChanged(int)
+	?offset@QGraphicsVideoItem@@QBE?AVQPointF@@XZ @ 377 NONAME ; class QPointF QGraphicsVideoItem::offset(void) const
+	?paint@QGraphicsVideoItem@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 378 NONAME ; void QGraphicsVideoItem::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+	?paint@QPainterVideoSurface@@QAEXPAVQPainter@@ABVQRectF@@1@Z @ 379 NONAME ; void QPainterVideoSurface::paint(class QPainter *, class QRectF const &, class QRectF const &)
+	?paintEvent@QVideoWidget@@MAEXPAVQPaintEvent@@@Z @ 380 NONAME ; void QVideoWidget::paintEvent(class QPaintEvent *)
+	?pause@QMediaPlayer@@QAEXXZ @ 381 NONAME ; void QMediaPlayer::pause(void)
+	?play@QMediaPlayer@@QAEXXZ @ 382 NONAME ; void QMediaPlayer::play(void)
+	?play@QSoundEffect@@QAEXXZ @ 383 NONAME ; void QSoundEffect::play(void)
+	?playbackMode@QMediaPlaylist@@QBE?AW4PlaybackMode@1@XZ @ 384 NONAME ; enum QMediaPlaylist::PlaybackMode QMediaPlaylist::playbackMode(void) const
+	?playbackMode@QMediaPlaylistNavigator@@QBE?AW4PlaybackMode@QMediaPlaylist@@XZ @ 385 NONAME ; enum QMediaPlaylist::PlaybackMode QMediaPlaylistNavigator::playbackMode(void) const
+	?playbackModeChanged@QMediaPlaylist@@IAEXW4PlaybackMode@1@@Z @ 386 NONAME ; void QMediaPlaylist::playbackModeChanged(enum QMediaPlaylist::PlaybackMode)
+	?playbackModeChanged@QMediaPlaylistControl@@IAEXW4PlaybackMode@QMediaPlaylist@@@Z @ 387 NONAME ; void QMediaPlaylistControl::playbackModeChanged(enum QMediaPlaylist::PlaybackMode)
+	?playbackModeChanged@QMediaPlaylistNavigator@@IAEXW4PlaybackMode@QMediaPlaylist@@@Z @ 388 NONAME ; void QMediaPlaylistNavigator::playbackModeChanged(enum QMediaPlaylist::PlaybackMode)
+	?playbackRate@QMediaPlayer@@QBEMXZ @ 389 NONAME ; float QMediaPlayer::playbackRate(void) const
+	?playbackRateChanged@QMediaPlayer@@IAEXM@Z @ 390 NONAME ; void QMediaPlayer::playbackRateChanged(float)
+	?playbackRateChanged@QMediaPlayerControl@@IAEXM@Z @ 391 NONAME ; void QMediaPlayerControl::playbackRateChanged(float)
+	?playlist@QMediaPlaylistNavigator@@QBEPAVQMediaPlaylistProvider@@XZ @ 392 NONAME ; class QMediaPlaylistProvider * QMediaPlaylistNavigator::playlist(void) const
+	?playlistProviderChanged@QMediaPlaylistControl@@IAEXXZ @ 393 NONAME ; void QMediaPlaylistControl::playlistProviderChanged(void)
+	?position@QMediaPlayer@@QBE_JXZ @ 394 NONAME ; long long QMediaPlayer::position(void) const
+	?positionChanged@QMediaPlayer@@IAEX_J@Z @ 395 NONAME ; void QMediaPlayer::positionChanged(long long)
+	?positionChanged@QMediaPlayerControl@@IAEX_J@Z @ 396 NONAME ; void QMediaPlayerControl::positionChanged(long long)
+	?present@QPainterVideoSurface@@UAE_NABVQVideoFrame@@@Z @ 397 NONAME ; bool QPainterVideoSurface::present(class QVideoFrame const &)
+	?previous@QMediaPlaylist@@QAEXXZ @ 398 NONAME ; void QMediaPlaylist::previous(void)
+	?previous@QMediaPlaylistNavigator@@QAEXXZ @ 399 NONAME ; void QMediaPlaylistNavigator::previous(void)
+	?previousIndex@QMediaPlaylist@@QBEHH@Z @ 400 NONAME ; int QMediaPlaylist::previousIndex(int) const
+	?previousIndex@QMediaPlaylistNavigator@@QBEHH@Z @ 401 NONAME ; int QMediaPlaylistNavigator::previousIndex(int) const
+	?previousItem@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@H@Z @ 402 NONAME ; class QMediaContent QMediaPlaylistNavigator::previousItem(int) const
+	?qt_metacall@QGraphicsVideoItem@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 403 NONAME ; int QGraphicsVideoItem::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QLocalMediaPlaylistProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 404 NONAME ; int QLocalMediaPlaylistProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 405 NONAME ; int QMediaControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaObject@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 406 NONAME ; int QMediaObject::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaPlayer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 407 NONAME ; int QMediaPlayer::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaPlayerControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 408 NONAME ; int QMediaPlayerControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaPlaylist@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 409 NONAME ; int QMediaPlaylist::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaPlaylistControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 410 NONAME ; int QMediaPlaylistControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaPlaylistIOPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 411 NONAME ; int QMediaPlaylistIOPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaPlaylistNavigator@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 412 NONAME ; int QMediaPlaylistNavigator::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaPlaylistProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 413 NONAME ; int QMediaPlaylistProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaService@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 414 NONAME ; int QMediaService::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaServiceProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 415 NONAME ; int QMediaServiceProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMediaServiceProviderPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 416 NONAME ; int QMediaServiceProviderPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QMetaDataControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 417 NONAME ; int QMetaDataControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QPainterVideoSurface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 418 NONAME ; int QPainterVideoSurface::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QSoundEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 419 NONAME ; int QSoundEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QVideoDeviceControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 420 NONAME ; int QVideoDeviceControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QVideoOutputControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 421 NONAME ; int QVideoOutputControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QVideoRendererControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 422 NONAME ; int QVideoRendererControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QVideoWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 423 NONAME ; int QVideoWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QVideoWidgetControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 424 NONAME ; int QVideoWidgetControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QVideoWindowControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 425 NONAME ; int QVideoWindowControl::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacast@QGraphicsVideoItem@@UAEPAXPBD@Z @ 426 NONAME ; void * QGraphicsVideoItem::qt_metacast(char const *)
+	?qt_metacast@QLocalMediaPlaylistProvider@@UAEPAXPBD@Z @ 427 NONAME ; void * QLocalMediaPlaylistProvider::qt_metacast(char const *)
+	?qt_metacast@QMediaControl@@UAEPAXPBD@Z @ 428 NONAME ; void * QMediaControl::qt_metacast(char const *)
+	?qt_metacast@QMediaObject@@UAEPAXPBD@Z @ 429 NONAME ; void * QMediaObject::qt_metacast(char const *)
+	?qt_metacast@QMediaPlayer@@UAEPAXPBD@Z @ 430 NONAME ; void * QMediaPlayer::qt_metacast(char const *)
+	?qt_metacast@QMediaPlayerControl@@UAEPAXPBD@Z @ 431 NONAME ; void * QMediaPlayerControl::qt_metacast(char const *)
+	?qt_metacast@QMediaPlaylist@@UAEPAXPBD@Z @ 432 NONAME ; void * QMediaPlaylist::qt_metacast(char const *)
+	?qt_metacast@QMediaPlaylistControl@@UAEPAXPBD@Z @ 433 NONAME ; void * QMediaPlaylistControl::qt_metacast(char const *)
+	?qt_metacast@QMediaPlaylistIOPlugin@@UAEPAXPBD@Z @ 434 NONAME ; void * QMediaPlaylistIOPlugin::qt_metacast(char const *)
+	?qt_metacast@QMediaPlaylistNavigator@@UAEPAXPBD@Z @ 435 NONAME ; void * QMediaPlaylistNavigator::qt_metacast(char const *)
+	?qt_metacast@QMediaPlaylistProvider@@UAEPAXPBD@Z @ 436 NONAME ; void * QMediaPlaylistProvider::qt_metacast(char const *)
+	?qt_metacast@QMediaService@@UAEPAXPBD@Z @ 437 NONAME ; void * QMediaService::qt_metacast(char const *)
+	?qt_metacast@QMediaServiceProvider@@UAEPAXPBD@Z @ 438 NONAME ; void * QMediaServiceProvider::qt_metacast(char const *)
+	?qt_metacast@QMediaServiceProviderPlugin@@UAEPAXPBD@Z @ 439 NONAME ; void * QMediaServiceProviderPlugin::qt_metacast(char const *)
+	?qt_metacast@QMetaDataControl@@UAEPAXPBD@Z @ 440 NONAME ; void * QMetaDataControl::qt_metacast(char const *)
+	?qt_metacast@QPainterVideoSurface@@UAEPAXPBD@Z @ 441 NONAME ; void * QPainterVideoSurface::qt_metacast(char const *)
+	?qt_metacast@QSoundEffect@@UAEPAXPBD@Z @ 442 NONAME ; void * QSoundEffect::qt_metacast(char const *)
+	?qt_metacast@QVideoDeviceControl@@UAEPAXPBD@Z @ 443 NONAME ; void * QVideoDeviceControl::qt_metacast(char const *)
+	?qt_metacast@QVideoOutputControl@@UAEPAXPBD@Z @ 444 NONAME ; void * QVideoOutputControl::qt_metacast(char const *)
+	?qt_metacast@QVideoRendererControl@@UAEPAXPBD@Z @ 445 NONAME ; void * QVideoRendererControl::qt_metacast(char const *)
+	?qt_metacast@QVideoWidget@@UAEPAXPBD@Z @ 446 NONAME ; void * QVideoWidget::qt_metacast(char const *)
+	?qt_metacast@QVideoWidgetControl@@UAEPAXPBD@Z @ 447 NONAME ; void * QVideoWidgetControl::qt_metacast(char const *)
+	?qt_metacast@QVideoWindowControl@@UAEPAXPBD@Z @ 448 NONAME ; void * QVideoWindowControl::qt_metacast(char const *)
+	?removeInterval@QMediaTimeRange@@QAEXABVQMediaTimeInterval@@@Z @ 449 NONAME ; void QMediaTimeRange::removeInterval(class QMediaTimeInterval const &)
+	?removeInterval@QMediaTimeRange@@QAEX_J0@Z @ 450 NONAME ; void QMediaTimeRange::removeInterval(long long, long long)
+	?removeMedia@QLocalMediaPlaylistProvider@@UAE_NH@Z @ 451 NONAME ; bool QLocalMediaPlaylistProvider::removeMedia(int)
+	?removeMedia@QLocalMediaPlaylistProvider@@UAE_NHH@Z @ 452 NONAME ; bool QLocalMediaPlaylistProvider::removeMedia(int, int)
+	?removeMedia@QMediaPlaylist@@QAE_NH@Z @ 453 NONAME ; bool QMediaPlaylist::removeMedia(int)
+	?removeMedia@QMediaPlaylist@@QAE_NHH@Z @ 454 NONAME ; bool QMediaPlaylist::removeMedia(int, int)
+	?removeMedia@QMediaPlaylistProvider@@UAE_NH@Z @ 455 NONAME ; bool QMediaPlaylistProvider::removeMedia(int)
+	?removeMedia@QMediaPlaylistProvider@@UAE_NHH@Z @ 456 NONAME ; bool QMediaPlaylistProvider::removeMedia(int, int)
+	?removePropertyWatch@QMediaObject@@IAEXABVQByteArray@@@Z @ 457 NONAME ; void QMediaObject::removePropertyWatch(class QByteArray const &)
+	?removeTimeRange@QMediaTimeRange@@QAEXABV1@@Z @ 458 NONAME ; void QMediaTimeRange::removeTimeRange(class QMediaTimeRange const &)
+	?request@QMediaResource@@QBE?AVQNetworkRequest@@XZ @ 459 NONAME ; class QNetworkRequest QMediaResource::request(void) const
+	?resizeEvent@QVideoWidget@@MAEXPAVQResizeEvent@@@Z @ 460 NONAME ; void QVideoWidget::resizeEvent(class QResizeEvent *)
+	?resolution@QMediaResource@@QBE?AVQSize@@XZ @ 461 NONAME ; class QSize QMediaResource::resolution(void) const
+	?resources@QMediaContent@@QBE?AV?$QList@VQMediaResource@@@@XZ @ 462 NONAME ; class QList<class QMediaResource> QMediaContent::resources(void) const
+	?sampleRate@QMediaResource@@QBEHXZ @ 463 NONAME ; int QMediaResource::sampleRate(void) const
+	?saturation@QPainterVideoSurface@@QBEHXZ @ 464 NONAME ; int QPainterVideoSurface::saturation(void) const
+	?saturation@QVideoWidget@@QBEHXZ @ 465 NONAME ; int QVideoWidget::saturation(void) const
+	?saturationChanged@QVideoWidget@@IAEXH@Z @ 466 NONAME ; void QVideoWidget::saturationChanged(int)
+	?saturationChanged@QVideoWidgetControl@@IAEXH@Z @ 467 NONAME ; void QVideoWidgetControl::saturationChanged(int)
+	?saturationChanged@QVideoWindowControl@@IAEXH@Z @ 468 NONAME ; void QVideoWindowControl::saturationChanged(int)
+	?save@QMediaPlaylist@@QAE_NABVQUrl@@PBD@Z @ 469 NONAME ; bool QMediaPlaylist::save(class QUrl const &, char const *)
+	?save@QMediaPlaylist@@QAE_NPAVQIODevice@@PBD@Z @ 470 NONAME ; bool QMediaPlaylist::save(class QIODevice *, char const *)
+	?save@QMediaPlaylistProvider@@UAE_NABVQUrl@@PBD@Z @ 471 NONAME ; bool QMediaPlaylistProvider::save(class QUrl const &, char const *)
+	?save@QMediaPlaylistProvider@@UAE_NPAVQIODevice@@PBD@Z @ 472 NONAME ; bool QMediaPlaylistProvider::save(class QIODevice *, char const *)
+	?sceneEvent@QGraphicsVideoItem@@MAE_NPAVQEvent@@@Z @ 473 NONAME ; bool QGraphicsVideoItem::sceneEvent(class QEvent *)
+	?seekableChanged@QMediaPlayer@@IAEX_N@Z @ 474 NONAME ; void QMediaPlayer::seekableChanged(bool)
+	?seekableChanged@QMediaPlayerControl@@IAEX_N@Z @ 475 NONAME ; void QMediaPlayerControl::seekableChanged(bool)
+	?selectedDeviceChanged@QVideoDeviceControl@@IAEXABVQString@@@Z @ 476 NONAME ; void QVideoDeviceControl::selectedDeviceChanged(class QString const &)
+	?selectedDeviceChanged@QVideoDeviceControl@@IAEXH@Z @ 477 NONAME ; void QVideoDeviceControl::selectedDeviceChanged(int)
+	?service@QMediaObject@@UBEPAVQMediaService@@XZ @ 478 NONAME ; class QMediaService * QMediaObject::service(void) const
+	?setAspectRatioMode@QGraphicsVideoItem@@QAEXW4AspectRatioMode@Qt@@@Z @ 479 NONAME ; void QGraphicsVideoItem::setAspectRatioMode(enum Qt::AspectRatioMode)
+	?setAspectRatioMode@QVideoWidget@@QAEXW4AspectRatioMode@Qt@@@Z @ 480 NONAME ; void QVideoWidget::setAspectRatioMode(enum Qt::AspectRatioMode)
+	?setAudioBitRate@QMediaResource@@QAEXH@Z @ 481 NONAME ; void QMediaResource::setAudioBitRate(int)
+	?setAudioCodec@QMediaResource@@QAEXABVQString@@@Z @ 482 NONAME ; void QMediaResource::setAudioCodec(class QString const &)
+	?setBrightness@QPainterVideoSurface@@QAEXH@Z @ 483 NONAME ; void QPainterVideoSurface::setBrightness(int)
+	?setBrightness@QVideoWidget@@QAEXH@Z @ 484 NONAME ; void QVideoWidget::setBrightness(int)
+	?setChannelCount@QMediaResource@@QAEXH@Z @ 485 NONAME ; void QMediaResource::setChannelCount(int)
+	?setContrast@QPainterVideoSurface@@QAEXH@Z @ 486 NONAME ; void QPainterVideoSurface::setContrast(int)
+	?setContrast@QVideoWidget@@QAEXH@Z @ 487 NONAME ; void QVideoWidget::setContrast(int)
+	?setCurrentIndex@QMediaPlaylist@@QAEXH@Z @ 488 NONAME ; void QMediaPlaylist::setCurrentIndex(int)
+	?setDataSize@QMediaResource@@QAEX_J@Z @ 489 NONAME ; void QMediaResource::setDataSize(long long)
+	?setExtendedMetaData@QMediaObject@@QAEXABVQString@@ABVQVariant@@@Z @ 490 NONAME ; void QMediaObject::setExtendedMetaData(class QString const &, class QVariant const &)
+	?setFullScreen@QVideoWidget@@QAEX_N@Z @ 491 NONAME ; void QVideoWidget::setFullScreen(bool)
+	?setHue@QPainterVideoSurface@@QAEXH@Z @ 492 NONAME ; void QPainterVideoSurface::setHue(int)
+	?setHue@QVideoWidget@@QAEXH@Z @ 493 NONAME ; void QVideoWidget::setHue(int)
+	?setLanguage@QMediaResource@@QAEXABVQString@@@Z @ 494 NONAME ; void QMediaResource::setLanguage(class QString const &)
+	?setLoops@QSoundEffect@@QAEXH@Z @ 495 NONAME ; void QSoundEffect::setLoops(int)
+	?setMedia@QMediaPlayer@@QAEXABVQMediaContent@@PAVQIODevice@@@Z @ 496 NONAME ; void QMediaPlayer::setMedia(class QMediaContent const &, class QIODevice *)
+	?setMediaObject@QGraphicsVideoItem@@QAEXPAVQMediaObject@@@Z @ 497 NONAME ; void QGraphicsVideoItem::setMediaObject(class QMediaObject *)
+	?setMediaObject@QMediaPlaylist@@QAEXPAVQMediaObject@@@Z @ 498 NONAME ; void QMediaPlaylist::setMediaObject(class QMediaObject *)
+	?setMediaObject@QVideoWidget@@QAEXPAVQMediaObject@@@Z @ 499 NONAME ; void QVideoWidget::setMediaObject(class QMediaObject *)
+	?setMetaData@QMediaObject@@QAEXW4MetaData@QtMediaServices@@ABVQVariant@@@Z @ 500 NONAME ; void QMediaObject::setMetaData(enum QtMediaServices::MetaData, class QVariant const &)
+	?setMuted@QMediaPlayer@@QAEX_N@Z @ 501 NONAME ; void QMediaPlayer::setMuted(bool)
+	?setMuted@QSoundEffect@@QAEX_N@Z @ 502 NONAME ; void QSoundEffect::setMuted(bool)
+	?setNotifyInterval@QMediaObject@@QAEXH@Z @ 503 NONAME ; void QMediaObject::setNotifyInterval(int)
+	?setOffset@QGraphicsVideoItem@@QAEXABVQPointF@@@Z @ 504 NONAME ; void QGraphicsVideoItem::setOffset(class QPointF const &)
+	?setPlaybackMode@QMediaPlaylist@@QAEXW4PlaybackMode@1@@Z @ 505 NONAME ; void QMediaPlaylist::setPlaybackMode(enum QMediaPlaylist::PlaybackMode)
+	?setPlaybackMode@QMediaPlaylistNavigator@@QAEXW4PlaybackMode@QMediaPlaylist@@@Z @ 506 NONAME ; void QMediaPlaylistNavigator::setPlaybackMode(enum QMediaPlaylist::PlaybackMode)
+	?setPlaybackRate@QMediaPlayer@@QAEXM@Z @ 507 NONAME ; void QMediaPlayer::setPlaybackRate(float)
+	?setPlaylist@QMediaPlaylistNavigator@@QAEXPAVQMediaPlaylistProvider@@@Z @ 508 NONAME ; void QMediaPlaylistNavigator::setPlaylist(class QMediaPlaylistProvider *)
+	?setPosition@QMediaPlayer@@QAEX_J@Z @ 509 NONAME ; void QMediaPlayer::setPosition(long long)
+	?setReady@QPainterVideoSurface@@QAEX_N@Z @ 510 NONAME ; void QPainterVideoSurface::setReady(bool)
+	?setResolution@QMediaResource@@QAEXABVQSize@@@Z @ 511 NONAME ; void QMediaResource::setResolution(class QSize const &)
+	?setResolution@QMediaResource@@QAEXHH@Z @ 512 NONAME ; void QMediaResource::setResolution(int, int)
+	?setSampleRate@QMediaResource@@QAEXH@Z @ 513 NONAME ; void QMediaResource::setSampleRate(int)
+	?setSaturation@QPainterVideoSurface@@QAEXH@Z @ 514 NONAME ; void QPainterVideoSurface::setSaturation(int)
+	?setSaturation@QVideoWidget@@QAEXH@Z @ 515 NONAME ; void QVideoWidget::setSaturation(int)
+	?setSize@QGraphicsVideoItem@@QAEXABVQSizeF@@@Z @ 516 NONAME ; void QGraphicsVideoItem::setSize(class QSizeF const &)
+	?setSource@QSoundEffect@@QAEXABVQUrl@@@Z @ 517 NONAME ; void QSoundEffect::setSource(class QUrl const &)
+	?setVideoBitRate@QMediaResource@@QAEXH@Z @ 518 NONAME ; void QMediaResource::setVideoBitRate(int)
+	?setVideoCodec@QMediaResource@@QAEXABVQString@@@Z @ 519 NONAME ; void QMediaResource::setVideoCodec(class QString const &)
+	?setVolume@QMediaPlayer@@QAEXH@Z @ 520 NONAME ; void QMediaPlayer::setVolume(int)
+	?setVolume@QSoundEffect@@QAEXH@Z @ 521 NONAME ; void QSoundEffect::setVolume(int)
+	?setupMetaData@QMediaObject@@AAEXXZ @ 522 NONAME ; void QMediaObject::setupMetaData(void)
+	?showEvent@QVideoWidget@@MAEXPAVQShowEvent@@@Z @ 523 NONAME ; void QVideoWidget::showEvent(class QShowEvent *)
+	?shuffle@QLocalMediaPlaylistProvider@@UAEXXZ @ 524 NONAME ; void QLocalMediaPlaylistProvider::shuffle(void)
+	?shuffle@QMediaPlaylist@@QAEXXZ @ 525 NONAME ; void QMediaPlaylist::shuffle(void)
+	?shuffle@QMediaPlaylistProvider@@UAEXXZ @ 526 NONAME ; void QMediaPlaylistProvider::shuffle(void)
+	?size@QGraphicsVideoItem@@QBE?AVQSizeF@@XZ @ 527 NONAME ; class QSizeF QGraphicsVideoItem::size(void) const
+	?sizeHint@QVideoWidget@@UBE?AVQSize@@XZ @ 528 NONAME ; class QSize QVideoWidget::sizeHint(void) const
+	?source@QSoundEffect@@QBE?AVQUrl@@XZ @ 529 NONAME ; class QUrl QSoundEffect::source(void) const
+	?sourceChanged@QSoundEffect@@IAEXXZ @ 530 NONAME ; void QSoundEffect::sourceChanged(void)
+	?start@QMediaTimeInterval@@QBE_JXZ @ 531 NONAME ; long long QMediaTimeInterval::start(void) const
+	?start@QPainterVideoSurface@@UAE_NABVQVideoSurfaceFormat@@@Z @ 532 NONAME ; bool QPainterVideoSurface::start(class QVideoSurfaceFormat const &)
+	?state@QMediaPlayer@@QBE?AW4State@1@XZ @ 533 NONAME ; enum QMediaPlayer::State QMediaPlayer::state(void) const
+	?stateChanged@QMediaPlayer@@IAEXW4State@1@@Z @ 534 NONAME ; void QMediaPlayer::stateChanged(enum QMediaPlayer::State)
+	?stateChanged@QMediaPlayerControl@@IAEXW4State@QMediaPlayer@@@Z @ 535 NONAME ; void QMediaPlayerControl::stateChanged(enum QMediaPlayer::State)
+	?stop@QMediaPlayer@@QAEXXZ @ 536 NONAME ; void QMediaPlayer::stop(void)
+	?stop@QPainterVideoSurface@@UAEXXZ @ 537 NONAME ; void QPainterVideoSurface::stop(void)
+	?supportedMimeTypes@QMediaPlayer@@SA?AVQStringList@@V?$QFlags@W4Flag@QMediaPlayer@@@@@Z @ 538 NONAME ; class QStringList QMediaPlayer::supportedMimeTypes(class QFlags<enum QMediaPlayer::Flag>)
+	?supportedMimeTypes@QMediaServiceProvider@@UBE?AVQStringList@@ABVQByteArray@@H@Z @ 539 NONAME ; class QStringList QMediaServiceProvider::supportedMimeTypes(class QByteArray const &, int) const
+	?supportedPixelFormats@QPainterVideoSurface@@UBE?AV?$QList@W4PixelFormat@QVideoFrame@@@@W4HandleType@QAbstractVideoBuffer@@@Z @ 540 NONAME ; class QList<enum QVideoFrame::PixelFormat> QPainterVideoSurface::supportedPixelFormats(enum QAbstractVideoBuffer::HandleType) const
+	?surroundingItemsChanged@QMediaPlaylistNavigator@@IAEXXZ @ 541 NONAME ; void QMediaPlaylistNavigator::surroundingItemsChanged(void)
+	?tr@QGraphicsVideoItem@@SA?AVQString@@PBD0@Z @ 542 NONAME ; class QString QGraphicsVideoItem::tr(char const *, char const *)
+	?tr@QGraphicsVideoItem@@SA?AVQString@@PBD0H@Z @ 543 NONAME ; class QString QGraphicsVideoItem::tr(char const *, char const *, int)
+	?tr@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 544 NONAME ; class QString QLocalMediaPlaylistProvider::tr(char const *, char const *)
+	?tr@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 545 NONAME ; class QString QLocalMediaPlaylistProvider::tr(char const *, char const *, int)
+	?tr@QMediaControl@@SA?AVQString@@PBD0@Z @ 546 NONAME ; class QString QMediaControl::tr(char const *, char const *)
+	?tr@QMediaControl@@SA?AVQString@@PBD0H@Z @ 547 NONAME ; class QString QMediaControl::tr(char const *, char const *, int)
+	?tr@QMediaObject@@SA?AVQString@@PBD0@Z @ 548 NONAME ; class QString QMediaObject::tr(char const *, char const *)
+	?tr@QMediaObject@@SA?AVQString@@PBD0H@Z @ 549 NONAME ; class QString QMediaObject::tr(char const *, char const *, int)
+	?tr@QMediaPlayer@@SA?AVQString@@PBD0@Z @ 550 NONAME ; class QString QMediaPlayer::tr(char const *, char const *)
+	?tr@QMediaPlayer@@SA?AVQString@@PBD0H@Z @ 551 NONAME ; class QString QMediaPlayer::tr(char const *, char const *, int)
+	?tr@QMediaPlayerControl@@SA?AVQString@@PBD0@Z @ 552 NONAME ; class QString QMediaPlayerControl::tr(char const *, char const *)
+	?tr@QMediaPlayerControl@@SA?AVQString@@PBD0H@Z @ 553 NONAME ; class QString QMediaPlayerControl::tr(char const *, char const *, int)
+	?tr@QMediaPlaylist@@SA?AVQString@@PBD0@Z @ 554 NONAME ; class QString QMediaPlaylist::tr(char const *, char const *)
+	?tr@QMediaPlaylist@@SA?AVQString@@PBD0H@Z @ 555 NONAME ; class QString QMediaPlaylist::tr(char const *, char const *, int)
+	?tr@QMediaPlaylistControl@@SA?AVQString@@PBD0@Z @ 556 NONAME ; class QString QMediaPlaylistControl::tr(char const *, char const *)
+	?tr@QMediaPlaylistControl@@SA?AVQString@@PBD0H@Z @ 557 NONAME ; class QString QMediaPlaylistControl::tr(char const *, char const *, int)
+	?tr@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0@Z @ 558 NONAME ; class QString QMediaPlaylistIOPlugin::tr(char const *, char const *)
+	?tr@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0H@Z @ 559 NONAME ; class QString QMediaPlaylistIOPlugin::tr(char const *, char const *, int)
+	?tr@QMediaPlaylistNavigator@@SA?AVQString@@PBD0@Z @ 560 NONAME ; class QString QMediaPlaylistNavigator::tr(char const *, char const *)
+	?tr@QMediaPlaylistNavigator@@SA?AVQString@@PBD0H@Z @ 561 NONAME ; class QString QMediaPlaylistNavigator::tr(char const *, char const *, int)
+	?tr@QMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 562 NONAME ; class QString QMediaPlaylistProvider::tr(char const *, char const *)
+	?tr@QMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 563 NONAME ; class QString QMediaPlaylistProvider::tr(char const *, char const *, int)
+	?tr@QMediaService@@SA?AVQString@@PBD0@Z @ 564 NONAME ; class QString QMediaService::tr(char const *, char const *)
+	?tr@QMediaService@@SA?AVQString@@PBD0H@Z @ 565 NONAME ; class QString QMediaService::tr(char const *, char const *, int)
+	?tr@QMediaServiceProvider@@SA?AVQString@@PBD0@Z @ 566 NONAME ; class QString QMediaServiceProvider::tr(char const *, char const *)
+	?tr@QMediaServiceProvider@@SA?AVQString@@PBD0H@Z @ 567 NONAME ; class QString QMediaServiceProvider::tr(char const *, char const *, int)
+	?tr@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0@Z @ 568 NONAME ; class QString QMediaServiceProviderPlugin::tr(char const *, char const *)
+	?tr@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0H@Z @ 569 NONAME ; class QString QMediaServiceProviderPlugin::tr(char const *, char const *, int)
+	?tr@QMetaDataControl@@SA?AVQString@@PBD0@Z @ 570 NONAME ; class QString QMetaDataControl::tr(char const *, char const *)
+	?tr@QMetaDataControl@@SA?AVQString@@PBD0H@Z @ 571 NONAME ; class QString QMetaDataControl::tr(char const *, char const *, int)
+	?tr@QPainterVideoSurface@@SA?AVQString@@PBD0@Z @ 572 NONAME ; class QString QPainterVideoSurface::tr(char const *, char const *)
+	?tr@QPainterVideoSurface@@SA?AVQString@@PBD0H@Z @ 573 NONAME ; class QString QPainterVideoSurface::tr(char const *, char const *, int)
+	?tr@QSoundEffect@@SA?AVQString@@PBD0@Z @ 574 NONAME ; class QString QSoundEffect::tr(char const *, char const *)
+	?tr@QSoundEffect@@SA?AVQString@@PBD0H@Z @ 575 NONAME ; class QString QSoundEffect::tr(char const *, char const *, int)
+	?tr@QVideoDeviceControl@@SA?AVQString@@PBD0@Z @ 576 NONAME ; class QString QVideoDeviceControl::tr(char const *, char const *)
+	?tr@QVideoDeviceControl@@SA?AVQString@@PBD0H@Z @ 577 NONAME ; class QString QVideoDeviceControl::tr(char const *, char const *, int)
+	?tr@QVideoOutputControl@@SA?AVQString@@PBD0@Z @ 578 NONAME ; class QString QVideoOutputControl::tr(char const *, char const *)
+	?tr@QVideoOutputControl@@SA?AVQString@@PBD0H@Z @ 579 NONAME ; class QString QVideoOutputControl::tr(char const *, char const *, int)
+	?tr@QVideoRendererControl@@SA?AVQString@@PBD0@Z @ 580 NONAME ; class QString QVideoRendererControl::tr(char const *, char const *)
+	?tr@QVideoRendererControl@@SA?AVQString@@PBD0H@Z @ 581 NONAME ; class QString QVideoRendererControl::tr(char const *, char const *, int)
+	?tr@QVideoWidget@@SA?AVQString@@PBD0@Z @ 582 NONAME ; class QString QVideoWidget::tr(char const *, char const *)
+	?tr@QVideoWidget@@SA?AVQString@@PBD0H@Z @ 583 NONAME ; class QString QVideoWidget::tr(char const *, char const *, int)
+	?tr@QVideoWidgetControl@@SA?AVQString@@PBD0@Z @ 584 NONAME ; class QString QVideoWidgetControl::tr(char const *, char const *)
+	?tr@QVideoWidgetControl@@SA?AVQString@@PBD0H@Z @ 585 NONAME ; class QString QVideoWidgetControl::tr(char const *, char const *, int)
+	?tr@QVideoWindowControl@@SA?AVQString@@PBD0@Z @ 586 NONAME ; class QString QVideoWindowControl::tr(char const *, char const *)
+	?tr@QVideoWindowControl@@SA?AVQString@@PBD0H@Z @ 587 NONAME ; class QString QVideoWindowControl::tr(char const *, char const *, int)
+	?trUtf8@QGraphicsVideoItem@@SA?AVQString@@PBD0@Z @ 588 NONAME ; class QString QGraphicsVideoItem::trUtf8(char const *, char const *)
+	?trUtf8@QGraphicsVideoItem@@SA?AVQString@@PBD0H@Z @ 589 NONAME ; class QString QGraphicsVideoItem::trUtf8(char const *, char const *, int)
+	?trUtf8@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 590 NONAME ; class QString QLocalMediaPlaylistProvider::trUtf8(char const *, char const *)
+	?trUtf8@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 591 NONAME ; class QString QLocalMediaPlaylistProvider::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaControl@@SA?AVQString@@PBD0@Z @ 592 NONAME ; class QString QMediaControl::trUtf8(char const *, char const *)
+	?trUtf8@QMediaControl@@SA?AVQString@@PBD0H@Z @ 593 NONAME ; class QString QMediaControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaObject@@SA?AVQString@@PBD0@Z @ 594 NONAME ; class QString QMediaObject::trUtf8(char const *, char const *)
+	?trUtf8@QMediaObject@@SA?AVQString@@PBD0H@Z @ 595 NONAME ; class QString QMediaObject::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaPlayer@@SA?AVQString@@PBD0@Z @ 596 NONAME ; class QString QMediaPlayer::trUtf8(char const *, char const *)
+	?trUtf8@QMediaPlayer@@SA?AVQString@@PBD0H@Z @ 597 NONAME ; class QString QMediaPlayer::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaPlayerControl@@SA?AVQString@@PBD0@Z @ 598 NONAME ; class QString QMediaPlayerControl::trUtf8(char const *, char const *)
+	?trUtf8@QMediaPlayerControl@@SA?AVQString@@PBD0H@Z @ 599 NONAME ; class QString QMediaPlayerControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaPlaylist@@SA?AVQString@@PBD0@Z @ 600 NONAME ; class QString QMediaPlaylist::trUtf8(char const *, char const *)
+	?trUtf8@QMediaPlaylist@@SA?AVQString@@PBD0H@Z @ 601 NONAME ; class QString QMediaPlaylist::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaPlaylistControl@@SA?AVQString@@PBD0@Z @ 602 NONAME ; class QString QMediaPlaylistControl::trUtf8(char const *, char const *)
+	?trUtf8@QMediaPlaylistControl@@SA?AVQString@@PBD0H@Z @ 603 NONAME ; class QString QMediaPlaylistControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0@Z @ 604 NONAME ; class QString QMediaPlaylistIOPlugin::trUtf8(char const *, char const *)
+	?trUtf8@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0H@Z @ 605 NONAME ; class QString QMediaPlaylistIOPlugin::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaPlaylistNavigator@@SA?AVQString@@PBD0@Z @ 606 NONAME ; class QString QMediaPlaylistNavigator::trUtf8(char const *, char const *)
+	?trUtf8@QMediaPlaylistNavigator@@SA?AVQString@@PBD0H@Z @ 607 NONAME ; class QString QMediaPlaylistNavigator::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 608 NONAME ; class QString QMediaPlaylistProvider::trUtf8(char const *, char const *)
+	?trUtf8@QMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 609 NONAME ; class QString QMediaPlaylistProvider::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaService@@SA?AVQString@@PBD0@Z @ 610 NONAME ; class QString QMediaService::trUtf8(char const *, char const *)
+	?trUtf8@QMediaService@@SA?AVQString@@PBD0H@Z @ 611 NONAME ; class QString QMediaService::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaServiceProvider@@SA?AVQString@@PBD0@Z @ 612 NONAME ; class QString QMediaServiceProvider::trUtf8(char const *, char const *)
+	?trUtf8@QMediaServiceProvider@@SA?AVQString@@PBD0H@Z @ 613 NONAME ; class QString QMediaServiceProvider::trUtf8(char const *, char const *, int)
+	?trUtf8@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0@Z @ 614 NONAME ; class QString QMediaServiceProviderPlugin::trUtf8(char const *, char const *)
+	?trUtf8@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0H@Z @ 615 NONAME ; class QString QMediaServiceProviderPlugin::trUtf8(char const *, char const *, int)
+	?trUtf8@QMetaDataControl@@SA?AVQString@@PBD0@Z @ 616 NONAME ; class QString QMetaDataControl::trUtf8(char const *, char const *)
+	?trUtf8@QMetaDataControl@@SA?AVQString@@PBD0H@Z @ 617 NONAME ; class QString QMetaDataControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QPainterVideoSurface@@SA?AVQString@@PBD0@Z @ 618 NONAME ; class QString QPainterVideoSurface::trUtf8(char const *, char const *)
+	?trUtf8@QPainterVideoSurface@@SA?AVQString@@PBD0H@Z @ 619 NONAME ; class QString QPainterVideoSurface::trUtf8(char const *, char const *, int)
+	?trUtf8@QSoundEffect@@SA?AVQString@@PBD0@Z @ 620 NONAME ; class QString QSoundEffect::trUtf8(char const *, char const *)
+	?trUtf8@QSoundEffect@@SA?AVQString@@PBD0H@Z @ 621 NONAME ; class QString QSoundEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QVideoDeviceControl@@SA?AVQString@@PBD0@Z @ 622 NONAME ; class QString QVideoDeviceControl::trUtf8(char const *, char const *)
+	?trUtf8@QVideoDeviceControl@@SA?AVQString@@PBD0H@Z @ 623 NONAME ; class QString QVideoDeviceControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QVideoOutputControl@@SA?AVQString@@PBD0@Z @ 624 NONAME ; class QString QVideoOutputControl::trUtf8(char const *, char const *)
+	?trUtf8@QVideoOutputControl@@SA?AVQString@@PBD0H@Z @ 625 NONAME ; class QString QVideoOutputControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QVideoRendererControl@@SA?AVQString@@PBD0@Z @ 626 NONAME ; class QString QVideoRendererControl::trUtf8(char const *, char const *)
+	?trUtf8@QVideoRendererControl@@SA?AVQString@@PBD0H@Z @ 627 NONAME ; class QString QVideoRendererControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QVideoWidget@@SA?AVQString@@PBD0@Z @ 628 NONAME ; class QString QVideoWidget::trUtf8(char const *, char const *)
+	?trUtf8@QVideoWidget@@SA?AVQString@@PBD0H@Z @ 629 NONAME ; class QString QVideoWidget::trUtf8(char const *, char const *, int)
+	?trUtf8@QVideoWidgetControl@@SA?AVQString@@PBD0@Z @ 630 NONAME ; class QString QVideoWidgetControl::trUtf8(char const *, char const *)
+	?trUtf8@QVideoWidgetControl@@SA?AVQString@@PBD0H@Z @ 631 NONAME ; class QString QVideoWidgetControl::trUtf8(char const *, char const *, int)
+	?trUtf8@QVideoWindowControl@@SA?AVQString@@PBD0@Z @ 632 NONAME ; class QString QVideoWindowControl::trUtf8(char const *, char const *)
+	?trUtf8@QVideoWindowControl@@SA?AVQString@@PBD0H@Z @ 633 NONAME ; class QString QVideoWindowControl::trUtf8(char const *, char const *, int)
+	?translated@QMediaTimeInterval@@QBE?AV1@_J@Z @ 634 NONAME ; class QMediaTimeInterval QMediaTimeInterval::translated(long long) const
+	?type@QMediaServiceProviderHint@@QBE?AW4Type@1@XZ @ 635 NONAME ; enum QMediaServiceProviderHint::Type QMediaServiceProviderHint::type(void) const
+	?unbind@QMediaObject@@UAEXPAVQObject@@@Z @ 636 NONAME ; void QMediaObject::unbind(class QObject *)
+	?unbind@QMediaPlayer@@UAEXPAVQObject@@@Z @ 637 NONAME ; void QMediaPlayer::unbind(class QObject *)
+	?url@QMediaResource@@QBE?AVQUrl@@XZ @ 638 NONAME ; class QUrl QMediaResource::url(void) const
+	?videoAvailableChanged@QMediaPlayer@@IAEX_N@Z @ 639 NONAME ; void QMediaPlayer::videoAvailableChanged(bool)
+	?videoAvailableChanged@QMediaPlayerControl@@IAEX_N@Z @ 640 NONAME ; void QMediaPlayerControl::videoAvailableChanged(bool)
+	?videoBitRate@QMediaResource@@QBEHXZ @ 641 NONAME ; int QMediaResource::videoBitRate(void) const
+	?videoCodec@QMediaResource@@QBE?AVQString@@XZ @ 642 NONAME ; class QString QMediaResource::videoCodec(void) const
+	?volume@QMediaPlayer@@QBEHXZ @ 643 NONAME ; int QMediaPlayer::volume(void) const
+	?volume@QSoundEffect@@QBEHXZ @ 644 NONAME ; int QSoundEffect::volume(void) const
+	?volumeChanged@QMediaPlayer@@IAEXH@Z @ 645 NONAME ; void QMediaPlayer::volumeChanged(int)
+	?volumeChanged@QMediaPlayerControl@@IAEXH@Z @ 646 NONAME ; void QMediaPlayerControl::volumeChanged(int)
+	?volumeChanged@QSoundEffect@@IAEXXZ @ 647 NONAME ; void QSoundEffect::volumeChanged(void)
+	?writableChanged@QMetaDataControl@@IAEX_N@Z @ 648 NONAME ; void QMetaDataControl::writableChanged(bool)
+	?staticMetaObject@QMediaPlaylistProvider@@2UQMetaObject@@B @ 649 NONAME ; struct QMetaObject const QMediaPlaylistProvider::staticMetaObject
+	?staticMetaObject@QSoundEffect@@2UQMetaObject@@B @ 650 NONAME ; struct QMetaObject const QSoundEffect::staticMetaObject
+	?staticMetaObject@QVideoWidget@@2UQMetaObject@@B @ 651 NONAME ; struct QMetaObject const QVideoWidget::staticMetaObject
+	?staticMetaObject@QMediaPlaylistControl@@2UQMetaObject@@B @ 652 NONAME ; struct QMetaObject const QMediaPlaylistControl::staticMetaObject
+	?staticMetaObject@QMediaControl@@2UQMetaObject@@B @ 653 NONAME ; struct QMetaObject const QMediaControl::staticMetaObject
+	?staticMetaObject@QLocalMediaPlaylistProvider@@2UQMetaObject@@B @ 654 NONAME ; struct QMetaObject const QLocalMediaPlaylistProvider::staticMetaObject
+	?staticMetaObject@QMediaServiceProviderPlugin@@2UQMetaObject@@B @ 655 NONAME ; struct QMetaObject const QMediaServiceProviderPlugin::staticMetaObject
+	?staticMetaObject@QVideoOutputControl@@2UQMetaObject@@B @ 656 NONAME ; struct QMetaObject const QVideoOutputControl::staticMetaObject
+	?staticMetaObject@QMetaDataControl@@2UQMetaObject@@B @ 657 NONAME ; struct QMetaObject const QMetaDataControl::staticMetaObject
+	?staticMetaObject@QMediaPlayer@@2UQMetaObject@@B @ 658 NONAME ; struct QMetaObject const QMediaPlayer::staticMetaObject
+	?staticMetaObject@QMediaService@@2UQMetaObject@@B @ 659 NONAME ; struct QMetaObject const QMediaService::staticMetaObject
+	?staticMetaObject@QMediaObject@@2UQMetaObject@@B @ 660 NONAME ; struct QMetaObject const QMediaObject::staticMetaObject
+	?staticMetaObject@QMediaPlaylist@@2UQMetaObject@@B @ 661 NONAME ; struct QMetaObject const QMediaPlaylist::staticMetaObject
+	?staticMetaObject@QMediaServiceProvider@@2UQMetaObject@@B @ 662 NONAME ; struct QMetaObject const QMediaServiceProvider::staticMetaObject
+	?staticMetaObject@QMediaPlayerControl@@2UQMetaObject@@B @ 663 NONAME ; struct QMetaObject const QMediaPlayerControl::staticMetaObject
+	?staticMetaObject@QMediaPlaylistNavigator@@2UQMetaObject@@B @ 664 NONAME ; struct QMetaObject const QMediaPlaylistNavigator::staticMetaObject
+	?staticMetaObject@QVideoWidgetControl@@2UQMetaObject@@B @ 665 NONAME ; struct QMetaObject const QVideoWidgetControl::staticMetaObject
+	?staticMetaObject@QVideoWindowControl@@2UQMetaObject@@B @ 666 NONAME ; struct QMetaObject const QVideoWindowControl::staticMetaObject
+	?staticMetaObject@QVideoDeviceControl@@2UQMetaObject@@B @ 667 NONAME ; struct QMetaObject const QVideoDeviceControl::staticMetaObject
+	?staticMetaObject@QVideoRendererControl@@2UQMetaObject@@B @ 668 NONAME ; struct QMetaObject const QVideoRendererControl::staticMetaObject
+	?staticMetaObject@QPainterVideoSurface@@2UQMetaObject@@B @ 669 NONAME ; struct QMetaObject const QPainterVideoSurface::staticMetaObject
+	?staticMetaObject@QMediaPlaylistIOPlugin@@2UQMetaObject@@B @ 670 NONAME ; struct QMetaObject const QMediaPlaylistIOPlugin::staticMetaObject
+	?staticMetaObject@QGraphicsVideoItem@@2UQMetaObject@@B @ 671 NONAME ; struct QMetaObject const QGraphicsVideoItem::staticMetaObject
+
diff --git a/src/s60installs/bwins/QtMultimediau.def b/src/s60installs/bwins/QtMultimediau.def
index ad33993..b0e6368 100644
--- a/src/s60installs/bwins/QtMultimediau.def
+++ b/src/s60installs/bwins/QtMultimediau.def
@@ -268,684 +268,10 @@ EXPORTS
 	?staticMetaObject@QAbstractAudioOutput@@2UQMetaObject@@B @ 267 NONAME ; struct QMetaObject const QAbstractAudioOutput::staticMetaObject
 	?staticMetaObject@QAudioOutput@@2UQMetaObject@@B @ 268 NONAME ; struct QMetaObject const QAudioOutput::staticMetaObject
 	?staticMetaObject@QAbstractAudioInput@@2UQMetaObject@@B @ 269 NONAME ; struct QMetaObject const QAbstractAudioInput::staticMetaObject
-	??0QGraphicsVideoItem@@QAE@PAVQGraphicsItem@@@Z @ 270 NONAME ; QGraphicsVideoItem::QGraphicsVideoItem(class QGraphicsItem *)
-	??0QLocalMediaPlaylistProvider@@QAE@PAVQObject@@@Z @ 271 NONAME ; QLocalMediaPlaylistProvider::QLocalMediaPlaylistProvider(class QObject *)
-	??0QMediaContent@@QAE@ABV0@@Z @ 272 NONAME ; QMediaContent::QMediaContent(class QMediaContent const &)
-	??0QMediaContent@@QAE@ABV?$QList@VQMediaResource@@@@@Z @ 273 NONAME ; QMediaContent::QMediaContent(class QList<class QMediaResource> const &)
-	??0QMediaContent@@QAE@ABVQMediaResource@@@Z @ 274 NONAME ; QMediaContent::QMediaContent(class QMediaResource const &)
-	??0QMediaContent@@QAE@ABVQNetworkRequest@@@Z @ 275 NONAME ; QMediaContent::QMediaContent(class QNetworkRequest const &)
-	??0QMediaContent@@QAE@ABVQUrl@@@Z @ 276 NONAME ; QMediaContent::QMediaContent(class QUrl const &)
-	??0QMediaContent@@QAE@XZ @ 277 NONAME ; QMediaContent::QMediaContent(void)
-	??0QMediaControl@@IAE@AAVQMediaControlPrivate@@PAVQObject@@@Z @ 278 NONAME ; QMediaControl::QMediaControl(class QMediaControlPrivate &, class QObject *)
-	??0QMediaControl@@IAE@PAVQObject@@@Z @ 279 NONAME ; QMediaControl::QMediaControl(class QObject *)
-	??0QMediaObject@@IAE@AAVQMediaObjectPrivate@@PAVQObject@@PAVQMediaService@@@Z @ 280 NONAME ; QMediaObject::QMediaObject(class QMediaObjectPrivate &, class QObject *, class QMediaService *)
-	??0QMediaObject@@IAE@PAVQObject@@PAVQMediaService@@@Z @ 281 NONAME ; QMediaObject::QMediaObject(class QObject *, class QMediaService *)
-	??0QMediaPlayer@@QAE@PAVQObject@@V?$QFlags@W4Flag@QMediaPlayer@@@@PAVQMediaServiceProvider@@@Z @ 282 NONAME ; QMediaPlayer::QMediaPlayer(class QObject *, class QFlags<enum QMediaPlayer::Flag>, class QMediaServiceProvider *)
-	??0QMediaPlayerControl@@IAE@PAVQObject@@@Z @ 283 NONAME ; QMediaPlayerControl::QMediaPlayerControl(class QObject *)
-	??0QMediaPlaylist@@QAE@PAVQObject@@@Z @ 284 NONAME ; QMediaPlaylist::QMediaPlaylist(class QObject *)
-	??0QMediaPlaylistControl@@IAE@PAVQObject@@@Z @ 285 NONAME ; QMediaPlaylistControl::QMediaPlaylistControl(class QObject *)
-	??0QMediaPlaylistIOPlugin@@QAE@PAVQObject@@@Z @ 286 NONAME ; QMediaPlaylistIOPlugin::QMediaPlaylistIOPlugin(class QObject *)
-	??0QMediaPlaylistNavigator@@QAE@PAVQMediaPlaylistProvider@@PAVQObject@@@Z @ 287 NONAME ; QMediaPlaylistNavigator::QMediaPlaylistNavigator(class QMediaPlaylistProvider *, class QObject *)
-	??0QMediaPlaylistProvider@@IAE@AAVQMediaPlaylistProviderPrivate@@PAVQObject@@@Z @ 288 NONAME ; QMediaPlaylistProvider::QMediaPlaylistProvider(class QMediaPlaylistProviderPrivate &, class QObject *)
-	??0QMediaPlaylistProvider@@QAE@PAVQObject@@@Z @ 289 NONAME ; QMediaPlaylistProvider::QMediaPlaylistProvider(class QObject *)
-	??0QMediaResource@@QAE@ABV0@@Z @ 290 NONAME ; QMediaResource::QMediaResource(class QMediaResource const &)
-	??0QMediaResource@@QAE@ABVQNetworkRequest@@ABVQString@@@Z @ 291 NONAME ; QMediaResource::QMediaResource(class QNetworkRequest const &, class QString const &)
-	??0QMediaResource@@QAE@ABVQUrl@@ABVQString@@@Z @ 292 NONAME ; QMediaResource::QMediaResource(class QUrl const &, class QString const &)
-	??0QMediaResource@@QAE@XZ @ 293 NONAME ; QMediaResource::QMediaResource(void)
-	??0QMediaService@@IAE@AAVQMediaServicePrivate@@PAVQObject@@@Z @ 294 NONAME ; QMediaService::QMediaService(class QMediaServicePrivate &, class QObject *)
-	??0QMediaService@@IAE@PAVQObject@@@Z @ 295 NONAME ; QMediaService::QMediaService(class QObject *)
-	??0QMediaServiceProviderHint@@QAE@ABV0@@Z @ 296 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QMediaServiceProviderHint const &)
-	??0QMediaServiceProviderHint@@QAE@ABVQByteArray@@@Z @ 297 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QByteArray const &)
-	??0QMediaServiceProviderHint@@QAE@ABVQString@@ABVQStringList@@@Z @ 298 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QString const &, class QStringList const &)
-	??0QMediaServiceProviderHint@@QAE@V?$QFlags@W4Feature@QMediaServiceProviderHint@@@@@Z @ 299 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(class QFlags<enum QMediaServiceProviderHint::Feature>)
-	??0QMediaServiceProviderHint@@QAE@XZ @ 300 NONAME ; QMediaServiceProviderHint::QMediaServiceProviderHint(void)
-	??0QMediaTimeInterval@@QAE@ABV0@@Z @ 301 NONAME ; QMediaTimeInterval::QMediaTimeInterval(class QMediaTimeInterval const &)
-	??0QMediaTimeInterval@@QAE@XZ @ 302 NONAME ; QMediaTimeInterval::QMediaTimeInterval(void)
-	??0QMediaTimeInterval@@QAE@_J0@Z @ 303 NONAME ; QMediaTimeInterval::QMediaTimeInterval(long long, long long)
-	??0QMediaTimeRange@@QAE@ABV0@@Z @ 304 NONAME ; QMediaTimeRange::QMediaTimeRange(class QMediaTimeRange const &)
-	??0QMediaTimeRange@@QAE@ABVQMediaTimeInterval@@@Z @ 305 NONAME ; QMediaTimeRange::QMediaTimeRange(class QMediaTimeInterval const &)
-	??0QMediaTimeRange@@QAE@XZ @ 306 NONAME ; QMediaTimeRange::QMediaTimeRange(void)
-	??0QMediaTimeRange@@QAE@_J0@Z @ 307 NONAME ; QMediaTimeRange::QMediaTimeRange(long long, long long)
-	??0QMetaDataControl@@IAE@PAVQObject@@@Z @ 308 NONAME ; QMetaDataControl::QMetaDataControl(class QObject *)
-	??0QPainterVideoSurface@@QAE@PAVQObject@@@Z @ 309 NONAME ; QPainterVideoSurface::QPainterVideoSurface(class QObject *)
-	??0QVideoDeviceControl@@IAE@PAVQObject@@@Z @ 310 NONAME ; QVideoDeviceControl::QVideoDeviceControl(class QObject *)
-	??0QVideoOutputControl@@IAE@PAVQObject@@@Z @ 311 NONAME ; QVideoOutputControl::QVideoOutputControl(class QObject *)
-	??0QVideoRendererControl@@IAE@PAVQObject@@@Z @ 312 NONAME ; QVideoRendererControl::QVideoRendererControl(class QObject *)
-	??0QVideoWidget@@QAE@PAVQWidget@@@Z @ 313 NONAME ; QVideoWidget::QVideoWidget(class QWidget *)
-	??0QVideoWidgetControl@@IAE@PAVQObject@@@Z @ 314 NONAME ; QVideoWidgetControl::QVideoWidgetControl(class QObject *)
-	??0QVideoWindowControl@@IAE@PAVQObject@@@Z @ 315 NONAME ; QVideoWindowControl::QVideoWindowControl(class QObject *)
-	??1QGraphicsVideoItem@@UAE@XZ @ 316 NONAME ; QGraphicsVideoItem::~QGraphicsVideoItem(void)
-	??1QLocalMediaPlaylistProvider@@UAE@XZ @ 317 NONAME ; QLocalMediaPlaylistProvider::~QLocalMediaPlaylistProvider(void)
-	??1QMediaContent@@QAE@XZ @ 318 NONAME ; QMediaContent::~QMediaContent(void)
-	??1QMediaControl@@UAE@XZ @ 319 NONAME ; QMediaControl::~QMediaControl(void)
-	??1QMediaObject@@UAE@XZ @ 320 NONAME ; QMediaObject::~QMediaObject(void)
-	??1QMediaPlayer@@UAE@XZ @ 321 NONAME ; QMediaPlayer::~QMediaPlayer(void)
-	??1QMediaPlayerControl@@UAE@XZ @ 322 NONAME ; QMediaPlayerControl::~QMediaPlayerControl(void)
-	??1QMediaPlaylist@@UAE@XZ @ 323 NONAME ; QMediaPlaylist::~QMediaPlaylist(void)
-	??1QMediaPlaylistControl@@UAE@XZ @ 324 NONAME ; QMediaPlaylistControl::~QMediaPlaylistControl(void)
-	??1QMediaPlaylistIOInterface@@UAE@XZ @ 325 NONAME ; QMediaPlaylistIOInterface::~QMediaPlaylistIOInterface(void)
-	??1QMediaPlaylistIOPlugin@@UAE@XZ @ 326 NONAME ; QMediaPlaylistIOPlugin::~QMediaPlaylistIOPlugin(void)
-	??1QMediaPlaylistNavigator@@UAE@XZ @ 327 NONAME ; QMediaPlaylistNavigator::~QMediaPlaylistNavigator(void)
-	??1QMediaPlaylistProvider@@UAE@XZ @ 328 NONAME ; QMediaPlaylistProvider::~QMediaPlaylistProvider(void)
-	??1QMediaPlaylistReader@@UAE@XZ @ 329 NONAME ; QMediaPlaylistReader::~QMediaPlaylistReader(void)
-	??1QMediaPlaylistWriter@@UAE@XZ @ 330 NONAME ; QMediaPlaylistWriter::~QMediaPlaylistWriter(void)
-	??1QMediaResource@@QAE@XZ @ 331 NONAME ; QMediaResource::~QMediaResource(void)
-	??1QMediaService@@UAE@XZ @ 332 NONAME ; QMediaService::~QMediaService(void)
-	??1QMediaServiceFeaturesInterface@@UAE@XZ @ 333 NONAME ; QMediaServiceFeaturesInterface::~QMediaServiceFeaturesInterface(void)
-	??1QMediaServiceProvider@@UAE@XZ @ 334 NONAME ; QMediaServiceProvider::~QMediaServiceProvider(void)
-	??1QMediaServiceProviderHint@@QAE@XZ @ 335 NONAME ; QMediaServiceProviderHint::~QMediaServiceProviderHint(void)
-	??1QMediaServiceSupportedDevicesInterface@@UAE@XZ @ 336 NONAME ; QMediaServiceSupportedDevicesInterface::~QMediaServiceSupportedDevicesInterface(void)
-	??1QMediaServiceSupportedFormatsInterface@@UAE@XZ @ 337 NONAME ; QMediaServiceSupportedFormatsInterface::~QMediaServiceSupportedFormatsInterface(void)
-	??1QMediaTimeRange@@QAE@XZ @ 338 NONAME ; QMediaTimeRange::~QMediaTimeRange(void)
-	??1QMetaDataControl@@UAE@XZ @ 339 NONAME ; QMetaDataControl::~QMetaDataControl(void)
-	??1QPainterVideoSurface@@UAE@XZ @ 340 NONAME ; QPainterVideoSurface::~QPainterVideoSurface(void)
-	??1QVideoDeviceControl@@UAE@XZ @ 341 NONAME ; QVideoDeviceControl::~QVideoDeviceControl(void)
-	??1QVideoOutputControl@@UAE@XZ @ 342 NONAME ; QVideoOutputControl::~QVideoOutputControl(void)
-	??1QVideoRendererControl@@UAE@XZ @ 343 NONAME ; QVideoRendererControl::~QVideoRendererControl(void)
-	??1QVideoWidget@@UAE@XZ @ 344 NONAME ; QVideoWidget::~QVideoWidget(void)
-	??1QVideoWidgetControl@@UAE@XZ @ 345 NONAME ; QVideoWidgetControl::~QVideoWidgetControl(void)
-	??1QVideoWindowControl@@UAE@XZ @ 346 NONAME ; QVideoWindowControl::~QVideoWindowControl(void)
-	??4QMediaContent@@QAEAAV0@ABV0@@Z @ 347 NONAME ; class QMediaContent & QMediaContent::operator=(class QMediaContent const &)
-	??4QMediaResource@@QAEAAV0@ABV0@@Z @ 348 NONAME ; class QMediaResource & QMediaResource::operator=(class QMediaResource const &)
-	??4QMediaServiceProviderHint@@QAEAAV0@ABV0@@Z @ 349 NONAME ; class QMediaServiceProviderHint & QMediaServiceProviderHint::operator=(class QMediaServiceProviderHint const &)
-	??4QMediaTimeRange@@QAEAAV0@ABV0@@Z @ 350 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator=(class QMediaTimeRange const &)
-	??4QMediaTimeRange@@QAEAAV0@ABVQMediaTimeInterval@@@Z @ 351 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator=(class QMediaTimeInterval const &)
-	??8@YA_NABVQMediaTimeInterval@@0@Z @ 352 NONAME ; bool operator==(class QMediaTimeInterval const &, class QMediaTimeInterval const &)
-	??8@YA_NABVQMediaTimeRange@@0@Z @ 353 NONAME ; bool operator==(class QMediaTimeRange const &, class QMediaTimeRange const &)
-	??8QMediaContent@@QBE_NABV0@@Z @ 354 NONAME ; bool QMediaContent::operator==(class QMediaContent const &) const
-	??8QMediaResource@@QBE_NABV0@@Z @ 355 NONAME ; bool QMediaResource::operator==(class QMediaResource const &) const
-	??8QMediaServiceProviderHint@@QBE_NABV0@@Z @ 356 NONAME ; bool QMediaServiceProviderHint::operator==(class QMediaServiceProviderHint const &) const
-	??9@YA_NABVQMediaTimeInterval@@0@Z @ 357 NONAME ; bool operator!=(class QMediaTimeInterval const &, class QMediaTimeInterval const &)
-	??9@YA_NABVQMediaTimeRange@@0@Z @ 358 NONAME ; bool operator!=(class QMediaTimeRange const &, class QMediaTimeRange const &)
-	??9QMediaContent@@QBE_NABV0@@Z @ 359 NONAME ; bool QMediaContent::operator!=(class QMediaContent const &) const
-	??9QMediaResource@@QBE_NABV0@@Z @ 360 NONAME ; bool QMediaResource::operator!=(class QMediaResource const &) const
-	??9QMediaServiceProviderHint@@QBE_NABV0@@Z @ 361 NONAME ; bool QMediaServiceProviderHint::operator!=(class QMediaServiceProviderHint const &) const
-	??G@YA?AVQMediaTimeRange@@ABV0@0@Z @ 362 NONAME ; class QMediaTimeRange operator-(class QMediaTimeRange const &, class QMediaTimeRange const &)
-	??H@YA?AVQMediaTimeRange@@ABV0@0@Z @ 363 NONAME ; class QMediaTimeRange operator+(class QMediaTimeRange const &, class QMediaTimeRange const &)
-	??YQMediaTimeRange@@QAEAAV0@ABV0@@Z @ 364 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator+=(class QMediaTimeRange const &)
-	??YQMediaTimeRange@@QAEAAV0@ABVQMediaTimeInterval@@@Z @ 365 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator+=(class QMediaTimeInterval const &)
-	??ZQMediaTimeRange@@QAEAAV0@ABV0@@Z @ 366 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator-=(class QMediaTimeRange const &)
-	??ZQMediaTimeRange@@QAEAAV0@ABVQMediaTimeInterval@@@Z @ 367 NONAME ; class QMediaTimeRange & QMediaTimeRange::operator-=(class QMediaTimeInterval const &)
-	??_EQGraphicsVideoItem@@UAE@I@Z @ 368 NONAME ; QGraphicsVideoItem::~QGraphicsVideoItem(unsigned int)
-	??_EQLocalMediaPlaylistProvider@@UAE@I@Z @ 369 NONAME ; QLocalMediaPlaylistProvider::~QLocalMediaPlaylistProvider(unsigned int)
-	??_EQMediaControl@@UAE@I@Z @ 370 NONAME ; QMediaControl::~QMediaControl(unsigned int)
-	??_EQMediaObject@@UAE@I@Z @ 371 NONAME ; QMediaObject::~QMediaObject(unsigned int)
-	??_EQMediaPlayer@@UAE@I@Z @ 372 NONAME ; QMediaPlayer::~QMediaPlayer(unsigned int)
-	??_EQMediaPlayerControl@@UAE@I@Z @ 373 NONAME ; QMediaPlayerControl::~QMediaPlayerControl(unsigned int)
-	??_EQMediaPlaylist@@UAE@I@Z @ 374 NONAME ; QMediaPlaylist::~QMediaPlaylist(unsigned int)
-	??_EQMediaPlaylistControl@@UAE@I@Z @ 375 NONAME ; QMediaPlaylistControl::~QMediaPlaylistControl(unsigned int)
-	??_EQMediaPlaylistIOInterface@@UAE@I@Z @ 376 NONAME ; QMediaPlaylistIOInterface::~QMediaPlaylistIOInterface(unsigned int)
-	??_EQMediaPlaylistIOPlugin@@UAE@I@Z @ 377 NONAME ; QMediaPlaylistIOPlugin::~QMediaPlaylistIOPlugin(unsigned int)
-	??_EQMediaPlaylistNavigator@@UAE@I@Z @ 378 NONAME ; QMediaPlaylistNavigator::~QMediaPlaylistNavigator(unsigned int)
-	??_EQMediaPlaylistProvider@@UAE@I@Z @ 379 NONAME ; QMediaPlaylistProvider::~QMediaPlaylistProvider(unsigned int)
-	??_EQMediaPlaylistReader@@UAE@I@Z @ 380 NONAME ; QMediaPlaylistReader::~QMediaPlaylistReader(unsigned int)
-	??_EQMediaPlaylistWriter@@UAE@I@Z @ 381 NONAME ; QMediaPlaylistWriter::~QMediaPlaylistWriter(unsigned int)
-	??_EQMediaService@@UAE@I@Z @ 382 NONAME ; QMediaService::~QMediaService(unsigned int)
-	??_EQMediaServiceFeaturesInterface@@UAE@I@Z @ 383 NONAME ; QMediaServiceFeaturesInterface::~QMediaServiceFeaturesInterface(unsigned int)
-	??_EQMediaServiceProvider@@UAE@I@Z @ 384 NONAME ; QMediaServiceProvider::~QMediaServiceProvider(unsigned int)
-	??_EQMediaServiceSupportedDevicesInterface@@UAE@I@Z @ 385 NONAME ; QMediaServiceSupportedDevicesInterface::~QMediaServiceSupportedDevicesInterface(unsigned int)
-	??_EQMediaServiceSupportedFormatsInterface@@UAE@I@Z @ 386 NONAME ; QMediaServiceSupportedFormatsInterface::~QMediaServiceSupportedFormatsInterface(unsigned int)
-	??_EQMetaDataControl@@UAE@I@Z @ 387 NONAME ; QMetaDataControl::~QMetaDataControl(unsigned int)
-	??_EQPainterVideoSurface@@UAE@I@Z @ 388 NONAME ; QPainterVideoSurface::~QPainterVideoSurface(unsigned int)
-	??_EQVideoDeviceControl@@UAE@I@Z @ 389 NONAME ; QVideoDeviceControl::~QVideoDeviceControl(unsigned int)
-	??_EQVideoOutputControl@@UAE@I@Z @ 390 NONAME ; QVideoOutputControl::~QVideoOutputControl(unsigned int)
-	??_EQVideoRendererControl@@UAE@I@Z @ 391 NONAME ; QVideoRendererControl::~QVideoRendererControl(unsigned int)
-	??_EQVideoWidget@@UAE@I@Z @ 392 NONAME ; QVideoWidget::~QVideoWidget(unsigned int)
-	??_EQVideoWidgetControl@@UAE@I@Z @ 393 NONAME ; QVideoWidgetControl::~QVideoWidgetControl(unsigned int)
-	??_EQVideoWindowControl@@UAE@I@Z @ 394 NONAME ; QVideoWindowControl::~QVideoWindowControl(unsigned int)
-	?activated@QMediaPlaylistNavigator@@IAEXABVQMediaContent@@@Z @ 395 NONAME ; void QMediaPlaylistNavigator::activated(class QMediaContent const &)
-	?addInterval@QMediaTimeRange@@QAEXABVQMediaTimeInterval@@@Z @ 396 NONAME ; void QMediaTimeRange::addInterval(class QMediaTimeInterval const &)
-	?addInterval@QMediaTimeRange@@QAEX_J0@Z @ 397 NONAME ; void QMediaTimeRange::addInterval(long long, long long)
-	?addMedia@QLocalMediaPlaylistProvider@@UAE_NABV?$QList@VQMediaContent@@@@@Z @ 398 NONAME ; bool QLocalMediaPlaylistProvider::addMedia(class QList<class QMediaContent> const &)
-	?addMedia@QLocalMediaPlaylistProvider@@UAE_NABVQMediaContent@@@Z @ 399 NONAME ; bool QLocalMediaPlaylistProvider::addMedia(class QMediaContent const &)
-	?addMedia@QMediaPlaylist@@QAE_NABV?$QList@VQMediaContent@@@@@Z @ 400 NONAME ; bool QMediaPlaylist::addMedia(class QList<class QMediaContent> const &)
-	?addMedia@QMediaPlaylist@@QAE_NABVQMediaContent@@@Z @ 401 NONAME ; bool QMediaPlaylist::addMedia(class QMediaContent const &)
-	?addMedia@QMediaPlaylistProvider@@UAE_NABV?$QList@VQMediaContent@@@@@Z @ 402 NONAME ; bool QMediaPlaylistProvider::addMedia(class QList<class QMediaContent> const &)
-	?addMedia@QMediaPlaylistProvider@@UAE_NABVQMediaContent@@@Z @ 403 NONAME ; bool QMediaPlaylistProvider::addMedia(class QMediaContent const &)
-	?addPropertyWatch@QMediaObject@@IAEXABVQByteArray@@@Z @ 404 NONAME ; void QMediaObject::addPropertyWatch(class QByteArray const &)
-	?addTimeRange@QMediaTimeRange@@QAEXABV1@@Z @ 405 NONAME ; void QMediaTimeRange::addTimeRange(class QMediaTimeRange const &)
-	?aspectRatioMode@QGraphicsVideoItem@@QBE?AW4AspectRatioMode@Qt@@XZ @ 406 NONAME ; enum Qt::AspectRatioMode QGraphicsVideoItem::aspectRatioMode(void) const
-	?aspectRatioMode@QVideoWidget@@QBE?AW4AspectRatioMode@1@XZ @ 407 NONAME ABSENT ; enum QVideoWidget::AspectRatioMode QVideoWidget::aspectRatioMode(void) const
-	?audioAvailableChanged@QMediaPlayer@@IAEX_N@Z @ 408 NONAME ; void QMediaPlayer::audioAvailableChanged(bool)
-	?audioAvailableChanged@QMediaPlayerControl@@IAEX_N@Z @ 409 NONAME ; void QMediaPlayerControl::audioAvailableChanged(bool)
-	?audioBitRate@QMediaResource@@QBEHXZ @ 410 NONAME ; int QMediaResource::audioBitRate(void) const
-	?audioCodec@QMediaResource@@QBE?AVQString@@XZ @ 411 NONAME ; class QString QMediaResource::audioCodec(void) const
-	?availabilityChanged@QMediaObject@@IAEX_N@Z @ 412 NONAME ; void QMediaObject::availabilityChanged(bool)
-	?availabilityError@QMediaObject@@UBE?AW4AvailabilityError@QtMultimedia@@XZ @ 413 NONAME ; enum QtMultimedia::AvailabilityError QMediaObject::availabilityError(void) const
-	?availableExtendedMetaData@QMediaObject@@QBE?AVQStringList@@XZ @ 414 NONAME ; class QStringList QMediaObject::availableExtendedMetaData(void) const
-	?availableMetaData@QMediaObject@@QBE?AV?$QList@W4MetaData@QtMultimedia@@@@XZ @ 415 NONAME ; class QList<enum QtMultimedia::MetaData> QMediaObject::availableMetaData(void) const
-	?availableOutputsChanged@QVideoOutputControl@@IAEXABV?$QList@W4Output@QVideoOutputControl@@@@@Z @ 416 NONAME ; void QVideoOutputControl::availableOutputsChanged(class QList<enum QVideoOutputControl::Output> const &)
-	?availablePlaybackRangesChanged@QMediaPlayerControl@@IAEXABVQMediaTimeRange@@@Z @ 417 NONAME ; void QMediaPlayerControl::availablePlaybackRangesChanged(class QMediaTimeRange const &)
-	?bind@QMediaObject@@UAEXPAVQObject@@@Z @ 418 NONAME ; void QMediaObject::bind(class QObject *)
-	?bind@QMediaPlayer@@UAEXPAVQObject@@@Z @ 419 NONAME ; void QMediaPlayer::bind(class QObject *)
-	?boundingRect@QGraphicsVideoItem@@UBE?AVQRectF@@XZ @ 420 NONAME ; class QRectF QGraphicsVideoItem::boundingRect(void) const
-	?brightness@QPainterVideoSurface@@QBEHXZ @ 421 NONAME ; int QPainterVideoSurface::brightness(void) const
-	?brightness@QVideoWidget@@QBEHXZ @ 422 NONAME ; int QVideoWidget::brightness(void) const
-	?brightnessChanged@QVideoWidget@@IAEXH@Z @ 423 NONAME ; void QVideoWidget::brightnessChanged(int)
-	?brightnessChanged@QVideoWidgetControl@@IAEXH@Z @ 424 NONAME ; void QVideoWidgetControl::brightnessChanged(int)
-	?brightnessChanged@QVideoWindowControl@@IAEXH@Z @ 425 NONAME ; void QVideoWindowControl::brightnessChanged(int)
-	?bufferStatus@QMediaPlayer@@QBEHXZ @ 426 NONAME ; int QMediaPlayer::bufferStatus(void) const
-	?bufferStatusChanged@QMediaPlayer@@IAEXH@Z @ 427 NONAME ; void QMediaPlayer::bufferStatusChanged(int)
-	?bufferStatusChanged@QMediaPlayerControl@@IAEXH@Z @ 428 NONAME ; void QMediaPlayerControl::bufferStatusChanged(int)
-	?canonicalRequest@QMediaContent@@QBE?AVQNetworkRequest@@XZ @ 429 NONAME ; class QNetworkRequest QMediaContent::canonicalRequest(void) const
-	?canonicalResource@QMediaContent@@QBE?AVQMediaResource@@XZ @ 430 NONAME ; class QMediaResource QMediaContent::canonicalResource(void) const
-	?canonicalUrl@QMediaContent@@QBE?AVQUrl@@XZ @ 431 NONAME ; class QUrl QMediaContent::canonicalUrl(void) const
-	?channelCount@QAudioFormat@@QBEHXZ @ 432 NONAME ; int QAudioFormat::channelCount(void) const
-	?channelCount@QMediaResource@@QBEHXZ @ 433 NONAME ; int QMediaResource::channelCount(void) const
-	?clear@QLocalMediaPlaylistProvider@@UAE_NXZ @ 434 NONAME ; bool QLocalMediaPlaylistProvider::clear(void)
-	?clear@QMediaPlaylist@@QAE_NXZ @ 435 NONAME ; bool QMediaPlaylist::clear(void)
-	?clear@QMediaPlaylistProvider@@UAE_NXZ @ 436 NONAME ; bool QMediaPlaylistProvider::clear(void)
-	?clear@QMediaTimeRange@@QAEXXZ @ 437 NONAME ; void QMediaTimeRange::clear(void)
-	?codecs@QMediaServiceProviderHint@@QBE?AVQStringList@@XZ @ 438 NONAME ; class QStringList QMediaServiceProviderHint::codecs(void) const
-	?contains@QMediaTimeInterval@@QBE_N_J@Z @ 439 NONAME ; bool QMediaTimeInterval::contains(long long) const
-	?contains@QMediaTimeRange@@QBE_N_J@Z @ 440 NONAME ; bool QMediaTimeRange::contains(long long) const
-	?contrast@QPainterVideoSurface@@QBEHXZ @ 441 NONAME ; int QPainterVideoSurface::contrast(void) const
-	?contrast@QVideoWidget@@QBEHXZ @ 442 NONAME ; int QVideoWidget::contrast(void) const
-	?contrastChanged@QVideoWidget@@IAEXH@Z @ 443 NONAME ; void QVideoWidget::contrastChanged(int)
-	?contrastChanged@QVideoWidgetControl@@IAEXH@Z @ 444 NONAME ; void QVideoWidgetControl::contrastChanged(int)
-	?contrastChanged@QVideoWindowControl@@IAEXH@Z @ 445 NONAME ; void QVideoWindowControl::contrastChanged(int)
-	?createPainter@QPainterVideoSurface@@AAEXXZ @ 446 NONAME ; void QPainterVideoSurface::createPainter(void)
-	?currentIndex@QMediaPlaylist@@QBEHXZ @ 447 NONAME ; int QMediaPlaylist::currentIndex(void) const
-	?currentIndex@QMediaPlaylistNavigator@@QBEHXZ @ 448 NONAME ; int QMediaPlaylistNavigator::currentIndex(void) const
-	?currentIndexChanged@QMediaPlaylist@@IAEXH@Z @ 449 NONAME ; void QMediaPlaylist::currentIndexChanged(int)
-	?currentIndexChanged@QMediaPlaylistControl@@IAEXH@Z @ 450 NONAME ; void QMediaPlaylistControl::currentIndexChanged(int)
-	?currentIndexChanged@QMediaPlaylistNavigator@@IAEXH@Z @ 451 NONAME ; void QMediaPlaylistNavigator::currentIndexChanged(int)
-	?currentItem@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@XZ @ 452 NONAME ; class QMediaContent QMediaPlaylistNavigator::currentItem(void) const
-	?currentMedia@QMediaPlaylist@@QBE?AVQMediaContent@@XZ @ 453 NONAME ; class QMediaContent QMediaPlaylist::currentMedia(void) const
-	?currentMediaChanged@QMediaPlaylist@@IAEXABVQMediaContent@@@Z @ 454 NONAME ; void QMediaPlaylist::currentMediaChanged(class QMediaContent const &)
-	?currentMediaChanged@QMediaPlaylistControl@@IAEXABVQMediaContent@@@Z @ 455 NONAME ; void QMediaPlaylistControl::currentMediaChanged(class QMediaContent const &)
-	?d_func@QGraphicsVideoItem@@AAEPAVQGraphicsVideoItemPrivate@@XZ @ 456 NONAME ; class QGraphicsVideoItemPrivate * QGraphicsVideoItem::d_func(void)
-	?d_func@QGraphicsVideoItem@@ABEPBVQGraphicsVideoItemPrivate@@XZ @ 457 NONAME ; class QGraphicsVideoItemPrivate const * QGraphicsVideoItem::d_func(void) const
-	?d_func@QLocalMediaPlaylistProvider@@AAEPAVQLocalMediaPlaylistProviderPrivate@@XZ @ 458 NONAME ; class QLocalMediaPlaylistProviderPrivate * QLocalMediaPlaylistProvider::d_func(void)
-	?d_func@QLocalMediaPlaylistProvider@@ABEPBVQLocalMediaPlaylistProviderPrivate@@XZ @ 459 NONAME ; class QLocalMediaPlaylistProviderPrivate const * QLocalMediaPlaylistProvider::d_func(void) const
-	?d_func@QMediaControl@@AAEPAVQMediaControlPrivate@@XZ @ 460 NONAME ; class QMediaControlPrivate * QMediaControl::d_func(void)
-	?d_func@QMediaControl@@ABEPBVQMediaControlPrivate@@XZ @ 461 NONAME ; class QMediaControlPrivate const * QMediaControl::d_func(void) const
-	?d_func@QMediaObject@@AAEPAVQMediaObjectPrivate@@XZ @ 462 NONAME ; class QMediaObjectPrivate * QMediaObject::d_func(void)
-	?d_func@QMediaObject@@ABEPBVQMediaObjectPrivate@@XZ @ 463 NONAME ; class QMediaObjectPrivate const * QMediaObject::d_func(void) const
-	?d_func@QMediaPlayer@@AAEPAVQMediaPlayerPrivate@@XZ @ 464 NONAME ; class QMediaPlayerPrivate * QMediaPlayer::d_func(void)
-	?d_func@QMediaPlayer@@ABEPBVQMediaPlayerPrivate@@XZ @ 465 NONAME ; class QMediaPlayerPrivate const * QMediaPlayer::d_func(void) const
-	?d_func@QMediaPlaylist@@AAEPAVQMediaPlaylistPrivate@@XZ @ 466 NONAME ; class QMediaPlaylistPrivate * QMediaPlaylist::d_func(void)
-	?d_func@QMediaPlaylist@@ABEPBVQMediaPlaylistPrivate@@XZ @ 467 NONAME ; class QMediaPlaylistPrivate const * QMediaPlaylist::d_func(void) const
-	?d_func@QMediaPlaylistNavigator@@AAEPAVQMediaPlaylistNavigatorPrivate@@XZ @ 468 NONAME ; class QMediaPlaylistNavigatorPrivate * QMediaPlaylistNavigator::d_func(void)
-	?d_func@QMediaPlaylistNavigator@@ABEPBVQMediaPlaylistNavigatorPrivate@@XZ @ 469 NONAME ; class QMediaPlaylistNavigatorPrivate const * QMediaPlaylistNavigator::d_func(void) const
-	?d_func@QMediaPlaylistProvider@@AAEPAVQMediaPlaylistProviderPrivate@@XZ @ 470 NONAME ; class QMediaPlaylistProviderPrivate * QMediaPlaylistProvider::d_func(void)
-	?d_func@QMediaPlaylistProvider@@ABEPBVQMediaPlaylistProviderPrivate@@XZ @ 471 NONAME ; class QMediaPlaylistProviderPrivate const * QMediaPlaylistProvider::d_func(void) const
-	?d_func@QMediaService@@AAEPAVQMediaServicePrivate@@XZ @ 472 NONAME ; class QMediaServicePrivate * QMediaService::d_func(void)
-	?d_func@QMediaService@@ABEPBVQMediaServicePrivate@@XZ @ 473 NONAME ; class QMediaServicePrivate const * QMediaService::d_func(void) const
-	?d_func@QVideoWidget@@AAEPAVQVideoWidgetPrivate@@XZ @ 474 NONAME ; class QVideoWidgetPrivate * QVideoWidget::d_func(void)
-	?d_func@QVideoWidget@@ABEPBVQVideoWidgetPrivate@@XZ @ 475 NONAME ; class QVideoWidgetPrivate const * QVideoWidget::d_func(void) const
-	?dataSize@QMediaResource@@QBE_JXZ @ 476 NONAME ; long long QMediaResource::dataSize(void) const
-	?defaultServiceProvider@QMediaServiceProvider@@SAPAV1@XZ @ 477 NONAME ; class QMediaServiceProvider * QMediaServiceProvider::defaultServiceProvider(void)
-	?device@QMediaServiceProviderHint@@QBE?AVQByteArray@@XZ @ 478 NONAME ; class QByteArray QMediaServiceProviderHint::device(void) const
-	?deviceDescription@QMediaServiceProvider@@UAE?AVQString@@ABVQByteArray@@0@Z @ 479 NONAME ; class QString QMediaServiceProvider::deviceDescription(class QByteArray const &, class QByteArray const &)
-	?devices@QMediaServiceProvider@@UBE?AV?$QList@VQByteArray@@@@ABVQByteArray@@@Z @ 480 NONAME ; class QList<class QByteArray> QMediaServiceProvider::devices(class QByteArray const &) const
-	?devicesChanged@QVideoDeviceControl@@IAEXXZ @ 481 NONAME ; void QVideoDeviceControl::devicesChanged(void)
-	?duration@QMediaPlayer@@QBE_JXZ @ 482 NONAME ; long long QMediaPlayer::duration(void) const
-	?durationChanged@QMediaPlayer@@IAEX_J@Z @ 483 NONAME ; void QMediaPlayer::durationChanged(long long)
-	?durationChanged@QMediaPlayerControl@@IAEX_J@Z @ 484 NONAME ; void QMediaPlayerControl::durationChanged(long long)
-	?earliestTime@QMediaTimeRange@@QBE_JXZ @ 485 NONAME ; long long QMediaTimeRange::earliestTime(void) const
-	?end@QMediaTimeInterval@@QBE_JXZ @ 486 NONAME ; long long QMediaTimeInterval::end(void) const
-	?error@QMediaPlayer@@IAEXW4Error@1@@Z @ 487 NONAME ; void QMediaPlayer::error(enum QMediaPlayer::Error)
-	?error@QMediaPlayer@@QBE?AW4Error@1@XZ @ 488 NONAME ; enum QMediaPlayer::Error QMediaPlayer::error(void) const
-	?error@QMediaPlayerControl@@IAEXHABVQString@@@Z @ 489 NONAME ; void QMediaPlayerControl::error(int, class QString const &)
-	?error@QMediaPlaylist@@QBE?AW4Error@1@XZ @ 490 NONAME ; enum QMediaPlaylist::Error QMediaPlaylist::error(void) const
-	?errorString@QMediaPlayer@@QBE?AVQString@@XZ @ 491 NONAME ; class QString QMediaPlayer::errorString(void) const
-	?errorString@QMediaPlaylist@@QBE?AVQString@@XZ @ 492 NONAME ; class QString QMediaPlaylist::errorString(void) const
-	?event@QVideoWidget@@MAE_NPAVQEvent@@@Z @ 493 NONAME ; bool QVideoWidget::event(class QEvent *)
-	?extendedMetaData@QMediaObject@@QBE?AVQVariant@@ABVQString@@@Z @ 494 NONAME ; class QVariant QMediaObject::extendedMetaData(class QString const &) const
-	?features@QMediaServiceProviderHint@@QBE?AV?$QFlags@W4Feature@QMediaServiceProviderHint@@@@XZ @ 495 NONAME ; class QFlags<enum QMediaServiceProviderHint::Feature> QMediaServiceProviderHint::features(void) const
-	?frameChanged@QPainterVideoSurface@@IAEXXZ @ 496 NONAME ; void QPainterVideoSurface::frameChanged(void)
-	?fullScreenChanged@QVideoWidget@@IAEX_N@Z @ 497 NONAME ; void QVideoWidget::fullScreenChanged(bool)
-	?fullScreenChanged@QVideoWidgetControl@@IAEX_N@Z @ 498 NONAME ; void QVideoWidgetControl::fullScreenChanged(bool)
-	?fullScreenChanged@QVideoWindowControl@@IAEX_N@Z @ 499 NONAME ; void QVideoWindowControl::fullScreenChanged(bool)
-	?getStaticMetaObject@QGraphicsVideoItem@@SAABUQMetaObject@@XZ @ 500 NONAME ; struct QMetaObject const & QGraphicsVideoItem::getStaticMetaObject(void)
-	?getStaticMetaObject@QLocalMediaPlaylistProvider@@SAABUQMetaObject@@XZ @ 501 NONAME ; struct QMetaObject const & QLocalMediaPlaylistProvider::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaControl@@SAABUQMetaObject@@XZ @ 502 NONAME ; struct QMetaObject const & QMediaControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaObject@@SAABUQMetaObject@@XZ @ 503 NONAME ; struct QMetaObject const & QMediaObject::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaPlayer@@SAABUQMetaObject@@XZ @ 504 NONAME ; struct QMetaObject const & QMediaPlayer::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaPlayerControl@@SAABUQMetaObject@@XZ @ 505 NONAME ; struct QMetaObject const & QMediaPlayerControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaPlaylist@@SAABUQMetaObject@@XZ @ 506 NONAME ; struct QMetaObject const & QMediaPlaylist::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaPlaylistControl@@SAABUQMetaObject@@XZ @ 507 NONAME ; struct QMetaObject const & QMediaPlaylistControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaPlaylistIOPlugin@@SAABUQMetaObject@@XZ @ 508 NONAME ; struct QMetaObject const & QMediaPlaylistIOPlugin::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaPlaylistNavigator@@SAABUQMetaObject@@XZ @ 509 NONAME ; struct QMetaObject const & QMediaPlaylistNavigator::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaPlaylistProvider@@SAABUQMetaObject@@XZ @ 510 NONAME ; struct QMetaObject const & QMediaPlaylistProvider::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaService@@SAABUQMetaObject@@XZ @ 511 NONAME ; struct QMetaObject const & QMediaService::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaServiceProvider@@SAABUQMetaObject@@XZ @ 512 NONAME ; struct QMetaObject const & QMediaServiceProvider::getStaticMetaObject(void)
-	?getStaticMetaObject@QMediaServiceProviderPlugin@@SAABUQMetaObject@@XZ @ 513 NONAME ; struct QMetaObject const & QMediaServiceProviderPlugin::getStaticMetaObject(void)
-	?getStaticMetaObject@QMetaDataControl@@SAABUQMetaObject@@XZ @ 514 NONAME ; struct QMetaObject const & QMetaDataControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QPainterVideoSurface@@SAABUQMetaObject@@XZ @ 515 NONAME ; struct QMetaObject const & QPainterVideoSurface::getStaticMetaObject(void)
-	?getStaticMetaObject@QVideoDeviceControl@@SAABUQMetaObject@@XZ @ 516 NONAME ; struct QMetaObject const & QVideoDeviceControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QVideoOutputControl@@SAABUQMetaObject@@XZ @ 517 NONAME ; struct QMetaObject const & QVideoOutputControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QVideoRendererControl@@SAABUQMetaObject@@XZ @ 518 NONAME ; struct QMetaObject const & QVideoRendererControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QVideoWidget@@SAABUQMetaObject@@XZ @ 519 NONAME ; struct QMetaObject const & QVideoWidget::getStaticMetaObject(void)
-	?getStaticMetaObject@QVideoWidgetControl@@SAABUQMetaObject@@XZ @ 520 NONAME ; struct QMetaObject const & QVideoWidgetControl::getStaticMetaObject(void)
-	?getStaticMetaObject@QVideoWindowControl@@SAABUQMetaObject@@XZ @ 521 NONAME ; struct QMetaObject const & QVideoWindowControl::getStaticMetaObject(void)
-	?hasSupport@QMediaPlayer@@SA?AW4SupportEstimate@QtMultimedia@@ABVQString@@ABVQStringList@@V?$QFlags@W4Flag@QMediaPlayer@@@@@Z @ 522 NONAME ; enum QtMultimedia::SupportEstimate QMediaPlayer::hasSupport(class QString const &, class QStringList const &, class QFlags<enum QMediaPlayer::Flag>)
-	?hasSupport@QMediaServiceProvider@@UBE?AW4SupportEstimate@QtMultimedia@@ABVQByteArray@@ABVQString@@ABVQStringList@@H@Z @ 523 NONAME ; enum QtMultimedia::SupportEstimate QMediaServiceProvider::hasSupport(class QByteArray const &, class QString const &, class QStringList const &, int) const
-	?hideEvent@QVideoWidget@@MAEXPAVQHideEvent@@@Z @ 524 NONAME ; void QVideoWidget::hideEvent(class QHideEvent *)
-	?hue@QPainterVideoSurface@@QBEHXZ @ 525 NONAME ; int QPainterVideoSurface::hue(void) const
-	?hue@QVideoWidget@@QBEHXZ @ 526 NONAME ; int QVideoWidget::hue(void) const
-	?hueChanged@QVideoWidget@@IAEXH@Z @ 527 NONAME ; void QVideoWidget::hueChanged(int)
-	?hueChanged@QVideoWidgetControl@@IAEXH@Z @ 528 NONAME ; void QVideoWidgetControl::hueChanged(int)
-	?hueChanged@QVideoWindowControl@@IAEXH@Z @ 529 NONAME ; void QVideoWindowControl::hueChanged(int)
-	?insertMedia@QLocalMediaPlaylistProvider@@UAE_NHABV?$QList@VQMediaContent@@@@@Z @ 530 NONAME ; bool QLocalMediaPlaylistProvider::insertMedia(int, class QList<class QMediaContent> const &)
-	?insertMedia@QLocalMediaPlaylistProvider@@UAE_NHABVQMediaContent@@@Z @ 531 NONAME ; bool QLocalMediaPlaylistProvider::insertMedia(int, class QMediaContent const &)
-	?insertMedia@QMediaPlaylist@@QAE_NHABV?$QList@VQMediaContent@@@@@Z @ 532 NONAME ; bool QMediaPlaylist::insertMedia(int, class QList<class QMediaContent> const &)
-	?insertMedia@QMediaPlaylist@@QAE_NHABVQMediaContent@@@Z @ 533 NONAME ; bool QMediaPlaylist::insertMedia(int, class QMediaContent const &)
-	?insertMedia@QMediaPlaylistProvider@@UAE_NHABV?$QList@VQMediaContent@@@@@Z @ 534 NONAME ; bool QMediaPlaylistProvider::insertMedia(int, class QList<class QMediaContent> const &)
-	?insertMedia@QMediaPlaylistProvider@@UAE_NHABVQMediaContent@@@Z @ 535 NONAME ; bool QMediaPlaylistProvider::insertMedia(int, class QMediaContent const &)
-	?intervals@QMediaTimeRange@@QBE?AV?$QList@VQMediaTimeInterval@@@@XZ @ 536 NONAME ; class QList<class QMediaTimeInterval> QMediaTimeRange::intervals(void) const
-	?isAudioAvailable@QMediaPlayer@@QBE_NXZ @ 537 NONAME ; bool QMediaPlayer::isAudioAvailable(void) const
-	?isAvailable@QMediaObject@@UBE_NXZ @ 538 NONAME ; bool QMediaObject::isAvailable(void) const
-	?isContinuous@QMediaTimeRange@@QBE_NXZ @ 539 NONAME ; bool QMediaTimeRange::isContinuous(void) const
-	?isEmpty@QMediaPlaylist@@QBE_NXZ @ 540 NONAME ; bool QMediaPlaylist::isEmpty(void) const
-	?isEmpty@QMediaTimeRange@@QBE_NXZ @ 541 NONAME ; bool QMediaTimeRange::isEmpty(void) const
-	?isFormatSupported@QPainterVideoSurface@@QBE_NABVQVideoSurfaceFormat@@PAV2@@Z @ 542 NONAME ; bool QPainterVideoSurface::isFormatSupported(class QVideoSurfaceFormat const &, class QVideoSurfaceFormat *) const
-	?isMetaDataAvailable@QMediaObject@@QBE_NXZ @ 543 NONAME ; bool QMediaObject::isMetaDataAvailable(void) const
-	?isMetaDataWritable@QMediaObject@@QBE_NXZ @ 544 NONAME ; bool QMediaObject::isMetaDataWritable(void) const
-	?isMuted@QMediaPlayer@@QBE_NXZ @ 545 NONAME ; bool QMediaPlayer::isMuted(void) const
-	?isNormal@QMediaTimeInterval@@QBE_NXZ @ 546 NONAME ; bool QMediaTimeInterval::isNormal(void) const
-	?isNull@QMediaContent@@QBE_NXZ @ 547 NONAME ; bool QMediaContent::isNull(void) const
-	?isNull@QMediaResource@@QBE_NXZ @ 548 NONAME ; bool QMediaResource::isNull(void) const
-	?isNull@QMediaServiceProviderHint@@QBE_NXZ @ 549 NONAME ; bool QMediaServiceProviderHint::isNull(void) const
-	?isReadOnly@QLocalMediaPlaylistProvider@@UBE_NXZ @ 550 NONAME ; bool QLocalMediaPlaylistProvider::isReadOnly(void) const
-	?isReadOnly@QMediaPlaylist@@QBE_NXZ @ 551 NONAME ; bool QMediaPlaylist::isReadOnly(void) const
-	?isReadOnly@QMediaPlaylistProvider@@UBE_NXZ @ 552 NONAME ; bool QMediaPlaylistProvider::isReadOnly(void) const
-	?isReady@QPainterVideoSurface@@QBE_NXZ @ 553 NONAME ; bool QPainterVideoSurface::isReady(void) const
-	?isSeekable@QMediaPlayer@@QBE_NXZ @ 554 NONAME ; bool QMediaPlayer::isSeekable(void) const
-	?isVideoAvailable@QMediaPlayer@@QBE_NXZ @ 555 NONAME ; bool QMediaPlayer::isVideoAvailable(void) const
-	?itemAt@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@H@Z @ 556 NONAME ; class QMediaContent QMediaPlaylistNavigator::itemAt(int) const
-	?itemChange@QGraphicsVideoItem@@MAE?AVQVariant@@W4GraphicsItemChange@QGraphicsItem@@ABV2@@Z @ 557 NONAME ; class QVariant QGraphicsVideoItem::itemChange(enum QGraphicsItem::GraphicsItemChange, class QVariant const &)
-	?jump@QMediaPlaylistNavigator@@QAEXH@Z @ 558 NONAME ; void QMediaPlaylistNavigator::jump(int)
-	?language@QMediaResource@@QBE?AVQString@@XZ @ 559 NONAME ; class QString QMediaResource::language(void) const
-	?latestTime@QMediaTimeRange@@QBE_JXZ @ 560 NONAME ; long long QMediaTimeRange::latestTime(void) const
-	?load@QMediaPlaylist@@QAEXABVQUrl@@PBD@Z @ 561 NONAME ; void QMediaPlaylist::load(class QUrl const &, char const *)
-	?load@QMediaPlaylist@@QAEXPAVQIODevice@@PBD@Z @ 562 NONAME ; void QMediaPlaylist::load(class QIODevice *, char const *)
-	?load@QMediaPlaylistProvider@@UAE_NABVQUrl@@PBD@Z @ 563 NONAME ; bool QMediaPlaylistProvider::load(class QUrl const &, char const *)
-	?load@QMediaPlaylistProvider@@UAE_NPAVQIODevice@@PBD@Z @ 564 NONAME ; bool QMediaPlaylistProvider::load(class QIODevice *, char const *)
-	?loadFailed@QMediaPlaylist@@IAEXXZ @ 565 NONAME ; void QMediaPlaylist::loadFailed(void)
-	?loadFailed@QMediaPlaylistProvider@@IAEXW4Error@QMediaPlaylist@@ABVQString@@@Z @ 566 NONAME ; void QMediaPlaylistProvider::loadFailed(enum QMediaPlaylist::Error, class QString const &)
-	?loaded@QMediaPlaylist@@IAEXXZ @ 567 NONAME ; void QMediaPlaylist::loaded(void)
-	?loaded@QMediaPlaylistProvider@@IAEXXZ @ 568 NONAME ; void QMediaPlaylistProvider::loaded(void)
-	?media@QLocalMediaPlaylistProvider@@UBE?AVQMediaContent@@H@Z @ 569 NONAME ; class QMediaContent QLocalMediaPlaylistProvider::media(int) const
-	?media@QMediaPlayer@@QBE?AVQMediaContent@@XZ @ 570 NONAME ; class QMediaContent QMediaPlayer::media(void) const
-	?media@QMediaPlaylist@@QBE?AVQMediaContent@@H@Z @ 571 NONAME ; class QMediaContent QMediaPlaylist::media(int) const
-	?mediaAboutToBeInserted@QMediaPlaylist@@IAEXHH@Z @ 572 NONAME ; void QMediaPlaylist::mediaAboutToBeInserted(int, int)
-	?mediaAboutToBeInserted@QMediaPlaylistProvider@@IAEXHH@Z @ 573 NONAME ; void QMediaPlaylistProvider::mediaAboutToBeInserted(int, int)
-	?mediaAboutToBeRemoved@QMediaPlaylist@@IAEXHH@Z @ 574 NONAME ; void QMediaPlaylist::mediaAboutToBeRemoved(int, int)
-	?mediaAboutToBeRemoved@QMediaPlaylistProvider@@IAEXHH@Z @ 575 NONAME ; void QMediaPlaylistProvider::mediaAboutToBeRemoved(int, int)
-	?mediaChanged@QMediaPlayer@@IAEXABVQMediaContent@@@Z @ 576 NONAME ; void QMediaPlayer::mediaChanged(class QMediaContent const &)
-	?mediaChanged@QMediaPlayerControl@@IAEXABVQMediaContent@@@Z @ 577 NONAME ; void QMediaPlayerControl::mediaChanged(class QMediaContent const &)
-	?mediaChanged@QMediaPlaylist@@IAEXHH@Z @ 578 NONAME ; void QMediaPlaylist::mediaChanged(int, int)
-	?mediaChanged@QMediaPlaylistProvider@@IAEXHH@Z @ 579 NONAME ; void QMediaPlaylistProvider::mediaChanged(int, int)
-	?mediaCount@QLocalMediaPlaylistProvider@@UBEHXZ @ 580 NONAME ; int QLocalMediaPlaylistProvider::mediaCount(void) const
-	?mediaCount@QMediaPlaylist@@QBEHXZ @ 581 NONAME ; int QMediaPlaylist::mediaCount(void) const
-	?mediaInserted@QMediaPlaylist@@IAEXHH@Z @ 582 NONAME ; void QMediaPlaylist::mediaInserted(int, int)
-	?mediaInserted@QMediaPlaylistProvider@@IAEXHH@Z @ 583 NONAME ; void QMediaPlaylistProvider::mediaInserted(int, int)
-	?mediaObject@QGraphicsVideoItem@@QBEPAVQMediaObject@@XZ @ 584 NONAME ; class QMediaObject * QGraphicsVideoItem::mediaObject(void) const
-	?mediaObject@QMediaPlaylist@@QBEPAVQMediaObject@@XZ @ 585 NONAME ; class QMediaObject * QMediaPlaylist::mediaObject(void) const
-	?mediaObject@QVideoWidget@@QBEPAVQMediaObject@@XZ @ 586 NONAME ; class QMediaObject * QVideoWidget::mediaObject(void) const
-	?mediaRemoved@QMediaPlaylist@@IAEXHH@Z @ 587 NONAME ; void QMediaPlaylist::mediaRemoved(int, int)
-	?mediaRemoved@QMediaPlaylistProvider@@IAEXHH@Z @ 588 NONAME ; void QMediaPlaylistProvider::mediaRemoved(int, int)
-	?mediaStatus@QMediaPlayer@@QBE?AW4MediaStatus@1@XZ @ 589 NONAME ; enum QMediaPlayer::MediaStatus QMediaPlayer::mediaStatus(void) const
-	?mediaStatusChanged@QMediaPlayer@@IAEXW4MediaStatus@1@@Z @ 590 NONAME ; void QMediaPlayer::mediaStatusChanged(enum QMediaPlayer::MediaStatus)
-	?mediaStatusChanged@QMediaPlayerControl@@IAEXW4MediaStatus@QMediaPlayer@@@Z @ 591 NONAME ; void QMediaPlayerControl::mediaStatusChanged(enum QMediaPlayer::MediaStatus)
-	?mediaStream@QMediaPlayer@@QBEPBVQIODevice@@XZ @ 592 NONAME ; class QIODevice const * QMediaPlayer::mediaStream(void) const
-	?metaData@QMediaObject@@QBE?AVQVariant@@W4MetaData@QtMultimedia@@@Z @ 593 NONAME ; class QVariant QMediaObject::metaData(enum QtMultimedia::MetaData) const
-	?metaDataAvailableChanged@QMediaObject@@IAEX_N@Z @ 594 NONAME ; void QMediaObject::metaDataAvailableChanged(bool)
-	?metaDataAvailableChanged@QMetaDataControl@@IAEX_N@Z @ 595 NONAME ; void QMetaDataControl::metaDataAvailableChanged(bool)
-	?metaDataChanged@QMediaObject@@IAEXXZ @ 596 NONAME ; void QMediaObject::metaDataChanged(void)
-	?metaDataChanged@QMetaDataControl@@IAEXXZ @ 597 NONAME ; void QMetaDataControl::metaDataChanged(void)
-	?metaDataWritableChanged@QMediaObject@@IAEX_N@Z @ 598 NONAME ; void QMediaObject::metaDataWritableChanged(bool)
-	?metaObject@QGraphicsVideoItem@@UBEPBUQMetaObject@@XZ @ 599 NONAME ; struct QMetaObject const * QGraphicsVideoItem::metaObject(void) const
-	?metaObject@QLocalMediaPlaylistProvider@@UBEPBUQMetaObject@@XZ @ 600 NONAME ; struct QMetaObject const * QLocalMediaPlaylistProvider::metaObject(void) const
-	?metaObject@QMediaControl@@UBEPBUQMetaObject@@XZ @ 601 NONAME ; struct QMetaObject const * QMediaControl::metaObject(void) const
-	?metaObject@QMediaObject@@UBEPBUQMetaObject@@XZ @ 602 NONAME ; struct QMetaObject const * QMediaObject::metaObject(void) const
-	?metaObject@QMediaPlayer@@UBEPBUQMetaObject@@XZ @ 603 NONAME ; struct QMetaObject const * QMediaPlayer::metaObject(void) const
-	?metaObject@QMediaPlayerControl@@UBEPBUQMetaObject@@XZ @ 604 NONAME ; struct QMetaObject const * QMediaPlayerControl::metaObject(void) const
-	?metaObject@QMediaPlaylist@@UBEPBUQMetaObject@@XZ @ 605 NONAME ; struct QMetaObject const * QMediaPlaylist::metaObject(void) const
-	?metaObject@QMediaPlaylistControl@@UBEPBUQMetaObject@@XZ @ 606 NONAME ; struct QMetaObject const * QMediaPlaylistControl::metaObject(void) const
-	?metaObject@QMediaPlaylistIOPlugin@@UBEPBUQMetaObject@@XZ @ 607 NONAME ; struct QMetaObject const * QMediaPlaylistIOPlugin::metaObject(void) const
-	?metaObject@QMediaPlaylistNavigator@@UBEPBUQMetaObject@@XZ @ 608 NONAME ; struct QMetaObject const * QMediaPlaylistNavigator::metaObject(void) const
-	?metaObject@QMediaPlaylistProvider@@UBEPBUQMetaObject@@XZ @ 609 NONAME ; struct QMetaObject const * QMediaPlaylistProvider::metaObject(void) const
-	?metaObject@QMediaService@@UBEPBUQMetaObject@@XZ @ 610 NONAME ; struct QMetaObject const * QMediaService::metaObject(void) const
-	?metaObject@QMediaServiceProvider@@UBEPBUQMetaObject@@XZ @ 611 NONAME ; struct QMetaObject const * QMediaServiceProvider::metaObject(void) const
-	?metaObject@QMediaServiceProviderPlugin@@UBEPBUQMetaObject@@XZ @ 612 NONAME ; struct QMetaObject const * QMediaServiceProviderPlugin::metaObject(void) const
-	?metaObject@QMetaDataControl@@UBEPBUQMetaObject@@XZ @ 613 NONAME ; struct QMetaObject const * QMetaDataControl::metaObject(void) const
-	?metaObject@QPainterVideoSurface@@UBEPBUQMetaObject@@XZ @ 614 NONAME ; struct QMetaObject const * QPainterVideoSurface::metaObject(void) const
-	?metaObject@QVideoDeviceControl@@UBEPBUQMetaObject@@XZ @ 615 NONAME ; struct QMetaObject const * QVideoDeviceControl::metaObject(void) const
-	?metaObject@QVideoOutputControl@@UBEPBUQMetaObject@@XZ @ 616 NONAME ; struct QMetaObject const * QVideoOutputControl::metaObject(void) const
-	?metaObject@QVideoRendererControl@@UBEPBUQMetaObject@@XZ @ 617 NONAME ; struct QMetaObject const * QVideoRendererControl::metaObject(void) const
-	?metaObject@QVideoWidget@@UBEPBUQMetaObject@@XZ @ 618 NONAME ; struct QMetaObject const * QVideoWidget::metaObject(void) const
-	?metaObject@QVideoWidgetControl@@UBEPBUQMetaObject@@XZ @ 619 NONAME ; struct QMetaObject const * QVideoWidgetControl::metaObject(void) const
-	?metaObject@QVideoWindowControl@@UBEPBUQMetaObject@@XZ @ 620 NONAME ; struct QMetaObject const * QVideoWindowControl::metaObject(void) const
-	?mimeType@QMediaResource@@QBE?AVQString@@XZ @ 621 NONAME ; class QString QMediaResource::mimeType(void) const
-	?mimeType@QMediaServiceProviderHint@@QBE?AVQString@@XZ @ 622 NONAME ; class QString QMediaServiceProviderHint::mimeType(void) const
-	?moveEvent@QVideoWidget@@MAEXPAVQMoveEvent@@@Z @ 623 NONAME ; void QVideoWidget::moveEvent(class QMoveEvent *)
-	?mutedChanged@QMediaPlayer@@IAEX_N@Z @ 624 NONAME ; void QMediaPlayer::mutedChanged(bool)
-	?mutedChanged@QMediaPlayerControl@@IAEX_N@Z @ 625 NONAME ; void QMediaPlayerControl::mutedChanged(bool)
-	?nativeSize@QGraphicsVideoItem@@QBE?AVQSizeF@@XZ @ 626 NONAME ; class QSizeF QGraphicsVideoItem::nativeSize(void) const
-	?nativeSizeChanged@QGraphicsVideoItem@@IAEXABVQSizeF@@@Z @ 627 NONAME ; void QGraphicsVideoItem::nativeSizeChanged(class QSizeF const &)
-	?nativeSizeChanged@QVideoWindowControl@@IAEXXZ @ 628 NONAME ; void QVideoWindowControl::nativeSizeChanged(void)
-	?next@QMediaPlaylist@@QAEXXZ @ 629 NONAME ; void QMediaPlaylist::next(void)
-	?next@QMediaPlaylistNavigator@@QAEXXZ @ 630 NONAME ; void QMediaPlaylistNavigator::next(void)
-	?nextIndex@QMediaPlaylist@@QBEHH@Z @ 631 NONAME ; int QMediaPlaylist::nextIndex(int) const
-	?nextIndex@QMediaPlaylistNavigator@@QBEHH@Z @ 632 NONAME ; int QMediaPlaylistNavigator::nextIndex(int) const
-	?nextItem@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@H@Z @ 633 NONAME ; class QMediaContent QMediaPlaylistNavigator::nextItem(int) const
-	?normalized@QMediaTimeInterval@@QBE?AV1@XZ @ 634 NONAME ; class QMediaTimeInterval QMediaTimeInterval::normalized(void) const
-	?notifyInterval@QMediaObject@@QBEHXZ @ 635 NONAME ; int QMediaObject::notifyInterval(void) const
-	?notifyIntervalChanged@QMediaObject@@IAEXH@Z @ 636 NONAME ; void QMediaObject::notifyIntervalChanged(int)
-	?offset@QGraphicsVideoItem@@QBE?AVQPointF@@XZ @ 637 NONAME ; class QPointF QGraphicsVideoItem::offset(void) const
-	?paint@QGraphicsVideoItem@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 638 NONAME ; void QGraphicsVideoItem::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
-	?paint@QPainterVideoSurface@@QAEXPAVQPainter@@ABVQRectF@@1@Z @ 639 NONAME ; void QPainterVideoSurface::paint(class QPainter *, class QRectF const &, class QRectF const &)
-	?paintEvent@QVideoWidget@@MAEXPAVQPaintEvent@@@Z @ 640 NONAME ; void QVideoWidget::paintEvent(class QPaintEvent *)
-	?pause@QMediaPlayer@@QAEXXZ @ 641 NONAME ; void QMediaPlayer::pause(void)
-	?play@QMediaPlayer@@QAEXXZ @ 642 NONAME ; void QMediaPlayer::play(void)
-	?playbackMode@QMediaPlaylist@@QBE?AW4PlaybackMode@1@XZ @ 643 NONAME ; enum QMediaPlaylist::PlaybackMode QMediaPlaylist::playbackMode(void) const
-	?playbackMode@QMediaPlaylistNavigator@@QBE?AW4PlaybackMode@QMediaPlaylist@@XZ @ 644 NONAME ; enum QMediaPlaylist::PlaybackMode QMediaPlaylistNavigator::playbackMode(void) const
-	?playbackModeChanged@QMediaPlaylist@@IAEXW4PlaybackMode@1@@Z @ 645 NONAME ; void QMediaPlaylist::playbackModeChanged(enum QMediaPlaylist::PlaybackMode)
-	?playbackModeChanged@QMediaPlaylistControl@@IAEXW4PlaybackMode@QMediaPlaylist@@@Z @ 646 NONAME ; void QMediaPlaylistControl::playbackModeChanged(enum QMediaPlaylist::PlaybackMode)
-	?playbackModeChanged@QMediaPlaylistNavigator@@IAEXW4PlaybackMode@QMediaPlaylist@@@Z @ 647 NONAME ; void QMediaPlaylistNavigator::playbackModeChanged(enum QMediaPlaylist::PlaybackMode)
-	?playbackRate@QMediaPlayer@@QBEMXZ @ 648 NONAME ; float QMediaPlayer::playbackRate(void) const
-	?playbackRateChanged@QMediaPlayer@@IAEXM@Z @ 649 NONAME ; void QMediaPlayer::playbackRateChanged(float)
-	?playbackRateChanged@QMediaPlayerControl@@IAEXM@Z @ 650 NONAME ; void QMediaPlayerControl::playbackRateChanged(float)
-	?playlist@QMediaPlaylistNavigator@@QBEPAVQMediaPlaylistProvider@@XZ @ 651 NONAME ; class QMediaPlaylistProvider * QMediaPlaylistNavigator::playlist(void) const
-	?playlistProviderChanged@QMediaPlaylistControl@@IAEXXZ @ 652 NONAME ; void QMediaPlaylistControl::playlistProviderChanged(void)
-	?position@QMediaPlayer@@QBE_JXZ @ 653 NONAME ; long long QMediaPlayer::position(void) const
-	?positionChanged@QMediaPlayer@@IAEX_J@Z @ 654 NONAME ; void QMediaPlayer::positionChanged(long long)
-	?positionChanged@QMediaPlayerControl@@IAEX_J@Z @ 655 NONAME ; void QMediaPlayerControl::positionChanged(long long)
-	?present@QPainterVideoSurface@@UAE_NABVQVideoFrame@@@Z @ 656 NONAME ; bool QPainterVideoSurface::present(class QVideoFrame const &)
-	?previous@QMediaPlaylist@@QAEXXZ @ 657 NONAME ; void QMediaPlaylist::previous(void)
-	?previous@QMediaPlaylistNavigator@@QAEXXZ @ 658 NONAME ; void QMediaPlaylistNavigator::previous(void)
-	?previousIndex@QMediaPlaylist@@QBEHH@Z @ 659 NONAME ; int QMediaPlaylist::previousIndex(int) const
-	?previousIndex@QMediaPlaylistNavigator@@QBEHH@Z @ 660 NONAME ; int QMediaPlaylistNavigator::previousIndex(int) const
-	?previousItem@QMediaPlaylistNavigator@@QBE?AVQMediaContent@@H@Z @ 661 NONAME ; class QMediaContent QMediaPlaylistNavigator::previousItem(int) const
-	?qRegisterDeclarativeElements@QtMultimedia@@YAXPBD@Z @ 662 NONAME ABSENT ; void QtMultimedia::qRegisterDeclarativeElements(char const *)
-	?qt_metacall@QGraphicsVideoItem@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 663 NONAME ; int QGraphicsVideoItem::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QLocalMediaPlaylistProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 664 NONAME ; int QLocalMediaPlaylistProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 665 NONAME ; int QMediaControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaObject@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 666 NONAME ; int QMediaObject::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaPlayer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 667 NONAME ; int QMediaPlayer::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaPlayerControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 668 NONAME ; int QMediaPlayerControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaPlaylist@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 669 NONAME ; int QMediaPlaylist::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaPlaylistControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 670 NONAME ; int QMediaPlaylistControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaPlaylistIOPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 671 NONAME ; int QMediaPlaylistIOPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaPlaylistNavigator@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 672 NONAME ; int QMediaPlaylistNavigator::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaPlaylistProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 673 NONAME ; int QMediaPlaylistProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaService@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 674 NONAME ; int QMediaService::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaServiceProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 675 NONAME ; int QMediaServiceProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMediaServiceProviderPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 676 NONAME ; int QMediaServiceProviderPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QMetaDataControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 677 NONAME ; int QMetaDataControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QPainterVideoSurface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 678 NONAME ; int QPainterVideoSurface::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QVideoDeviceControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 679 NONAME ; int QVideoDeviceControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QVideoOutputControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 680 NONAME ; int QVideoOutputControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QVideoRendererControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 681 NONAME ; int QVideoRendererControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QVideoWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 682 NONAME ; int QVideoWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QVideoWidgetControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 683 NONAME ; int QVideoWidgetControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@QVideoWindowControl@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 684 NONAME ; int QVideoWindowControl::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacast@QGraphicsVideoItem@@UAEPAXPBD@Z @ 685 NONAME ; void * QGraphicsVideoItem::qt_metacast(char const *)
-	?qt_metacast@QLocalMediaPlaylistProvider@@UAEPAXPBD@Z @ 686 NONAME ; void * QLocalMediaPlaylistProvider::qt_metacast(char const *)
-	?qt_metacast@QMediaControl@@UAEPAXPBD@Z @ 687 NONAME ; void * QMediaControl::qt_metacast(char const *)
-	?qt_metacast@QMediaObject@@UAEPAXPBD@Z @ 688 NONAME ; void * QMediaObject::qt_metacast(char const *)
-	?qt_metacast@QMediaPlayer@@UAEPAXPBD@Z @ 689 NONAME ; void * QMediaPlayer::qt_metacast(char const *)
-	?qt_metacast@QMediaPlayerControl@@UAEPAXPBD@Z @ 690 NONAME ; void * QMediaPlayerControl::qt_metacast(char const *)
-	?qt_metacast@QMediaPlaylist@@UAEPAXPBD@Z @ 691 NONAME ; void * QMediaPlaylist::qt_metacast(char const *)
-	?qt_metacast@QMediaPlaylistControl@@UAEPAXPBD@Z @ 692 NONAME ; void * QMediaPlaylistControl::qt_metacast(char const *)
-	?qt_metacast@QMediaPlaylistIOPlugin@@UAEPAXPBD@Z @ 693 NONAME ; void * QMediaPlaylistIOPlugin::qt_metacast(char const *)
-	?qt_metacast@QMediaPlaylistNavigator@@UAEPAXPBD@Z @ 694 NONAME ; void * QMediaPlaylistNavigator::qt_metacast(char const *)
-	?qt_metacast@QMediaPlaylistProvider@@UAEPAXPBD@Z @ 695 NONAME ; void * QMediaPlaylistProvider::qt_metacast(char const *)
-	?qt_metacast@QMediaService@@UAEPAXPBD@Z @ 696 NONAME ; void * QMediaService::qt_metacast(char const *)
-	?qt_metacast@QMediaServiceProvider@@UAEPAXPBD@Z @ 697 NONAME ; void * QMediaServiceProvider::qt_metacast(char const *)
-	?qt_metacast@QMediaServiceProviderPlugin@@UAEPAXPBD@Z @ 698 NONAME ; void * QMediaServiceProviderPlugin::qt_metacast(char const *)
-	?qt_metacast@QMetaDataControl@@UAEPAXPBD@Z @ 699 NONAME ; void * QMetaDataControl::qt_metacast(char const *)
-	?qt_metacast@QPainterVideoSurface@@UAEPAXPBD@Z @ 700 NONAME ; void * QPainterVideoSurface::qt_metacast(char const *)
-	?qt_metacast@QVideoDeviceControl@@UAEPAXPBD@Z @ 701 NONAME ; void * QVideoDeviceControl::qt_metacast(char const *)
-	?qt_metacast@QVideoOutputControl@@UAEPAXPBD@Z @ 702 NONAME ; void * QVideoOutputControl::qt_metacast(char const *)
-	?qt_metacast@QVideoRendererControl@@UAEPAXPBD@Z @ 703 NONAME ; void * QVideoRendererControl::qt_metacast(char const *)
-	?qt_metacast@QVideoWidget@@UAEPAXPBD@Z @ 704 NONAME ; void * QVideoWidget::qt_metacast(char const *)
-	?qt_metacast@QVideoWidgetControl@@UAEPAXPBD@Z @ 705 NONAME ; void * QVideoWidgetControl::qt_metacast(char const *)
-	?qt_metacast@QVideoWindowControl@@UAEPAXPBD@Z @ 706 NONAME ; void * QVideoWindowControl::qt_metacast(char const *)
-	?removeInterval@QMediaTimeRange@@QAEXABVQMediaTimeInterval@@@Z @ 707 NONAME ; void QMediaTimeRange::removeInterval(class QMediaTimeInterval const &)
-	?removeInterval@QMediaTimeRange@@QAEX_J0@Z @ 708 NONAME ; void QMediaTimeRange::removeInterval(long long, long long)
-	?removeMedia@QLocalMediaPlaylistProvider@@UAE_NH@Z @ 709 NONAME ; bool QLocalMediaPlaylistProvider::removeMedia(int)
-	?removeMedia@QLocalMediaPlaylistProvider@@UAE_NHH@Z @ 710 NONAME ; bool QLocalMediaPlaylistProvider::removeMedia(int, int)
-	?removeMedia@QMediaPlaylist@@QAE_NH@Z @ 711 NONAME ; bool QMediaPlaylist::removeMedia(int)
-	?removeMedia@QMediaPlaylist@@QAE_NHH@Z @ 712 NONAME ; bool QMediaPlaylist::removeMedia(int, int)
-	?removeMedia@QMediaPlaylistProvider@@UAE_NH@Z @ 713 NONAME ; bool QMediaPlaylistProvider::removeMedia(int)
-	?removeMedia@QMediaPlaylistProvider@@UAE_NHH@Z @ 714 NONAME ; bool QMediaPlaylistProvider::removeMedia(int, int)
-	?removePropertyWatch@QMediaObject@@IAEXABVQByteArray@@@Z @ 715 NONAME ; void QMediaObject::removePropertyWatch(class QByteArray const &)
-	?removeTimeRange@QMediaTimeRange@@QAEXABV1@@Z @ 716 NONAME ; void QMediaTimeRange::removeTimeRange(class QMediaTimeRange const &)
-	?request@QMediaResource@@QBE?AVQNetworkRequest@@XZ @ 717 NONAME ; class QNetworkRequest QMediaResource::request(void) const
-	?resizeEvent@QVideoWidget@@MAEXPAVQResizeEvent@@@Z @ 718 NONAME ; void QVideoWidget::resizeEvent(class QResizeEvent *)
-	?resolution@QMediaResource@@QBE?AVQSize@@XZ @ 719 NONAME ; class QSize QMediaResource::resolution(void) const
-	?resources@QMediaContent@@QBE?AV?$QList@VQMediaResource@@@@XZ @ 720 NONAME ; class QList<class QMediaResource> QMediaContent::resources(void) const
-	?sampleRate@QAudioFormat@@QBEHXZ @ 721 NONAME ; int QAudioFormat::sampleRate(void) const
-	?sampleRate@QMediaResource@@QBEHXZ @ 722 NONAME ; int QMediaResource::sampleRate(void) const
-	?saturation@QPainterVideoSurface@@QBEHXZ @ 723 NONAME ; int QPainterVideoSurface::saturation(void) const
-	?saturation@QVideoWidget@@QBEHXZ @ 724 NONAME ; int QVideoWidget::saturation(void) const
-	?saturationChanged@QVideoWidget@@IAEXH@Z @ 725 NONAME ; void QVideoWidget::saturationChanged(int)
-	?saturationChanged@QVideoWidgetControl@@IAEXH@Z @ 726 NONAME ; void QVideoWidgetControl::saturationChanged(int)
-	?saturationChanged@QVideoWindowControl@@IAEXH@Z @ 727 NONAME ; void QVideoWindowControl::saturationChanged(int)
-	?save@QMediaPlaylist@@QAE_NABVQUrl@@PBD@Z @ 728 NONAME ; bool QMediaPlaylist::save(class QUrl const &, char const *)
-	?save@QMediaPlaylist@@QAE_NPAVQIODevice@@PBD@Z @ 729 NONAME ; bool QMediaPlaylist::save(class QIODevice *, char const *)
-	?save@QMediaPlaylistProvider@@UAE_NABVQUrl@@PBD@Z @ 730 NONAME ; bool QMediaPlaylistProvider::save(class QUrl const &, char const *)
-	?save@QMediaPlaylistProvider@@UAE_NPAVQIODevice@@PBD@Z @ 731 NONAME ; bool QMediaPlaylistProvider::save(class QIODevice *, char const *)
-	?seekableChanged@QMediaPlayer@@IAEX_N@Z @ 732 NONAME ; void QMediaPlayer::seekableChanged(bool)
-	?seekableChanged@QMediaPlayerControl@@IAEX_N@Z @ 733 NONAME ; void QMediaPlayerControl::seekableChanged(bool)
-	?selectedDeviceChanged@QVideoDeviceControl@@IAEXABVQString@@@Z @ 734 NONAME ; void QVideoDeviceControl::selectedDeviceChanged(class QString const &)
-	?selectedDeviceChanged@QVideoDeviceControl@@IAEXH@Z @ 735 NONAME ; void QVideoDeviceControl::selectedDeviceChanged(int)
-	?service@QMediaObject@@UBEPAVQMediaService@@XZ @ 736 NONAME ; class QMediaService * QMediaObject::service(void) const
-	?setAspectRatioMode@QGraphicsVideoItem@@QAEXW4AspectRatioMode@Qt@@@Z @ 737 NONAME ; void QGraphicsVideoItem::setAspectRatioMode(enum Qt::AspectRatioMode)
-	?setAspectRatioMode@QVideoWidget@@QAEXW4AspectRatioMode@1@@Z @ 738 NONAME ABSENT ; void QVideoWidget::setAspectRatioMode(enum QVideoWidget::AspectRatioMode)
-	?setAudioBitRate@QMediaResource@@QAEXH@Z @ 739 NONAME ; void QMediaResource::setAudioBitRate(int)
-	?setAudioCodec@QMediaResource@@QAEXABVQString@@@Z @ 740 NONAME ; void QMediaResource::setAudioCodec(class QString const &)
-	?setBrightness@QPainterVideoSurface@@QAEXH@Z @ 741 NONAME ; void QPainterVideoSurface::setBrightness(int)
-	?setBrightness@QVideoWidget@@QAEXH@Z @ 742 NONAME ; void QVideoWidget::setBrightness(int)
-	?setChannelCount@QAudioFormat@@QAEXH@Z @ 743 NONAME ; void QAudioFormat::setChannelCount(int)
-	?setChannelCount@QMediaResource@@QAEXH@Z @ 744 NONAME ; void QMediaResource::setChannelCount(int)
-	?setContrast@QPainterVideoSurface@@QAEXH@Z @ 745 NONAME ; void QPainterVideoSurface::setContrast(int)
-	?setContrast@QVideoWidget@@QAEXH@Z @ 746 NONAME ; void QVideoWidget::setContrast(int)
-	?setCurrentIndex@QMediaPlaylist@@QAEXH@Z @ 747 NONAME ; void QMediaPlaylist::setCurrentIndex(int)
-	?setDataSize@QMediaResource@@QAEX_J@Z @ 748 NONAME ; void QMediaResource::setDataSize(long long)
-	?setExtendedMetaData@QMediaObject@@QAEXABVQString@@ABVQVariant@@@Z @ 749 NONAME ; void QMediaObject::setExtendedMetaData(class QString const &, class QVariant const &)
-	?setFullScreen@QVideoWidget@@QAEX_N@Z @ 750 NONAME ; void QVideoWidget::setFullScreen(bool)
-	?setHue@QPainterVideoSurface@@QAEXH@Z @ 751 NONAME ; void QPainterVideoSurface::setHue(int)
-	?setHue@QVideoWidget@@QAEXH@Z @ 752 NONAME ; void QVideoWidget::setHue(int)
-	?setLanguage@QMediaResource@@QAEXABVQString@@@Z @ 753 NONAME ; void QMediaResource::setLanguage(class QString const &)
-	?setMedia@QMediaPlayer@@QAEXABVQMediaContent@@PAVQIODevice@@@Z @ 754 NONAME ; void QMediaPlayer::setMedia(class QMediaContent const &, class QIODevice *)
-	?setMediaObject@QGraphicsVideoItem@@QAEXPAVQMediaObject@@@Z @ 755 NONAME ; void QGraphicsVideoItem::setMediaObject(class QMediaObject *)
-	?setMediaObject@QMediaPlaylist@@QAEXPAVQMediaObject@@@Z @ 756 NONAME ; void QMediaPlaylist::setMediaObject(class QMediaObject *)
-	?setMediaObject@QVideoWidget@@QAEXPAVQMediaObject@@@Z @ 757 NONAME ; void QVideoWidget::setMediaObject(class QMediaObject *)
-	?setMetaData@QMediaObject@@QAEXW4MetaData@QtMultimedia@@ABVQVariant@@@Z @ 758 NONAME ; void QMediaObject::setMetaData(enum QtMultimedia::MetaData, class QVariant const &)
-	?setMuted@QMediaPlayer@@QAEX_N@Z @ 759 NONAME ; void QMediaPlayer::setMuted(bool)
-	?setNotifyInterval@QMediaObject@@QAEXH@Z @ 760 NONAME ; void QMediaObject::setNotifyInterval(int)
-	?setOffset@QGraphicsVideoItem@@QAEXABVQPointF@@@Z @ 761 NONAME ; void QGraphicsVideoItem::setOffset(class QPointF const &)
-	?setPlaybackMode@QMediaPlaylist@@QAEXW4PlaybackMode@1@@Z @ 762 NONAME ; void QMediaPlaylist::setPlaybackMode(enum QMediaPlaylist::PlaybackMode)
-	?setPlaybackMode@QMediaPlaylistNavigator@@QAEXW4PlaybackMode@QMediaPlaylist@@@Z @ 763 NONAME ; void QMediaPlaylistNavigator::setPlaybackMode(enum QMediaPlaylist::PlaybackMode)
-	?setPlaybackRate@QMediaPlayer@@QAEXM@Z @ 764 NONAME ; void QMediaPlayer::setPlaybackRate(float)
-	?setPlaylist@QMediaPlaylistNavigator@@QAEXPAVQMediaPlaylistProvider@@@Z @ 765 NONAME ; void QMediaPlaylistNavigator::setPlaylist(class QMediaPlaylistProvider *)
-	?setPosition@QMediaPlayer@@QAEX_J@Z @ 766 NONAME ; void QMediaPlayer::setPosition(long long)
-	?setReady@QPainterVideoSurface@@QAEX_N@Z @ 767 NONAME ; void QPainterVideoSurface::setReady(bool)
-	?setResolution@QMediaResource@@QAEXABVQSize@@@Z @ 768 NONAME ; void QMediaResource::setResolution(class QSize const &)
-	?setResolution@QMediaResource@@QAEXHH@Z @ 769 NONAME ; void QMediaResource::setResolution(int, int)
-	?setSampleRate@QAudioFormat@@QAEXH@Z @ 770 NONAME ; void QAudioFormat::setSampleRate(int)
-	?setSampleRate@QMediaResource@@QAEXH@Z @ 771 NONAME ; void QMediaResource::setSampleRate(int)
-	?setSaturation@QPainterVideoSurface@@QAEXH@Z @ 772 NONAME ; void QPainterVideoSurface::setSaturation(int)
-	?setSaturation@QVideoWidget@@QAEXH@Z @ 773 NONAME ; void QVideoWidget::setSaturation(int)
-	?setSize@QGraphicsVideoItem@@QAEXABVQSizeF@@@Z @ 774 NONAME ; void QGraphicsVideoItem::setSize(class QSizeF const &)
-	?setVideoBitRate@QMediaResource@@QAEXH@Z @ 775 NONAME ; void QMediaResource::setVideoBitRate(int)
-	?setVideoCodec@QMediaResource@@QAEXABVQString@@@Z @ 776 NONAME ; void QMediaResource::setVideoCodec(class QString const &)
-	?setVolume@QMediaPlayer@@QAEXH@Z @ 777 NONAME ; void QMediaPlayer::setVolume(int)
-	?setupMetaData@QMediaObject@@AAEXXZ @ 778 NONAME ; void QMediaObject::setupMetaData(void)
-	?showEvent@QVideoWidget@@MAEXPAVQShowEvent@@@Z @ 779 NONAME ; void QVideoWidget::showEvent(class QShowEvent *)
-	?shuffle@QLocalMediaPlaylistProvider@@UAEXXZ @ 780 NONAME ; void QLocalMediaPlaylistProvider::shuffle(void)
-	?shuffle@QMediaPlaylist@@QAEXXZ @ 781 NONAME ; void QMediaPlaylist::shuffle(void)
-	?shuffle@QMediaPlaylistProvider@@UAEXXZ @ 782 NONAME ; void QMediaPlaylistProvider::shuffle(void)
-	?size@QGraphicsVideoItem@@QBE?AVQSizeF@@XZ @ 783 NONAME ; class QSizeF QGraphicsVideoItem::size(void) const
-	?sizeHint@QVideoWidget@@UBE?AVQSize@@XZ @ 784 NONAME ; class QSize QVideoWidget::sizeHint(void) const
-	?start@QMediaTimeInterval@@QBE_JXZ @ 785 NONAME ; long long QMediaTimeInterval::start(void) const
-	?start@QPainterVideoSurface@@UAE_NABVQVideoSurfaceFormat@@@Z @ 786 NONAME ; bool QPainterVideoSurface::start(class QVideoSurfaceFormat const &)
-	?state@QMediaPlayer@@QBE?AW4State@1@XZ @ 787 NONAME ; enum QMediaPlayer::State QMediaPlayer::state(void) const
-	?stateChanged@QMediaPlayer@@IAEXW4State@1@@Z @ 788 NONAME ; void QMediaPlayer::stateChanged(enum QMediaPlayer::State)
-	?stateChanged@QMediaPlayerControl@@IAEXW4State@QMediaPlayer@@@Z @ 789 NONAME ; void QMediaPlayerControl::stateChanged(enum QMediaPlayer::State)
-	?stop@QMediaPlayer@@QAEXXZ @ 790 NONAME ; void QMediaPlayer::stop(void)
-	?stop@QPainterVideoSurface@@UAEXXZ @ 791 NONAME ; void QPainterVideoSurface::stop(void)
-	?supportedChannelCounts@QAudioDeviceInfo@@QBE?AV?$QList@H@@XZ @ 792 NONAME ; class QList<int> QAudioDeviceInfo::supportedChannelCounts(void) const
-	?supportedMimeTypes@QMediaPlayer@@SA?AVQStringList@@V?$QFlags@W4Flag@QMediaPlayer@@@@@Z @ 793 NONAME ; class QStringList QMediaPlayer::supportedMimeTypes(class QFlags<enum QMediaPlayer::Flag>)
-	?supportedMimeTypes@QMediaServiceProvider@@UBE?AVQStringList@@ABVQByteArray@@H@Z @ 794 NONAME ; class QStringList QMediaServiceProvider::supportedMimeTypes(class QByteArray const &, int) const
-	?supportedPixelFormats@QPainterVideoSurface@@UBE?AV?$QList@W4PixelFormat@QVideoFrame@@@@W4HandleType@QAbstractVideoBuffer@@@Z @ 795 NONAME ; class QList<enum QVideoFrame::PixelFormat> QPainterVideoSurface::supportedPixelFormats(enum QAbstractVideoBuffer::HandleType) const
-	?supportedSampleRates@QAudioDeviceInfo@@QBE?AV?$QList@H@@XZ @ 796 NONAME ; class QList<int> QAudioDeviceInfo::supportedSampleRates(void) const
-	?surroundingItemsChanged@QMediaPlaylistNavigator@@IAEXXZ @ 797 NONAME ; void QMediaPlaylistNavigator::surroundingItemsChanged(void)
-	?tr@QGraphicsVideoItem@@SA?AVQString@@PBD0@Z @ 798 NONAME ; class QString QGraphicsVideoItem::tr(char const *, char const *)
-	?tr@QGraphicsVideoItem@@SA?AVQString@@PBD0H@Z @ 799 NONAME ; class QString QGraphicsVideoItem::tr(char const *, char const *, int)
-	?tr@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 800 NONAME ; class QString QLocalMediaPlaylistProvider::tr(char const *, char const *)
-	?tr@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 801 NONAME ; class QString QLocalMediaPlaylistProvider::tr(char const *, char const *, int)
-	?tr@QMediaControl@@SA?AVQString@@PBD0@Z @ 802 NONAME ; class QString QMediaControl::tr(char const *, char const *)
-	?tr@QMediaControl@@SA?AVQString@@PBD0H@Z @ 803 NONAME ; class QString QMediaControl::tr(char const *, char const *, int)
-	?tr@QMediaObject@@SA?AVQString@@PBD0@Z @ 804 NONAME ; class QString QMediaObject::tr(char const *, char const *)
-	?tr@QMediaObject@@SA?AVQString@@PBD0H@Z @ 805 NONAME ; class QString QMediaObject::tr(char const *, char const *, int)
-	?tr@QMediaPlayer@@SA?AVQString@@PBD0@Z @ 806 NONAME ; class QString QMediaPlayer::tr(char const *, char const *)
-	?tr@QMediaPlayer@@SA?AVQString@@PBD0H@Z @ 807 NONAME ; class QString QMediaPlayer::tr(char const *, char const *, int)
-	?tr@QMediaPlayerControl@@SA?AVQString@@PBD0@Z @ 808 NONAME ; class QString QMediaPlayerControl::tr(char const *, char const *)
-	?tr@QMediaPlayerControl@@SA?AVQString@@PBD0H@Z @ 809 NONAME ; class QString QMediaPlayerControl::tr(char const *, char const *, int)
-	?tr@QMediaPlaylist@@SA?AVQString@@PBD0@Z @ 810 NONAME ; class QString QMediaPlaylist::tr(char const *, char const *)
-	?tr@QMediaPlaylist@@SA?AVQString@@PBD0H@Z @ 811 NONAME ; class QString QMediaPlaylist::tr(char const *, char const *, int)
-	?tr@QMediaPlaylistControl@@SA?AVQString@@PBD0@Z @ 812 NONAME ; class QString QMediaPlaylistControl::tr(char const *, char const *)
-	?tr@QMediaPlaylistControl@@SA?AVQString@@PBD0H@Z @ 813 NONAME ; class QString QMediaPlaylistControl::tr(char const *, char const *, int)
-	?tr@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0@Z @ 814 NONAME ; class QString QMediaPlaylistIOPlugin::tr(char const *, char const *)
-	?tr@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0H@Z @ 815 NONAME ; class QString QMediaPlaylistIOPlugin::tr(char const *, char const *, int)
-	?tr@QMediaPlaylistNavigator@@SA?AVQString@@PBD0@Z @ 816 NONAME ; class QString QMediaPlaylistNavigator::tr(char const *, char const *)
-	?tr@QMediaPlaylistNavigator@@SA?AVQString@@PBD0H@Z @ 817 NONAME ; class QString QMediaPlaylistNavigator::tr(char const *, char const *, int)
-	?tr@QMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 818 NONAME ; class QString QMediaPlaylistProvider::tr(char const *, char const *)
-	?tr@QMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 819 NONAME ; class QString QMediaPlaylistProvider::tr(char const *, char const *, int)
-	?tr@QMediaService@@SA?AVQString@@PBD0@Z @ 820 NONAME ; class QString QMediaService::tr(char const *, char const *)
-	?tr@QMediaService@@SA?AVQString@@PBD0H@Z @ 821 NONAME ; class QString QMediaService::tr(char const *, char const *, int)
-	?tr@QMediaServiceProvider@@SA?AVQString@@PBD0@Z @ 822 NONAME ; class QString QMediaServiceProvider::tr(char const *, char const *)
-	?tr@QMediaServiceProvider@@SA?AVQString@@PBD0H@Z @ 823 NONAME ; class QString QMediaServiceProvider::tr(char const *, char const *, int)
-	?tr@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0@Z @ 824 NONAME ; class QString QMediaServiceProviderPlugin::tr(char const *, char const *)
-	?tr@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0H@Z @ 825 NONAME ; class QString QMediaServiceProviderPlugin::tr(char const *, char const *, int)
-	?tr@QMetaDataControl@@SA?AVQString@@PBD0@Z @ 826 NONAME ; class QString QMetaDataControl::tr(char const *, char const *)
-	?tr@QMetaDataControl@@SA?AVQString@@PBD0H@Z @ 827 NONAME ; class QString QMetaDataControl::tr(char const *, char const *, int)
-	?tr@QPainterVideoSurface@@SA?AVQString@@PBD0@Z @ 828 NONAME ; class QString QPainterVideoSurface::tr(char const *, char const *)
-	?tr@QPainterVideoSurface@@SA?AVQString@@PBD0H@Z @ 829 NONAME ; class QString QPainterVideoSurface::tr(char const *, char const *, int)
-	?tr@QVideoDeviceControl@@SA?AVQString@@PBD0@Z @ 830 NONAME ; class QString QVideoDeviceControl::tr(char const *, char const *)
-	?tr@QVideoDeviceControl@@SA?AVQString@@PBD0H@Z @ 831 NONAME ; class QString QVideoDeviceControl::tr(char const *, char const *, int)
-	?tr@QVideoOutputControl@@SA?AVQString@@PBD0@Z @ 832 NONAME ; class QString QVideoOutputControl::tr(char const *, char const *)
-	?tr@QVideoOutputControl@@SA?AVQString@@PBD0H@Z @ 833 NONAME ; class QString QVideoOutputControl::tr(char const *, char const *, int)
-	?tr@QVideoRendererControl@@SA?AVQString@@PBD0@Z @ 834 NONAME ; class QString QVideoRendererControl::tr(char const *, char const *)
-	?tr@QVideoRendererControl@@SA?AVQString@@PBD0H@Z @ 835 NONAME ; class QString QVideoRendererControl::tr(char const *, char const *, int)
-	?tr@QVideoWidget@@SA?AVQString@@PBD0@Z @ 836 NONAME ; class QString QVideoWidget::tr(char const *, char const *)
-	?tr@QVideoWidget@@SA?AVQString@@PBD0H@Z @ 837 NONAME ; class QString QVideoWidget::tr(char const *, char const *, int)
-	?tr@QVideoWidgetControl@@SA?AVQString@@PBD0@Z @ 838 NONAME ; class QString QVideoWidgetControl::tr(char const *, char const *)
-	?tr@QVideoWidgetControl@@SA?AVQString@@PBD0H@Z @ 839 NONAME ; class QString QVideoWidgetControl::tr(char const *, char const *, int)
-	?tr@QVideoWindowControl@@SA?AVQString@@PBD0@Z @ 840 NONAME ; class QString QVideoWindowControl::tr(char const *, char const *)
-	?tr@QVideoWindowControl@@SA?AVQString@@PBD0H@Z @ 841 NONAME ; class QString QVideoWindowControl::tr(char const *, char const *, int)
-	?trUtf8@QGraphicsVideoItem@@SA?AVQString@@PBD0@Z @ 842 NONAME ; class QString QGraphicsVideoItem::trUtf8(char const *, char const *)
-	?trUtf8@QGraphicsVideoItem@@SA?AVQString@@PBD0H@Z @ 843 NONAME ; class QString QGraphicsVideoItem::trUtf8(char const *, char const *, int)
-	?trUtf8@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 844 NONAME ; class QString QLocalMediaPlaylistProvider::trUtf8(char const *, char const *)
-	?trUtf8@QLocalMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 845 NONAME ; class QString QLocalMediaPlaylistProvider::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaControl@@SA?AVQString@@PBD0@Z @ 846 NONAME ; class QString QMediaControl::trUtf8(char const *, char const *)
-	?trUtf8@QMediaControl@@SA?AVQString@@PBD0H@Z @ 847 NONAME ; class QString QMediaControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaObject@@SA?AVQString@@PBD0@Z @ 848 NONAME ; class QString QMediaObject::trUtf8(char const *, char const *)
-	?trUtf8@QMediaObject@@SA?AVQString@@PBD0H@Z @ 849 NONAME ; class QString QMediaObject::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaPlayer@@SA?AVQString@@PBD0@Z @ 850 NONAME ; class QString QMediaPlayer::trUtf8(char const *, char const *)
-	?trUtf8@QMediaPlayer@@SA?AVQString@@PBD0H@Z @ 851 NONAME ; class QString QMediaPlayer::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaPlayerControl@@SA?AVQString@@PBD0@Z @ 852 NONAME ; class QString QMediaPlayerControl::trUtf8(char const *, char const *)
-	?trUtf8@QMediaPlayerControl@@SA?AVQString@@PBD0H@Z @ 853 NONAME ; class QString QMediaPlayerControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaPlaylist@@SA?AVQString@@PBD0@Z @ 854 NONAME ; class QString QMediaPlaylist::trUtf8(char const *, char const *)
-	?trUtf8@QMediaPlaylist@@SA?AVQString@@PBD0H@Z @ 855 NONAME ; class QString QMediaPlaylist::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaPlaylistControl@@SA?AVQString@@PBD0@Z @ 856 NONAME ; class QString QMediaPlaylistControl::trUtf8(char const *, char const *)
-	?trUtf8@QMediaPlaylistControl@@SA?AVQString@@PBD0H@Z @ 857 NONAME ; class QString QMediaPlaylistControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0@Z @ 858 NONAME ; class QString QMediaPlaylistIOPlugin::trUtf8(char const *, char const *)
-	?trUtf8@QMediaPlaylistIOPlugin@@SA?AVQString@@PBD0H@Z @ 859 NONAME ; class QString QMediaPlaylistIOPlugin::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaPlaylistNavigator@@SA?AVQString@@PBD0@Z @ 860 NONAME ; class QString QMediaPlaylistNavigator::trUtf8(char const *, char const *)
-	?trUtf8@QMediaPlaylistNavigator@@SA?AVQString@@PBD0H@Z @ 861 NONAME ; class QString QMediaPlaylistNavigator::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaPlaylistProvider@@SA?AVQString@@PBD0@Z @ 862 NONAME ; class QString QMediaPlaylistProvider::trUtf8(char const *, char const *)
-	?trUtf8@QMediaPlaylistProvider@@SA?AVQString@@PBD0H@Z @ 863 NONAME ; class QString QMediaPlaylistProvider::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaService@@SA?AVQString@@PBD0@Z @ 864 NONAME ; class QString QMediaService::trUtf8(char const *, char const *)
-	?trUtf8@QMediaService@@SA?AVQString@@PBD0H@Z @ 865 NONAME ; class QString QMediaService::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaServiceProvider@@SA?AVQString@@PBD0@Z @ 866 NONAME ; class QString QMediaServiceProvider::trUtf8(char const *, char const *)
-	?trUtf8@QMediaServiceProvider@@SA?AVQString@@PBD0H@Z @ 867 NONAME ; class QString QMediaServiceProvider::trUtf8(char const *, char const *, int)
-	?trUtf8@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0@Z @ 868 NONAME ; class QString QMediaServiceProviderPlugin::trUtf8(char const *, char const *)
-	?trUtf8@QMediaServiceProviderPlugin@@SA?AVQString@@PBD0H@Z @ 869 NONAME ; class QString QMediaServiceProviderPlugin::trUtf8(char const *, char const *, int)
-	?trUtf8@QMetaDataControl@@SA?AVQString@@PBD0@Z @ 870 NONAME ; class QString QMetaDataControl::trUtf8(char const *, char const *)
-	?trUtf8@QMetaDataControl@@SA?AVQString@@PBD0H@Z @ 871 NONAME ; class QString QMetaDataControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QPainterVideoSurface@@SA?AVQString@@PBD0@Z @ 872 NONAME ; class QString QPainterVideoSurface::trUtf8(char const *, char const *)
-	?trUtf8@QPainterVideoSurface@@SA?AVQString@@PBD0H@Z @ 873 NONAME ; class QString QPainterVideoSurface::trUtf8(char const *, char const *, int)
-	?trUtf8@QVideoDeviceControl@@SA?AVQString@@PBD0@Z @ 874 NONAME ; class QString QVideoDeviceControl::trUtf8(char const *, char const *)
-	?trUtf8@QVideoDeviceControl@@SA?AVQString@@PBD0H@Z @ 875 NONAME ; class QString QVideoDeviceControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QVideoOutputControl@@SA?AVQString@@PBD0@Z @ 876 NONAME ; class QString QVideoOutputControl::trUtf8(char const *, char const *)
-	?trUtf8@QVideoOutputControl@@SA?AVQString@@PBD0H@Z @ 877 NONAME ; class QString QVideoOutputControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QVideoRendererControl@@SA?AVQString@@PBD0@Z @ 878 NONAME ; class QString QVideoRendererControl::trUtf8(char const *, char const *)
-	?trUtf8@QVideoRendererControl@@SA?AVQString@@PBD0H@Z @ 879 NONAME ; class QString QVideoRendererControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QVideoWidget@@SA?AVQString@@PBD0@Z @ 880 NONAME ; class QString QVideoWidget::trUtf8(char const *, char const *)
-	?trUtf8@QVideoWidget@@SA?AVQString@@PBD0H@Z @ 881 NONAME ; class QString QVideoWidget::trUtf8(char const *, char const *, int)
-	?trUtf8@QVideoWidgetControl@@SA?AVQString@@PBD0@Z @ 882 NONAME ; class QString QVideoWidgetControl::trUtf8(char const *, char const *)
-	?trUtf8@QVideoWidgetControl@@SA?AVQString@@PBD0H@Z @ 883 NONAME ; class QString QVideoWidgetControl::trUtf8(char const *, char const *, int)
-	?trUtf8@QVideoWindowControl@@SA?AVQString@@PBD0@Z @ 884 NONAME ; class QString QVideoWindowControl::trUtf8(char const *, char const *)
-	?trUtf8@QVideoWindowControl@@SA?AVQString@@PBD0H@Z @ 885 NONAME ; class QString QVideoWindowControl::trUtf8(char const *, char const *, int)
-	?translated@QMediaTimeInterval@@QBE?AV1@_J@Z @ 886 NONAME ; class QMediaTimeInterval QMediaTimeInterval::translated(long long) const
-	?type@QMediaServiceProviderHint@@QBE?AW4Type@1@XZ @ 887 NONAME ; enum QMediaServiceProviderHint::Type QMediaServiceProviderHint::type(void) const
-	?unbind@QMediaObject@@UAEXPAVQObject@@@Z @ 888 NONAME ; void QMediaObject::unbind(class QObject *)
-	?unbind@QMediaPlayer@@UAEXPAVQObject@@@Z @ 889 NONAME ; void QMediaPlayer::unbind(class QObject *)
-	?url@QMediaResource@@QBE?AVQUrl@@XZ @ 890 NONAME ; class QUrl QMediaResource::url(void) const
-	?videoAvailableChanged@QMediaPlayer@@IAEX_N@Z @ 891 NONAME ; void QMediaPlayer::videoAvailableChanged(bool)
-	?videoAvailableChanged@QMediaPlayerControl@@IAEX_N@Z @ 892 NONAME ; void QMediaPlayerControl::videoAvailableChanged(bool)
-	?videoBitRate@QMediaResource@@QBEHXZ @ 893 NONAME ; int QMediaResource::videoBitRate(void) const
-	?videoCodec@QMediaResource@@QBE?AVQString@@XZ @ 894 NONAME ; class QString QMediaResource::videoCodec(void) const
-	?volume@QMediaPlayer@@QBEHXZ @ 895 NONAME ; int QMediaPlayer::volume(void) const
-	?volumeChanged@QMediaPlayer@@IAEXH@Z @ 896 NONAME ; void QMediaPlayer::volumeChanged(int)
-	?volumeChanged@QMediaPlayerControl@@IAEXH@Z @ 897 NONAME ; void QMediaPlayerControl::volumeChanged(int)
-	?writableChanged@QMetaDataControl@@IAEX_N@Z @ 898 NONAME ; void QMetaDataControl::writableChanged(bool)
-	?staticMetaObject@QMediaPlaylistProvider@@2UQMetaObject@@B @ 899 NONAME ; struct QMetaObject const QMediaPlaylistProvider::staticMetaObject
-	?staticMetaObject@QVideoWidget@@2UQMetaObject@@B @ 900 NONAME ; struct QMetaObject const QVideoWidget::staticMetaObject
-	?staticMetaObject@QMediaPlaylistControl@@2UQMetaObject@@B @ 901 NONAME ; struct QMetaObject const QMediaPlaylistControl::staticMetaObject
-	?staticMetaObject@QMediaControl@@2UQMetaObject@@B @ 902 NONAME ; struct QMetaObject const QMediaControl::staticMetaObject
-	?staticMetaObject@QLocalMediaPlaylistProvider@@2UQMetaObject@@B @ 903 NONAME ; struct QMetaObject const QLocalMediaPlaylistProvider::staticMetaObject
-	?staticMetaObject@QMediaServiceProviderPlugin@@2UQMetaObject@@B @ 904 NONAME ; struct QMetaObject const QMediaServiceProviderPlugin::staticMetaObject
-	?staticMetaObject@QVideoOutputControl@@2UQMetaObject@@B @ 905 NONAME ; struct QMetaObject const QVideoOutputControl::staticMetaObject
-	?staticMetaObject@QMetaDataControl@@2UQMetaObject@@B @ 906 NONAME ; struct QMetaObject const QMetaDataControl::staticMetaObject
-	?staticMetaObject@QMediaPlayer@@2UQMetaObject@@B @ 907 NONAME ; struct QMetaObject const QMediaPlayer::staticMetaObject
-	?staticMetaObject@QMediaService@@2UQMetaObject@@B @ 908 NONAME ; struct QMetaObject const QMediaService::staticMetaObject
-	?staticMetaObject@QMediaObject@@2UQMetaObject@@B @ 909 NONAME ; struct QMetaObject const QMediaObject::staticMetaObject
-	?staticMetaObject@QMediaPlaylist@@2UQMetaObject@@B @ 910 NONAME ; struct QMetaObject const QMediaPlaylist::staticMetaObject
-	?staticMetaObject@QMediaServiceProvider@@2UQMetaObject@@B @ 911 NONAME ; struct QMetaObject const QMediaServiceProvider::staticMetaObject
-	?staticMetaObject@QMediaPlayerControl@@2UQMetaObject@@B @ 912 NONAME ; struct QMetaObject const QMediaPlayerControl::staticMetaObject
-	?staticMetaObject@QMediaPlaylistNavigator@@2UQMetaObject@@B @ 913 NONAME ; struct QMetaObject const QMediaPlaylistNavigator::staticMetaObject
-	?staticMetaObject@QVideoWidgetControl@@2UQMetaObject@@B @ 914 NONAME ; struct QMetaObject const QVideoWidgetControl::staticMetaObject
-	?staticMetaObject@QVideoWindowControl@@2UQMetaObject@@B @ 915 NONAME ; struct QMetaObject const QVideoWindowControl::staticMetaObject
-	?staticMetaObject@QVideoDeviceControl@@2UQMetaObject@@B @ 916 NONAME ; struct QMetaObject const QVideoDeviceControl::staticMetaObject
-	?staticMetaObject@QVideoRendererControl@@2UQMetaObject@@B @ 917 NONAME ; struct QMetaObject const QVideoRendererControl::staticMetaObject
-	?staticMetaObject@QPainterVideoSurface@@2UQMetaObject@@B @ 918 NONAME ; struct QMetaObject const QPainterVideoSurface::staticMetaObject
-	?staticMetaObject@QMediaPlaylistIOPlugin@@2UQMetaObject@@B @ 919 NONAME ; struct QMetaObject const QMediaPlaylistIOPlugin::staticMetaObject
-	?staticMetaObject@QGraphicsVideoItem@@2UQMetaObject@@B @ 920 NONAME ; struct QMetaObject const QGraphicsVideoItem::staticMetaObject
-	??0QSoundEffect@@QAE@PAVQObject@@@Z @ 921 NONAME ; QSoundEffect::QSoundEffect(class QObject *)
-	??1QSoundEffect@@UAE@XZ @ 922 NONAME ; QSoundEffect::~QSoundEffect(void)
-	??_EQSoundEffect@@UAE@I@Z @ 923 NONAME ; QSoundEffect::~QSoundEffect(unsigned int)
-	?aspectRatioMode@QVideoWidget@@QBE?AW4AspectRatioMode@Qt@@XZ @ 924 NONAME ; enum Qt::AspectRatioMode QVideoWidget::aspectRatioMode(void) const
-	?getStaticMetaObject@QSoundEffect@@SAABUQMetaObject@@XZ @ 925 NONAME ; struct QMetaObject const & QSoundEffect::getStaticMetaObject(void)
-	?isMuted@QSoundEffect@@QBE_NXZ @ 926 NONAME ; bool QSoundEffect::isMuted(void) const
-	?loops@QSoundEffect@@QBEHXZ @ 927 NONAME ; int QSoundEffect::loops(void) const
-	?loopsChanged@QSoundEffect@@IAEXXZ @ 928 NONAME ; void QSoundEffect::loopsChanged(void)
-	?metaObject@QSoundEffect@@UBEPBUQMetaObject@@XZ @ 929 NONAME ; struct QMetaObject const * QSoundEffect::metaObject(void) const
-	?mutedChanged@QSoundEffect@@IAEXXZ @ 930 NONAME ; void QSoundEffect::mutedChanged(void)
-	?play@QSoundEffect@@QAEXXZ @ 931 NONAME ; void QSoundEffect::play(void)
-	?qt_metacall@QSoundEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 932 NONAME ; int QSoundEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacast@QSoundEffect@@UAEPAXPBD@Z @ 933 NONAME ; void * QSoundEffect::qt_metacast(char const *)
-	?setAspectRatioMode@QVideoWidget@@QAEXW4AspectRatioMode@Qt@@@Z @ 934 NONAME ; void QVideoWidget::setAspectRatioMode(enum Qt::AspectRatioMode)
-	?setLoops@QSoundEffect@@QAEXH@Z @ 935 NONAME ; void QSoundEffect::setLoops(int)
-	?setMuted@QSoundEffect@@QAEX_N@Z @ 936 NONAME ; void QSoundEffect::setMuted(bool)
-	?setSource@QSoundEffect@@QAEXABVQUrl@@@Z @ 937 NONAME ; void QSoundEffect::setSource(class QUrl const &)
-	?setVolume@QSoundEffect@@QAEXH@Z @ 938 NONAME ; void QSoundEffect::setVolume(int)
-	?source@QSoundEffect@@QBE?AVQUrl@@XZ @ 939 NONAME ; class QUrl QSoundEffect::source(void) const
-	?sourceChanged@QSoundEffect@@IAEXXZ @ 940 NONAME ; void QSoundEffect::sourceChanged(void)
-	?tr@QSoundEffect@@SA?AVQString@@PBD0@Z @ 941 NONAME ; class QString QSoundEffect::tr(char const *, char const *)
-	?tr@QSoundEffect@@SA?AVQString@@PBD0H@Z @ 942 NONAME ; class QString QSoundEffect::tr(char const *, char const *, int)
-	?trUtf8@QSoundEffect@@SA?AVQString@@PBD0@Z @ 943 NONAME ; class QString QSoundEffect::trUtf8(char const *, char const *)
-	?trUtf8@QSoundEffect@@SA?AVQString@@PBD0H@Z @ 944 NONAME ; class QString QSoundEffect::trUtf8(char const *, char const *, int)
-	?volume@QSoundEffect@@QBEHXZ @ 945 NONAME ; int QSoundEffect::volume(void) const
-	?volumeChanged@QSoundEffect@@IAEXXZ @ 946 NONAME ; void QSoundEffect::volumeChanged(void)
-	?staticMetaObject@QSoundEffect@@2UQMetaObject@@B @ 947 NONAME ; struct QMetaObject const QSoundEffect::staticMetaObject
-	?event@QGraphicsVideoItem@@MAE_NPAVQEvent@@@Z @ 948 NONAME ; bool QGraphicsVideoItem::event(class QEvent *)
-	?sceneEvent@QGraphicsVideoItem@@MAE_NPAVQEvent@@@Z @ 949 NONAME ; bool QGraphicsVideoItem::sceneEvent(class QEvent *)
+	?channelCount@QAudioFormat@@QBEHXZ @ 270 NONAME ; int QAudioFormat::channelCount(void) const
+	?sampleRate@QAudioFormat@@QBEHXZ @ 271 NONAME ; int QAudioFormat::sampleRate(void) const
+	?setChannelCount@QAudioFormat@@QAEXH@Z @ 272 NONAME ; void QAudioFormat::setChannelCount(int)
+	?setSampleRate@QAudioFormat@@QAEXH@Z @ 273 NONAME ; void QAudioFormat::setSampleRate(int)
+	?supportedChannelCounts@QAudioDeviceInfo@@QBE?AV?$QList@H@@XZ @ 274 NONAME ; class QList<int> QAudioDeviceInfo::supportedChannelCounts(void) const
+	?supportedSampleRates@QAudioDeviceInfo@@QBE?AV?$QList@H@@XZ @ 275 NONAME ; class QList<int> QAudioDeviceInfo::supportedSampleRates(void) const
 
diff --git a/src/s60installs/eabi/QtMediaServicesu.def b/src/s60installs/eabi/QtMediaServicesu.def
new file mode 100644
index 0000000..0b4083d
--- /dev/null
+++ b/src/s60installs/eabi/QtMediaServicesu.def
@@ -0,0 +1,674 @@
+EXPORTS
+	_ZN12QMediaObject11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN12QMediaObject11qt_metacastEPKc @ 2 NONAME
+	_ZN12QMediaObject11setMetaDataEN15QtMediaServices8MetaDataERK8QVariant @ 3 NONAME
+	_ZN12QMediaObject13setupMetaDataEv @ 4 NONAME
+	_ZN12QMediaObject15metaDataChangedEv @ 5 NONAME
+	_ZN12QMediaObject16addPropertyWatchERK10QByteArray @ 6 NONAME
+	_ZN12QMediaObject16staticMetaObjectE @ 7 NONAME DATA 16
+	_ZN12QMediaObject17setNotifyIntervalEi @ 8 NONAME
+	_ZN12QMediaObject19availabilityChangedEb @ 9 NONAME
+	_ZN12QMediaObject19getStaticMetaObjectEv @ 10 NONAME
+	_ZN12QMediaObject19removePropertyWatchERK10QByteArray @ 11 NONAME
+	_ZN12QMediaObject19setExtendedMetaDataERK7QStringRK8QVariant @ 12 NONAME
+	_ZN12QMediaObject21notifyIntervalChangedEi @ 13 NONAME
+	_ZN12QMediaObject23metaDataWritableChangedEb @ 14 NONAME
+	_ZN12QMediaObject24metaDataAvailableChangedEb @ 15 NONAME
+	_ZN12QMediaObject4bindEP7QObject @ 16 NONAME
+	_ZN12QMediaObject6unbindEP7QObject @ 17 NONAME
+	_ZN12QMediaObjectC1EP7QObjectP13QMediaService @ 18 NONAME
+	_ZN12QMediaObjectC1ER19QMediaObjectPrivateP7QObjectP13QMediaService @ 19 NONAME
+	_ZN12QMediaObjectC2EP7QObjectP13QMediaService @ 20 NONAME
+	_ZN12QMediaObjectC2ER19QMediaObjectPrivateP7QObjectP13QMediaService @ 21 NONAME
+	_ZN12QMediaObjectD0Ev @ 22 NONAME
+	_ZN12QMediaObjectD1Ev @ 23 NONAME
+	_ZN12QMediaObjectD2Ev @ 24 NONAME
+	_ZN12QMediaPlayer10hasSupportERK7QStringRK11QStringList6QFlagsINS_4FlagEE @ 25 NONAME
+	_ZN12QMediaPlayer11qt_metacallEN11QMetaObject4CallEiPPv @ 26 NONAME
+	_ZN12QMediaPlayer11qt_metacastEPKc @ 27 NONAME
+	_ZN12QMediaPlayer11setPositionEx @ 28 NONAME
+	_ZN12QMediaPlayer12mediaChangedERK13QMediaContent @ 29 NONAME
+	_ZN12QMediaPlayer12mutedChangedEb @ 30 NONAME
+	_ZN12QMediaPlayer12stateChangedENS_5StateE @ 31 NONAME
+	_ZN12QMediaPlayer13volumeChangedEi @ 32 NONAME
+	_ZN12QMediaPlayer15durationChangedEx @ 33 NONAME
+	_ZN12QMediaPlayer15positionChangedEx @ 34 NONAME
+	_ZN12QMediaPlayer15seekableChangedEb @ 35 NONAME
+	_ZN12QMediaPlayer15setPlaybackRateEf @ 36 NONAME
+	_ZN12QMediaPlayer16staticMetaObjectE @ 37 NONAME DATA 16
+	_ZN12QMediaPlayer18mediaStatusChangedENS_11MediaStatusE @ 38 NONAME
+	_ZN12QMediaPlayer18supportedMimeTypesE6QFlagsINS_4FlagEE @ 39 NONAME
+	_ZN12QMediaPlayer19bufferStatusChangedEi @ 40 NONAME
+	_ZN12QMediaPlayer19getStaticMetaObjectEv @ 41 NONAME
+	_ZN12QMediaPlayer19playbackRateChangedEf @ 42 NONAME
+	_ZN12QMediaPlayer21audioAvailableChangedEb @ 43 NONAME
+	_ZN12QMediaPlayer21videoAvailableChangedEb @ 44 NONAME
+	_ZN12QMediaPlayer4bindEP7QObject @ 45 NONAME
+	_ZN12QMediaPlayer4playEv @ 46 NONAME
+	_ZN12QMediaPlayer4stopEv @ 47 NONAME
+	_ZN12QMediaPlayer5errorENS_5ErrorE @ 48 NONAME
+	_ZN12QMediaPlayer5pauseEv @ 49 NONAME
+	_ZN12QMediaPlayer6unbindEP7QObject @ 50 NONAME
+	_ZN12QMediaPlayer8setMediaERK13QMediaContentP9QIODevice @ 51 NONAME
+	_ZN12QMediaPlayer8setMutedEb @ 52 NONAME
+	_ZN12QMediaPlayer9setVolumeEi @ 53 NONAME
+	_ZN12QMediaPlayerC1EP7QObject6QFlagsINS_4FlagEEP21QMediaServiceProvider @ 54 NONAME
+	_ZN12QMediaPlayerC2EP7QObject6QFlagsINS_4FlagEEP21QMediaServiceProvider @ 55 NONAME
+	_ZN12QMediaPlayerD0Ev @ 56 NONAME
+	_ZN12QMediaPlayerD1Ev @ 57 NONAME
+	_ZN12QMediaPlayerD2Ev @ 58 NONAME
+	_ZN12QSoundEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 59 NONAME
+	_ZN12QSoundEffect11qt_metacastEPKc @ 60 NONAME
+	_ZN12QSoundEffect12loopsChangedEv @ 61 NONAME
+	_ZN12QSoundEffect12mutedChangedEv @ 62 NONAME
+	_ZN12QSoundEffect13sourceChangedEv @ 63 NONAME
+	_ZN12QSoundEffect13volumeChangedEv @ 64 NONAME
+	_ZN12QSoundEffect16staticMetaObjectE @ 65 NONAME DATA 16
+	_ZN12QSoundEffect19getStaticMetaObjectEv @ 66 NONAME
+	_ZN12QSoundEffect4playEv @ 67 NONAME
+	_ZN12QSoundEffect8setLoopsEi @ 68 NONAME
+	_ZN12QSoundEffect8setMutedEb @ 69 NONAME
+	_ZN12QSoundEffect9setSourceERK4QUrl @ 70 NONAME
+	_ZN12QSoundEffect9setVolumeEi @ 71 NONAME
+	_ZN12QSoundEffectC1EP7QObject @ 72 NONAME
+	_ZN12QSoundEffectC2EP7QObject @ 73 NONAME
+	_ZN12QSoundEffectD0Ev @ 74 NONAME
+	_ZN12QSoundEffectD1Ev @ 75 NONAME
+	_ZN12QSoundEffectD2Ev @ 76 NONAME
+	_ZN12QVideoWidget10hueChangedEi @ 77 NONAME
+	_ZN12QVideoWidget10paintEventEP11QPaintEvent @ 78 NONAME
+	_ZN12QVideoWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 79 NONAME
+	_ZN12QVideoWidget11qt_metacastEPKc @ 80 NONAME
+	_ZN12QVideoWidget11resizeEventEP12QResizeEvent @ 81 NONAME
+	_ZN12QVideoWidget11setContrastEi @ 82 NONAME
+	_ZN12QVideoWidget13setBrightnessEi @ 83 NONAME
+	_ZN12QVideoWidget13setFullScreenEb @ 84 NONAME
+	_ZN12QVideoWidget13setSaturationEi @ 85 NONAME
+	_ZN12QVideoWidget14setMediaObjectEP12QMediaObject @ 86 NONAME
+	_ZN12QVideoWidget15contrastChangedEi @ 87 NONAME
+	_ZN12QVideoWidget16staticMetaObjectE @ 88 NONAME DATA 16
+	_ZN12QVideoWidget17brightnessChangedEi @ 89 NONAME
+	_ZN12QVideoWidget17fullScreenChangedEb @ 90 NONAME
+	_ZN12QVideoWidget17saturationChangedEi @ 91 NONAME
+	_ZN12QVideoWidget18setAspectRatioModeEN2Qt15AspectRatioModeE @ 92 NONAME
+	_ZN12QVideoWidget19getStaticMetaObjectEv @ 93 NONAME
+	_ZN12QVideoWidget5eventEP6QEvent @ 94 NONAME
+	_ZN12QVideoWidget6setHueEi @ 95 NONAME
+	_ZN12QVideoWidget9hideEventEP10QHideEvent @ 96 NONAME
+	_ZN12QVideoWidget9moveEventEP10QMoveEvent @ 97 NONAME
+	_ZN12QVideoWidget9showEventEP10QShowEvent @ 98 NONAME
+	_ZN12QVideoWidgetC1EP7QWidget @ 99 NONAME
+	_ZN12QVideoWidgetC2EP7QWidget @ 100 NONAME
+	_ZN12QVideoWidgetD0Ev @ 101 NONAME
+	_ZN12QVideoWidgetD1Ev @ 102 NONAME
+	_ZN12QVideoWidgetD2Ev @ 103 NONAME
+	_ZN13QMediaContentC1ERK14QMediaResource @ 104 NONAME
+	_ZN13QMediaContentC1ERK15QNetworkRequest @ 105 NONAME
+	_ZN13QMediaContentC1ERK4QUrl @ 106 NONAME
+	_ZN13QMediaContentC1ERK5QListI14QMediaResourceE @ 107 NONAME
+	_ZN13QMediaContentC1ERKS_ @ 108 NONAME
+	_ZN13QMediaContentC1Ev @ 109 NONAME
+	_ZN13QMediaContentC2ERK14QMediaResource @ 110 NONAME
+	_ZN13QMediaContentC2ERK15QNetworkRequest @ 111 NONAME
+	_ZN13QMediaContentC2ERK4QUrl @ 112 NONAME
+	_ZN13QMediaContentC2ERK5QListI14QMediaResourceE @ 113 NONAME
+	_ZN13QMediaContentC2ERKS_ @ 114 NONAME
+	_ZN13QMediaContentC2Ev @ 115 NONAME
+	_ZN13QMediaContentD1Ev @ 116 NONAME
+	_ZN13QMediaContentD2Ev @ 117 NONAME
+	_ZN13QMediaContentaSERKS_ @ 118 NONAME
+	_ZN13QMediaControl11qt_metacallEN11QMetaObject4CallEiPPv @ 119 NONAME
+	_ZN13QMediaControl11qt_metacastEPKc @ 120 NONAME
+	_ZN13QMediaControl16staticMetaObjectE @ 121 NONAME DATA 16
+	_ZN13QMediaControl19getStaticMetaObjectEv @ 122 NONAME
+	_ZN13QMediaControlC1EP7QObject @ 123 NONAME
+	_ZN13QMediaControlC1ER20QMediaControlPrivateP7QObject @ 124 NONAME
+	_ZN13QMediaControlC2EP7QObject @ 125 NONAME
+	_ZN13QMediaControlC2ER20QMediaControlPrivateP7QObject @ 126 NONAME
+	_ZN13QMediaControlD0Ev @ 127 NONAME
+	_ZN13QMediaControlD1Ev @ 128 NONAME
+	_ZN13QMediaControlD2Ev @ 129 NONAME
+	_ZN13QMediaService11qt_metacallEN11QMetaObject4CallEiPPv @ 130 NONAME
+	_ZN13QMediaService11qt_metacastEPKc @ 131 NONAME
+	_ZN13QMediaService16staticMetaObjectE @ 132 NONAME DATA 16
+	_ZN13QMediaService19getStaticMetaObjectEv @ 133 NONAME
+	_ZN13QMediaServiceC2EP7QObject @ 134 NONAME
+	_ZN13QMediaServiceC2ER20QMediaServicePrivateP7QObject @ 135 NONAME
+	_ZN13QMediaServiceD0Ev @ 136 NONAME
+	_ZN13QMediaServiceD1Ev @ 137 NONAME
+	_ZN13QMediaServiceD2Ev @ 138 NONAME
+	_ZN14QMediaPlaylist10loadFailedEv @ 139 NONAME
+	_ZN14QMediaPlaylist11insertMediaEiRK13QMediaContent @ 140 NONAME
+	_ZN14QMediaPlaylist11insertMediaEiRK5QListI13QMediaContentE @ 141 NONAME
+	_ZN14QMediaPlaylist11qt_metacallEN11QMetaObject4CallEiPPv @ 142 NONAME
+	_ZN14QMediaPlaylist11qt_metacastEPKc @ 143 NONAME
+	_ZN14QMediaPlaylist11removeMediaEi @ 144 NONAME
+	_ZN14QMediaPlaylist11removeMediaEii @ 145 NONAME
+	_ZN14QMediaPlaylist12mediaChangedEii @ 146 NONAME
+	_ZN14QMediaPlaylist12mediaRemovedEii @ 147 NONAME
+	_ZN14QMediaPlaylist13mediaInsertedEii @ 148 NONAME
+	_ZN14QMediaPlaylist14setMediaObjectEP12QMediaObject @ 149 NONAME
+	_ZN14QMediaPlaylist15setCurrentIndexEi @ 150 NONAME
+	_ZN14QMediaPlaylist15setPlaybackModeENS_12PlaybackModeE @ 151 NONAME
+	_ZN14QMediaPlaylist16staticMetaObjectE @ 152 NONAME DATA 16
+	_ZN14QMediaPlaylist19currentIndexChangedEi @ 153 NONAME
+	_ZN14QMediaPlaylist19currentMediaChangedERK13QMediaContent @ 154 NONAME
+	_ZN14QMediaPlaylist19getStaticMetaObjectEv @ 155 NONAME
+	_ZN14QMediaPlaylist19playbackModeChangedENS_12PlaybackModeE @ 156 NONAME
+	_ZN14QMediaPlaylist21mediaAboutToBeRemovedEii @ 157 NONAME
+	_ZN14QMediaPlaylist22mediaAboutToBeInsertedEii @ 158 NONAME
+	_ZN14QMediaPlaylist4loadEP9QIODevicePKc @ 159 NONAME
+	_ZN14QMediaPlaylist4loadERK4QUrlPKc @ 160 NONAME
+	_ZN14QMediaPlaylist4nextEv @ 161 NONAME
+	_ZN14QMediaPlaylist4saveEP9QIODevicePKc @ 162 NONAME
+	_ZN14QMediaPlaylist4saveERK4QUrlPKc @ 163 NONAME
+	_ZN14QMediaPlaylist5clearEv @ 164 NONAME
+	_ZN14QMediaPlaylist6loadedEv @ 165 NONAME
+	_ZN14QMediaPlaylist7shuffleEv @ 166 NONAME
+	_ZN14QMediaPlaylist8addMediaERK13QMediaContent @ 167 NONAME
+	_ZN14QMediaPlaylist8addMediaERK5QListI13QMediaContentE @ 168 NONAME
+	_ZN14QMediaPlaylist8previousEv @ 169 NONAME
+	_ZN14QMediaPlaylistC1EP7QObject @ 170 NONAME
+	_ZN14QMediaPlaylistC2EP7QObject @ 171 NONAME
+	_ZN14QMediaPlaylistD0Ev @ 172 NONAME
+	_ZN14QMediaPlaylistD1Ev @ 173 NONAME
+	_ZN14QMediaPlaylistD2Ev @ 174 NONAME
+	_ZN14QMediaResource11setDataSizeEx @ 175 NONAME
+	_ZN14QMediaResource11setLanguageERK7QString @ 176 NONAME
+	_ZN14QMediaResource13setAudioCodecERK7QString @ 177 NONAME
+	_ZN14QMediaResource13setResolutionERK5QSize @ 178 NONAME
+	_ZN14QMediaResource13setResolutionEii @ 179 NONAME
+	_ZN14QMediaResource13setSampleRateEi @ 180 NONAME
+	_ZN14QMediaResource13setVideoCodecERK7QString @ 181 NONAME
+	_ZN14QMediaResource15setAudioBitRateEi @ 182 NONAME
+	_ZN14QMediaResource15setChannelCountEi @ 183 NONAME
+	_ZN14QMediaResource15setVideoBitRateEi @ 184 NONAME
+	_ZN14QMediaResourceC1ERK15QNetworkRequestRK7QString @ 185 NONAME
+	_ZN14QMediaResourceC1ERK4QUrlRK7QString @ 186 NONAME
+	_ZN14QMediaResourceC1ERKS_ @ 187 NONAME
+	_ZN14QMediaResourceC1Ev @ 188 NONAME
+	_ZN14QMediaResourceC2ERK15QNetworkRequestRK7QString @ 189 NONAME
+	_ZN14QMediaResourceC2ERK4QUrlRK7QString @ 190 NONAME
+	_ZN14QMediaResourceC2ERKS_ @ 191 NONAME
+	_ZN14QMediaResourceC2Ev @ 192 NONAME
+	_ZN14QMediaResourceD1Ev @ 193 NONAME
+	_ZN14QMediaResourceD2Ev @ 194 NONAME
+	_ZN14QMediaResourceaSERKS_ @ 195 NONAME
+	_ZN15QMediaTimeRange11addIntervalERK18QMediaTimeInterval @ 196 NONAME
+	_ZN15QMediaTimeRange11addIntervalExx @ 197 NONAME
+	_ZN15QMediaTimeRange12addTimeRangeERKS_ @ 198 NONAME
+	_ZN15QMediaTimeRange14removeIntervalERK18QMediaTimeInterval @ 199 NONAME
+	_ZN15QMediaTimeRange14removeIntervalExx @ 200 NONAME
+	_ZN15QMediaTimeRange15removeTimeRangeERKS_ @ 201 NONAME
+	_ZN15QMediaTimeRange5clearEv @ 202 NONAME
+	_ZN15QMediaTimeRangeC1ERK18QMediaTimeInterval @ 203 NONAME
+	_ZN15QMediaTimeRangeC1ERKS_ @ 204 NONAME
+	_ZN15QMediaTimeRangeC1Ev @ 205 NONAME
+	_ZN15QMediaTimeRangeC1Exx @ 206 NONAME
+	_ZN15QMediaTimeRangeC2ERK18QMediaTimeInterval @ 207 NONAME
+	_ZN15QMediaTimeRangeC2ERKS_ @ 208 NONAME
+	_ZN15QMediaTimeRangeC2Ev @ 209 NONAME
+	_ZN15QMediaTimeRangeC2Exx @ 210 NONAME
+	_ZN15QMediaTimeRangeD1Ev @ 211 NONAME
+	_ZN15QMediaTimeRangeD2Ev @ 212 NONAME
+	_ZN15QMediaTimeRangeaSERK18QMediaTimeInterval @ 213 NONAME
+	_ZN15QMediaTimeRangeaSERKS_ @ 214 NONAME
+	_ZN15QMediaTimeRangemIERK18QMediaTimeInterval @ 215 NONAME
+	_ZN15QMediaTimeRangemIERKS_ @ 216 NONAME
+	_ZN15QMediaTimeRangepLERK18QMediaTimeInterval @ 217 NONAME
+	_ZN15QMediaTimeRangepLERKS_ @ 218 NONAME
+	_ZN16QMetaDataControl11qt_metacallEN11QMetaObject4CallEiPPv @ 219 NONAME
+	_ZN16QMetaDataControl11qt_metacastEPKc @ 220 NONAME
+	_ZN16QMetaDataControl15metaDataChangedEv @ 221 NONAME
+	_ZN16QMetaDataControl15writableChangedEb @ 222 NONAME
+	_ZN16QMetaDataControl16staticMetaObjectE @ 223 NONAME DATA 16
+	_ZN16QMetaDataControl19getStaticMetaObjectEv @ 224 NONAME
+	_ZN16QMetaDataControl24metaDataAvailableChangedEb @ 225 NONAME
+	_ZN16QMetaDataControlC2EP7QObject @ 226 NONAME
+	_ZN16QMetaDataControlD0Ev @ 227 NONAME
+	_ZN16QMetaDataControlD1Ev @ 228 NONAME
+	_ZN16QMetaDataControlD2Ev @ 229 NONAME
+	_ZN18QGraphicsVideoItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 230 NONAME
+	_ZN18QGraphicsVideoItem10sceneEventEP6QEvent @ 231 NONAME
+	_ZN18QGraphicsVideoItem11qt_metacallEN11QMetaObject4CallEiPPv @ 232 NONAME
+	_ZN18QGraphicsVideoItem11qt_metacastEPKc @ 233 NONAME
+	_ZN18QGraphicsVideoItem14setMediaObjectEP12QMediaObject @ 234 NONAME
+	_ZN18QGraphicsVideoItem16staticMetaObjectE @ 235 NONAME DATA 16
+	_ZN18QGraphicsVideoItem17nativeSizeChangedERK6QSizeF @ 236 NONAME
+	_ZN18QGraphicsVideoItem18setAspectRatioModeEN2Qt15AspectRatioModeE @ 237 NONAME
+	_ZN18QGraphicsVideoItem19getStaticMetaObjectEv @ 238 NONAME
+	_ZN18QGraphicsVideoItem5eventEP6QEvent @ 239 NONAME
+	_ZN18QGraphicsVideoItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 240 NONAME
+	_ZN18QGraphicsVideoItem7setSizeERK6QSizeF @ 241 NONAME
+	_ZN18QGraphicsVideoItem9setOffsetERK7QPointF @ 242 NONAME
+	_ZN18QGraphicsVideoItemC1EP13QGraphicsItem @ 243 NONAME
+	_ZN18QGraphicsVideoItemC2EP13QGraphicsItem @ 244 NONAME
+	_ZN18QGraphicsVideoItemD0Ev @ 245 NONAME
+	_ZN18QGraphicsVideoItemD1Ev @ 246 NONAME
+	_ZN18QGraphicsVideoItemD2Ev @ 247 NONAME
+	_ZN18QMediaTimeIntervalC1ERKS_ @ 248 NONAME
+	_ZN18QMediaTimeIntervalC1Ev @ 249 NONAME
+	_ZN18QMediaTimeIntervalC1Exx @ 250 NONAME
+	_ZN18QMediaTimeIntervalC2ERKS_ @ 251 NONAME
+	_ZN18QMediaTimeIntervalC2Ev @ 252 NONAME
+	_ZN18QMediaTimeIntervalC2Exx @ 253 NONAME
+	_ZN19QMediaPlayerControl11qt_metacallEN11QMetaObject4CallEiPPv @ 254 NONAME
+	_ZN19QMediaPlayerControl11qt_metacastEPKc @ 255 NONAME
+	_ZN19QMediaPlayerControl12mediaChangedERK13QMediaContent @ 256 NONAME
+	_ZN19QMediaPlayerControl12mutedChangedEb @ 257 NONAME
+	_ZN19QMediaPlayerControl12stateChangedEN12QMediaPlayer5StateE @ 258 NONAME
+	_ZN19QMediaPlayerControl13volumeChangedEi @ 259 NONAME
+	_ZN19QMediaPlayerControl15durationChangedEx @ 260 NONAME
+	_ZN19QMediaPlayerControl15positionChangedEx @ 261 NONAME
+	_ZN19QMediaPlayerControl15seekableChangedEb @ 262 NONAME
+	_ZN19QMediaPlayerControl16staticMetaObjectE @ 263 NONAME DATA 16
+	_ZN19QMediaPlayerControl18mediaStatusChangedEN12QMediaPlayer11MediaStatusE @ 264 NONAME
+	_ZN19QMediaPlayerControl19bufferStatusChangedEi @ 265 NONAME
+	_ZN19QMediaPlayerControl19getStaticMetaObjectEv @ 266 NONAME
+	_ZN19QMediaPlayerControl19playbackRateChangedEf @ 267 NONAME
+	_ZN19QMediaPlayerControl21audioAvailableChangedEb @ 268 NONAME
+	_ZN19QMediaPlayerControl21videoAvailableChangedEb @ 269 NONAME
+	_ZN19QMediaPlayerControl30availablePlaybackRangesChangedERK15QMediaTimeRange @ 270 NONAME
+	_ZN19QMediaPlayerControl5errorEiRK7QString @ 271 NONAME
+	_ZN19QMediaPlayerControlC2EP7QObject @ 272 NONAME
+	_ZN19QMediaPlayerControlD0Ev @ 273 NONAME
+	_ZN19QMediaPlayerControlD1Ev @ 274 NONAME
+	_ZN19QMediaPlayerControlD2Ev @ 275 NONAME
+	_ZN19QVideoDeviceControl11qt_metacallEN11QMetaObject4CallEiPPv @ 276 NONAME
+	_ZN19QVideoDeviceControl11qt_metacastEPKc @ 277 NONAME
+	_ZN19QVideoDeviceControl14devicesChangedEv @ 278 NONAME
+	_ZN19QVideoDeviceControl16staticMetaObjectE @ 279 NONAME DATA 16
+	_ZN19QVideoDeviceControl19getStaticMetaObjectEv @ 280 NONAME
+	_ZN19QVideoDeviceControl21selectedDeviceChangedERK7QString @ 281 NONAME
+	_ZN19QVideoDeviceControl21selectedDeviceChangedEi @ 282 NONAME
+	_ZN19QVideoDeviceControlC2EP7QObject @ 283 NONAME
+	_ZN19QVideoDeviceControlD0Ev @ 284 NONAME
+	_ZN19QVideoDeviceControlD1Ev @ 285 NONAME
+	_ZN19QVideoDeviceControlD2Ev @ 286 NONAME
+	_ZN19QVideoOutputControl11qt_metacallEN11QMetaObject4CallEiPPv @ 287 NONAME
+	_ZN19QVideoOutputControl11qt_metacastEPKc @ 288 NONAME
+	_ZN19QVideoOutputControl16staticMetaObjectE @ 289 NONAME DATA 16
+	_ZN19QVideoOutputControl19getStaticMetaObjectEv @ 290 NONAME
+	_ZN19QVideoOutputControl23availableOutputsChangedERK5QListINS_6OutputEE @ 291 NONAME
+	_ZN19QVideoOutputControlC2EP7QObject @ 292 NONAME
+	_ZN19QVideoOutputControlD0Ev @ 293 NONAME
+	_ZN19QVideoOutputControlD1Ev @ 294 NONAME
+	_ZN19QVideoOutputControlD2Ev @ 295 NONAME
+	_ZN19QVideoWidgetControl10hueChangedEi @ 296 NONAME
+	_ZN19QVideoWidgetControl11qt_metacallEN11QMetaObject4CallEiPPv @ 297 NONAME
+	_ZN19QVideoWidgetControl11qt_metacastEPKc @ 298 NONAME
+	_ZN19QVideoWidgetControl15contrastChangedEi @ 299 NONAME
+	_ZN19QVideoWidgetControl16staticMetaObjectE @ 300 NONAME DATA 16
+	_ZN19QVideoWidgetControl17brightnessChangedEi @ 301 NONAME
+	_ZN19QVideoWidgetControl17fullScreenChangedEb @ 302 NONAME
+	_ZN19QVideoWidgetControl17saturationChangedEi @ 303 NONAME
+	_ZN19QVideoWidgetControl19getStaticMetaObjectEv @ 304 NONAME
+	_ZN19QVideoWidgetControlC2EP7QObject @ 305 NONAME
+	_ZN19QVideoWidgetControlD0Ev @ 306 NONAME
+	_ZN19QVideoWidgetControlD1Ev @ 307 NONAME
+	_ZN19QVideoWidgetControlD2Ev @ 308 NONAME
+	_ZN19QVideoWindowControl10hueChangedEi @ 309 NONAME
+	_ZN19QVideoWindowControl11qt_metacallEN11QMetaObject4CallEiPPv @ 310 NONAME
+	_ZN19QVideoWindowControl11qt_metacastEPKc @ 311 NONAME
+	_ZN19QVideoWindowControl15contrastChangedEi @ 312 NONAME
+	_ZN19QVideoWindowControl16staticMetaObjectE @ 313 NONAME DATA 16
+	_ZN19QVideoWindowControl17brightnessChangedEi @ 314 NONAME
+	_ZN19QVideoWindowControl17fullScreenChangedEb @ 315 NONAME
+	_ZN19QVideoWindowControl17nativeSizeChangedEv @ 316 NONAME
+	_ZN19QVideoWindowControl17saturationChangedEi @ 317 NONAME
+	_ZN19QVideoWindowControl19getStaticMetaObjectEv @ 318 NONAME
+	_ZN19QVideoWindowControlC2EP7QObject @ 319 NONAME
+	_ZN19QVideoWindowControlD0Ev @ 320 NONAME
+	_ZN19QVideoWindowControlD1Ev @ 321 NONAME
+	_ZN19QVideoWindowControlD2Ev @ 322 NONAME
+	_ZN20QMediaPlaylistReaderD0Ev @ 323 NONAME
+	_ZN20QMediaPlaylistReaderD1Ev @ 324 NONAME
+	_ZN20QMediaPlaylistReaderD2Ev @ 325 NONAME
+	_ZN20QMediaPlaylistWriterD0Ev @ 326 NONAME
+	_ZN20QMediaPlaylistWriterD1Ev @ 327 NONAME
+	_ZN20QMediaPlaylistWriterD2Ev @ 328 NONAME
+	_ZN20QPainterVideoSurface11qt_metacallEN11QMetaObject4CallEiPPv @ 329 NONAME
+	_ZN20QPainterVideoSurface11qt_metacastEPKc @ 330 NONAME
+	_ZN20QPainterVideoSurface11setContrastEi @ 331 NONAME
+	_ZN20QPainterVideoSurface12frameChangedEv @ 332 NONAME
+	_ZN20QPainterVideoSurface13createPainterEv @ 333 NONAME
+	_ZN20QPainterVideoSurface13setBrightnessEi @ 334 NONAME
+	_ZN20QPainterVideoSurface13setSaturationEi @ 335 NONAME
+	_ZN20QPainterVideoSurface16staticMetaObjectE @ 336 NONAME DATA 16
+	_ZN20QPainterVideoSurface19getStaticMetaObjectEv @ 337 NONAME
+	_ZN20QPainterVideoSurface4stopEv @ 338 NONAME
+	_ZN20QPainterVideoSurface5paintEP8QPainterRK6QRectFS4_ @ 339 NONAME
+	_ZN20QPainterVideoSurface5startERK19QVideoSurfaceFormat @ 340 NONAME
+	_ZN20QPainterVideoSurface6setHueEi @ 341 NONAME
+	_ZN20QPainterVideoSurface7presentERK11QVideoFrame @ 342 NONAME
+	_ZN20QPainterVideoSurface8setReadyEb @ 343 NONAME
+	_ZN20QPainterVideoSurfaceC1EP7QObject @ 344 NONAME
+	_ZN20QPainterVideoSurfaceC2EP7QObject @ 345 NONAME
+	_ZN20QPainterVideoSurfaceD0Ev @ 346 NONAME
+	_ZN20QPainterVideoSurfaceD1Ev @ 347 NONAME
+	_ZN20QPainterVideoSurfaceD2Ev @ 348 NONAME
+	_ZN21QMediaPlaylistControl11qt_metacallEN11QMetaObject4CallEiPPv @ 349 NONAME
+	_ZN21QMediaPlaylistControl11qt_metacastEPKc @ 350 NONAME
+	_ZN21QMediaPlaylistControl16staticMetaObjectE @ 351 NONAME DATA 16
+	_ZN21QMediaPlaylistControl19currentIndexChangedEi @ 352 NONAME
+	_ZN21QMediaPlaylistControl19currentMediaChangedERK13QMediaContent @ 353 NONAME
+	_ZN21QMediaPlaylistControl19getStaticMetaObjectEv @ 354 NONAME
+	_ZN21QMediaPlaylistControl19playbackModeChangedEN14QMediaPlaylist12PlaybackModeE @ 355 NONAME
+	_ZN21QMediaPlaylistControl23playlistProviderChangedEv @ 356 NONAME
+	_ZN21QMediaPlaylistControlC2EP7QObject @ 357 NONAME
+	_ZN21QMediaPlaylistControlD0Ev @ 358 NONAME
+	_ZN21QMediaPlaylistControlD1Ev @ 359 NONAME
+	_ZN21QMediaPlaylistControlD2Ev @ 360 NONAME
+	_ZN21QMediaServiceProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 361 NONAME
+	_ZN21QMediaServiceProvider11qt_metacastEPKc @ 362 NONAME
+	_ZN21QMediaServiceProvider16staticMetaObjectE @ 363 NONAME DATA 16
+	_ZN21QMediaServiceProvider17deviceDescriptionERK10QByteArrayS2_ @ 364 NONAME
+	_ZN21QMediaServiceProvider19getStaticMetaObjectEv @ 365 NONAME
+	_ZN21QMediaServiceProvider22defaultServiceProviderEv @ 366 NONAME
+	_ZN21QVideoRendererControl11qt_metacallEN11QMetaObject4CallEiPPv @ 367 NONAME
+	_ZN21QVideoRendererControl11qt_metacastEPKc @ 368 NONAME
+	_ZN21QVideoRendererControl16staticMetaObjectE @ 369 NONAME DATA 16
+	_ZN21QVideoRendererControl19getStaticMetaObjectEv @ 370 NONAME
+	_ZN21QVideoRendererControlC2EP7QObject @ 371 NONAME
+	_ZN21QVideoRendererControlD0Ev @ 372 NONAME
+	_ZN21QVideoRendererControlD1Ev @ 373 NONAME
+	_ZN21QVideoRendererControlD2Ev @ 374 NONAME
+	_ZN22QMediaPlaylistIOPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 375 NONAME
+	_ZN22QMediaPlaylistIOPlugin11qt_metacastEPKc @ 376 NONAME
+	_ZN22QMediaPlaylistIOPlugin16staticMetaObjectE @ 377 NONAME DATA 16
+	_ZN22QMediaPlaylistIOPlugin19getStaticMetaObjectEv @ 378 NONAME
+	_ZN22QMediaPlaylistIOPluginC2EP7QObject @ 379 NONAME
+	_ZN22QMediaPlaylistIOPluginD0Ev @ 380 NONAME
+	_ZN22QMediaPlaylistIOPluginD1Ev @ 381 NONAME
+	_ZN22QMediaPlaylistIOPluginD2Ev @ 382 NONAME
+	_ZN22QMediaPlaylistProvider10loadFailedEN14QMediaPlaylist5ErrorERK7QString @ 383 NONAME
+	_ZN22QMediaPlaylistProvider11insertMediaEiRK13QMediaContent @ 384 NONAME
+	_ZN22QMediaPlaylistProvider11insertMediaEiRK5QListI13QMediaContentE @ 385 NONAME
+	_ZN22QMediaPlaylistProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 386 NONAME
+	_ZN22QMediaPlaylistProvider11qt_metacastEPKc @ 387 NONAME
+	_ZN22QMediaPlaylistProvider11removeMediaEi @ 388 NONAME
+	_ZN22QMediaPlaylistProvider11removeMediaEii @ 389 NONAME
+	_ZN22QMediaPlaylistProvider12mediaChangedEii @ 390 NONAME
+	_ZN22QMediaPlaylistProvider12mediaRemovedEii @ 391 NONAME
+	_ZN22QMediaPlaylistProvider13mediaInsertedEii @ 392 NONAME
+	_ZN22QMediaPlaylistProvider16staticMetaObjectE @ 393 NONAME DATA 16
+	_ZN22QMediaPlaylistProvider19getStaticMetaObjectEv @ 394 NONAME
+	_ZN22QMediaPlaylistProvider21mediaAboutToBeRemovedEii @ 395 NONAME
+	_ZN22QMediaPlaylistProvider22mediaAboutToBeInsertedEii @ 396 NONAME
+	_ZN22QMediaPlaylistProvider4loadEP9QIODevicePKc @ 397 NONAME
+	_ZN22QMediaPlaylistProvider4loadERK4QUrlPKc @ 398 NONAME
+	_ZN22QMediaPlaylistProvider4saveEP9QIODevicePKc @ 399 NONAME
+	_ZN22QMediaPlaylistProvider4saveERK4QUrlPKc @ 400 NONAME
+	_ZN22QMediaPlaylistProvider5clearEv @ 401 NONAME
+	_ZN22QMediaPlaylistProvider6loadedEv @ 402 NONAME
+	_ZN22QMediaPlaylistProvider7shuffleEv @ 403 NONAME
+	_ZN22QMediaPlaylistProvider8addMediaERK13QMediaContent @ 404 NONAME
+	_ZN22QMediaPlaylistProvider8addMediaERK5QListI13QMediaContentE @ 405 NONAME
+	_ZN22QMediaPlaylistProviderC2EP7QObject @ 406 NONAME
+	_ZN22QMediaPlaylistProviderC2ER29QMediaPlaylistProviderPrivateP7QObject @ 407 NONAME
+	_ZN22QMediaPlaylistProviderD0Ev @ 408 NONAME
+	_ZN22QMediaPlaylistProviderD1Ev @ 409 NONAME
+	_ZN22QMediaPlaylistProviderD2Ev @ 410 NONAME
+	_ZN23QMediaPlaylistNavigator11qt_metacallEN11QMetaObject4CallEiPPv @ 411 NONAME
+	_ZN23QMediaPlaylistNavigator11qt_metacastEPKc @ 412 NONAME
+	_ZN23QMediaPlaylistNavigator11setPlaylistEP22QMediaPlaylistProvider @ 413 NONAME
+	_ZN23QMediaPlaylistNavigator15setPlaybackModeEN14QMediaPlaylist12PlaybackModeE @ 414 NONAME
+	_ZN23QMediaPlaylistNavigator16staticMetaObjectE @ 415 NONAME DATA 16
+	_ZN23QMediaPlaylistNavigator19currentIndexChangedEi @ 416 NONAME
+	_ZN23QMediaPlaylistNavigator19getStaticMetaObjectEv @ 417 NONAME
+	_ZN23QMediaPlaylistNavigator19playbackModeChangedEN14QMediaPlaylist12PlaybackModeE @ 418 NONAME
+	_ZN23QMediaPlaylistNavigator23surroundingItemsChangedEv @ 419 NONAME
+	_ZN23QMediaPlaylistNavigator4jumpEi @ 420 NONAME
+	_ZN23QMediaPlaylistNavigator4nextEv @ 421 NONAME
+	_ZN23QMediaPlaylistNavigator8previousEv @ 422 NONAME
+	_ZN23QMediaPlaylistNavigator9activatedERK13QMediaContent @ 423 NONAME
+	_ZN23QMediaPlaylistNavigatorC1EP22QMediaPlaylistProviderP7QObject @ 424 NONAME
+	_ZN23QMediaPlaylistNavigatorC2EP22QMediaPlaylistProviderP7QObject @ 425 NONAME
+	_ZN23QMediaPlaylistNavigatorD0Ev @ 426 NONAME
+	_ZN23QMediaPlaylistNavigatorD1Ev @ 427 NONAME
+	_ZN23QMediaPlaylistNavigatorD2Ev @ 428 NONAME
+	_ZN25QMediaServiceProviderHintC1E6QFlagsINS_7FeatureEE @ 429 NONAME
+	_ZN25QMediaServiceProviderHintC1ERK10QByteArray @ 430 NONAME
+	_ZN25QMediaServiceProviderHintC1ERK7QStringRK11QStringList @ 431 NONAME
+	_ZN25QMediaServiceProviderHintC1ERKS_ @ 432 NONAME
+	_ZN25QMediaServiceProviderHintC1Ev @ 433 NONAME
+	_ZN25QMediaServiceProviderHintC2E6QFlagsINS_7FeatureEE @ 434 NONAME
+	_ZN25QMediaServiceProviderHintC2ERK10QByteArray @ 435 NONAME
+	_ZN25QMediaServiceProviderHintC2ERK7QStringRK11QStringList @ 436 NONAME
+	_ZN25QMediaServiceProviderHintC2ERKS_ @ 437 NONAME
+	_ZN25QMediaServiceProviderHintC2Ev @ 438 NONAME
+	_ZN25QMediaServiceProviderHintD1Ev @ 439 NONAME
+	_ZN25QMediaServiceProviderHintD2Ev @ 440 NONAME
+	_ZN25QMediaServiceProviderHintaSERKS_ @ 441 NONAME
+	_ZN27QLocalMediaPlaylistProvider11insertMediaEiRK13QMediaContent @ 442 NONAME
+	_ZN27QLocalMediaPlaylistProvider11insertMediaEiRK5QListI13QMediaContentE @ 443 NONAME
+	_ZN27QLocalMediaPlaylistProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 444 NONAME
+	_ZN27QLocalMediaPlaylistProvider11qt_metacastEPKc @ 445 NONAME
+	_ZN27QLocalMediaPlaylistProvider11removeMediaEi @ 446 NONAME
+	_ZN27QLocalMediaPlaylistProvider11removeMediaEii @ 447 NONAME
+	_ZN27QLocalMediaPlaylistProvider16staticMetaObjectE @ 448 NONAME DATA 16
+	_ZN27QLocalMediaPlaylistProvider19getStaticMetaObjectEv @ 449 NONAME
+	_ZN27QLocalMediaPlaylistProvider5clearEv @ 450 NONAME
+	_ZN27QLocalMediaPlaylistProvider7shuffleEv @ 451 NONAME
+	_ZN27QLocalMediaPlaylistProvider8addMediaERK13QMediaContent @ 452 NONAME
+	_ZN27QLocalMediaPlaylistProvider8addMediaERK5QListI13QMediaContentE @ 453 NONAME
+	_ZN27QLocalMediaPlaylistProviderC1EP7QObject @ 454 NONAME
+	_ZN27QLocalMediaPlaylistProviderC2EP7QObject @ 455 NONAME
+	_ZN27QLocalMediaPlaylistProviderD0Ev @ 456 NONAME
+	_ZN27QLocalMediaPlaylistProviderD1Ev @ 457 NONAME
+	_ZN27QLocalMediaPlaylistProviderD2Ev @ 458 NONAME
+	_ZN27QMediaServiceProviderPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 459 NONAME
+	_ZN27QMediaServiceProviderPlugin11qt_metacastEPKc @ 460 NONAME
+	_ZN27QMediaServiceProviderPlugin16staticMetaObjectE @ 461 NONAME DATA 16
+	_ZN27QMediaServiceProviderPlugin19getStaticMetaObjectEv @ 462 NONAME
+	_ZNK12QMediaObject10metaObjectEv @ 463 NONAME
+	_ZNK12QMediaObject11isAvailableEv @ 464 NONAME
+	_ZNK12QMediaObject14notifyIntervalEv @ 465 NONAME
+	_ZNK12QMediaObject16extendedMetaDataERK7QString @ 466 NONAME
+	_ZNK12QMediaObject17availabilityErrorEv @ 467 NONAME
+	_ZNK12QMediaObject17availableMetaDataEv @ 468 NONAME
+	_ZNK12QMediaObject18isMetaDataWritableEv @ 469 NONAME
+	_ZNK12QMediaObject19isMetaDataAvailableEv @ 470 NONAME
+	_ZNK12QMediaObject25availableExtendedMetaDataEv @ 471 NONAME
+	_ZNK12QMediaObject7serviceEv @ 472 NONAME
+	_ZNK12QMediaObject8metaDataEN15QtMediaServices8MetaDataE @ 473 NONAME
+	_ZNK12QMediaPlayer10isSeekableEv @ 474 NONAME
+	_ZNK12QMediaPlayer10metaObjectEv @ 475 NONAME
+	_ZNK12QMediaPlayer11errorStringEv @ 476 NONAME
+	_ZNK12QMediaPlayer11mediaStatusEv @ 477 NONAME
+	_ZNK12QMediaPlayer11mediaStreamEv @ 478 NONAME
+	_ZNK12QMediaPlayer12bufferStatusEv @ 479 NONAME
+	_ZNK12QMediaPlayer12playbackRateEv @ 480 NONAME
+	_ZNK12QMediaPlayer16isAudioAvailableEv @ 481 NONAME
+	_ZNK12QMediaPlayer16isVideoAvailableEv @ 482 NONAME
+	_ZNK12QMediaPlayer5errorEv @ 483 NONAME
+	_ZNK12QMediaPlayer5mediaEv @ 484 NONAME
+	_ZNK12QMediaPlayer5stateEv @ 485 NONAME
+	_ZNK12QMediaPlayer6volumeEv @ 486 NONAME
+	_ZNK12QMediaPlayer7isMutedEv @ 487 NONAME
+	_ZNK12QMediaPlayer8durationEv @ 488 NONAME
+	_ZNK12QMediaPlayer8positionEv @ 489 NONAME
+	_ZNK12QSoundEffect10metaObjectEv @ 490 NONAME
+	_ZNK12QSoundEffect5loopsEv @ 491 NONAME
+	_ZNK12QSoundEffect6sourceEv @ 492 NONAME
+	_ZNK12QSoundEffect6volumeEv @ 493 NONAME
+	_ZNK12QSoundEffect7isMutedEv @ 494 NONAME
+	_ZNK12QVideoWidget10brightnessEv @ 495 NONAME
+	_ZNK12QVideoWidget10metaObjectEv @ 496 NONAME
+	_ZNK12QVideoWidget10saturationEv @ 497 NONAME
+	_ZNK12QVideoWidget11mediaObjectEv @ 498 NONAME
+	_ZNK12QVideoWidget15aspectRatioModeEv @ 499 NONAME
+	_ZNK12QVideoWidget3hueEv @ 500 NONAME
+	_ZNK12QVideoWidget8contrastEv @ 501 NONAME
+	_ZNK12QVideoWidget8sizeHintEv @ 502 NONAME
+	_ZNK13QMediaContent12canonicalUrlEv @ 503 NONAME
+	_ZNK13QMediaContent16canonicalRequestEv @ 504 NONAME
+	_ZNK13QMediaContent17canonicalResourceEv @ 505 NONAME
+	_ZNK13QMediaContent6isNullEv @ 506 NONAME
+	_ZNK13QMediaContent9resourcesEv @ 507 NONAME
+	_ZNK13QMediaContenteqERKS_ @ 508 NONAME
+	_ZNK13QMediaContentneERKS_ @ 509 NONAME
+	_ZNK13QMediaControl10metaObjectEv @ 510 NONAME
+	_ZNK13QMediaService10metaObjectEv @ 511 NONAME
+	_ZNK14QMediaPlaylist10isReadOnlyEv @ 512 NONAME
+	_ZNK14QMediaPlaylist10mediaCountEv @ 513 NONAME
+	_ZNK14QMediaPlaylist10metaObjectEv @ 514 NONAME
+	_ZNK14QMediaPlaylist11errorStringEv @ 515 NONAME
+	_ZNK14QMediaPlaylist11mediaObjectEv @ 516 NONAME
+	_ZNK14QMediaPlaylist12currentIndexEv @ 517 NONAME
+	_ZNK14QMediaPlaylist12currentMediaEv @ 518 NONAME
+	_ZNK14QMediaPlaylist12playbackModeEv @ 519 NONAME
+	_ZNK14QMediaPlaylist13previousIndexEi @ 520 NONAME
+	_ZNK14QMediaPlaylist5errorEv @ 521 NONAME
+	_ZNK14QMediaPlaylist5mediaEi @ 522 NONAME
+	_ZNK14QMediaPlaylist7isEmptyEv @ 523 NONAME
+	_ZNK14QMediaPlaylist9nextIndexEi @ 524 NONAME
+	_ZNK14QMediaResource10audioCodecEv @ 525 NONAME
+	_ZNK14QMediaResource10resolutionEv @ 526 NONAME
+	_ZNK14QMediaResource10sampleRateEv @ 527 NONAME
+	_ZNK14QMediaResource10videoCodecEv @ 528 NONAME
+	_ZNK14QMediaResource12audioBitRateEv @ 529 NONAME
+	_ZNK14QMediaResource12channelCountEv @ 530 NONAME
+	_ZNK14QMediaResource12videoBitRateEv @ 531 NONAME
+	_ZNK14QMediaResource3urlEv @ 532 NONAME
+	_ZNK14QMediaResource6isNullEv @ 533 NONAME
+	_ZNK14QMediaResource7requestEv @ 534 NONAME
+	_ZNK14QMediaResource8dataSizeEv @ 535 NONAME
+	_ZNK14QMediaResource8languageEv @ 536 NONAME
+	_ZNK14QMediaResource8mimeTypeEv @ 537 NONAME
+	_ZNK14QMediaResourceeqERKS_ @ 538 NONAME
+	_ZNK14QMediaResourceneERKS_ @ 539 NONAME
+	_ZNK15QMediaTimeRange10latestTimeEv @ 540 NONAME
+	_ZNK15QMediaTimeRange12earliestTimeEv @ 541 NONAME
+	_ZNK15QMediaTimeRange12isContinuousEv @ 542 NONAME
+	_ZNK15QMediaTimeRange7isEmptyEv @ 543 NONAME
+	_ZNK15QMediaTimeRange8containsEx @ 544 NONAME
+	_ZNK15QMediaTimeRange9intervalsEv @ 545 NONAME
+	_ZNK16QMetaDataControl10metaObjectEv @ 546 NONAME
+	_ZNK18QGraphicsVideoItem10metaObjectEv @ 547 NONAME
+	_ZNK18QGraphicsVideoItem10nativeSizeEv @ 548 NONAME
+	_ZNK18QGraphicsVideoItem11mediaObjectEv @ 549 NONAME
+	_ZNK18QGraphicsVideoItem12boundingRectEv @ 550 NONAME
+	_ZNK18QGraphicsVideoItem15aspectRatioModeEv @ 551 NONAME
+	_ZNK18QGraphicsVideoItem4sizeEv @ 552 NONAME
+	_ZNK18QGraphicsVideoItem6offsetEv @ 553 NONAME
+	_ZNK18QMediaTimeInterval10normalizedEv @ 554 NONAME
+	_ZNK18QMediaTimeInterval10translatedEx @ 555 NONAME
+	_ZNK18QMediaTimeInterval3endEv @ 556 NONAME
+	_ZNK18QMediaTimeInterval5startEv @ 557 NONAME
+	_ZNK18QMediaTimeInterval8containsEx @ 558 NONAME
+	_ZNK18QMediaTimeInterval8isNormalEv @ 559 NONAME
+	_ZNK19QMediaPlayerControl10metaObjectEv @ 560 NONAME
+	_ZNK19QVideoDeviceControl10metaObjectEv @ 561 NONAME
+	_ZNK19QVideoOutputControl10metaObjectEv @ 562 NONAME
+	_ZNK19QVideoWidgetControl10metaObjectEv @ 563 NONAME
+	_ZNK19QVideoWindowControl10metaObjectEv @ 564 NONAME
+	_ZNK20QPainterVideoSurface10brightnessEv @ 565 NONAME
+	_ZNK20QPainterVideoSurface10metaObjectEv @ 566 NONAME
+	_ZNK20QPainterVideoSurface10saturationEv @ 567 NONAME
+	_ZNK20QPainterVideoSurface17isFormatSupportedERK19QVideoSurfaceFormatPS0_ @ 568 NONAME
+	_ZNK20QPainterVideoSurface21supportedPixelFormatsEN20QAbstractVideoBuffer10HandleTypeE @ 569 NONAME
+	_ZNK20QPainterVideoSurface3hueEv @ 570 NONAME
+	_ZNK20QPainterVideoSurface7isReadyEv @ 571 NONAME
+	_ZNK20QPainterVideoSurface8contrastEv @ 572 NONAME
+	_ZNK21QMediaPlaylistControl10metaObjectEv @ 573 NONAME
+	_ZNK21QMediaServiceProvider10hasSupportERK10QByteArrayRK7QStringRK11QStringListi @ 574 NONAME
+	_ZNK21QMediaServiceProvider10metaObjectEv @ 575 NONAME
+	_ZNK21QMediaServiceProvider18supportedMimeTypesERK10QByteArrayi @ 576 NONAME
+	_ZNK21QMediaServiceProvider7devicesERK10QByteArray @ 577 NONAME
+	_ZNK21QVideoRendererControl10metaObjectEv @ 578 NONAME
+	_ZNK22QMediaPlaylistIOPlugin10metaObjectEv @ 579 NONAME
+	_ZNK22QMediaPlaylistProvider10isReadOnlyEv @ 580 NONAME
+	_ZNK22QMediaPlaylistProvider10metaObjectEv @ 581 NONAME
+	_ZNK23QMediaPlaylistNavigator10metaObjectEv @ 582 NONAME
+	_ZNK23QMediaPlaylistNavigator11currentItemEv @ 583 NONAME
+	_ZNK23QMediaPlaylistNavigator12currentIndexEv @ 584 NONAME
+	_ZNK23QMediaPlaylistNavigator12playbackModeEv @ 585 NONAME
+	_ZNK23QMediaPlaylistNavigator12previousItemEi @ 586 NONAME
+	_ZNK23QMediaPlaylistNavigator13previousIndexEi @ 587 NONAME
+	_ZNK23QMediaPlaylistNavigator6itemAtEi @ 588 NONAME
+	_ZNK23QMediaPlaylistNavigator8nextItemEi @ 589 NONAME
+	_ZNK23QMediaPlaylistNavigator8playlistEv @ 590 NONAME
+	_ZNK23QMediaPlaylistNavigator9nextIndexEi @ 591 NONAME
+	_ZNK25QMediaServiceProviderHint4typeEv @ 592 NONAME
+	_ZNK25QMediaServiceProviderHint6codecsEv @ 593 NONAME
+	_ZNK25QMediaServiceProviderHint6deviceEv @ 594 NONAME
+	_ZNK25QMediaServiceProviderHint6isNullEv @ 595 NONAME
+	_ZNK25QMediaServiceProviderHint8featuresEv @ 596 NONAME
+	_ZNK25QMediaServiceProviderHint8mimeTypeEv @ 597 NONAME
+	_ZNK25QMediaServiceProviderHinteqERKS_ @ 598 NONAME
+	_ZNK25QMediaServiceProviderHintneERKS_ @ 599 NONAME
+	_ZNK27QLocalMediaPlaylistProvider10isReadOnlyEv @ 600 NONAME
+	_ZNK27QLocalMediaPlaylistProvider10mediaCountEv @ 601 NONAME
+	_ZNK27QLocalMediaPlaylistProvider10metaObjectEv @ 602 NONAME
+	_ZNK27QLocalMediaPlaylistProvider5mediaEi @ 603 NONAME
+	_ZNK27QMediaServiceProviderPlugin10metaObjectEv @ 604 NONAME
+	_ZTI12QMediaObject @ 605 NONAME
+	_ZTI12QMediaPlayer @ 606 NONAME
+	_ZTI12QSoundEffect @ 607 NONAME
+	_ZTI12QVideoWidget @ 608 NONAME
+	_ZTI13QMediaControl @ 609 NONAME
+	_ZTI13QMediaService @ 610 NONAME
+	_ZTI14QMediaPlaylist @ 611 NONAME
+	_ZTI16QMetaDataControl @ 612 NONAME
+	_ZTI18QGraphicsVideoItem @ 613 NONAME
+	_ZTI19QMediaPlayerControl @ 614 NONAME
+	_ZTI19QVideoDeviceControl @ 615 NONAME
+	_ZTI19QVideoOutputControl @ 616 NONAME
+	_ZTI19QVideoWidgetControl @ 617 NONAME
+	_ZTI19QVideoWindowControl @ 618 NONAME
+	_ZTI20QMediaPlaylistReader @ 619 NONAME
+	_ZTI20QMediaPlaylistWriter @ 620 NONAME
+	_ZTI20QPainterVideoSurface @ 621 NONAME
+	_ZTI21QMediaPlaylistControl @ 622 NONAME
+	_ZTI21QMediaServiceProvider @ 623 NONAME
+	_ZTI21QVideoRendererControl @ 624 NONAME
+	_ZTI22QMediaPlaylistIOPlugin @ 625 NONAME
+	_ZTI22QMediaPlaylistProvider @ 626 NONAME
+	_ZTI23QMediaPlaylistNavigator @ 627 NONAME
+	_ZTI25QMediaPlaylistIOInterface @ 628 NONAME
+	_ZTI27QLocalMediaPlaylistProvider @ 629 NONAME
+	_ZTI27QMediaServiceProviderPlugin @ 630 NONAME
+	_ZTI37QMediaServiceProviderFactoryInterface @ 631 NONAME
+	_ZTV12QMediaObject @ 632 NONAME
+	_ZTV12QMediaPlayer @ 633 NONAME
+	_ZTV12QSoundEffect @ 634 NONAME
+	_ZTV12QVideoWidget @ 635 NONAME
+	_ZTV13QMediaControl @ 636 NONAME
+	_ZTV13QMediaService @ 637 NONAME
+	_ZTV14QMediaPlaylist @ 638 NONAME
+	_ZTV16QMetaDataControl @ 639 NONAME
+	_ZTV18QGraphicsVideoItem @ 640 NONAME
+	_ZTV19QMediaPlayerControl @ 641 NONAME
+	_ZTV19QVideoDeviceControl @ 642 NONAME
+	_ZTV19QVideoOutputControl @ 643 NONAME
+	_ZTV19QVideoWidgetControl @ 644 NONAME
+	_ZTV19QVideoWindowControl @ 645 NONAME
+	_ZTV20QMediaPlaylistReader @ 646 NONAME
+	_ZTV20QMediaPlaylistWriter @ 647 NONAME
+	_ZTV20QPainterVideoSurface @ 648 NONAME
+	_ZTV21QMediaPlaylistControl @ 649 NONAME
+	_ZTV21QMediaServiceProvider @ 650 NONAME
+	_ZTV21QVideoRendererControl @ 651 NONAME
+	_ZTV22QMediaPlaylistIOPlugin @ 652 NONAME
+	_ZTV22QMediaPlaylistProvider @ 653 NONAME
+	_ZTV23QMediaPlaylistNavigator @ 654 NONAME
+	_ZTV27QLocalMediaPlaylistProvider @ 655 NONAME
+	_ZTV27QMediaServiceProviderPlugin @ 656 NONAME
+	_ZThn8_N12QVideoWidgetD0Ev @ 657 NONAME
+	_ZThn8_N12QVideoWidgetD1Ev @ 658 NONAME
+	_ZThn8_N18QGraphicsVideoItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 659 NONAME
+	_ZThn8_N18QGraphicsVideoItem10sceneEventEP6QEvent @ 660 NONAME
+	_ZThn8_N18QGraphicsVideoItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 661 NONAME
+	_ZThn8_N18QGraphicsVideoItemD0Ev @ 662 NONAME
+	_ZThn8_N18QGraphicsVideoItemD1Ev @ 663 NONAME
+	_ZThn8_N22QMediaPlaylistIOPluginD0Ev @ 664 NONAME
+	_ZThn8_N22QMediaPlaylistIOPluginD1Ev @ 665 NONAME
+	_ZThn8_NK18QGraphicsVideoItem12boundingRectEv @ 666 NONAME
+	_ZeqRK15QMediaTimeRangeS1_ @ 667 NONAME
+	_ZeqRK18QMediaTimeIntervalS1_ @ 668 NONAME
+	_ZmiRK15QMediaTimeRangeS1_ @ 669 NONAME
+	_ZneRK15QMediaTimeRangeS1_ @ 670 NONAME
+	_ZneRK18QMediaTimeIntervalS1_ @ 671 NONAME
+	_ZplRK15QMediaTimeRangeS1_ @ 672 NONAME
+
diff --git a/src/s60installs/eabi/QtMultimediau.def b/src/s60installs/eabi/QtMultimediau.def
index 64a6dc6..f332885 100644
--- a/src/s60installs/eabi/QtMultimediau.def
+++ b/src/s60installs/eabi/QtMultimediau.def
@@ -297,682 +297,8 @@ EXPORTS
 	_ZNK21QAbstractVideoSurface8isActiveEv @ 296 NONAME
 	_ZN12QAudioFormat13setSampleRateEi @ 297 NONAME
 	_ZN12QAudioFormat15setChannelCountEi @ 298 NONAME
-	_ZN12QMediaObject11qt_metacallEN11QMetaObject4CallEiPPv @ 299 NONAME
-	_ZN12QMediaObject11qt_metacastEPKc @ 300 NONAME
-	_ZN12QMediaObject11setMetaDataEN12QtMultimedia8MetaDataERK8QVariant @ 301 NONAME
-	_ZN12QMediaObject13setupMetaDataEv @ 302 NONAME
-	_ZN12QMediaObject15metaDataChangedEv @ 303 NONAME
-	_ZN12QMediaObject16addPropertyWatchERK10QByteArray @ 304 NONAME
-	_ZN12QMediaObject16staticMetaObjectE @ 305 NONAME DATA 16
-	_ZN12QMediaObject17setNotifyIntervalEi @ 306 NONAME
-	_ZN12QMediaObject19availabilityChangedEb @ 307 NONAME
-	_ZN12QMediaObject19getStaticMetaObjectEv @ 308 NONAME
-	_ZN12QMediaObject19removePropertyWatchERK10QByteArray @ 309 NONAME
-	_ZN12QMediaObject19setExtendedMetaDataERK7QStringRK8QVariant @ 310 NONAME
-	_ZN12QMediaObject21notifyIntervalChangedEi @ 311 NONAME
-	_ZN12QMediaObject23metaDataWritableChangedEb @ 312 NONAME
-	_ZN12QMediaObject24metaDataAvailableChangedEb @ 313 NONAME
-	_ZN12QMediaObject4bindEP7QObject @ 314 NONAME
-	_ZN12QMediaObject6unbindEP7QObject @ 315 NONAME
-	_ZN12QMediaObjectC1EP7QObjectP13QMediaService @ 316 NONAME
-	_ZN12QMediaObjectC1ER19QMediaObjectPrivateP7QObjectP13QMediaService @ 317 NONAME
-	_ZN12QMediaObjectC2EP7QObjectP13QMediaService @ 318 NONAME
-	_ZN12QMediaObjectC2ER19QMediaObjectPrivateP7QObjectP13QMediaService @ 319 NONAME
-	_ZN12QMediaObjectD0Ev @ 320 NONAME
-	_ZN12QMediaObjectD1Ev @ 321 NONAME
-	_ZN12QMediaObjectD2Ev @ 322 NONAME
-	_ZN12QMediaPlayer10hasSupportERK7QStringRK11QStringList6QFlagsINS_4FlagEE @ 323 NONAME
-	_ZN12QMediaPlayer11qt_metacallEN11QMetaObject4CallEiPPv @ 324 NONAME
-	_ZN12QMediaPlayer11qt_metacastEPKc @ 325 NONAME
-	_ZN12QMediaPlayer11setPositionEx @ 326 NONAME
-	_ZN12QMediaPlayer12mediaChangedERK13QMediaContent @ 327 NONAME
-	_ZN12QMediaPlayer12mutedChangedEb @ 328 NONAME
-	_ZN12QMediaPlayer12stateChangedENS_5StateE @ 329 NONAME
-	_ZN12QMediaPlayer13volumeChangedEi @ 330 NONAME
-	_ZN12QMediaPlayer15durationChangedEx @ 331 NONAME
-	_ZN12QMediaPlayer15positionChangedEx @ 332 NONAME
-	_ZN12QMediaPlayer15seekableChangedEb @ 333 NONAME
-	_ZN12QMediaPlayer15setPlaybackRateEf @ 334 NONAME
-	_ZN12QMediaPlayer16staticMetaObjectE @ 335 NONAME DATA 16
-	_ZN12QMediaPlayer18mediaStatusChangedENS_11MediaStatusE @ 336 NONAME
-	_ZN12QMediaPlayer18supportedMimeTypesE6QFlagsINS_4FlagEE @ 337 NONAME
-	_ZN12QMediaPlayer19bufferStatusChangedEi @ 338 NONAME
-	_ZN12QMediaPlayer19getStaticMetaObjectEv @ 339 NONAME
-	_ZN12QMediaPlayer19playbackRateChangedEf @ 340 NONAME
-	_ZN12QMediaPlayer21audioAvailableChangedEb @ 341 NONAME
-	_ZN12QMediaPlayer21videoAvailableChangedEb @ 342 NONAME
-	_ZN12QMediaPlayer4bindEP7QObject @ 343 NONAME
-	_ZN12QMediaPlayer4playEv @ 344 NONAME
-	_ZN12QMediaPlayer4stopEv @ 345 NONAME
-	_ZN12QMediaPlayer5errorENS_5ErrorE @ 346 NONAME
-	_ZN12QMediaPlayer5pauseEv @ 347 NONAME
-	_ZN12QMediaPlayer6unbindEP7QObject @ 348 NONAME
-	_ZN12QMediaPlayer8setMediaERK13QMediaContentP9QIODevice @ 349 NONAME
-	_ZN12QMediaPlayer8setMutedEb @ 350 NONAME
-	_ZN12QMediaPlayer9setVolumeEi @ 351 NONAME
-	_ZN12QMediaPlayerC1EP7QObject6QFlagsINS_4FlagEEP21QMediaServiceProvider @ 352 NONAME
-	_ZN12QMediaPlayerC2EP7QObject6QFlagsINS_4FlagEEP21QMediaServiceProvider @ 353 NONAME
-	_ZN12QMediaPlayerD0Ev @ 354 NONAME
-	_ZN12QMediaPlayerD1Ev @ 355 NONAME
-	_ZN12QMediaPlayerD2Ev @ 356 NONAME
-	_ZN12QVideoWidget10hueChangedEi @ 357 NONAME
-	_ZN12QVideoWidget10paintEventEP11QPaintEvent @ 358 NONAME
-	_ZN12QVideoWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 359 NONAME
-	_ZN12QVideoWidget11qt_metacastEPKc @ 360 NONAME
-	_ZN12QVideoWidget11resizeEventEP12QResizeEvent @ 361 NONAME
-	_ZN12QVideoWidget11setContrastEi @ 362 NONAME
-	_ZN12QVideoWidget13setBrightnessEi @ 363 NONAME
-	_ZN12QVideoWidget13setFullScreenEb @ 364 NONAME
-	_ZN12QVideoWidget13setSaturationEi @ 365 NONAME
-	_ZN12QVideoWidget14setMediaObjectEP12QMediaObject @ 366 NONAME
-	_ZN12QVideoWidget15contrastChangedEi @ 367 NONAME
-	_ZN12QVideoWidget16staticMetaObjectE @ 368 NONAME DATA 16
-	_ZN12QVideoWidget17brightnessChangedEi @ 369 NONAME
-	_ZN12QVideoWidget17fullScreenChangedEb @ 370 NONAME
-	_ZN12QVideoWidget17saturationChangedEi @ 371 NONAME
-	_ZN12QVideoWidget18setAspectRatioModeENS_15AspectRatioModeE @ 372 NONAME ABSENT
-	_ZN12QVideoWidget19getStaticMetaObjectEv @ 373 NONAME
-	_ZN12QVideoWidget5eventEP6QEvent @ 374 NONAME
-	_ZN12QVideoWidget6setHueEi @ 375 NONAME
-	_ZN12QVideoWidget9hideEventEP10QHideEvent @ 376 NONAME
-	_ZN12QVideoWidget9moveEventEP10QMoveEvent @ 377 NONAME
-	_ZN12QVideoWidget9showEventEP10QShowEvent @ 378 NONAME
-	_ZN12QVideoWidgetC1EP7QWidget @ 379 NONAME
-	_ZN12QVideoWidgetC2EP7QWidget @ 380 NONAME
-	_ZN12QVideoWidgetD0Ev @ 381 NONAME
-	_ZN12QVideoWidgetD1Ev @ 382 NONAME
-	_ZN12QVideoWidgetD2Ev @ 383 NONAME
-	_ZN12QtMultimedia28qRegisterDeclarativeElementsEPKc @ 384 NONAME ABSENT
-	_ZN13QMediaContentC1ERK14QMediaResource @ 385 NONAME
-	_ZN13QMediaContentC1ERK15QNetworkRequest @ 386 NONAME
-	_ZN13QMediaContentC1ERK4QUrl @ 387 NONAME
-	_ZN13QMediaContentC1ERK5QListI14QMediaResourceE @ 388 NONAME
-	_ZN13QMediaContentC1ERKS_ @ 389 NONAME
-	_ZN13QMediaContentC1Ev @ 390 NONAME
-	_ZN13QMediaContentC2ERK14QMediaResource @ 391 NONAME
-	_ZN13QMediaContentC2ERK15QNetworkRequest @ 392 NONAME
-	_ZN13QMediaContentC2ERK4QUrl @ 393 NONAME
-	_ZN13QMediaContentC2ERK5QListI14QMediaResourceE @ 394 NONAME
-	_ZN13QMediaContentC2ERKS_ @ 395 NONAME
-	_ZN13QMediaContentC2Ev @ 396 NONAME
-	_ZN13QMediaContentD1Ev @ 397 NONAME
-	_ZN13QMediaContentD2Ev @ 398 NONAME
-	_ZN13QMediaContentaSERKS_ @ 399 NONAME
-	_ZN13QMediaControl11qt_metacallEN11QMetaObject4CallEiPPv @ 400 NONAME
-	_ZN13QMediaControl11qt_metacastEPKc @ 401 NONAME
-	_ZN13QMediaControl16staticMetaObjectE @ 402 NONAME DATA 16
-	_ZN13QMediaControl19getStaticMetaObjectEv @ 403 NONAME
-	_ZN13QMediaControlC1EP7QObject @ 404 NONAME
-	_ZN13QMediaControlC1ER20QMediaControlPrivateP7QObject @ 405 NONAME
-	_ZN13QMediaControlC2EP7QObject @ 406 NONAME
-	_ZN13QMediaControlC2ER20QMediaControlPrivateP7QObject @ 407 NONAME
-	_ZN13QMediaControlD0Ev @ 408 NONAME
-	_ZN13QMediaControlD1Ev @ 409 NONAME
-	_ZN13QMediaControlD2Ev @ 410 NONAME
-	_ZN13QMediaService11qt_metacallEN11QMetaObject4CallEiPPv @ 411 NONAME
-	_ZN13QMediaService11qt_metacastEPKc @ 412 NONAME
-	_ZN13QMediaService16staticMetaObjectE @ 413 NONAME DATA 16
-	_ZN13QMediaService19getStaticMetaObjectEv @ 414 NONAME
-	_ZN13QMediaServiceC2EP7QObject @ 415 NONAME
-	_ZN13QMediaServiceC2ER20QMediaServicePrivateP7QObject @ 416 NONAME
-	_ZN13QMediaServiceD0Ev @ 417 NONAME
-	_ZN13QMediaServiceD1Ev @ 418 NONAME
-	_ZN13QMediaServiceD2Ev @ 419 NONAME
-	_ZN14QMediaPlaylist10loadFailedEv @ 420 NONAME
-	_ZN14QMediaPlaylist11insertMediaEiRK13QMediaContent @ 421 NONAME
-	_ZN14QMediaPlaylist11insertMediaEiRK5QListI13QMediaContentE @ 422 NONAME
-	_ZN14QMediaPlaylist11qt_metacallEN11QMetaObject4CallEiPPv @ 423 NONAME
-	_ZN14QMediaPlaylist11qt_metacastEPKc @ 424 NONAME
-	_ZN14QMediaPlaylist11removeMediaEi @ 425 NONAME
-	_ZN14QMediaPlaylist11removeMediaEii @ 426 NONAME
-	_ZN14QMediaPlaylist12mediaChangedEii @ 427 NONAME
-	_ZN14QMediaPlaylist12mediaRemovedEii @ 428 NONAME
-	_ZN14QMediaPlaylist13mediaInsertedEii @ 429 NONAME
-	_ZN14QMediaPlaylist14setMediaObjectEP12QMediaObject @ 430 NONAME
-	_ZN14QMediaPlaylist15setCurrentIndexEi @ 431 NONAME
-	_ZN14QMediaPlaylist15setPlaybackModeENS_12PlaybackModeE @ 432 NONAME
-	_ZN14QMediaPlaylist16staticMetaObjectE @ 433 NONAME DATA 16
-	_ZN14QMediaPlaylist19currentIndexChangedEi @ 434 NONAME
-	_ZN14QMediaPlaylist19currentMediaChangedERK13QMediaContent @ 435 NONAME
-	_ZN14QMediaPlaylist19getStaticMetaObjectEv @ 436 NONAME
-	_ZN14QMediaPlaylist19playbackModeChangedENS_12PlaybackModeE @ 437 NONAME
-	_ZN14QMediaPlaylist21mediaAboutToBeRemovedEii @ 438 NONAME
-	_ZN14QMediaPlaylist22mediaAboutToBeInsertedEii @ 439 NONAME
-	_ZN14QMediaPlaylist4loadEP9QIODevicePKc @ 440 NONAME
-	_ZN14QMediaPlaylist4loadERK4QUrlPKc @ 441 NONAME
-	_ZN14QMediaPlaylist4nextEv @ 442 NONAME
-	_ZN14QMediaPlaylist4saveEP9QIODevicePKc @ 443 NONAME
-	_ZN14QMediaPlaylist4saveERK4QUrlPKc @ 444 NONAME
-	_ZN14QMediaPlaylist5clearEv @ 445 NONAME
-	_ZN14QMediaPlaylist6loadedEv @ 446 NONAME
-	_ZN14QMediaPlaylist7shuffleEv @ 447 NONAME
-	_ZN14QMediaPlaylist8addMediaERK13QMediaContent @ 448 NONAME
-	_ZN14QMediaPlaylist8addMediaERK5QListI13QMediaContentE @ 449 NONAME
-	_ZN14QMediaPlaylist8previousEv @ 450 NONAME
-	_ZN14QMediaPlaylistC1EP7QObject @ 451 NONAME
-	_ZN14QMediaPlaylistC2EP7QObject @ 452 NONAME
-	_ZN14QMediaPlaylistD0Ev @ 453 NONAME
-	_ZN14QMediaPlaylistD1Ev @ 454 NONAME
-	_ZN14QMediaPlaylistD2Ev @ 455 NONAME
-	_ZN14QMediaResource11setDataSizeEx @ 456 NONAME
-	_ZN14QMediaResource11setLanguageERK7QString @ 457 NONAME
-	_ZN14QMediaResource13setAudioCodecERK7QString @ 458 NONAME
-	_ZN14QMediaResource13setResolutionERK5QSize @ 459 NONAME
-	_ZN14QMediaResource13setResolutionEii @ 460 NONAME
-	_ZN14QMediaResource13setSampleRateEi @ 461 NONAME
-	_ZN14QMediaResource13setVideoCodecERK7QString @ 462 NONAME
-	_ZN14QMediaResource15setAudioBitRateEi @ 463 NONAME
-	_ZN14QMediaResource15setChannelCountEi @ 464 NONAME
-	_ZN14QMediaResource15setVideoBitRateEi @ 465 NONAME
-	_ZN14QMediaResourceC1ERK15QNetworkRequestRK7QString @ 466 NONAME
-	_ZN14QMediaResourceC1ERK4QUrlRK7QString @ 467 NONAME
-	_ZN14QMediaResourceC1ERKS_ @ 468 NONAME
-	_ZN14QMediaResourceC1Ev @ 469 NONAME
-	_ZN14QMediaResourceC2ERK15QNetworkRequestRK7QString @ 470 NONAME
-	_ZN14QMediaResourceC2ERK4QUrlRK7QString @ 471 NONAME
-	_ZN14QMediaResourceC2ERKS_ @ 472 NONAME
-	_ZN14QMediaResourceC2Ev @ 473 NONAME
-	_ZN14QMediaResourceD1Ev @ 474 NONAME
-	_ZN14QMediaResourceD2Ev @ 475 NONAME
-	_ZN14QMediaResourceaSERKS_ @ 476 NONAME
-	_ZN15QMediaTimeRange11addIntervalERK18QMediaTimeInterval @ 477 NONAME
-	_ZN15QMediaTimeRange11addIntervalExx @ 478 NONAME
-	_ZN15QMediaTimeRange12addTimeRangeERKS_ @ 479 NONAME
-	_ZN15QMediaTimeRange14removeIntervalERK18QMediaTimeInterval @ 480 NONAME
-	_ZN15QMediaTimeRange14removeIntervalExx @ 481 NONAME
-	_ZN15QMediaTimeRange15removeTimeRangeERKS_ @ 482 NONAME
-	_ZN15QMediaTimeRange5clearEv @ 483 NONAME
-	_ZN15QMediaTimeRangeC1ERK18QMediaTimeInterval @ 484 NONAME
-	_ZN15QMediaTimeRangeC1ERKS_ @ 485 NONAME
-	_ZN15QMediaTimeRangeC1Ev @ 486 NONAME
-	_ZN15QMediaTimeRangeC1Exx @ 487 NONAME
-	_ZN15QMediaTimeRangeC2ERK18QMediaTimeInterval @ 488 NONAME
-	_ZN15QMediaTimeRangeC2ERKS_ @ 489 NONAME
-	_ZN15QMediaTimeRangeC2Ev @ 490 NONAME
-	_ZN15QMediaTimeRangeC2Exx @ 491 NONAME
-	_ZN15QMediaTimeRangeD1Ev @ 492 NONAME
-	_ZN15QMediaTimeRangeD2Ev @ 493 NONAME
-	_ZN15QMediaTimeRangeaSERK18QMediaTimeInterval @ 494 NONAME
-	_ZN15QMediaTimeRangeaSERKS_ @ 495 NONAME
-	_ZN15QMediaTimeRangemIERK18QMediaTimeInterval @ 496 NONAME
-	_ZN15QMediaTimeRangemIERKS_ @ 497 NONAME
-	_ZN15QMediaTimeRangepLERK18QMediaTimeInterval @ 498 NONAME
-	_ZN15QMediaTimeRangepLERKS_ @ 499 NONAME
-	_ZN16QMetaDataControl11qt_metacallEN11QMetaObject4CallEiPPv @ 500 NONAME
-	_ZN16QMetaDataControl11qt_metacastEPKc @ 501 NONAME
-	_ZN16QMetaDataControl15metaDataChangedEv @ 502 NONAME
-	_ZN16QMetaDataControl15writableChangedEb @ 503 NONAME
-	_ZN16QMetaDataControl16staticMetaObjectE @ 504 NONAME DATA 16
-	_ZN16QMetaDataControl19getStaticMetaObjectEv @ 505 NONAME
-	_ZN16QMetaDataControl24metaDataAvailableChangedEb @ 506 NONAME
-	_ZN16QMetaDataControlC2EP7QObject @ 507 NONAME
-	_ZN16QMetaDataControlD0Ev @ 508 NONAME
-	_ZN16QMetaDataControlD1Ev @ 509 NONAME
-	_ZN16QMetaDataControlD2Ev @ 510 NONAME
-	_ZN18QGraphicsVideoItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 511 NONAME
-	_ZN18QGraphicsVideoItem11qt_metacallEN11QMetaObject4CallEiPPv @ 512 NONAME
-	_ZN18QGraphicsVideoItem11qt_metacastEPKc @ 513 NONAME
-	_ZN18QGraphicsVideoItem14setMediaObjectEP12QMediaObject @ 514 NONAME
-	_ZN18QGraphicsVideoItem16staticMetaObjectE @ 515 NONAME DATA 16
-	_ZN18QGraphicsVideoItem17nativeSizeChangedERK6QSizeF @ 516 NONAME
-	_ZN18QGraphicsVideoItem18setAspectRatioModeEN2Qt15AspectRatioModeE @ 517 NONAME
-	_ZN18QGraphicsVideoItem19getStaticMetaObjectEv @ 518 NONAME
-	_ZN18QGraphicsVideoItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 519 NONAME
-	_ZN18QGraphicsVideoItem7setSizeERK6QSizeF @ 520 NONAME
-	_ZN18QGraphicsVideoItem9setOffsetERK7QPointF @ 521 NONAME
-	_ZN18QGraphicsVideoItemC1EP13QGraphicsItem @ 522 NONAME
-	_ZN18QGraphicsVideoItemC2EP13QGraphicsItem @ 523 NONAME
-	_ZN18QGraphicsVideoItemD0Ev @ 524 NONAME
-	_ZN18QGraphicsVideoItemD1Ev @ 525 NONAME
-	_ZN18QGraphicsVideoItemD2Ev @ 526 NONAME
-	_ZN18QMediaTimeIntervalC1ERKS_ @ 527 NONAME
-	_ZN18QMediaTimeIntervalC1Ev @ 528 NONAME
-	_ZN18QMediaTimeIntervalC1Exx @ 529 NONAME
-	_ZN18QMediaTimeIntervalC2ERKS_ @ 530 NONAME
-	_ZN18QMediaTimeIntervalC2Ev @ 531 NONAME
-	_ZN18QMediaTimeIntervalC2Exx @ 532 NONAME
-	_ZN19QMediaPlayerControl11qt_metacallEN11QMetaObject4CallEiPPv @ 533 NONAME
-	_ZN19QMediaPlayerControl11qt_metacastEPKc @ 534 NONAME
-	_ZN19QMediaPlayerControl12mediaChangedERK13QMediaContent @ 535 NONAME
-	_ZN19QMediaPlayerControl12mutedChangedEb @ 536 NONAME
-	_ZN19QMediaPlayerControl12stateChangedEN12QMediaPlayer5StateE @ 537 NONAME
-	_ZN19QMediaPlayerControl13volumeChangedEi @ 538 NONAME
-	_ZN19QMediaPlayerControl15durationChangedEx @ 539 NONAME
-	_ZN19QMediaPlayerControl15positionChangedEx @ 540 NONAME
-	_ZN19QMediaPlayerControl15seekableChangedEb @ 541 NONAME
-	_ZN19QMediaPlayerControl16staticMetaObjectE @ 542 NONAME DATA 16
-	_ZN19QMediaPlayerControl18mediaStatusChangedEN12QMediaPlayer11MediaStatusE @ 543 NONAME
-	_ZN19QMediaPlayerControl19bufferStatusChangedEi @ 544 NONAME
-	_ZN19QMediaPlayerControl19getStaticMetaObjectEv @ 545 NONAME
-	_ZN19QMediaPlayerControl19playbackRateChangedEf @ 546 NONAME
-	_ZN19QMediaPlayerControl21audioAvailableChangedEb @ 547 NONAME
-	_ZN19QMediaPlayerControl21videoAvailableChangedEb @ 548 NONAME
-	_ZN19QMediaPlayerControl30availablePlaybackRangesChangedERK15QMediaTimeRange @ 549 NONAME
-	_ZN19QMediaPlayerControl5errorEiRK7QString @ 550 NONAME
-	_ZN19QMediaPlayerControlC2EP7QObject @ 551 NONAME
-	_ZN19QMediaPlayerControlD0Ev @ 552 NONAME
-	_ZN19QMediaPlayerControlD1Ev @ 553 NONAME
-	_ZN19QMediaPlayerControlD2Ev @ 554 NONAME
-	_ZN19QVideoDeviceControl11qt_metacallEN11QMetaObject4CallEiPPv @ 555 NONAME
-	_ZN19QVideoDeviceControl11qt_metacastEPKc @ 556 NONAME
-	_ZN19QVideoDeviceControl14devicesChangedEv @ 557 NONAME
-	_ZN19QVideoDeviceControl16staticMetaObjectE @ 558 NONAME DATA 16
-	_ZN19QVideoDeviceControl19getStaticMetaObjectEv @ 559 NONAME
-	_ZN19QVideoDeviceControl21selectedDeviceChangedERK7QString @ 560 NONAME
-	_ZN19QVideoDeviceControl21selectedDeviceChangedEi @ 561 NONAME
-	_ZN19QVideoDeviceControlC2EP7QObject @ 562 NONAME
-	_ZN19QVideoDeviceControlD0Ev @ 563 NONAME
-	_ZN19QVideoDeviceControlD1Ev @ 564 NONAME
-	_ZN19QVideoDeviceControlD2Ev @ 565 NONAME
-	_ZN19QVideoOutputControl11qt_metacallEN11QMetaObject4CallEiPPv @ 566 NONAME
-	_ZN19QVideoOutputControl11qt_metacastEPKc @ 567 NONAME
-	_ZN19QVideoOutputControl16staticMetaObjectE @ 568 NONAME DATA 16
-	_ZN19QVideoOutputControl19getStaticMetaObjectEv @ 569 NONAME
-	_ZN19QVideoOutputControl23availableOutputsChangedERK5QListINS_6OutputEE @ 570 NONAME
-	_ZN19QVideoOutputControlC2EP7QObject @ 571 NONAME
-	_ZN19QVideoOutputControlD0Ev @ 572 NONAME
-	_ZN19QVideoOutputControlD1Ev @ 573 NONAME
-	_ZN19QVideoOutputControlD2Ev @ 574 NONAME
-	_ZN19QVideoWidgetControl10hueChangedEi @ 575 NONAME
-	_ZN19QVideoWidgetControl11qt_metacallEN11QMetaObject4CallEiPPv @ 576 NONAME
-	_ZN19QVideoWidgetControl11qt_metacastEPKc @ 577 NONAME
-	_ZN19QVideoWidgetControl15contrastChangedEi @ 578 NONAME
-	_ZN19QVideoWidgetControl16staticMetaObjectE @ 579 NONAME DATA 16
-	_ZN19QVideoWidgetControl17brightnessChangedEi @ 580 NONAME
-	_ZN19QVideoWidgetControl17fullScreenChangedEb @ 581 NONAME
-	_ZN19QVideoWidgetControl17saturationChangedEi @ 582 NONAME
-	_ZN19QVideoWidgetControl19getStaticMetaObjectEv @ 583 NONAME
-	_ZN19QVideoWidgetControlC2EP7QObject @ 584 NONAME
-	_ZN19QVideoWidgetControlD0Ev @ 585 NONAME
-	_ZN19QVideoWidgetControlD1Ev @ 586 NONAME
-	_ZN19QVideoWidgetControlD2Ev @ 587 NONAME
-	_ZN19QVideoWindowControl10hueChangedEi @ 588 NONAME
-	_ZN19QVideoWindowControl11qt_metacallEN11QMetaObject4CallEiPPv @ 589 NONAME
-	_ZN19QVideoWindowControl11qt_metacastEPKc @ 590 NONAME
-	_ZN19QVideoWindowControl15contrastChangedEi @ 591 NONAME
-	_ZN19QVideoWindowControl16staticMetaObjectE @ 592 NONAME DATA 16
-	_ZN19QVideoWindowControl17brightnessChangedEi @ 593 NONAME
-	_ZN19QVideoWindowControl17fullScreenChangedEb @ 594 NONAME
-	_ZN19QVideoWindowControl17nativeSizeChangedEv @ 595 NONAME
-	_ZN19QVideoWindowControl17saturationChangedEi @ 596 NONAME
-	_ZN19QVideoWindowControl19getStaticMetaObjectEv @ 597 NONAME
-	_ZN19QVideoWindowControlC2EP7QObject @ 598 NONAME
-	_ZN19QVideoWindowControlD0Ev @ 599 NONAME
-	_ZN19QVideoWindowControlD1Ev @ 600 NONAME
-	_ZN19QVideoWindowControlD2Ev @ 601 NONAME
-	_ZN20QMediaPlaylistReaderD0Ev @ 602 NONAME
-	_ZN20QMediaPlaylistReaderD1Ev @ 603 NONAME
-	_ZN20QMediaPlaylistReaderD2Ev @ 604 NONAME
-	_ZN20QMediaPlaylistWriterD0Ev @ 605 NONAME
-	_ZN20QMediaPlaylistWriterD1Ev @ 606 NONAME
-	_ZN20QMediaPlaylistWriterD2Ev @ 607 NONAME
-	_ZN20QPainterVideoSurface11qt_metacallEN11QMetaObject4CallEiPPv @ 608 NONAME
-	_ZN20QPainterVideoSurface11qt_metacastEPKc @ 609 NONAME
-	_ZN20QPainterVideoSurface11setContrastEi @ 610 NONAME
-	_ZN20QPainterVideoSurface12frameChangedEv @ 611 NONAME
-	_ZN20QPainterVideoSurface13createPainterEv @ 612 NONAME
-	_ZN20QPainterVideoSurface13setBrightnessEi @ 613 NONAME
-	_ZN20QPainterVideoSurface13setSaturationEi @ 614 NONAME
-	_ZN20QPainterVideoSurface16staticMetaObjectE @ 615 NONAME DATA 16
-	_ZN20QPainterVideoSurface19getStaticMetaObjectEv @ 616 NONAME
-	_ZN20QPainterVideoSurface4stopEv @ 617 NONAME
-	_ZN20QPainterVideoSurface5paintEP8QPainterRK6QRectFS4_ @ 618 NONAME
-	_ZN20QPainterVideoSurface5startERK19QVideoSurfaceFormat @ 619 NONAME
-	_ZN20QPainterVideoSurface6setHueEi @ 620 NONAME
-	_ZN20QPainterVideoSurface7presentERK11QVideoFrame @ 621 NONAME
-	_ZN20QPainterVideoSurface8setReadyEb @ 622 NONAME
-	_ZN20QPainterVideoSurfaceC1EP7QObject @ 623 NONAME
-	_ZN20QPainterVideoSurfaceC2EP7QObject @ 624 NONAME
-	_ZN20QPainterVideoSurfaceD0Ev @ 625 NONAME
-	_ZN20QPainterVideoSurfaceD1Ev @ 626 NONAME
-	_ZN20QPainterVideoSurfaceD2Ev @ 627 NONAME
-	_ZN21QMediaPlaylistControl11qt_metacallEN11QMetaObject4CallEiPPv @ 628 NONAME
-	_ZN21QMediaPlaylistControl11qt_metacastEPKc @ 629 NONAME
-	_ZN21QMediaPlaylistControl16staticMetaObjectE @ 630 NONAME DATA 16
-	_ZN21QMediaPlaylistControl19currentIndexChangedEi @ 631 NONAME
-	_ZN21QMediaPlaylistControl19currentMediaChangedERK13QMediaContent @ 632 NONAME
-	_ZN21QMediaPlaylistControl19getStaticMetaObjectEv @ 633 NONAME
-	_ZN21QMediaPlaylistControl19playbackModeChangedEN14QMediaPlaylist12PlaybackModeE @ 634 NONAME
-	_ZN21QMediaPlaylistControl23playlistProviderChangedEv @ 635 NONAME
-	_ZN21QMediaPlaylistControlC2EP7QObject @ 636 NONAME
-	_ZN21QMediaPlaylistControlD0Ev @ 637 NONAME
-	_ZN21QMediaPlaylistControlD1Ev @ 638 NONAME
-	_ZN21QMediaPlaylistControlD2Ev @ 639 NONAME
-	_ZN21QMediaServiceProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 640 NONAME
-	_ZN21QMediaServiceProvider11qt_metacastEPKc @ 641 NONAME
-	_ZN21QMediaServiceProvider16staticMetaObjectE @ 642 NONAME DATA 16
-	_ZN21QMediaServiceProvider17deviceDescriptionERK10QByteArrayS2_ @ 643 NONAME
-	_ZN21QMediaServiceProvider19getStaticMetaObjectEv @ 644 NONAME
-	_ZN21QMediaServiceProvider22defaultServiceProviderEv @ 645 NONAME
-	_ZN21QVideoRendererControl11qt_metacallEN11QMetaObject4CallEiPPv @ 646 NONAME
-	_ZN21QVideoRendererControl11qt_metacastEPKc @ 647 NONAME
-	_ZN21QVideoRendererControl16staticMetaObjectE @ 648 NONAME DATA 16
-	_ZN21QVideoRendererControl19getStaticMetaObjectEv @ 649 NONAME
-	_ZN21QVideoRendererControlC2EP7QObject @ 650 NONAME
-	_ZN21QVideoRendererControlD0Ev @ 651 NONAME
-	_ZN21QVideoRendererControlD1Ev @ 652 NONAME
-	_ZN21QVideoRendererControlD2Ev @ 653 NONAME
-	_ZN22QMediaPlaylistIOPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 654 NONAME
-	_ZN22QMediaPlaylistIOPlugin11qt_metacastEPKc @ 655 NONAME
-	_ZN22QMediaPlaylistIOPlugin16staticMetaObjectE @ 656 NONAME DATA 16
-	_ZN22QMediaPlaylistIOPlugin19getStaticMetaObjectEv @ 657 NONAME
-	_ZN22QMediaPlaylistIOPluginC2EP7QObject @ 658 NONAME
-	_ZN22QMediaPlaylistIOPluginD0Ev @ 659 NONAME
-	_ZN22QMediaPlaylistIOPluginD1Ev @ 660 NONAME
-	_ZN22QMediaPlaylistIOPluginD2Ev @ 661 NONAME
-	_ZN22QMediaPlaylistProvider10loadFailedEN14QMediaPlaylist5ErrorERK7QString @ 662 NONAME
-	_ZN22QMediaPlaylistProvider11insertMediaEiRK13QMediaContent @ 663 NONAME
-	_ZN22QMediaPlaylistProvider11insertMediaEiRK5QListI13QMediaContentE @ 664 NONAME
-	_ZN22QMediaPlaylistProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 665 NONAME
-	_ZN22QMediaPlaylistProvider11qt_metacastEPKc @ 666 NONAME
-	_ZN22QMediaPlaylistProvider11removeMediaEi @ 667 NONAME
-	_ZN22QMediaPlaylistProvider11removeMediaEii @ 668 NONAME
-	_ZN22QMediaPlaylistProvider12mediaChangedEii @ 669 NONAME
-	_ZN22QMediaPlaylistProvider12mediaRemovedEii @ 670 NONAME
-	_ZN22QMediaPlaylistProvider13mediaInsertedEii @ 671 NONAME
-	_ZN22QMediaPlaylistProvider16staticMetaObjectE @ 672 NONAME DATA 16
-	_ZN22QMediaPlaylistProvider19getStaticMetaObjectEv @ 673 NONAME
-	_ZN22QMediaPlaylistProvider21mediaAboutToBeRemovedEii @ 674 NONAME
-	_ZN22QMediaPlaylistProvider22mediaAboutToBeInsertedEii @ 675 NONAME
-	_ZN22QMediaPlaylistProvider4loadEP9QIODevicePKc @ 676 NONAME
-	_ZN22QMediaPlaylistProvider4loadERK4QUrlPKc @ 677 NONAME
-	_ZN22QMediaPlaylistProvider4saveEP9QIODevicePKc @ 678 NONAME
-	_ZN22QMediaPlaylistProvider4saveERK4QUrlPKc @ 679 NONAME
-	_ZN22QMediaPlaylistProvider5clearEv @ 680 NONAME
-	_ZN22QMediaPlaylistProvider6loadedEv @ 681 NONAME
-	_ZN22QMediaPlaylistProvider7shuffleEv @ 682 NONAME
-	_ZN22QMediaPlaylistProvider8addMediaERK13QMediaContent @ 683 NONAME
-	_ZN22QMediaPlaylistProvider8addMediaERK5QListI13QMediaContentE @ 684 NONAME
-	_ZN22QMediaPlaylistProviderC2EP7QObject @ 685 NONAME
-	_ZN22QMediaPlaylistProviderC2ER29QMediaPlaylistProviderPrivateP7QObject @ 686 NONAME
-	_ZN22QMediaPlaylistProviderD0Ev @ 687 NONAME
-	_ZN22QMediaPlaylistProviderD1Ev @ 688 NONAME
-	_ZN22QMediaPlaylistProviderD2Ev @ 689 NONAME
-	_ZN23QMediaPlaylistNavigator11qt_metacallEN11QMetaObject4CallEiPPv @ 690 NONAME
-	_ZN23QMediaPlaylistNavigator11qt_metacastEPKc @ 691 NONAME
-	_ZN23QMediaPlaylistNavigator11setPlaylistEP22QMediaPlaylistProvider @ 692 NONAME
-	_ZN23QMediaPlaylistNavigator15setPlaybackModeEN14QMediaPlaylist12PlaybackModeE @ 693 NONAME
-	_ZN23QMediaPlaylistNavigator16staticMetaObjectE @ 694 NONAME DATA 16
-	_ZN23QMediaPlaylistNavigator19currentIndexChangedEi @ 695 NONAME
-	_ZN23QMediaPlaylistNavigator19getStaticMetaObjectEv @ 696 NONAME
-	_ZN23QMediaPlaylistNavigator19playbackModeChangedEN14QMediaPlaylist12PlaybackModeE @ 697 NONAME
-	_ZN23QMediaPlaylistNavigator23surroundingItemsChangedEv @ 698 NONAME
-	_ZN23QMediaPlaylistNavigator4jumpEi @ 699 NONAME
-	_ZN23QMediaPlaylistNavigator4nextEv @ 700 NONAME
-	_ZN23QMediaPlaylistNavigator8previousEv @ 701 NONAME
-	_ZN23QMediaPlaylistNavigator9activatedERK13QMediaContent @ 702 NONAME
-	_ZN23QMediaPlaylistNavigatorC1EP22QMediaPlaylistProviderP7QObject @ 703 NONAME
-	_ZN23QMediaPlaylistNavigatorC2EP22QMediaPlaylistProviderP7QObject @ 704 NONAME
-	_ZN23QMediaPlaylistNavigatorD0Ev @ 705 NONAME
-	_ZN23QMediaPlaylistNavigatorD1Ev @ 706 NONAME
-	_ZN23QMediaPlaylistNavigatorD2Ev @ 707 NONAME
-	_ZN25QMediaServiceProviderHintC1E6QFlagsINS_7FeatureEE @ 708 NONAME
-	_ZN25QMediaServiceProviderHintC1ERK10QByteArray @ 709 NONAME
-	_ZN25QMediaServiceProviderHintC1ERK7QStringRK11QStringList @ 710 NONAME
-	_ZN25QMediaServiceProviderHintC1ERKS_ @ 711 NONAME
-	_ZN25QMediaServiceProviderHintC1Ev @ 712 NONAME
-	_ZN25QMediaServiceProviderHintC2E6QFlagsINS_7FeatureEE @ 713 NONAME
-	_ZN25QMediaServiceProviderHintC2ERK10QByteArray @ 714 NONAME
-	_ZN25QMediaServiceProviderHintC2ERK7QStringRK11QStringList @ 715 NONAME
-	_ZN25QMediaServiceProviderHintC2ERKS_ @ 716 NONAME
-	_ZN25QMediaServiceProviderHintC2Ev @ 717 NONAME
-	_ZN25QMediaServiceProviderHintD1Ev @ 718 NONAME
-	_ZN25QMediaServiceProviderHintD2Ev @ 719 NONAME
-	_ZN25QMediaServiceProviderHintaSERKS_ @ 720 NONAME
-	_ZN27QLocalMediaPlaylistProvider11insertMediaEiRK13QMediaContent @ 721 NONAME
-	_ZN27QLocalMediaPlaylistProvider11insertMediaEiRK5QListI13QMediaContentE @ 722 NONAME
-	_ZN27QLocalMediaPlaylistProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 723 NONAME
-	_ZN27QLocalMediaPlaylistProvider11qt_metacastEPKc @ 724 NONAME
-	_ZN27QLocalMediaPlaylistProvider11removeMediaEi @ 725 NONAME
-	_ZN27QLocalMediaPlaylistProvider11removeMediaEii @ 726 NONAME
-	_ZN27QLocalMediaPlaylistProvider16staticMetaObjectE @ 727 NONAME DATA 16
-	_ZN27QLocalMediaPlaylistProvider19getStaticMetaObjectEv @ 728 NONAME
-	_ZN27QLocalMediaPlaylistProvider5clearEv @ 729 NONAME
-	_ZN27QLocalMediaPlaylistProvider7shuffleEv @ 730 NONAME
-	_ZN27QLocalMediaPlaylistProvider8addMediaERK13QMediaContent @ 731 NONAME
-	_ZN27QLocalMediaPlaylistProvider8addMediaERK5QListI13QMediaContentE @ 732 NONAME
-	_ZN27QLocalMediaPlaylistProviderC1EP7QObject @ 733 NONAME
-	_ZN27QLocalMediaPlaylistProviderC2EP7QObject @ 734 NONAME
-	_ZN27QLocalMediaPlaylistProviderD0Ev @ 735 NONAME
-	_ZN27QLocalMediaPlaylistProviderD1Ev @ 736 NONAME
-	_ZN27QLocalMediaPlaylistProviderD2Ev @ 737 NONAME
-	_ZN27QMediaServiceProviderPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 738 NONAME
-	_ZN27QMediaServiceProviderPlugin11qt_metacastEPKc @ 739 NONAME
-	_ZN27QMediaServiceProviderPlugin16staticMetaObjectE @ 740 NONAME DATA 16
-	_ZN27QMediaServiceProviderPlugin19getStaticMetaObjectEv @ 741 NONAME
-	_ZNK12QAudioFormat10sampleRateEv @ 742 NONAME
-	_ZNK12QAudioFormat12channelCountEv @ 743 NONAME
-	_ZNK12QMediaObject10metaObjectEv @ 744 NONAME
-	_ZNK12QMediaObject11isAvailableEv @ 745 NONAME
-	_ZNK12QMediaObject14notifyIntervalEv @ 746 NONAME
-	_ZNK12QMediaObject16extendedMetaDataERK7QString @ 747 NONAME
-	_ZNK12QMediaObject17availabilityErrorEv @ 748 NONAME
-	_ZNK12QMediaObject17availableMetaDataEv @ 749 NONAME
-	_ZNK12QMediaObject18isMetaDataWritableEv @ 750 NONAME
-	_ZNK12QMediaObject19isMetaDataAvailableEv @ 751 NONAME
-	_ZNK12QMediaObject25availableExtendedMetaDataEv @ 752 NONAME
-	_ZNK12QMediaObject7serviceEv @ 753 NONAME
-	_ZNK12QMediaObject8metaDataEN12QtMultimedia8MetaDataE @ 754 NONAME
-	_ZNK12QMediaPlayer10isSeekableEv @ 755 NONAME
-	_ZNK12QMediaPlayer10metaObjectEv @ 756 NONAME
-	_ZNK12QMediaPlayer11errorStringEv @ 757 NONAME
-	_ZNK12QMediaPlayer11mediaStatusEv @ 758 NONAME
-	_ZNK12QMediaPlayer11mediaStreamEv @ 759 NONAME
-	_ZNK12QMediaPlayer12bufferStatusEv @ 760 NONAME
-	_ZNK12QMediaPlayer12playbackRateEv @ 761 NONAME
-	_ZNK12QMediaPlayer16isAudioAvailableEv @ 762 NONAME
-	_ZNK12QMediaPlayer16isVideoAvailableEv @ 763 NONAME
-	_ZNK12QMediaPlayer5errorEv @ 764 NONAME
-	_ZNK12QMediaPlayer5mediaEv @ 765 NONAME
-	_ZNK12QMediaPlayer5stateEv @ 766 NONAME
-	_ZNK12QMediaPlayer6volumeEv @ 767 NONAME
-	_ZNK12QMediaPlayer7isMutedEv @ 768 NONAME
-	_ZNK12QMediaPlayer8durationEv @ 769 NONAME
-	_ZNK12QMediaPlayer8positionEv @ 770 NONAME
-	_ZNK12QVideoWidget10brightnessEv @ 771 NONAME
-	_ZNK12QVideoWidget10metaObjectEv @ 772 NONAME
-	_ZNK12QVideoWidget10saturationEv @ 773 NONAME
-	_ZNK12QVideoWidget11mediaObjectEv @ 774 NONAME
-	_ZNK12QVideoWidget15aspectRatioModeEv @ 775 NONAME
-	_ZNK12QVideoWidget3hueEv @ 776 NONAME
-	_ZNK12QVideoWidget8contrastEv @ 777 NONAME
-	_ZNK12QVideoWidget8sizeHintEv @ 778 NONAME
-	_ZNK13QMediaContent12canonicalUrlEv @ 779 NONAME
-	_ZNK13QMediaContent16canonicalRequestEv @ 780 NONAME
-	_ZNK13QMediaContent17canonicalResourceEv @ 781 NONAME
-	_ZNK13QMediaContent6isNullEv @ 782 NONAME
-	_ZNK13QMediaContent9resourcesEv @ 783 NONAME
-	_ZNK13QMediaContenteqERKS_ @ 784 NONAME
-	_ZNK13QMediaContentneERKS_ @ 785 NONAME
-	_ZNK13QMediaControl10metaObjectEv @ 786 NONAME
-	_ZNK13QMediaService10metaObjectEv @ 787 NONAME
-	_ZNK14QMediaPlaylist10isReadOnlyEv @ 788 NONAME
-	_ZNK14QMediaPlaylist10mediaCountEv @ 789 NONAME
-	_ZNK14QMediaPlaylist10metaObjectEv @ 790 NONAME
-	_ZNK14QMediaPlaylist11errorStringEv @ 791 NONAME
-	_ZNK14QMediaPlaylist11mediaObjectEv @ 792 NONAME
-	_ZNK14QMediaPlaylist12currentIndexEv @ 793 NONAME
-	_ZNK14QMediaPlaylist12currentMediaEv @ 794 NONAME
-	_ZNK14QMediaPlaylist12playbackModeEv @ 795 NONAME
-	_ZNK14QMediaPlaylist13previousIndexEi @ 796 NONAME
-	_ZNK14QMediaPlaylist5errorEv @ 797 NONAME
-	_ZNK14QMediaPlaylist5mediaEi @ 798 NONAME
-	_ZNK14QMediaPlaylist7isEmptyEv @ 799 NONAME
-	_ZNK14QMediaPlaylist9nextIndexEi @ 800 NONAME
-	_ZNK14QMediaResource10audioCodecEv @ 801 NONAME
-	_ZNK14QMediaResource10resolutionEv @ 802 NONAME
-	_ZNK14QMediaResource10sampleRateEv @ 803 NONAME
-	_ZNK14QMediaResource10videoCodecEv @ 804 NONAME
-	_ZNK14QMediaResource12audioBitRateEv @ 805 NONAME
-	_ZNK14QMediaResource12channelCountEv @ 806 NONAME
-	_ZNK14QMediaResource12videoBitRateEv @ 807 NONAME
-	_ZNK14QMediaResource3urlEv @ 808 NONAME
-	_ZNK14QMediaResource6isNullEv @ 809 NONAME
-	_ZNK14QMediaResource7requestEv @ 810 NONAME
-	_ZNK14QMediaResource8dataSizeEv @ 811 NONAME
-	_ZNK14QMediaResource8languageEv @ 812 NONAME
-	_ZNK14QMediaResource8mimeTypeEv @ 813 NONAME
-	_ZNK14QMediaResourceeqERKS_ @ 814 NONAME
-	_ZNK14QMediaResourceneERKS_ @ 815 NONAME
-	_ZNK15QMediaTimeRange10latestTimeEv @ 816 NONAME
-	_ZNK15QMediaTimeRange12earliestTimeEv @ 817 NONAME
-	_ZNK15QMediaTimeRange12isContinuousEv @ 818 NONAME
-	_ZNK15QMediaTimeRange7isEmptyEv @ 819 NONAME
-	_ZNK15QMediaTimeRange8containsEx @ 820 NONAME
-	_ZNK15QMediaTimeRange9intervalsEv @ 821 NONAME
-	_ZNK16QAudioDeviceInfo20supportedSampleRatesEv @ 822 NONAME
-	_ZNK16QAudioDeviceInfo22supportedChannelCountsEv @ 823 NONAME
-	_ZNK16QMetaDataControl10metaObjectEv @ 824 NONAME
-	_ZNK18QGraphicsVideoItem10metaObjectEv @ 825 NONAME
-	_ZNK18QGraphicsVideoItem10nativeSizeEv @ 826 NONAME
-	_ZNK18QGraphicsVideoItem11mediaObjectEv @ 827 NONAME
-	_ZNK18QGraphicsVideoItem12boundingRectEv @ 828 NONAME
-	_ZNK18QGraphicsVideoItem15aspectRatioModeEv @ 829 NONAME
-	_ZNK18QGraphicsVideoItem4sizeEv @ 830 NONAME
-	_ZNK18QGraphicsVideoItem6offsetEv @ 831 NONAME
-	_ZNK18QMediaTimeInterval10normalizedEv @ 832 NONAME
-	_ZNK18QMediaTimeInterval10translatedEx @ 833 NONAME
-	_ZNK18QMediaTimeInterval3endEv @ 834 NONAME
-	_ZNK18QMediaTimeInterval5startEv @ 835 NONAME
-	_ZNK18QMediaTimeInterval8containsEx @ 836 NONAME
-	_ZNK18QMediaTimeInterval8isNormalEv @ 837 NONAME
-	_ZNK19QMediaPlayerControl10metaObjectEv @ 838 NONAME
-	_ZNK19QVideoDeviceControl10metaObjectEv @ 839 NONAME
-	_ZNK19QVideoOutputControl10metaObjectEv @ 840 NONAME
-	_ZNK19QVideoWidgetControl10metaObjectEv @ 841 NONAME
-	_ZNK19QVideoWindowControl10metaObjectEv @ 842 NONAME
-	_ZNK20QPainterVideoSurface10brightnessEv @ 843 NONAME
-	_ZNK20QPainterVideoSurface10metaObjectEv @ 844 NONAME
-	_ZNK20QPainterVideoSurface10saturationEv @ 845 NONAME
-	_ZNK20QPainterVideoSurface17isFormatSupportedERK19QVideoSurfaceFormatPS0_ @ 846 NONAME
-	_ZNK20QPainterVideoSurface21supportedPixelFormatsEN20QAbstractVideoBuffer10HandleTypeE @ 847 NONAME
-	_ZNK20QPainterVideoSurface3hueEv @ 848 NONAME
-	_ZNK20QPainterVideoSurface7isReadyEv @ 849 NONAME
-	_ZNK20QPainterVideoSurface8contrastEv @ 850 NONAME
-	_ZNK21QMediaPlaylistControl10metaObjectEv @ 851 NONAME
-	_ZNK21QMediaServiceProvider10hasSupportERK10QByteArrayRK7QStringRK11QStringListi @ 852 NONAME
-	_ZNK21QMediaServiceProvider10metaObjectEv @ 853 NONAME
-	_ZNK21QMediaServiceProvider18supportedMimeTypesERK10QByteArrayi @ 854 NONAME
-	_ZNK21QMediaServiceProvider7devicesERK10QByteArray @ 855 NONAME
-	_ZNK21QVideoRendererControl10metaObjectEv @ 856 NONAME
-	_ZNK22QMediaPlaylistIOPlugin10metaObjectEv @ 857 NONAME
-	_ZNK22QMediaPlaylistProvider10isReadOnlyEv @ 858 NONAME
-	_ZNK22QMediaPlaylistProvider10metaObjectEv @ 859 NONAME
-	_ZNK23QMediaPlaylistNavigator10metaObjectEv @ 860 NONAME
-	_ZNK23QMediaPlaylistNavigator11currentItemEv @ 861 NONAME
-	_ZNK23QMediaPlaylistNavigator12currentIndexEv @ 862 NONAME
-	_ZNK23QMediaPlaylistNavigator12playbackModeEv @ 863 NONAME
-	_ZNK23QMediaPlaylistNavigator12previousItemEi @ 864 NONAME
-	_ZNK23QMediaPlaylistNavigator13previousIndexEi @ 865 NONAME
-	_ZNK23QMediaPlaylistNavigator6itemAtEi @ 866 NONAME
-	_ZNK23QMediaPlaylistNavigator8nextItemEi @ 867 NONAME
-	_ZNK23QMediaPlaylistNavigator8playlistEv @ 868 NONAME
-	_ZNK23QMediaPlaylistNavigator9nextIndexEi @ 869 NONAME
-	_ZNK25QMediaServiceProviderHint4typeEv @ 870 NONAME
-	_ZNK25QMediaServiceProviderHint6codecsEv @ 871 NONAME
-	_ZNK25QMediaServiceProviderHint6deviceEv @ 872 NONAME
-	_ZNK25QMediaServiceProviderHint6isNullEv @ 873 NONAME
-	_ZNK25QMediaServiceProviderHint8featuresEv @ 874 NONAME
-	_ZNK25QMediaServiceProviderHint8mimeTypeEv @ 875 NONAME
-	_ZNK25QMediaServiceProviderHinteqERKS_ @ 876 NONAME
-	_ZNK25QMediaServiceProviderHintneERKS_ @ 877 NONAME
-	_ZNK27QLocalMediaPlaylistProvider10isReadOnlyEv @ 878 NONAME
-	_ZNK27QLocalMediaPlaylistProvider10mediaCountEv @ 879 NONAME
-	_ZNK27QLocalMediaPlaylistProvider10metaObjectEv @ 880 NONAME
-	_ZNK27QLocalMediaPlaylistProvider5mediaEi @ 881 NONAME
-	_ZNK27QMediaServiceProviderPlugin10metaObjectEv @ 882 NONAME
-	_ZTI12QMediaObject @ 883 NONAME
-	_ZTI12QMediaPlayer @ 884 NONAME
-	_ZTI12QVideoWidget @ 885 NONAME
-	_ZTI13QMediaControl @ 886 NONAME
-	_ZTI13QMediaService @ 887 NONAME
-	_ZTI14QMediaPlaylist @ 888 NONAME
-	_ZTI16QMetaDataControl @ 889 NONAME
-	_ZTI18QGraphicsVideoItem @ 890 NONAME
-	_ZTI19QMediaPlayerControl @ 891 NONAME
-	_ZTI19QVideoDeviceControl @ 892 NONAME
-	_ZTI19QVideoOutputControl @ 893 NONAME
-	_ZTI19QVideoWidgetControl @ 894 NONAME
-	_ZTI19QVideoWindowControl @ 895 NONAME
-	_ZTI20QMediaPlaylistReader @ 896 NONAME
-	_ZTI20QMediaPlaylistWriter @ 897 NONAME
-	_ZTI20QPainterVideoSurface @ 898 NONAME
-	_ZTI21QMediaPlaylistControl @ 899 NONAME
-	_ZTI21QMediaServiceProvider @ 900 NONAME
-	_ZTI21QVideoRendererControl @ 901 NONAME
-	_ZTI22QMediaPlaylistIOPlugin @ 902 NONAME
-	_ZTI22QMediaPlaylistProvider @ 903 NONAME
-	_ZTI23QMediaPlaylistNavigator @ 904 NONAME
-	_ZTI25QMediaPlaylistIOInterface @ 905 NONAME
-	_ZTI27QLocalMediaPlaylistProvider @ 906 NONAME
-	_ZTI27QMediaServiceProviderPlugin @ 907 NONAME
-	_ZTI37QMediaServiceProviderFactoryInterface @ 908 NONAME
-	_ZTV12QMediaObject @ 909 NONAME
-	_ZTV12QMediaPlayer @ 910 NONAME
-	_ZTV12QVideoWidget @ 911 NONAME
-	_ZTV13QMediaControl @ 912 NONAME
-	_ZTV13QMediaService @ 913 NONAME
-	_ZTV14QMediaPlaylist @ 914 NONAME
-	_ZTV16QMetaDataControl @ 915 NONAME
-	_ZTV18QGraphicsVideoItem @ 916 NONAME
-	_ZTV19QMediaPlayerControl @ 917 NONAME
-	_ZTV19QVideoDeviceControl @ 918 NONAME
-	_ZTV19QVideoOutputControl @ 919 NONAME
-	_ZTV19QVideoWidgetControl @ 920 NONAME
-	_ZTV19QVideoWindowControl @ 921 NONAME
-	_ZTV20QMediaPlaylistReader @ 922 NONAME
-	_ZTV20QMediaPlaylistWriter @ 923 NONAME
-	_ZTV20QPainterVideoSurface @ 924 NONAME
-	_ZTV21QMediaPlaylistControl @ 925 NONAME
-	_ZTV21QMediaServiceProvider @ 926 NONAME
-	_ZTV21QVideoRendererControl @ 927 NONAME
-	_ZTV22QMediaPlaylistIOPlugin @ 928 NONAME
-	_ZTV22QMediaPlaylistProvider @ 929 NONAME
-	_ZTV23QMediaPlaylistNavigator @ 930 NONAME
-	_ZTV27QLocalMediaPlaylistProvider @ 931 NONAME
-	_ZTV27QMediaServiceProviderPlugin @ 932 NONAME
-	_ZThn8_N12QVideoWidgetD0Ev @ 933 NONAME
-	_ZThn8_N12QVideoWidgetD1Ev @ 934 NONAME
-	_ZThn8_N18QGraphicsVideoItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 935 NONAME
-	_ZThn8_N18QGraphicsVideoItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 936 NONAME
-	_ZThn8_N18QGraphicsVideoItemD0Ev @ 937 NONAME
-	_ZThn8_N18QGraphicsVideoItemD1Ev @ 938 NONAME
-	_ZThn8_N22QMediaPlaylistIOPluginD0Ev @ 939 NONAME
-	_ZThn8_N22QMediaPlaylistIOPluginD1Ev @ 940 NONAME
-	_ZThn8_NK18QGraphicsVideoItem12boundingRectEv @ 941 NONAME
-	_ZeqRK15QMediaTimeRangeS1_ @ 942 NONAME
-	_ZeqRK18QMediaTimeIntervalS1_ @ 943 NONAME
-	_ZmiRK15QMediaTimeRangeS1_ @ 944 NONAME
-	_ZneRK15QMediaTimeRangeS1_ @ 945 NONAME
-	_ZneRK18QMediaTimeIntervalS1_ @ 946 NONAME
-	_ZplRK15QMediaTimeRangeS1_ @ 947 NONAME
-	_ZN12QSoundEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 948 NONAME
-	_ZN12QSoundEffect11qt_metacastEPKc @ 949 NONAME
-	_ZN12QSoundEffect12loopsChangedEv @ 950 NONAME
-	_ZN12QSoundEffect12mutedChangedEv @ 951 NONAME
-	_ZN12QSoundEffect13sourceChangedEv @ 952 NONAME
-	_ZN12QSoundEffect13volumeChangedEv @ 953 NONAME
-	_ZN12QSoundEffect16staticMetaObjectE @ 954 NONAME DATA 16
-	_ZN12QSoundEffect19getStaticMetaObjectEv @ 955 NONAME
-	_ZN12QSoundEffect4playEv @ 956 NONAME
-	_ZN12QSoundEffect8setLoopsEi @ 957 NONAME
-	_ZN12QSoundEffect8setMutedEb @ 958 NONAME
-	_ZN12QSoundEffect9setSourceERK4QUrl @ 959 NONAME
-	_ZN12QSoundEffect9setVolumeEi @ 960 NONAME
-	_ZN12QSoundEffectC1EP7QObject @ 961 NONAME
-	_ZN12QSoundEffectC2EP7QObject @ 962 NONAME
-	_ZN12QSoundEffectD0Ev @ 963 NONAME
-	_ZN12QSoundEffectD1Ev @ 964 NONAME
-	_ZN12QSoundEffectD2Ev @ 965 NONAME
-	_ZN12QVideoWidget18setAspectRatioModeEN2Qt15AspectRatioModeE @ 966 NONAME
-	_ZNK12QSoundEffect10metaObjectEv @ 967 NONAME
-	_ZNK12QSoundEffect5loopsEv @ 968 NONAME
-	_ZNK12QSoundEffect6sourceEv @ 969 NONAME
-	_ZNK12QSoundEffect6volumeEv @ 970 NONAME
-	_ZNK12QSoundEffect7isMutedEv @ 971 NONAME
-	_ZTI12QSoundEffect @ 972 NONAME
-	_ZTV12QSoundEffect @ 973 NONAME
-	_ZN18QGraphicsVideoItem10sceneEventEP6QEvent @ 974 NONAME
-	_ZN18QGraphicsVideoItem5eventEP6QEvent @ 975 NONAME
-	_ZThn8_N18QGraphicsVideoItem10sceneEventEP6QEvent @ 976 NONAME
+	_ZNK12QAudioFormat10sampleRateEv @ 299 NONAME
+	_ZNK12QAudioFormat12channelCountEv @ 300 NONAME
+	_ZNK16QAudioDeviceInfo20supportedSampleRatesEv @ 301 NONAME
+	_ZNK16QAudioDeviceInfo22supportedChannelCountsEv @ 302 NONAME
 
diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index dfce7d2..ad196a8 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -153,6 +153,7 @@ symbian: {
 
     contains(QT_CONFIG, multimedia) {
         qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMultimedia$${QT_LIBINFIX}.dll
+        qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMediaServices$${QT_LIBINFIX}.dll
     }
 
     BLD_INF_RULES.prj_exports += "qt.iby $$CORE_MW_LAYER_IBY_EXPORT_PATH(qt.iby)"
-- 
cgit v0.12


From 017cf88ef18cdbf5d302a658c625f605320005f8 Mon Sep 17 00:00:00 2001
From: Andrew den Exter <andrew.den-exter@nokia.com>
Date: Mon, 19 Apr 2010 10:40:43 +1000
Subject: Fix warning about illegal empty declaration.

Q_PRIVATE_SLOT declarations don't require a semi-colon.

Reviewed-by: Justin McPherson
---
 src/multimedia/mediaservices/base/qvideowidget.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/multimedia/mediaservices/base/qvideowidget.h b/src/multimedia/mediaservices/base/qvideowidget.h
index 3722857..a21739a 100644
--- a/src/multimedia/mediaservices/base/qvideowidget.h
+++ b/src/multimedia/mediaservices/base/qvideowidget.h
@@ -121,7 +121,7 @@ private:
     Q_PRIVATE_SLOT(d_func(), void _q_hueChanged(int))
     Q_PRIVATE_SLOT(d_func(), void _q_saturationChanged(int))
     Q_PRIVATE_SLOT(d_func(), void _q_fullScreenChanged(bool))
-    Q_PRIVATE_SLOT(d_func(), void _q_dimensionsChanged());
+    Q_PRIVATE_SLOT(d_func(), void _q_dimensionsChanged())
 };
 
 QT_END_NAMESPACE
-- 
cgit v0.12


From 5c09309811c13fa360ba5e7b3173039da9c038f6 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Mon, 19 Apr 2010 10:08:35 +1000
Subject: Tests; Fix media tests, make sure they are using mediaservies.

Reviewed-by: Dmytro Poplavskiy
---
 .../qdeclarativeaudio/tst_qdeclarativeaudio.cpp    | 28 +++++-----
 .../qdeclarativevideo/tst_qdeclarativevideo.cpp    | 12 ++---
 .../qgraphicsvideoitem/tst_qgraphicsvideoitem.cpp  | 12 ++---
 tests/auto/qmediacontent/tst_qmediacontent.cpp     |  2 +-
 tests/auto/qmediaobject/tst_qmediaobject.cpp       | 44 +++++++--------
 tests/auto/qmediaplayer/tst_qmediaplayer.cpp       |  8 +--
 tests/auto/qmediaplaylist/tst_qmediaplaylist.cpp   | 10 ++--
 .../tst_qmediaplaylistnavigator.cpp                |  4 +-
 .../qmediapluginloader/tst_qmediapluginloader.cpp  |  4 +-
 tests/auto/qmediaresource/tst_qmediaresource.cpp   |  2 +-
 tests/auto/qmediaservice/tst_qmediaservice.cpp     |  6 +--
 .../tst_qmediaserviceprovider.cpp                  | 62 +++++++++++-----------
 tests/auto/qmediatimerange/qmediatimerange.pro     |  2 +-
 tests/auto/qmediatimerange/tst_qmediatimerange.cpp |  2 +-
 tests/auto/qsoundeffect/qsoundeffect.pro           |  2 +-
 tests/auto/qvideowidget/qvideowidget.pro           |  2 +-
 tests/auto/qvideowidget/tst_qvideowidget.cpp       | 18 +++----
 17 files changed, 110 insertions(+), 110 deletions(-)

diff --git a/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
index af0ed76..e393599 100644
--- a/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
+++ b/tests/auto/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
@@ -44,9 +44,9 @@
 #include "../../../src/imports/multimedia/qdeclarativeaudio_p.h"
 
 #include <QtGui/qapplication.h>
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmetadatacontrol.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 
 
 class tst_QDeclarativeAudio : public QObject
@@ -77,7 +77,7 @@ private slots:
     void error();
 };
 
-Q_DECLARE_METATYPE(QtMultimedia::MetaData);
+Q_DECLARE_METATYPE(QtMediaServices::MetaData);
 Q_DECLARE_METATYPE(QDeclarativeAudio::Error);
 
 class QtTestMediaPlayerControl : public QMediaPlayerControl
@@ -193,20 +193,20 @@ public:
     bool isWritable() const { return true; }
     bool isMetaDataAvailable() const { return true; }
 
-    QVariant metaData(QtMultimedia::MetaData key) const { return m_metaData.value(key); }
-    void setMetaData(QtMultimedia::MetaData key, const QVariant &value) {
+    QVariant metaData(QtMediaServices::MetaData key) const { return m_metaData.value(key); }
+    void setMetaData(QtMediaServices::MetaData key, const QVariant &value) {
         m_metaData.insert(key, value); emit metaDataChanged(); }
-    void setMetaData(const QMap<QtMultimedia::MetaData, QVariant> &metaData) {
+    void setMetaData(const QMap<QtMediaServices::MetaData, QVariant> &metaData) {
         m_metaData = metaData; emit metaDataChanged(); }
 
-    QList<QtMultimedia::MetaData> availableMetaData() const { return m_metaData.keys(); }
+    QList<QtMediaServices::MetaData> availableMetaData() const { return m_metaData.keys(); }
 
     QVariant extendedMetaData(const QString &) const { return QVariant(); }
     void setExtendedMetaData(const QString &, const QVariant &) {}
     QStringList availableExtendedMetaData() const { return QStringList(); }
 
 private:
-    QMap<QtMultimedia::MetaData, QVariant> m_metaData;
+    QMap<QtMediaServices::MetaData, QVariant> m_metaData;
 };
 
 class QtTestMediaService : public QMediaService
@@ -1156,25 +1156,25 @@ void tst_QDeclarativeAudio::status()
 void tst_QDeclarativeAudio::metaData_data()
 {
     QTest::addColumn<QByteArray>("propertyName");
-    QTest::addColumn<QtMultimedia::MetaData>("propertyKey");
+    QTest::addColumn<QtMediaServices::MetaData>("propertyKey");
     QTest::addColumn<QVariant>("value1");
     QTest::addColumn<QVariant>("value2");
 
     QTest::newRow("title")
             << QByteArray("title")
-            << QtMultimedia::Title
+            << QtMediaServices::Title
             << QVariant(QString::fromLatin1("This is a title"))
             << QVariant(QString::fromLatin1("This is another title"));
 
     QTest::newRow("genre")
             << QByteArray("genre")
-            << QtMultimedia::Genre
+            << QtMediaServices::Genre
             << QVariant(QString::fromLatin1("rock"))
             << QVariant(QString::fromLatin1("pop"));
 
     QTest::newRow("trackNumber")
             << QByteArray("trackNumber")
-            << QtMultimedia::TrackNumber
+            << QtMediaServices::TrackNumber
             << QVariant(8)
             << QVariant(12);
 }
@@ -1182,7 +1182,7 @@ void tst_QDeclarativeAudio::metaData_data()
 void tst_QDeclarativeAudio::metaData()
 {
     QFETCH(QByteArray, propertyName);
-    QFETCH(QtMultimedia::MetaData, propertyKey);
+    QFETCH(QtMediaServices::MetaData, propertyKey);
     QFETCH(QVariant, value1);
     QFETCH(QVariant, value2);
 
diff --git a/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp b/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp
index 0fbd78c..99b447a 100644
--- a/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp
+++ b/tests/auto/qdeclarativevideo/tst_qdeclarativevideo.cpp
@@ -45,11 +45,11 @@
 
 #include <QtGui/qapplication.h>
 #include <QtMultimedia/qabstractvideosurface.h>
-#include <QtMultimedia/qgraphicsvideoitem.h>
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
+#include <QtMediaServices/qgraphicsvideoitem.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 #include <QtMultimedia/qvideosurfaceformat.h>
 
 
@@ -73,7 +73,7 @@ private slots:
     void geometry();
 };
 
-Q_DECLARE_METATYPE(QtMultimedia::MetaData);
+Q_DECLARE_METATYPE(QtMediaServices::MetaData);
 Q_DECLARE_METATYPE(QDeclarativeVideo::Error);
 
 class QtTestMediaPlayerControl : public QMediaPlayerControl
diff --git a/tests/auto/qgraphicsvideoitem/tst_qgraphicsvideoitem.cpp b/tests/auto/qgraphicsvideoitem/tst_qgraphicsvideoitem.cpp
index 7fb6005..1815779 100644
--- a/tests/auto/qgraphicsvideoitem/tst_qgraphicsvideoitem.cpp
+++ b/tests/auto/qgraphicsvideoitem/tst_qgraphicsvideoitem.cpp
@@ -41,19 +41,19 @@
 
 #include <QtTest/QtTest>
 
-#include <QtMultimedia/qgraphicsvideoitem.h>
+#include <QtMediaServices/qgraphicsvideoitem.h>
 
 #include <QtGui/qapplication.h>
 #include <QtGui/qgraphicsscene.h>
 #include <QtGui/qgraphicsview.h>
 #include <QtMultimedia/qabstractvideosurface.h>
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 #include <QtMultimedia/qvideosurfaceformat.h>
 
-#include <QtMultimedia/private/qpaintervideosurface_p.h>
+#include <QtMediaServices/private/qpaintervideosurface_p.h>
 
 class tst_QGraphicsVideoItem : public QObject
 {
diff --git a/tests/auto/qmediacontent/tst_qmediacontent.cpp b/tests/auto/qmediacontent/tst_qmediacontent.cpp
index a0a9bdb..e33149a 100644
--- a/tests/auto/qmediacontent/tst_qmediacontent.cpp
+++ b/tests/auto/qmediacontent/tst_qmediacontent.cpp
@@ -41,7 +41,7 @@
 
 #include <QtTest/QtTest>
 
-#include <QtMultimedia/qmediacontent.h>
+#include <QtMediaServices/qmediacontent.h>
 
 
 class tst_QMediaContent : public QObject
diff --git a/tests/auto/qmediaobject/tst_qmediaobject.cpp b/tests/auto/qmediaobject/tst_qmediaobject.cpp
index 2128b35..5a2fdeb 100644
--- a/tests/auto/qmediaobject/tst_qmediaobject.cpp
+++ b/tests/auto/qmediaobject/tst_qmediaobject.cpp
@@ -43,9 +43,9 @@
 
 #include <QtCore/qtimer.h>
 
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmetadatacontrol.h>
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmetadatacontrol.h>
 
 
 class tst_QMediaObject : public QObject
@@ -93,13 +93,13 @@ public:
         if (m_available != available)
             emit metaDataAvailableChanged(m_available = available);
     }
-    QList<QtMultimedia::MetaData> availableMetaData() const { return m_data.keys(); }
+    QList<QtMediaServices::MetaData> availableMetaData() const { return m_data.keys(); }
 
     bool isWritable() const { return m_writable; }
     void setWritable(bool writable) { emit writableChanged(m_writable = writable); }
 
-    QVariant metaData(QtMultimedia::MetaData key) const { return m_data.value(key); }
-    void setMetaData(QtMultimedia::MetaData key, const QVariant &value) {
+    QVariant metaData(QtMediaServices::MetaData key) const { return m_data.value(key); }
+    void setMetaData(QtMediaServices::MetaData key, const QVariant &value) {
         m_data.insert(key, value); }
 
     QVariant extendedMetaData(const QString &key) const { return m_extendedData.value(key); }
@@ -117,7 +117,7 @@ public:
 
     bool m_available;
     bool m_writable;
-    QMap<QtMultimedia::MetaData, QVariant> m_data;
+    QMap<QtMediaServices::MetaData, QVariant> m_data;
     QMap<QString, QVariant> m_extendedData;
 };
 
@@ -376,12 +376,12 @@ void tst_QMediaObject::nullMetaDataControl()
     QCOMPARE(object.isMetaDataAvailable(), false);
     QCOMPARE(object.isMetaDataWritable(), false);
 
-    object.setMetaData(QtMultimedia::Title, title);
+    object.setMetaData(QtMediaServices::Title, title);
     object.setExtendedMetaData(titleKey, title);
 
-    QCOMPARE(object.metaData(QtMultimedia::Title).toString(), QString());
+    QCOMPARE(object.metaData(QtMediaServices::Title).toString(), QString());
     QCOMPARE(object.extendedMetaData(titleKey).toString(), QString());
-    QCOMPARE(object.availableMetaData(), QList<QtMultimedia::MetaData>());
+    QCOMPARE(object.availableMetaData(), QList<QtMediaServices::MetaData>());
     QCOMPARE(object.availableExtendedMetaData(), QStringList());
     QCOMPARE(spy.count(), 0);
 }
@@ -470,18 +470,18 @@ void tst_QMediaObject::metaData()
     QtTestMediaObject object(&service);
     QVERIFY(object.availableMetaData().isEmpty());
 
-    service.metaData.m_data.insert(QtMultimedia::AlbumArtist, artist);
-    service.metaData.m_data.insert(QtMultimedia::Title, title);
-    service.metaData.m_data.insert(QtMultimedia::Genre, genre);
+    service.metaData.m_data.insert(QtMediaServices::AlbumArtist, artist);
+    service.metaData.m_data.insert(QtMediaServices::Title, title);
+    service.metaData.m_data.insert(QtMediaServices::Genre, genre);
 
-    QCOMPARE(object.metaData(QtMultimedia::AlbumArtist).toString(), artist);
-    QCOMPARE(object.metaData(QtMultimedia::Title).toString(), title);
+    QCOMPARE(object.metaData(QtMediaServices::AlbumArtist).toString(), artist);
+    QCOMPARE(object.metaData(QtMediaServices::Title).toString(), title);
 
-    QList<QtMultimedia::MetaData> metaDataKeys = object.availableMetaData();
+    QList<QtMediaServices::MetaData> metaDataKeys = object.availableMetaData();
     QCOMPARE(metaDataKeys.size(), 3);
-    QVERIFY(metaDataKeys.contains(QtMultimedia::AlbumArtist));
-    QVERIFY(metaDataKeys.contains(QtMultimedia::Title));
-    QVERIFY(metaDataKeys.contains(QtMultimedia::Genre));
+    QVERIFY(metaDataKeys.contains(QtMediaServices::AlbumArtist));
+    QVERIFY(metaDataKeys.contains(QtMediaServices::Title));
+    QVERIFY(metaDataKeys.contains(QtMediaServices::Genre));
 }
 
 void tst_QMediaObject::setMetaData_data()
@@ -501,9 +501,9 @@ void tst_QMediaObject::setMetaData()
 
     QtTestMediaObject object(&service);
 
-    object.setMetaData(QtMultimedia::Title, title);
-    QCOMPARE(object.metaData(QtMultimedia::Title).toString(), title);
-    QCOMPARE(service.metaData.m_data.value(QtMultimedia::Title).toString(), title);
+    object.setMetaData(QtMediaServices::Title, title);
+    QCOMPARE(object.metaData(QtMediaServices::Title).toString(), title);
+    QCOMPARE(service.metaData.m_data.value(QtMediaServices::Title).toString(), title);
 }
 
 void tst_QMediaObject::extendedMetaData()
diff --git a/tests/auto/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/qmediaplayer/tst_qmediaplayer.cpp
index a96e08d..9a597e2 100644
--- a/tests/auto/qmediaplayer/tst_qmediaplayer.cpp
+++ b/tests/auto/qmediaplayer/tst_qmediaplayer.cpp
@@ -43,10 +43,10 @@
 #include <QtCore/qdebug.h>
 #include <QtCore/qbuffer.h>
 
-#include <QtMultimedia/qmediaplayer.h>
-#include <QtMultimedia/qmediaplayercontrol.h>
-#include <QtMultimedia/qmediaplaylist.h>
-#include <QtMultimedia/qmediaservice.h>
+#include <QtMediaServices/qmediaplayer.h>
+#include <QtMediaServices/qmediaplayercontrol.h>
+#include <QtMediaServices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaservice.h>
 
 
 
diff --git a/tests/auto/qmediaplaylist/tst_qmediaplaylist.cpp b/tests/auto/qmediaplaylist/tst_qmediaplaylist.cpp
index 383a407..1037f37 100644
--- a/tests/auto/qmediaplaylist/tst_qmediaplaylist.cpp
+++ b/tests/auto/qmediaplaylist/tst_qmediaplaylist.cpp
@@ -41,11 +41,11 @@
 
 #include <QtTest/QtTest>
 #include <QDebug>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaplaylist.h>
-#include <QtMultimedia/qmediaplaylistcontrol.h>
-#include <QtMultimedia/qmediaplaylistnavigator.h>
-#include <QtMultimedia/private/qmediapluginloader_p.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediaplaylist.h>
+#include <QtMediaServices/qmediaplaylistcontrol.h>
+#include <QtMediaServices/qmediaplaylistnavigator.h>
+#include <QtMediaServices/private/qmediapluginloader_p.h>
 
 
 class MockReadOnlyPlaylistProvider : public QMediaPlaylistProvider
diff --git a/tests/auto/qmediaplaylistnavigator/tst_qmediaplaylistnavigator.cpp b/tests/auto/qmediaplaylistnavigator/tst_qmediaplaylistnavigator.cpp
index 9130db0..04f736c 100644
--- a/tests/auto/qmediaplaylistnavigator/tst_qmediaplaylistnavigator.cpp
+++ b/tests/auto/qmediaplaylistnavigator/tst_qmediaplaylistnavigator.cpp
@@ -41,8 +41,8 @@
 
 #include <QtTest/QtTest>
 #include <QDebug>
-#include <QtMultimedia/qlocalmediaplaylistprovider.h>
-#include <QtMultimedia/qmediaplaylistnavigator.h>
+#include <QtMediaServices/qlocalmediaplaylistprovider.h>
+#include <QtMediaServices/qmediaplaylistnavigator.h>
 
 
 class tst_QMediaPlaylistNavigator : public QObject
diff --git a/tests/auto/qmediapluginloader/tst_qmediapluginloader.cpp b/tests/auto/qmediapluginloader/tst_qmediapluginloader.cpp
index 0d35b05..001e68a 100644
--- a/tests/auto/qmediapluginloader/tst_qmediapluginloader.cpp
+++ b/tests/auto/qmediapluginloader/tst_qmediapluginloader.cpp
@@ -42,8 +42,8 @@
 #include <QtTest/QtTest>
 #include <QDebug>
 
-#include <QtMultimedia/private/qmediapluginloader_p.h>
-#include <QtMultimedia/qmediaserviceproviderplugin.h>
+#include <QtMediaServices/private/qmediapluginloader_p.h>
+#include <QtMediaServices/qmediaserviceproviderplugin.h>
 
 
 
diff --git a/tests/auto/qmediaresource/tst_qmediaresource.cpp b/tests/auto/qmediaresource/tst_qmediaresource.cpp
index 546c415..984cfef 100644
--- a/tests/auto/qmediaresource/tst_qmediaresource.cpp
+++ b/tests/auto/qmediaresource/tst_qmediaresource.cpp
@@ -41,7 +41,7 @@
 
 #include <QtTest/QtTest>
 
-#include <QtMultimedia/qmediaresource.h>
+#include <QtMediaServices/qmediaresource.h>
 
 
 class tst_QMediaResource : public QObject
diff --git a/tests/auto/qmediaservice/tst_qmediaservice.cpp b/tests/auto/qmediaservice/tst_qmediaservice.cpp
index a0cb69d..a544e77 100644
--- a/tests/auto/qmediaservice/tst_qmediaservice.cpp
+++ b/tests/auto/qmediaservice/tst_qmediaservice.cpp
@@ -41,9 +41,9 @@
 
 #include <QtTest/QtTest>
 
-#include <QtMultimedia/qvideodevicecontrol.h>
-#include <QtMultimedia/qmediacontrol.h>
-#include <QtMultimedia/qmediaservice.h>
+#include <QtMediaServices/qvideodevicecontrol.h>
+#include <QtMediaServices/qmediacontrol.h>
+#include <QtMediaServices/qmediaservice.h>
 
 #include <QtGui/qapplication.h>
 #include <QtGui/qstyle.h>
diff --git a/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp b/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp
index 06a8f60..64abedb 100644
--- a/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp
+++ b/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp
@@ -43,12 +43,12 @@
 #include <QDebug>
 #include <QStringList>
 
-#include <QtMultimedia/qmediaserviceprovider.h>
-#include <QtMultimedia/qmediaserviceproviderplugin.h>
-#include <QtMultimedia/private/qmediapluginloader_p.h>
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediaplayer.h>
+#include <QtMediaServices/qmediaserviceprovider.h>
+#include <QtMediaServices/qmediaserviceproviderplugin.h>
+#include <QtMediaServices/private/qmediapluginloader_p.h>
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/qmediaplayer.h>
 
 class MockMediaService : public QMediaService
 {
@@ -88,16 +88,16 @@ public:
         delete service;
     }
 
-    QtMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
+    QtMediaServices::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
     {        
         if (codecs.contains(QLatin1String("mpeg4")))
-            return QtMultimedia::NotSupported;
+            return QtMediaServices::NotSupported;
 
         if (mimeType == "audio/ogg") {            
-            return QtMultimedia::ProbablySupported;
+            return QtMediaServices::ProbablySupported;
         }
 
-        return QtMultimedia::MaybeSupported;
+        return QtMediaServices::MaybeSupported;
     }
 
     QStringList supportedMimeTypes() const
@@ -147,14 +147,14 @@ public:
         delete service;
     }
 
-    QtMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
+    QtMediaServices::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
     {
         Q_UNUSED(codecs);
 
         if (mimeType == "audio/wav")
-            return QtMultimedia::PreferredService;
+            return QtMediaServices::PreferredService;
 
-        return QtMultimedia::NotSupported;
+        return QtMediaServices::NotSupported;
     }
 
     QStringList supportedMimeTypes() const
@@ -239,15 +239,15 @@ public:
         delete service;
     }
 
-    QtMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
+    QtMediaServices::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
     {
         if (codecs.contains(QLatin1String("jpeg2000")))
-            return QtMultimedia::NotSupported;
+            return QtMediaServices::NotSupported;
 
         if (supportedMimeTypes().contains(mimeType))
-            return QtMultimedia::ProbablySupported;
+            return QtMediaServices::ProbablySupported;
 
-        return QtMultimedia::MaybeSupported;
+        return QtMediaServices::MaybeSupported;
     }
 
     QStringList supportedMimeTypes() const
@@ -334,7 +334,7 @@ void tst_QMediaServiceProvider::testHasSupport()
 {
     MockMediaServiceProvider mockProvider;
     QCOMPARE(mockProvider.hasSupport(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER), "video/ogv", QStringList()),
-             QtMultimedia::MaybeSupported);
+             QtMediaServices::MaybeSupported);
 
     QMediaServiceProvider *provider = QMediaServiceProvider::defaultServiceProvider();
 
@@ -342,44 +342,44 @@ void tst_QMediaServiceProvider::testHasSupport()
         QSKIP("No default provider", SkipSingle);
 
     QCOMPARE(provider->hasSupport(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER), "video/ogv", QStringList()),
-             QtMultimedia::MaybeSupported);
+             QtMediaServices::MaybeSupported);
 
     QCOMPARE(provider->hasSupport(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER), "audio/ogg", QStringList()),
-             QtMultimedia::ProbablySupported);
+             QtMediaServices::ProbablySupported);
 
     //while the service returns PreferredService, provider should return ProbablySupported
     QCOMPARE(provider->hasSupport(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER), "audio/wav", QStringList()),
-             QtMultimedia::ProbablySupported);
+             QtMediaServices::ProbablySupported);
 
     //even while all the plugins with "hasSupport" returned NotSupported,
     //MockServicePlugin3 has no "hasSupport" interface, so MaybeSupported
     QCOMPARE(provider->hasSupport(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER), "video/avi",
                                   QStringList() << "mpeg4"),
-             QtMultimedia::MaybeSupported);
+             QtMediaServices::MaybeSupported);
 
     QCOMPARE(provider->hasSupport(QByteArray("non existing service"), "video/ogv", QStringList()),
-             QtMultimedia::NotSupported);
+             QtMediaServices::NotSupported);
 
-    QCOMPARE(QMediaPlayer::hasSupport("video/ogv"), QtMultimedia::MaybeSupported);    
-    QCOMPARE(QMediaPlayer::hasSupport("audio/ogg"), QtMultimedia::ProbablySupported);
-    QCOMPARE(QMediaPlayer::hasSupport("audio/wav"), QtMultimedia::ProbablySupported);
+    QCOMPARE(QMediaPlayer::hasSupport("video/ogv"), QtMediaServices::MaybeSupported);    
+    QCOMPARE(QMediaPlayer::hasSupport("audio/ogg"), QtMediaServices::ProbablySupported);
+    QCOMPARE(QMediaPlayer::hasSupport("audio/wav"), QtMediaServices::ProbablySupported);
 
     //test low latency flag support
     QCOMPARE(QMediaPlayer::hasSupport("audio/wav", QStringList(), QMediaPlayer::LowLatency),
-             QtMultimedia::ProbablySupported);
+             QtMediaServices::ProbablySupported);
     //plugin1 probably supports audio/ogg, it checked because it doesn't provide features iface
     QCOMPARE(QMediaPlayer::hasSupport("audio/ogg", QStringList(), QMediaPlayer::LowLatency),
-             QtMultimedia::ProbablySupported);
+             QtMediaServices::ProbablySupported);
     //Plugin4 is not checked here, sine it's known not support low latency
     QCOMPARE(QMediaPlayer::hasSupport("video/quicktime", QStringList(), QMediaPlayer::LowLatency),
-             QtMultimedia::MaybeSupported);
+             QtMediaServices::MaybeSupported);
 
     //test streaming flag support
     QCOMPARE(QMediaPlayer::hasSupport("video/quicktime", QStringList(), QMediaPlayer::StreamPlayback),
-             QtMultimedia::ProbablySupported);
+             QtMediaServices::ProbablySupported);
     //Plugin2 is not checked here, sine it's known not support streaming
     QCOMPARE(QMediaPlayer::hasSupport("audio/wav", QStringList(), QMediaPlayer::StreamPlayback),
-             QtMultimedia::MaybeSupported);
+             QtMediaServices::MaybeSupported);
 
     //ensure the correct media player plugin is choosen for mime type
     QMediaPlayer simplePlayer(0, QMediaPlayer::LowLatency);
diff --git a/tests/auto/qmediatimerange/qmediatimerange.pro b/tests/auto/qmediatimerange/qmediatimerange.pro
index 98c415b..c5e74ce 100644
--- a/tests/auto/qmediatimerange/qmediatimerange.pro
+++ b/tests/auto/qmediatimerange/qmediatimerange.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qmediatimerange.cpp
 
-QT = core media 
+QT = core mediaservices
 
diff --git a/tests/auto/qmediatimerange/tst_qmediatimerange.cpp b/tests/auto/qmediatimerange/tst_qmediatimerange.cpp
index 54de3f1..a21abe2 100644
--- a/tests/auto/qmediatimerange/tst_qmediatimerange.cpp
+++ b/tests/auto/qmediatimerange/tst_qmediatimerange.cpp
@@ -42,7 +42,7 @@
 #include <QtTest/QtTest>
 #include <QtCore/qdebug.h>
 
-#include <QtMultimedia/qmediatimerange.h>
+#include <QtMediaServices/qmediatimerange.h>
 
 class tst_QMediaTimeRange: public QObject
 {
diff --git a/tests/auto/qsoundeffect/qsoundeffect.pro b/tests/auto/qsoundeffect/qsoundeffect.pro
index 4ed7407..5344a16 100644
--- a/tests/auto/qsoundeffect/qsoundeffect.pro
+++ b/tests/auto/qsoundeffect/qsoundeffect.pro
@@ -2,7 +2,7 @@ load(qttest_p4)
 
 SOURCES += tst_qsoundeffect.cpp
 
-QT = core media
+QT = core multimedia mediaservices
 
 wince* {
     deploy.sources += 4.wav
diff --git a/tests/auto/qvideowidget/qvideowidget.pro b/tests/auto/qvideowidget/qvideowidget.pro
index fde9030..d6facb9 100644
--- a/tests/auto/qvideowidget/qvideowidget.pro
+++ b/tests/auto/qvideowidget/qvideowidget.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qvideowidget.cpp
 
-QT = core gui media
+QT = core gui mediaservices
 
diff --git a/tests/auto/qvideowidget/tst_qvideowidget.cpp b/tests/auto/qvideowidget/tst_qvideowidget.cpp
index f1eef50..32a4e7c 100644
--- a/tests/auto/qvideowidget/tst_qvideowidget.cpp
+++ b/tests/auto/qvideowidget/tst_qvideowidget.cpp
@@ -41,15 +41,15 @@
 
 #include <QtTest/QtTest>
 
-#include <QtMultimedia/qvideowidget.h>
-
-#include <QtMultimedia/qmediaobject.h>
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/private/qpaintervideosurface_p.h>
-#include <QtMultimedia/qvideooutputcontrol.h>
-#include <QtMultimedia/qvideowindowcontrol.h>
-#include <QtMultimedia/qvideowidgetcontrol.h>
-#include <QtMultimedia/qvideorenderercontrol.h>
+#include <QtMediaServices/qvideowidget.h>
+
+#include <QtMediaServices/qmediaobject.h>
+#include <QtMediaServices/qmediaservice.h>
+#include <QtMediaServices/private/qpaintervideosurface_p.h>
+#include <QtMediaServices/qvideooutputcontrol.h>
+#include <QtMediaServices/qvideowindowcontrol.h>
+#include <QtMediaServices/qvideowidgetcontrol.h>
+#include <QtMediaServices/qvideorenderercontrol.h>
 #include <QtMultimedia/qabstractvideosurface.h>
 #include <QtMultimedia/qvideosurfaceformat.h>
 
-- 
cgit v0.12


From 42b71bbe23eaed2a097c25f325713c453ae45c48 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Mon, 19 Apr 2010 12:50:01 +1000
Subject: Fixed QVideoWidget test, waiting for video surface painted.

It's not always sufficient just to call
QCoreApplication::processEvents(QEventLoop::AllEvents)
to ensure update is processed (at least on mac),
so wait for some time until the video frame is rendered.

Reviewed-by: Kurt Korbatits
---
 tests/auto/qvideowidget/tst_qvideowidget.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tests/auto/qvideowidget/tst_qvideowidget.cpp b/tests/auto/qvideowidget/tst_qvideowidget.cpp
index 32a4e7c..8a54789 100644
--- a/tests/auto/qvideowidget/tst_qvideowidget.cpp
+++ b/tests/auto/qvideowidget/tst_qvideowidget.cpp
@@ -1589,7 +1589,9 @@ void tst_QVideoWidget::paintRendererControl()
     QCOMPARE(surface->isActive(), true);
     QCOMPARE(surface->isReady(), false);
 
-    QCoreApplication::processEvents(QEventLoop::AllEvents);
+    //wait up to 2 seconds for the frame to be presented
+    for (int i=0; i<200 && !surface->isReady(); i++)
+        QTest::qWait(10);
 
     QCOMPARE(surface->isActive(), true);
     QCOMPARE(surface->isReady(), true);
-- 
cgit v0.12


From 2b37eeac9bc9afa30d4f6e772f29ee9e963effd5 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Mon, 19 Apr 2010 15:28:25 +1000
Subject: Fixed typo in QMediaPlayer::play() error reporting

Parameters to invokeMethod were omitted,
so error was not reported.

Reviewed-by: Justin McPherson
---
 src/multimedia/mediaservices/playback/qmediaplayer.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/multimedia/mediaservices/playback/qmediaplayer.cpp b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
index e91a64c..90e64c1 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayer.cpp
+++ b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
@@ -56,7 +56,7 @@
 #include <QtMediaServices/qvideowidget.h>
 #include <QtMediaServices/qgraphicsvideoitem.h>
 
-//#define DEBUG_PLAYER_STATE
+#define DEBUG_PLAYER_STATE
 
 QT_BEGIN_HEADER
 
@@ -491,9 +491,9 @@ void QMediaPlayer::play()
     Q_D(QMediaPlayer);
 
     if (d->control == 0) {
-        QMetaObject::invokeMethod(this, "_q_error", Qt::QueuedConnection);
+        QMetaObject::invokeMethod(this, "_q_error", Qt::QueuedConnection,
                                     Q_ARG(int, QMediaPlayer::ServiceMissingError),
-                                    Q_ARG(QString, tr("The QMediaPlayer object does not have a valid service"));
+                                    Q_ARG(QString, tr("The QMediaPlayer object does not have a valid service")));
         return;
     }
 
-- 
cgit v0.12


From ec4591334476d4fe7663c6e6fe1659138ea233fe Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Mon, 19 Apr 2010 15:37:45 +1000
Subject: Disabled QMediaPlayer states debug output.

It was enabled accidentally.

Reviewed-by: trustme
---
 src/multimedia/mediaservices/playback/qmediaplayer.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/multimedia/mediaservices/playback/qmediaplayer.cpp b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
index 90e64c1..ca1f250 100644
--- a/src/multimedia/mediaservices/playback/qmediaplayer.cpp
+++ b/src/multimedia/mediaservices/playback/qmediaplayer.cpp
@@ -56,7 +56,7 @@
 #include <QtMediaServices/qvideowidget.h>
 #include <QtMediaServices/qgraphicsvideoitem.h>
 
-#define DEBUG_PLAYER_STATE
+//#define DEBUG_PLAYER_STATE
 
 QT_BEGIN_HEADER
 
-- 
cgit v0.12


From 115ecbea664e9f3b213f0d9244ea023a1623d94e Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Tue, 20 Apr 2010 09:28:02 +1000
Subject: Multimedia tests; fix for missing dependency

Reviewed-by: Andrew den Exter
---
 tests/auto/qdeclarativevideo/qdeclarativevideo.pro   | 2 +-
 tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro | 2 +-
 tests/auto/qvideowidget/qvideowidget.pro             | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
index c2bcdfe..64a20da 100644
--- a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
+++ b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro
@@ -11,4 +11,4 @@ SOURCES += \
         $$PWD/../../../src/imports/multimedia/qdeclarativemediabase.cpp \
         $$PWD/../../../src/imports/multimedia/qmetadatacontrolmetaobject.cpp
 
-QT += mediaservices declarative
+QT += multimedia mediaservices declarative
diff --git a/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro b/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro
index 60e1933..b57e8e3 100644
--- a/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro
+++ b/tests/auto/qgraphicsvideoitem/qgraphicsvideoitem.pro
@@ -1,5 +1,5 @@
 load(qttest_p4)
 SOURCES += tst_qgraphicsvideoitem.cpp
 
-QT += mediaservices
+QT += multimedia mediaservices
 requires(contains(QT_CONFIG, mediaservices))
diff --git a/tests/auto/qvideowidget/qvideowidget.pro b/tests/auto/qvideowidget/qvideowidget.pro
index d6facb9..12686f3 100644
--- a/tests/auto/qvideowidget/qvideowidget.pro
+++ b/tests/auto/qvideowidget/qvideowidget.pro
@@ -2,5 +2,5 @@ load(qttest_p4)
 
 SOURCES = tst_qvideowidget.cpp
 
-QT = core gui mediaservices
+QT = core gui multimedia mediaservices
 
-- 
cgit v0.12


From 58d509da551595d2a3e49de9f8b01b0206723d01 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Tue, 20 Apr 2010 10:22:09 +1000
Subject: Fixed Qt build with mediaservices disabled.

Disabled decalarative multimedia module and the player demo
if qt is build without mediaservices.

Reviewed-by: Kurt Korbatits
---
 demos/multimedia/multimedia.pro | 3 +--
 src/imports/imports.pro         | 2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/demos/multimedia/multimedia.pro b/demos/multimedia/multimedia.pro
index 042650f..fa29a12 100644
--- a/demos/multimedia/multimedia.pro
+++ b/demos/multimedia/multimedia.pro
@@ -1,4 +1,3 @@
 TEMPLATE = subdirs
-SUBDIRS = player
-
+contains(QT_CONFIG, mediaservices): SUBDIRS = player
 
diff --git a/src/imports/imports.pro b/src/imports/imports.pro
index 3886f5c..ecde0cc 100644
--- a/src/imports/imports.pro
+++ b/src/imports/imports.pro
@@ -3,5 +3,5 @@ TEMPLATE = subdirs
 SUBDIRS += widgets particles
 
 contains(QT_CONFIG, webkit): SUBDIRS += webkit
-contains(QT_CONFIG, multimedia): SUBDIRS += multimedia
+contains(QT_CONFIG, mediaservices): SUBDIRS += multimedia
 
-- 
cgit v0.12


From 537594d794c9e5eb379e4a099781b4857e91cd68 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Tue, 20 Apr 2010 12:00:48 +1000
Subject: QT7 mediaservice; fix leaking strings.

Reviewed-by: Dmytro Poplavskiy
---
 .../mediaservices/qt7/mediaplayer/qt7playersession.mm     | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
index 024f7b0..0405bbd 100644
--- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
+++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm
@@ -153,10 +153,9 @@
 
 QT_BEGIN_NAMESPACE
 
-static CFStringRef qString2CFStringRef(const QString &string)
+static inline NSString *qString2CFStringRef(const QString &string)
 {
-    return CFStringCreateWithCharacters(0, reinterpret_cast<const UniChar *>(string.unicode()),
-                                        string.length());
+    return [NSString stringWithCharacters:reinterpret_cast<const UniChar *>(string.unicode()) length:string.length()];
 }
 
 QT7PlayerSession::QT7PlayerSession(QObject *parent)
@@ -391,10 +390,10 @@ void QT7PlayerSession::setMedia(const QMediaContent &content, QIODevice *stream)
 
         foreach (const QNetworkCookie &requestCookie, cookieList) {
             NSMutableDictionary *p = [NSMutableDictionary dictionaryWithObjectsAndKeys:
-                               (NSString*)qString2CFStringRef(requestCookie.name()), NSHTTPCookieName,
-                               (NSString*)qString2CFStringRef(requestCookie.value()), NSHTTPCookieValue,
-                               (NSString*)qString2CFStringRef(requestCookie.domain()), NSHTTPCookieDomain,
-                               (NSString*)qString2CFStringRef(requestCookie.path()), NSHTTPCookiePath,
+                               qString2CFStringRef(requestCookie.name()), NSHTTPCookieName,
+                               qString2CFStringRef(requestCookie.value()), NSHTTPCookieValue,
+                               qString2CFStringRef(requestCookie.domain()), NSHTTPCookieDomain,
+                               qString2CFStringRef(requestCookie.path()), NSHTTPCookiePath,
                                nil
                                ];
             if (requestCookie.isSessionCookie())
@@ -407,7 +406,7 @@ void QT7PlayerSession::setMedia(const QMediaContent &content, QIODevice *stream)
     }
 
     NSError *err = 0;
-    NSString *urlString = (NSString *)qString2CFStringRef(request.url().toString());
+    NSString *urlString = qString2CFStringRef(request.url().toString());
 
     NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSURL URLWithString:urlString], QTMovieURLAttribute,
-- 
cgit v0.12


From 84c0fb3a16a36704631738e98cac3f1a90330647 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Wed, 21 Apr 2010 11:31:35 +1000
Subject: Gstreamer media backend: preserve playback rate after seeks and media
 changes.

Reviewed-by: Andrew den Exter
---
 .../gstreamer/mediaplayer/qgstreamerplayersession.cpp | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index 724a595..6a44aa1 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -182,7 +182,7 @@ void QGstreamerPlayerSession::setPlaybackRate(qreal rate)
         m_playbackRate = rate;
         if (m_playbin) {
             gst_element_seek(m_playbin, rate, GST_FORMAT_TIME,
-                             GstSeekFlags(GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SEGMENT),
+                             GstSeekFlags(GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH),
                              GST_SEEK_TYPE_NONE,0,
                              GST_SEEK_TYPE_NONE,0 );
         }
@@ -464,8 +464,16 @@ bool QGstreamerPlayerSession::seek(qint64 ms)
 {
     //seek locks when the video output sink is changing and pad is blocked
     if (m_playbin && !m_pendingVideoSink && m_state != QMediaPlayer::StoppedState) {
+
         gint64  position = qMax(ms,qint64(0)) * 1000000;
-        return gst_element_seek_simple(m_playbin, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, position);
+        return gst_element_seek(m_playbin,
+                                m_playbackRate,
+                                GST_FORMAT_TIME,
+                                GstSeekFlags(GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH),
+                                GST_SEEK_TYPE_SET,
+                                position,
+                                GST_SEEK_TYPE_NONE,
+                                0);
     }
 
     return false;
@@ -666,8 +674,11 @@ void QGstreamerPlayerSession::busMessage(const QGstreamerMessage &message)
 
                             setSeekable(true);
 
-                            if (!qFuzzyCompare(m_playbackRate, qreal(1.0)))
-                                setPlaybackRate(m_playbackRate);
+                            if (!qFuzzyCompare(m_playbackRate, qreal(1.0))) {
+                                qreal rate = m_playbackRate;
+                                m_playbackRate = 1.0;
+                                setPlaybackRate(rate);
+                            }
 
                             if (m_renderer)
                                 m_renderer->precessNewStream();
-- 
cgit v0.12


From 4819ac8dd5b8699e09fd783ba4795746a0a44839 Mon Sep 17 00:00:00 2001
From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Date: Wed, 21 Apr 2010 12:03:49 +1000
Subject: Player demo: load not only local files but playlists and urls passed
 as command line arguments.

Reviewed-by: Andrew den Exter
---
 demos/multimedia/player/player.cpp | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/demos/multimedia/player/player.cpp b/demos/multimedia/player/player.cpp
index 6ba19fd..bf314ee 100644
--- a/demos/multimedia/player/player.cpp
+++ b/demos/multimedia/player/player.cpp
@@ -171,11 +171,22 @@ Player::Player(QWidget *parent)
 
     metaDataChanged();
 
-    QStringList fileNames = qApp->arguments();
-    fileNames.removeAt(0);
-    foreach (QString const &fileName, fileNames) {
-        if (QFileInfo(fileName).exists())
-            playlist->addMedia(QUrl::fromLocalFile(fileName));
+    QStringList arguments = qApp->arguments();
+    arguments.removeAt(0);
+    foreach (QString const &argument, arguments) {
+        QFileInfo fileInfo(argument);
+        if (fileInfo.exists()) {
+            QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
+            if (fileInfo.suffix().toLower() == QLatin1String("m3u")) {
+                playlist->load(url);
+            } else
+                playlist->addMedia(url);
+        } else {
+            QUrl url(argument);
+            if (url.isValid()) {
+                playlist->addMedia(url);
+            }
+        }
     }
 }
 
-- 
cgit v0.12


From 3db4e4467a30086881a030afa0c45a4ed87ad41d Mon Sep 17 00:00:00 2001
From: Kurt Korbatits <kurt.korbatits@nokia.com>
Date: Wed, 21 Apr 2010 12:53:21 +1000
Subject: Multimedia causes build failure when Qt is configured with -embedded
 -qconfig minimal

Task-number:QTBUG-9960
Reviewed-by:Dmytro Poplavskiy
---
 .../multimedia/audio/qaudiodevicefactory.cpp         | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
index 4f45110..74add64 100644
--- a/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
+++ b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
@@ -67,9 +67,10 @@
 
 QT_BEGIN_NAMESPACE
 
+#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
 Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
         (QAudioEngineFactoryInterface_iid, QLatin1String("/audio"), Qt::CaseInsensitive))
-
+#endif
 
 class QNullDeviceInfo : public QAbstractAudioDeviceInfo
 {
@@ -137,6 +138,8 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
         devices << QAudioDeviceInfo(QLatin1String("builtin"), handle, mode);
 #endif
 #endif
+
+#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
     QFactoryLoader* l = loader();
 
     foreach (QString const& key, l->keys()) {
@@ -148,12 +151,14 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
 
         delete plugin;
     }
+#endif
 
     return devices;
 }
 
 QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
 {
+#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
     QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
 
     if (plugin) {
@@ -161,6 +166,8 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
         if (list.size() > 0)
             return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioInput);
     }
+#endif
+
 #ifndef QT_NO_AUDIO_BACKEND
 #if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultInputDevice(), QAudio::AudioInput);
@@ -171,6 +178,7 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
 
 QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
 {
+#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
     QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
 
     if (plugin) {
@@ -178,6 +186,8 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
         if (list.size() > 0)
             return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioOutput);
     }
+#endif
+
 #ifndef QT_NO_AUDIO_BACKEND
 #if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultOutputDevice(), QAudio::AudioOutput);
@@ -196,11 +206,14 @@ QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &re
         return new QAudioDeviceInfoInternal(handle, mode);
 #endif
 #endif
+
+#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
     QAudioEngineFactoryInterface* plugin =
         qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(realm));
 
     if (plugin)
         rc = plugin->createDeviceInfo(handle, mode);
+#endif
 
     return rc == 0 ? new QNullDeviceInfo() : rc;
 }
@@ -225,11 +238,13 @@ QAbstractAudioInput* QAudioDeviceFactory::createInputDevice(QAudioDeviceInfo con
         return new QAudioInputPrivate(deviceInfo.handle(), format);
 #endif
 #endif
+#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
     QAudioEngineFactoryInterface* plugin =
         qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
 
     if (plugin)
         return plugin->createInput(deviceInfo.handle(), format);
+#endif
 
     return new QNullInputDevice();
 }
@@ -244,11 +259,14 @@ QAbstractAudioOutput* QAudioDeviceFactory::createOutputDevice(QAudioDeviceInfo c
         return new QAudioOutputPrivate(deviceInfo.handle(), format);
 #endif
 #endif
+
+#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
     QAudioEngineFactoryInterface* plugin =
         qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
 
     if (plugin)
         return plugin->createOutput(deviceInfo.handle(), format);
+#endif
 
     return new QNullOutputDevice();
 }
-- 
cgit v0.12


From 6b30ee9d2219308605e0d1b15ea1c74dc5cb67fe Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Wed, 21 Apr 2010 14:12:06 +1000
Subject: Only add qvideowidget test once.

Reviewed-by: Andrew den Exter
---
 tests/auto/multimedia.pro | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/tests/auto/multimedia.pro b/tests/auto/multimedia.pro
index 876b932..0a89f53 100644
--- a/tests/auto/multimedia.pro
+++ b/tests/auto/multimedia.pro
@@ -7,6 +7,5 @@ SUBDIRS=\
     qaudioinput \
     qaudiooutput \
     qvideoframe \
-    qvideosurfaceformat \
-    qvideowidget
+    qvideosurfaceformat
 
-- 
cgit v0.12


From cd601ef53385962c4affdb2020cfcb415d117bc1 Mon Sep 17 00:00:00 2001
From: Martin Petersson <martin.petersson@nokia.com>
Date: Wed, 3 Mar 2010 18:18:09 +0100
Subject: Add support for MSBuild, which is the project format for MSVC 2010

Reviewed-by: Marius SO
---
 examples/script/qstetrix/qstetrix.pro          |    1 -
 examples/xmlpatterns/recipes/recipes.qrc       |    1 -
 qmake/Makefile.win32                           |   14 +-
 qmake/generators/metamakefile.cpp              |    7 +
 qmake/generators/win32/msbuild_objectmodel.cpp | 3317 ++++++++++++++++++++++++
 qmake/generators/win32/msbuild_objectmodel.h   |  708 +++++
 qmake/generators/win32/msvc_objectmodel.cpp    |    1 +
 qmake/generators/win32/msvc_objectmodel.h      |    5 +-
 qmake/generators/win32/msvc_vcproj.cpp         |   15 +-
 qmake/generators/win32/msvc_vcproj.h           |    5 +-
 qmake/generators/win32/msvc_vcxproj.cpp        |  851 ++++++
 qmake/generators/win32/msvc_vcxproj.h          |  100 +
 qmake/generators/xmloutput.cpp                 |   42 +-
 qmake/generators/xmloutput.h                   |   34 +
 qmake/qmake.pro                                |    3 +-
 tools/configure/configureapp.cpp               |    5 +-
 tools/configure/environment.cpp                |    4 +
 tools/configure/environment.h                  |    3 +-
 18 files changed, 5099 insertions(+), 17 deletions(-)
 create mode 100644 qmake/generators/win32/msbuild_objectmodel.cpp
 create mode 100644 qmake/generators/win32/msbuild_objectmodel.h
 create mode 100644 qmake/generators/win32/msvc_vcxproj.cpp
 create mode 100644 qmake/generators/win32/msvc_vcxproj.h

diff --git a/examples/script/qstetrix/qstetrix.pro b/examples/script/qstetrix/qstetrix.pro
index 3db66ab..65d5a67 100644
--- a/examples/script/qstetrix/qstetrix.pro
+++ b/examples/script/qstetrix/qstetrix.pro
@@ -5,7 +5,6 @@ HEADERS = tetrixboard.h
 SOURCES = main.cpp \
 	  tetrixboard.cpp
 
-FORMS   = tetrixwindow.ui
 RESOURCES = tetrix.qrc
 
 contains(QT_CONFIG, scripttools): QT += scripttools
diff --git a/examples/xmlpatterns/recipes/recipes.qrc b/examples/xmlpatterns/recipes/recipes.qrc
index 2f375ee..65b6615 100644
--- a/examples/xmlpatterns/recipes/recipes.qrc
+++ b/examples/xmlpatterns/recipes/recipes.qrc
@@ -1,6 +1,5 @@
 <!DOCTYPE RCC><RCC version="1.0">
 <qresource>
-    <file>forms/querywidget.ui</file>
     <file>files/cookbook.xml</file>
     <file>files/allRecipes.xq</file>
     <file>files/liquidIngredientsInSoup.xq</file>
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32
index 63156b3..956fa9c 100644
--- a/qmake/Makefile.win32
+++ b/qmake/Makefile.win32
@@ -1,4 +1,4 @@
-!IF "$(QMAKESPEC)" == "win32-msvc" || "$(QMAKESPEC)" == "win32-msvc.net" || "$(QMAKESPEC)" == "win32-msvc2002" || "$(QMAKESPEC)" == "win32-msvc2003" || "$(QMAKESPEC)" == "win32-msvc2005" || "$(QMAKESPEC)" == "win32-msvc2008" || "$(QMAKESPEC)" == "win32-icc"
+!IF "$(QMAKESPEC)" == "win32-msvc" || "$(QMAKESPEC)" == "win32-msvc.net" || "$(QMAKESPEC)" == "win32-msvc2002" || "$(QMAKESPEC)" == "win32-msvc2003" || "$(QMAKESPEC)" == "win32-msvc2005" || "$(QMAKESPEC)" == "win32-msvc2008" || "$(QMAKESPEC)" == "win32-msvc2010" || "$(QMAKESPEC)" == "win32-icc"
 
 !if "$(SOURCE_PATH)" == ""
 SOURCE_PATH = ..
@@ -75,8 +75,8 @@ ADDCLEAN    = qmake.tds
 OBJS        = project.obj main.obj makefile.obj unixmake.obj unixmake2.obj mingw_make.obj \
               option.obj winmakefile.obj projectgenerator.obj property.obj meta.obj \
               makefiledeps.obj metamakefile.obj xmloutput.obj pbuilder_pbx.obj \
-              borland_bmake.obj msvc_nmake.obj msvc_vcproj.obj \
-              msvc_objectmodel.obj symmake.obj initprojectdeploy_symbian.obj \
+              borland_bmake.obj msvc_nmake.obj msvc_vcproj.obj msvc_vcxproj.obj \
+              msvc_objectmodel.obj msbuild_objectmodel.obj symmake.obj initprojectdeploy_symbian.obj \
               symmake_abld.obj symmake_sbsv2.obj symbiancommon.obj registry.obj epocroot.obj
 
 !IFDEF QMAKE_OPENSOURCE_EDITION
@@ -194,7 +194,9 @@ clean::
 	-del borland_bmake.obj
 	-del msvc_nmake.obj
 	-del msvc_vcproj.obj
+	-del msvc_vcxproj.obj
 	-del msvc_objectmodel.obj
+	-del msbuild_objectmodel.obj
 	-del symmake.obj
 	-del symmake_abld.obj
 	-del symmake_sbsv2.obj
@@ -383,9 +385,15 @@ msvc_nmake.obj: $(SOURCE_PATH)/qmake/generators/win32/msvc_nmake.cpp
 msvc_vcproj.obj: $(SOURCE_PATH)/qmake/generators/win32/msvc_vcproj.cpp
 	$(CXX) $(CXXFLAGS) generators/win32/msvc_vcproj.cpp
 
+msvc_vcxproj.obj: $(SOURCE_PATH)/qmake/generators/win32/msvc_vcxproj.cpp
+	$(CXX) $(CXXFLAGS) generators/win32/msvc_vcxproj.cpp
+
 msvc_objectmodel.obj: $(SOURCE_PATH)/qmake/generators/win32/msvc_objectmodel.cpp
 	$(CXX) $(CXXFLAGS) generators/win32/msvc_objectmodel.cpp
 
+msbuild_objectmodel.obj: $(SOURCE_PATH)/qmake/generators/win32/msbuild_objectmodel.cpp
+	$(CXX) $(CXXFLAGS) generators/win32/msbuild_objectmodel.cpp
+
 symmake.obj: $(SOURCE_PATH)/qmake/generators/symbian/symmake.cpp
 	$(CXX) $(CXXFLAGS) generators/symbian/symmake.cpp
 
diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp
index c42a837..f42a489 100644
--- a/qmake/generators/metamakefile.cpp
+++ b/qmake/generators/metamakefile.cpp
@@ -443,6 +443,7 @@ QT_BEGIN_INCLUDE_NAMESPACE
 #include "msvc_nmake.h"
 #include "borland_bmake.h"
 #include "msvc_vcproj.h"
+#include "msvc_vcxproj.h"
 #include "symmake_abld.h"
 #include "symmake_sbsv2.h"
 #include "symbian_makefile.h"
@@ -473,6 +474,12 @@ MetaMakefileGenerator::createMakefileGenerator(QMakeProject *proj, bool noIO)
             mkfile = new VcprojGenerator;
         else
             mkfile = new NmakeMakefileGenerator;
+    } else if(gen == "MSBUILD") {
+        // Visual Studio >= v11.0
+        if(proj->first("TEMPLATE").indexOf(QRegExp("^vc.*")) != -1 || proj->first("TEMPLATE").indexOf(QRegExp("^ce.*")) != -1)
+            mkfile = new VcxprojGenerator;
+        else
+            mkfile = new NmakeMakefileGenerator;
     } else if(gen == "BMAKE") {
         mkfile = new BorlandMakefileGenerator;
     } else if(gen == "SYMBIAN_ABLD") {
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
new file mode 100644
index 0000000..f459885
--- /dev/null
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -0,0 +1,3317 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "msvc_objectmodel.h"
+#include "msbuild_objectmodel.h"
+#include "msvc_vcproj.h"
+#include "msvc_vcxproj.h"
+#include <qstringlist.h>
+#include <qfileinfo.h>
+
+QT_BEGIN_NAMESPACE
+
+// XML Tags ---------------------------------------------------------
+const char _CLCompile[]                         = "ClCompile";
+const char _Configuration[]                     = "Configuration";
+const char _Configurations[]                    = "Configurations";
+const char q_File[]                             = "File";
+const char _FileConfiguration[]                 = "FileConfiguration";
+const char q_Files[]                            = "Files";
+const char _Filter[]                            = "Filter";
+const char _Globals[]                           = "Globals";
+const char _ItemGroup[]                         = "ItemGroup";
+const char _Link[]                              = "Link";
+const char _Midl[]                              = "Midl";
+const char _Platform[]                          = "Platform";
+const char _Platforms[]                         = "Platforms";
+const char _ResourceCompile[]                   = "ResourceCompile";
+const char _Tool[]                              = "Tool";
+const char _VisualStudioProject[]               = "VisualStudioProject";
+
+// XML Properties ---------------------------------------------------
+const char _AddModuleNamesToAssembly[]          = "AddModuleNamesToAssembly";
+const char _AdditionalDependencies[]            = "AdditionalDependencies";
+const char _AdditionalFiles[]                   = "AdditionalFiles";
+const char _AdditionalIncludeDirectories[]      = "AdditionalIncludeDirectories";
+const char _AdditionalLibraryDirectories[]      = "AdditionalLibraryDirectories";
+const char _AdditionalManifestDependencies[]    = "AdditionalManifestDependencies";
+const char _AdditionalOptions[]                 = "AdditionalOptions";
+const char _AdditionalUsingDirectories[]        = "AdditionalUsingDirectories";
+const char _AllowIsolation[]                    = "AllowIsolation";
+const char _AlwaysAppend[]                      = "AlwaysAppend";
+const char _ApplicationConfigurationMode[]      = "ApplicationConfigurationMode";
+const char _AssemblerListingLocation[]          = "AssemblerListingLocation";
+const char _AssemblerOutput[]                   = "AssemblerOutput";
+const char _AssemblyDebug[]                     = "AssemblyDebug";
+const char _AssemblyLinkResource[]              = "AssemblyLinkResource";
+const char _ATLMinimizesCRunTimeLibraryUsage[]  = "ATLMinimizesCRunTimeLibraryUsage";
+const char _BaseAddress[]                       = "BaseAddress";
+const char _BasicRuntimeChecks[]                = "BasicRuntimeChecks";
+const char _BrowseInformation[]                 = "BrowseInformation";
+const char _BrowseInformationFile[]             = "BrowseInformationFile";
+const char _BufferSecurityCheck[]               = "BufferSecurityCheck";
+const char _BuildBrowserInformation[]           = "BuildBrowserInformation";
+const char _CallingConvention[]                 = "CallingConvention";
+const char _CharacterSet[]                      = "CharacterSet";
+const char _ClientStubFile[]                    = "ClientStubFile";
+const char _CLRImageType[]                      = "CLRImageType";
+const char _CLRSupportLastError[]               = "CLRSupportLastError";
+const char _CLRThreadAttribute[]                = "CLRThreadAttribute";
+const char _CLRUnmanagedCodeCheck[]             = "CLRUnmanagedCodeCheck";
+const char _Command[]                           = "Command";
+const char _CommandLine[]                       = "CommandLine";
+const char _CompileAs[]                         = "CompileAs";
+const char _CompileAsManaged[]                  = "CompileAsManaged";
+const char _CompileForArchitecture[]            = "CompileForArchitecture";
+const char _CompileOnly[]                       = "CompileOnly";
+const char _ConfigurationType[]                 = "ConfigurationType";
+const char _CPreprocessOptions[]                = "CPreprocessOptions";
+const char _CreateHotpatchableImage[]           = "CreateHotpatchableImage";
+const char _CreateHotPatchableImage[]           = "CreateHotPatchableImage";
+const char _Culture[]                           = "Culture";
+const char _DataExecutionPrevention[]           = "DataExecutionPrevention";
+const char _DebugInformationFormat[]            = "DebugInformationFormat";
+const char _DefaultCharIsUnsigned[]             = "DefaultCharIsUnsigned";
+const char _DefaultCharType[]                   = "DefaultCharType";
+const char _DelayLoadDLLs[]                     = "DelayLoadDLLs";
+const char _DelaySign[]                         = "DelaySign";
+const char _DeleteExtensionsOnClean[]           = "DeleteExtensionsOnClean";
+const char _Description[]                       = "Description";
+const char _Detect64BitPortabilityProblems[]    = "Detect64BitPortabilityProblems";
+const char _DisableLanguageExtensions[]         = "DisableLanguageExtensions";
+const char _DisableSpecificWarnings[]           = "DisableSpecificWarnings";
+const char _DisplayLibrary[]                    = "DisplayLibrary";
+const char _DLLDataFileName[]                   = "DLLDataFileName";
+const char _Driver[]                            = "Driver";
+const char _EmbedManagedResourceFile[]          = "EmbedManagedResourceFile";
+const char _EnableCOMDATFolding[]               = "EnableCOMDATFolding";
+const char _EnableUAC[]                         = "EnableUAC";
+const char _EnableErrorChecks[]                 = "EnableErrorChecks";
+const char _EnableEnhancedInstructionSet[]      = "EnableEnhancedInstructionSet";
+const char _EnableFiberSafeOptimizations[]      = "EnableFiberSafeOptimizations";
+const char _EnableFunctionLevelLinking[]        = "EnableFunctionLevelLinking";
+const char _EnableIntrinsicFunctions[]          = "EnableIntrinsicFunctions";
+const char _EnablePREfast[]                     = "EnablePREfast";
+const char _EntryPointSymbol[]                  = "EntryPointSymbol";
+const char _ErrorCheckAllocations[]             = "ErrorCheckAllocations";
+const char _ErrorCheckBounds[]                  = "ErrorCheckBounds";
+const char _ErrorCheckEnumRange[]               = "ErrorCheckEnumRange";
+const char _ErrorCheckRefPointers[]             = "ErrorCheckRefPointers";
+const char _ErrorCheckStubData[]                = "ErrorCheckStubData";
+const char _ErrorReporting[]                    = "ErrorReporting";
+const char _ExceptionHandling[]                 = "ExceptionHandling";
+const char _ExcludedFromBuild[]                 = "ExcludedFromBuild";
+const char _ExpandAttributedSource[]            = "ExpandAttributedSource";
+const char _ExportNamedFunctions[]              = "ExportNamedFunctions";
+const char _FavorSizeOrSpeed[]                  = "FavorSizeOrSpeed";
+const char _FixedBaseAddress[]                  = "FixedBaseAddress";
+const char _FloatingPointModel[]                = "FloatingPointModel";
+const char _FloatingPointExceptions[]           = "FloatingPointExceptions";
+const char _ForceConformanceInForLoopScope[]    = "ForceConformanceInForLoopScope";
+const char _ForceFileOutput[]                   = "ForceFileOutput";
+const char _ForceSymbolReferences[]             = "ForceSymbolReferences";
+const char _ForcedIncludeFiles[]                = "ForcedIncludeFiles";
+const char _ForcedUsingFiles[]                  = "ForcedUsingFiles";
+const char _FullIncludePath[]                   = "FullIncludePath";
+const char _FunctionLevelLinking[]              = "FunctionLevelLinking";
+const char _FunctionOrder[]                     = "FunctionOrder";
+const char _GenerateClientFiles[]               = "GenerateClientFiles";
+const char _GenerateDebugInformation[]          = "GenerateDebugInformation";
+const char _GenerateManifest[]                  = "GenerateManifest";
+const char _GenerateMapFile[]                   = "GenerateMapFile";
+const char _GeneratePreprocessedFile[]          = "GeneratePreprocessedFile";
+const char _GenerateServerFiles[]               = "GenerateServerFiles";
+const char _GenerateStublessProxies[]           = "GenerateStublessProxies";
+const char _GenerateTypeLibrary[]               = "GenerateTypeLibrary";
+const char _GenerateXMLDocumentationFiles[]     = "GenerateXMLDocumentationFiles";
+const char _GlobalOptimizations[]               = "GlobalOptimizations";
+const char _HeaderFileName[]                    = "HeaderFileName";
+const char _HeapCommitSize[]                    = "HeapCommitSize";
+const char _HeapReserveSize[]                   = "HeapReserveSize";
+const char _IgnoreAllDefaultLibraries[]         = "IgnoreAllDefaultLibraries";
+const char _IgnoreDefaultLibraryNames[]         = "IgnoreDefaultLibraryNames";
+const char _IgnoreEmbeddedIDL[]                 = "IgnoreEmbeddedIDL";
+const char _IgnoreImportLibrary[]               = "IgnoreImportLibrary";
+const char _IgnoreSpecificDefaultLibraries[]    = "IgnoreSpecificDefaultLibraries";
+const char _IgnoreStandardIncludePath[]         = "IgnoreStandardIncludePath";
+const char _ImageHasSafeExceptionHandlers[]     = "ImageHasSafeExceptionHandlers";
+const char _ImportLibrary[]                     = "ImportLibrary";
+const char _ImproveFloatingPointConsistency[]   = "ImproveFloatingPointConsistency";
+const char _InlineFunctionExpansion[]           = "InlineFunctionExpansion";
+const char _IntrinsicFunctions[]                = "IntrinsicFunctions";
+const char _InterfaceIdentifierFileName[]       = "InterfaceIdentifierFileName";
+const char _IntermediateDirectory[]             = "IntermediateDirectory";
+const char _InterworkCalls[]                    = "InterworkCalls";
+const char _KeyContainer[]                      = "KeyContainer";
+const char _KeyFile[]                           = "KeyFile";
+const char _Keyword[]                           = "Keyword";
+const char _KeepComments[]                      = "KeepComments";
+const char _LargeAddressAware[]                 = "LargeAddressAware";
+const char _LinkDLL[]                           = "LinkDLL";
+const char _LinkErrorReporting[]                = "LinkErrorReporting";
+const char _LinkIncremental[]                   = "LinkIncremental";
+const char _LinkStatus[]                        = "LinkStatus";
+const char _LinkTimeCodeGeneration[]            = "LinkTimeCodeGeneration";
+const char _LinkToManagedResourceFile[]         = "LinkToManagedResourceFile";
+const char _LocaleID[]                          = "LocaleID";
+const char _ManifestFile[]                      = "ManifestFile";
+const char _MapExports[]                        = "MapExports";
+const char _MapFileName[]                       = "MapFileName";
+const char _MapLines[]                          = "MapLines ";
+const char _MergedIDLBaseFileName[]             = "MergedIDLBaseFileName";
+const char _MergeSections[]                     = "MergeSections";
+const char _Message[]                           = "Message";
+const char _MidlCommandFile[]                   = "MidlCommandFile";
+const char _MinimalRebuild[]                    = "MinimalRebuild";
+const char _MkTypLibCompatible[]                = "MkTypLibCompatible";
+const char _ModuleDefinitionFile[]              = "ModuleDefinitionFile";
+const char _MSDOSStubFileName[]                 = "MSDOSStubFileName";
+const char _MultiProcessorCompilation[]         = "MultiProcessorCompilation";
+const char _Name[]                              = "Name";
+const char _NoEntryPoint[]                      = "NoEntryPoint";
+const char _NullTerminateStrings[]              = "NullTerminateStrings";
+const char _ObjectFile[]                        = "ObjectFile";
+const char _ObjectFiles[]                       = "ObjectFiles";
+const char _ObjectFileName[]                    = "ObjectFileName";
+const char _OmitDefaultLibName[]                = "OmitDefaultLibName";
+const char _OmitFramePointers[]                 = "OmitFramePointers";
+const char _OpenMP[]                            = "OpenMP";
+const char _OpenMPSupport[]                     = "OpenMPSupport";
+const char _Optimization[]                      = "Optimization";
+const char _OptimizeForProcessor[]              = "OptimizeForProcessor";
+const char _OptimizeForWindows98[]              = "OptimizeForWindows98";
+const char _OptimizeForWindowsApplication[]     = "OptimizeForWindowsApplication";
+const char _OptimizeReferences[]                = "OptimizeReferences";
+const char _OutputDirectory[]                   = "OutputDirectory";
+const char _OutputFile[]                        = "OutputFile";
+const char _Outputs[]                           = "Outputs";
+const char _ParseFiles[]                        = "ParseFiles";
+const char _Path[]                              = "Path";
+const char _PrecompiledHeader[]                 = "PrecompiledHeader";
+const char _PrecompiledHeaderFile[]             = "PrecompiledHeaderFile";
+const char _PrecompiledHeaderOutputFile[]       = "PrecompiledHeaderOutputFile";
+const char _PrecompiledHeaderThrough[]          = "PrecompiledHeaderThrough";
+const char _PreprocessorDefinitions[]           = "PreprocessorDefinitions";
+const char _PreprocessKeepComments[]            = "PreprocessKeepComments";
+const char _PreprocessOutputPath[]              = "PreprocessOutputPath";
+const char _PreprocessSuppressLineNumbers[]     = "PreprocessSuppressLineNumbers";
+const char _PreprocessToFile[]                  = "PreprocessToFile";
+const char _PreventDllBinding[]                 = "PreventDllBinding";
+const char _PrimaryOutput[]                     = "PrimaryOutput";
+const char _Profile[]                           = "Profile";
+const char _ProfileGuidedDatabase[]             = "ProfileGuidedDatabase";
+const char _ProjectGUID[]                       = "ProjectGUID";
+const char _ProcessorNumber[]                   = "ProcessorNumber";
+const char _ProjectType[]                       = "ProjectType";
+const char _ProgramDatabase[]                   = "ProgramDatabase";
+const char _ProgramDataBaseFileName[]           = "ProgramDataBaseFileName";
+const char _ProgramDatabaseFile[]               = "ProgramDatabaseFile";
+const char _ProxyFileName[]                     = "ProxyFileName";
+const char _RandomizedBaseAddress[]             = "RandomizedBaseAddress";
+const char _RedirectOutputAndErrors[]           = "RedirectOutputAndErrors";
+const char _RegisterOutput[]                    = "RegisterOutput";
+const char _RelativePath[]                      = "RelativePath";
+const char _RemoteDirectory[]                   = "RemoteDirectory";
+const char _RemoveObjects[]                     = "RemoveObjects";
+const char _ResourceOnlyDLL[]                   = "ResourceOnlyDLL";
+const char _ResourceOutputFileName[]            = "ResourceOutputFileName";
+const char _RuntimeLibrary[]                    = "RuntimeLibrary";
+const char _RuntimeTypeInfo[]                   = "RuntimeTypeInfo";
+const char _SccProjectName[]                    = "SccProjectName";
+const char _SccLocalPath[]                      = "SccLocalPath";
+const char _SectionAlignment[]                  = "SectionAlignment";
+const char _ServerStubFile[]                    = "ServerStubFile";
+const char _SetChecksum[]                       = "SetChecksum";
+const char _ShowIncludes[]                      = "ShowIncludes";
+const char _ShowProgress[]                      = "ShowProgress";
+const char _SmallerTypeCheck[]                  = "SmallerTypeCheck";
+const char _SpecifySectionAttributes[]          = "SpecifySectionAttributes";
+const char _StackCommitSize[]                   = "StackCommitSize";
+const char _StackReserveSize[]                  = "StackReserveSize";
+const char _StringPooling[]                     = "StringPooling";
+const char _StripPrivateSymbols[]               = "StripPrivateSymbols";
+const char _StructMemberAlignment[]             = "StructMemberAlignment";
+const char _SubSystem[]                         = "SubSystem";
+const char _SupportNobindOfDelayLoadedDLL[]     = "SupportNobindOfDelayLoadedDLL";
+const char _SupportUnloadOfDelayLoadedDLL[]     = "SupportUnloadOfDelayLoadedDLL";
+const char _SuppressCompilerWarnings[]          = "SuppressCompilerWarnings";
+const char _SuppressStartupBanner[]             = "SuppressStartupBanner";
+const char _SwapRunFromCD[]                     = "SwapRunFromCD";
+const char _SwapRunFromNet[]                    = "SwapRunFromNet";
+const char _TargetEnvironment[]                 = "TargetEnvironment";
+const char _TargetMachine[]                     = "TargetMachine";
+const char _TerminalServerAware[]               = "TerminalServerAware";
+const char _TrackerLogDirectory[]               = "TrackerLogDirectory";
+const char _TreatLibWarningAsErrors[]           = "TreatLibWarningAsErrors";
+const char _TreatLinkerWarningAsErrors[]        = "TreatLinkerWarningAsErrors";
+const char _TreatSpecificWarningsAsErrors[]     = "TreatSpecificWarningsAsErrors";
+const char _TreatWarningAsError[]               = "TreatWarningAsError";
+const char _TreatWChar_tAsBuiltInType[]         = "TreatWChar_tAsBuiltInType";
+const char _TurnOffAssemblyGeneration[]         = "TurnOffAssemblyGeneration";
+const char _TypeLibFormat[]                     = "TypeLibFormat";
+const char _TypeLibraryFile[]                   = "TypeLibraryFile";
+const char _TypeLibraryName[]                   = "TypeLibraryName";
+const char _TypeLibraryResourceID[]             = "TypeLibraryResourceID";
+const char _UACExecutionLevel[]                 = "UACExecutionLevel";
+const char _UACUIAccess[]                       = "UACUIAccess";
+const char _UndefineAllPreprocessorDefinitions[]= "UndefineAllPreprocessorDefinitions";
+const char _UndefinePreprocessorDefinitions[]   = "UndefinePreprocessorDefinitions";
+const char _UniqueIdentifier[]                  = "UniqueIdentifier";
+const char _UseFullPaths[]                      = "UseFullPaths";
+const char _UseOfATL[]                          = "UseOfATL";
+const char _UseOfMfc[]                          = "UseOfMfc";
+const char _UsePrecompiledHeader[]              = "UsePrecompiledHeader";
+const char _UseUnicodeForAssemblerListing[]     = "UseUnicodeForAssemblerListing";
+const char _ValidateAllParameters[]             = "ValidateAllParameters";
+const char _VCCLCompilerTool[]                  = "VCCLCompilerTool";
+const char _VCLibrarianTool[]                   = "VCLibrarianTool";
+const char _VCLinkerTool[]                      = "VCLinkerTool";
+const char _VCCustomBuildTool[]                 = "VCCustomBuildTool";
+const char _VCResourceCompilerTool[]            = "VCResourceCompilerTool";
+const char _VCMIDLTool[]                        = "VCMIDLTool";
+const char _Verbose[]                           = "Verbose";
+const char _Version[]                           = "Version";
+const char _WarnAsError[]                       = "WarnAsError";
+const char _WarningLevel[]                      = "WarningLevel";
+const char _WholeProgramOptimization[]          = "WholeProgramOptimization";
+const char _XMLDocumentationFileName[]          = "XMLDocumentationFileName";
+
+
+// XmlOutput stream functions ------------------------------
+inline XmlOutput::xml_output attrTagT(const char *name, const triState v)
+{
+    if(v == unset)
+        return noxml();
+    return tagValue(name, (v == _True ? "true" : "false"));
+}
+
+inline XmlOutput::xml_output attrTagL(const char *name, qint64 v)
+{
+    return tagValue(name, QString::number(v));
+}
+
+/*ifNot version*/
+inline XmlOutput::xml_output attrTagL(const char *name, qint64 v, qint64 ifn)
+{
+    if (v == ifn)
+        return noxml();
+    return tagValue(name, QString::number(v));
+}
+
+inline XmlOutput::xml_output attrTagS(const char *name, const QString &v)
+{
+    if(v.isEmpty())
+        return noxml();
+    return tagValue(name, v);
+}
+
+
+inline XmlOutput::xml_output attrTagX(const char *name, const QStringList &v, const char *s = ",")
+{
+    if(v.isEmpty())
+        return noxml();
+    QStringList temp = v;
+    temp.append(QString("%(%1)").arg(name));
+    return tagValue(name, temp.join(s));
+}
+
+inline XmlOutput::xml_output valueTagX(const QStringList &v, const char *s = " ")
+{
+    if(v.isEmpty())
+        return noxml();
+    return valueTag(v.join(s));
+}
+
+inline XmlOutput::xml_output valueTagDefX(const QStringList &v, const QString &tagName, const char *s = " ")
+{
+    if(v.isEmpty())
+        return noxml();
+    QStringList temp = v;
+    temp.append(QString("%(%1)").arg(tagName));
+    return valueTag(temp.join(s));
+}
+
+inline XmlOutput::xml_output valueTagT( const triState v)
+{
+    if(v == unset)
+        return noxml();
+    return valueTag(v == _True ? "true" : "false");
+}
+
+
+// VCXCLCompilerTool -------------------------------------------------
+VCXCLCompilerTool::VCXCLCompilerTool()
+    :   BrowseInformation(_False),
+        BufferSecurityCheck(_False),
+        CreateHotpatchableImage(unset),
+        DisableLanguageExtensions(unset),
+        EnableFiberSafeOptimizations(unset),
+        EnablePREfast(unset),
+        ExpandAttributedSource(unset),
+        FloatingPointExceptions(unset),
+        ForceConformanceInForLoopScope(unset),
+        FunctionLevelLinking(unset),
+        GenerateXMLDocumentationFiles(unset),
+        IgnoreStandardIncludePath(unset),
+        IntrinsicFunctions(unset),
+        MinimalRebuild(unset),
+        MultiProcessorCompilation(unset),
+        OmitDefaultLibName(unset),
+        OmitFramePointers(unset),
+        OpenMPSupport(unset),
+        PreprocessKeepComments(unset),
+        PreprocessSuppressLineNumbers(unset),
+        RuntimeTypeInfo(unset),
+        ShowIncludes(unset),
+        SmallerTypeCheck(unset),
+        StringPooling(unset),
+        SuppressStartupBanner(unset),
+        TreatWarningAsError(unset),
+        TreatWChar_tAsBuiltInType(unset),
+        UndefineAllPreprocessorDefinitions(unset),
+        UseFullPaths(unset),
+        UseUnicodeForAssemblerListing(unset),
+        WholeProgramOptimization(unset)
+{
+}
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXCLCompilerTool &tool)
+{
+    return xml
+        << tag(_CLCompile)
+            << attrTagX(_AdditionalIncludeDirectories, tool.AdditionalIncludeDirectories, ";")
+            << attrTagX(_AdditionalOptions, tool.AdditionalOptions, " ")
+            << attrTagX(_AdditionalUsingDirectories, tool.AdditionalUsingDirectories, ";")
+            << attrTagS(_AlwaysAppend, tool.AlwaysAppend)
+            << attrTagS(_AssemblerListingLocation, tool.AssemblerListingLocation)
+            << attrTagS(_AssemblerOutput, tool.AssemblerOutput)
+            << attrTagS(_BasicRuntimeChecks, tool.BasicRuntimeChecks)
+            << attrTagT(_BrowseInformation, tool.BrowseInformation)
+            << attrTagS(_BrowseInformationFile, tool.BrowseInformationFile)
+            << attrTagT(_BufferSecurityCheck, tool.BufferSecurityCheck)
+            << attrTagS(_CallingConvention, tool.CallingConvention)
+            << attrTagS(_CompileAs, tool.CompileAs)
+            << attrTagS(_CompileAsManaged, tool.CompileAsManaged)
+            << attrTagT(_CreateHotpatchableImage, tool.CreateHotpatchableImage)
+            << attrTagS(_DebugInformationFormat, tool.DebugInformationFormat)
+            << attrTagT(_DisableLanguageExtensions, tool.DisableLanguageExtensions)
+            << attrTagX(_DisableSpecificWarnings, tool.DisableSpecificWarnings, ";")
+            << attrTagS(_EnableEnhancedInstructionSet, tool.EnableEnhancedInstructionSet)
+            << attrTagT(_EnableFiberSafeOptimizations, tool.EnableFiberSafeOptimizations)
+            << attrTagT(_EnablePREfast, tool.EnablePREfast)
+            << attrTagS(_ErrorReporting, tool.ErrorReporting)
+            << attrTagS(_ExceptionHandling, tool.ExceptionHandling)
+            << attrTagT(_ExpandAttributedSource, tool.ExpandAttributedSource)
+            << attrTagS(_FavorSizeOrSpeed, tool.FavorSizeOrSpeed)
+            << attrTagT(_FloatingPointExceptions, tool.FloatingPointExceptions)
+            << attrTagS(_FloatingPointModel, tool.FloatingPointModel)
+            << attrTagT(_ForceConformanceInForLoopScope, tool.ForceConformanceInForLoopScope)
+            << attrTagX(_ForcedIncludeFiles, tool.ForcedIncludeFiles, ";")
+            << attrTagX(_ForcedUsingFiles, tool.ForcedUsingFiles, ";")
+            << attrTagT(_FunctionLevelLinking, tool.FunctionLevelLinking)
+            << attrTagT(_GenerateXMLDocumentationFiles, tool.GenerateXMLDocumentationFiles)
+            << attrTagT(_IgnoreStandardIncludePath, tool.IgnoreStandardIncludePath)
+            << attrTagS(_InlineFunctionExpansion, tool.InlineFunctionExpansion)
+            << attrTagT(_IntrinsicFunctions, tool.IntrinsicFunctions)
+            << attrTagT(_MinimalRebuild, tool.MinimalRebuild)
+            << attrTagT(_MultiProcessorCompilation, tool.MultiProcessorCompilation)
+            << attrTagS(_ObjectFileName, tool.ObjectFileName)
+            << attrTagX(_ObjectFiles, tool.ObjectFiles, ";")
+            << attrTagT(_OmitDefaultLibName, tool.OmitDefaultLibName)
+            << attrTagT(_OmitFramePointers, tool.OmitFramePointers)
+            << attrTagT(_OpenMPSupport, tool.OpenMPSupport)
+            << attrTagS(_Optimization, tool.Optimization)
+            << attrTagS(_PrecompiledHeader, tool.PrecompiledHeader)
+            << attrTagS(_PrecompiledHeaderFile, tool.PrecompiledHeaderFile)
+            << attrTagS(_PrecompiledHeaderOutputFile, tool.PrecompiledHeaderOutputFile)
+            << attrTagT(_PreprocessKeepComments, tool.PreprocessKeepComments)
+            << attrTagX(_PreprocessorDefinitions, tool.PreprocessorDefinitions, ";")
+            << attrTagS(_PreprocessOutputPath, tool.PreprocessOutputPath)
+            << attrTagT(_PreprocessSuppressLineNumbers, tool.PreprocessSuppressLineNumbers)
+            << attrTagT(_PreprocessToFile, tool.PreprocessToFile)
+            << attrTagS(_ProgramDataBaseFileName, tool.ProgramDataBaseFileName)
+            << attrTagS(_ProcessorNumber, tool.ProcessorNumber)
+            << attrTagS(_RuntimeLibrary, tool.RuntimeLibrary)
+            << attrTagT(_RuntimeTypeInfo, tool.RuntimeTypeInfo)
+            << attrTagT(_ShowIncludes, tool.ShowIncludes)
+            << attrTagT(_SmallerTypeCheck, tool.SmallerTypeCheck)
+            << attrTagT(_StringPooling, tool.StringPooling)
+            << attrTagS(_StructMemberAlignment, tool.StructMemberAlignment)
+            << attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
+            << attrTagS(_TreatSpecificWarningsAsErrors, tool.TreatSpecificWarningsAsErrors)
+            << attrTagT(_TreatWarningAsError, tool.TreatWarningAsError)
+            << attrTagT(_TreatWChar_tAsBuiltInType, tool.TreatWChar_tAsBuiltInType)
+            << attrTagT(_UndefineAllPreprocessorDefinitions, tool.UndefineAllPreprocessorDefinitions)
+            << attrTagX(_UndefinePreprocessorDefinitions, tool.UndefinePreprocessorDefinitions, ";")
+            << attrTagT(_UseFullPaths, tool.UseFullPaths)
+            << attrTagT(_UseUnicodeForAssemblerListing, tool.UseUnicodeForAssemblerListing)
+            << attrTagS(_WarningLevel, tool.WarningLevel)
+            << attrTagT(_WholeProgramOptimization, tool.WholeProgramOptimization)
+            << attrTagS(_XMLDocumentationFileName, tool.XMLDocumentationFileName)
+        << closetag(_CLCompile);
+}
+
+bool VCXCLCompilerTool::parseOption(const char* option)
+{
+    // skip index 0 ('/' or '-')
+    char first  = option[1];
+    char second = option[2];
+    char third  = option[3];
+    char fourth = option[4];
+    bool found = true;
+
+    switch (first) {
+    case '?':
+        qWarning("Generator: Option '/?' : MSVC.NET projects do not support outputting help info");
+        found = false;
+        break;
+    case '@':
+        qWarning("Generator: Option '/@': MSVC.NET projects do not support the use of a response file");
+        found = false;
+        break;
+    case 'l':
+        qWarning("Generator: Option '/link': qmake generator does not support passing link options through the compiler tool");
+        found = false;
+        break;
+    case 'A':
+        if(second != 'I') {
+            found = false;
+            break;
+        }
+        AdditionalUsingDirectories += option+3;
+        break;
+    case 'C':
+        PreprocessKeepComments = _True;
+        break;
+    case 'D':
+        PreprocessorDefinitions += option+2;
+        break;
+    case 'E':
+        if(second == 'H') {
+            QString opt(option);
+            if (opt.endsWith("EHa"))
+                ExceptionHandling = "Async";
+            else if (opt.endsWith("EHsc"))
+                ExceptionHandling = "Sync";
+            else if (opt.endsWith("EHs"))
+                ExceptionHandling = "SyncCThrow";
+            else {
+                ExceptionHandling = "false";
+            }
+            break;
+        }else if(second == 'P') {
+            PreprocessSuppressLineNumbers = _True;
+        }
+        found = false;
+        break;
+    case 'F':
+        if(second <= '9' && second >= '0') {
+            AdditionalOptions += option;
+            break;
+        } else {
+            switch (second) {
+            case 'A':
+                if(third == 'c') {
+                    AssemblerOutput = "AssemblyAndMachineCode";
+                    if(fourth == 's')
+                        AssemblerOutput = "All";
+                } else if(third == 's') {
+                    AssemblerOutput = "AssemblyAndSourceCode";
+                } else if(third == 'u') {
+                    UseUnicodeForAssemblerListing = _True;
+                } else {
+                    AssemblerOutput = "AssemblyCode";
+                }
+                break;
+            case 'a':
+                AssemblerListingLocation = option+3;
+                break;
+            case 'C':
+                UseFullPaths = _True;
+                break;
+            case 'd':
+                ProgramDataBaseFileName += option+3;
+            case 'I':
+                ForcedIncludeFiles += option+3;
+                break;
+            case 'i':
+                PreprocessOutputPath += option+3;
+                break;
+            case 'm':
+                AdditionalOptions += option;
+                break;
+            case 'R':
+                BrowseInformation = _True;
+                BrowseInformationFile = option+3;
+                break;
+            case 'r':
+                BrowseInformation = _True;
+                BrowseInformationFile = option+3;
+                break;
+            case 'U':
+                ForcedUsingFiles += option+3;
+                break;
+            case 'o':
+                ObjectFileName = option+3;
+                break;
+            case 'p':
+                PrecompiledHeaderOutputFile = option+3;
+                break;
+            case 'x':
+                ExpandAttributedSource = _True;
+                break;
+            default:
+                found = false;
+                break;
+            }
+        }
+        break;
+    case 'G':
+        switch (second) {
+        case 'F':
+            StringPooling = _True;
+            break;
+        case 'L':
+            WholeProgramOptimization = _True;
+            if(third == '-')
+                WholeProgramOptimization = _False;
+            break;
+        case 'R':
+            RuntimeTypeInfo = _True;
+            if(third == '-')
+                RuntimeTypeInfo = _False;
+            break;
+        case 'S':
+            BufferSecurityCheck = _True;
+            if(third == '-')
+                BufferSecurityCheck = _False;
+            break;
+        case 'T':
+            EnableFiberSafeOptimizations = _True;
+            break;
+        case 'd':
+            CallingConvention = "Cdecl";
+            break;
+        case 'm':
+            MinimalRebuild = _True;
+            if(third == '-')
+                MinimalRebuild = _False;
+            break;
+        case 'r':
+            CallingConvention = "FastCall";
+            break;
+        case 'y':
+            FunctionLevelLinking = _True;
+            break;
+        case 'z':
+            CallingConvention = "StdCall";
+            break;
+        default:
+            found = false;
+            break;
+        }
+        break;
+    case 'H':
+        AdditionalOptions += option;
+        break;
+    case 'I':
+        AdditionalIncludeDirectories += option+2;
+        break;
+    case 'L':
+        if(second == 'D') {
+            AdditionalOptions += option;
+            break;
+        }
+        found = false;
+        break;
+    case 'M':
+        if(second == 'D') {
+            RuntimeLibrary = "MultiThreadedDLL";
+            if(third == 'd')
+                RuntimeLibrary = "MultiThreadedDebugDLL";
+            break;
+        } else if(second == 'P') {
+            MultiProcessorCompilation = _True;
+            ProcessorNumber = option+3;
+            break;
+        } else if(second == 'T') {
+            RuntimeLibrary = "MultiThreaded";
+            if(third == 'd')
+                RuntimeLibrary = "MultiThreadedDebug";
+            break;
+        }
+        found = false;
+        break;
+    case 'O':
+        switch (second) {
+        case '1':
+            Optimization = "MinSpace";
+            break;
+        case '2':
+            Optimization = "MaxSpeed";
+            break;
+        case 'b':
+            if(third == '0')
+                InlineFunctionExpansion = "Disabled";
+            else if(third == '1')
+                InlineFunctionExpansion = "OnlyExplicitInline";
+            else if(third == '2')
+                InlineFunctionExpansion = "AnySuitable";
+            else
+                found = false;
+            break;
+        case 'd':
+            Optimization = "Disabled";
+            break;
+        case 'i':
+            IntrinsicFunctions = _True;
+            break;
+        case 'p':
+            if(third == 'e')
+                OpenMPSupport = _True;
+            else
+                found = false;
+            break;
+        case 's':
+            FavorSizeOrSpeed = "Size";
+            break;
+        case 't':
+            FavorSizeOrSpeed = "Speed";
+            break;
+        case 'x':
+            Optimization = "Full";
+            break;
+        case 'y':
+            OmitFramePointers = _True;
+            if(third == '-')
+                OmitFramePointers = _False;
+            break;
+        default:
+            found = false;
+            break;
+        }
+        break;
+    case 'P':
+        PreprocessToFile = _True;
+        break;
+    case 'Q':
+        if(second == 'I') {
+            AdditionalOptions += option;
+            break;
+        }
+        found = false;
+        break;
+    case 'R':
+        if(second == 'T' && third == 'C') {
+            if(fourth == '1')
+                BasicRuntimeChecks = "EnableFastChecks";
+            else if(fourth == 'c')
+                SmallerTypeCheck = _True;
+            else if(fourth == 's')
+                BasicRuntimeChecks = "StackFrameRuntimeCheck";
+            else if(fourth == 'u')
+                BasicRuntimeChecks = "UninitializedLocalUsageCheck";
+            else
+                found = false; break;
+        }
+        break;
+    case 'T':
+        if(second == 'C') {
+            CompileAs = "CompileAsC";
+        } else if(second == 'P') {
+            CompileAs = "CompileAsCpp";
+        } else {
+            qWarning("Generator: Options '/Tp<filename>' and '/Tc<filename>' are not supported by qmake");
+            found = false; break;
+        }
+        break;
+    case 'U':
+        UndefinePreprocessorDefinitions += option+2;
+        break;
+    case 'V':
+        AdditionalOptions += option;
+        break;
+    case 'W':
+        switch (second) {
+        case 'a':
+            WarningLevel = "EnableAllWarnings";
+            break;
+        case '4':
+            WarningLevel = "Level4";
+            break;
+        case '3':
+            WarningLevel = "Level3";
+            break;
+        case '2':
+            WarningLevel = "Level2";
+            break;
+        case '1':
+            WarningLevel = "Level1";
+            break;
+        case '0':
+            WarningLevel = "TurnOffAllWarnings";
+            break;
+        case 'L':
+            AdditionalOptions += option;
+            break;
+        case 'X':
+            TreatWarningAsError = _True;
+            break;
+        case 'p':
+            if(third == '6' && fourth == '4') {
+                // Deprecated for VS2010 but can be used under Additional Options.
+                AdditionalOptions += option;
+                break;
+            }
+            // Fallthrough
+        default:
+            found = false; break;
+        }
+        break;
+    case 'X':
+        IgnoreStandardIncludePath = _True;
+        break;
+    case 'Y':
+        switch (second) {
+        case '\0':
+        case '-':
+            AdditionalOptions += option;
+            break;
+        case 'c':
+            PrecompiledHeader = "Create";
+            PrecompiledHeaderFile = option+3;
+            break;
+        case 'd':
+        case 'l':
+            AdditionalOptions += option;
+            break;
+        case 'u':
+            PrecompiledHeader = "Use";
+            PrecompiledHeaderFile = option+3;
+            break;
+        default:
+            found = false; break;
+        }
+        break;
+    case 'Z':
+        switch (second) {
+        case '7':
+            DebugInformationFormat = "OldStyle";
+            break;
+        case 'I':
+            DebugInformationFormat = "EditAndContinue";
+            break;
+        case 'i':
+            DebugInformationFormat = "ProgramDatabase";
+            break;
+        case 'l':
+            OmitDefaultLibName = _True;
+            break;
+        case 'a':
+            DisableLanguageExtensions = _True;
+            break;
+        case 'e':
+            DisableLanguageExtensions = _False;
+            break;
+        case 'c':
+            if(third == ':') {
+                const char *c = option + 4;
+                // Go to the end of the option
+                while ( *c != '\0' && *c != ' ' && *c != '-')
+                    ++c;
+                if(fourth == 'f')
+                    ForceConformanceInForLoopScope = ((*c) == '-' ? _False : _True);
+                else if(fourth == 'w')
+                    TreatWChar_tAsBuiltInType = ((*c) == '-' ? _False : _True);
+                else
+                    found = false;
+            } else {
+                found = false; break;
+            }
+            break;
+        case 'g':
+        case 'm':
+        case 's':
+            AdditionalOptions += option;
+            break;
+        case 'p':
+            switch (third)
+            {
+            case '\0':
+            case '1':
+                StructMemberAlignment = "1Byte";
+                if(fourth == '6')
+                    StructMemberAlignment = "16Bytes";
+                break;
+            case '2':
+                StructMemberAlignment = "2Bytes";
+                break;
+            case '4':
+                StructMemberAlignment = "4Bytes";
+                break;
+            case '8':
+                StructMemberAlignment = "8Bytes";
+                break;
+            default:
+                found = false; break;
+            }
+            break;
+        default:
+            found = false; break;
+        }
+        break;
+    case 'a':
+        if (second == 'r' && third == 'c' && fourth == 'h') {
+            if (option[5] == ':') {
+                const char *o = option;
+                if (o[6] == 'S' && o[7] == 'S' && o[8] == 'E') {
+                    EnableEnhancedInstructionSet = o[9] == '2' ? "StreamingSIMDExtensions2" : "StreamingSIMDExtensions";
+                    break;
+                }
+            }
+        } else if (second == 'n' && third == 'a' && fourth == 'l') {
+            EnablePREfast = _True;
+            break;
+        }
+        found = false;
+        break;
+    case 'b':   // see http://msdn.microsoft.com/en-us/library/fwkeyyhe%28VS.100%29.aspx
+        if (second == 'i' && third == 'g' && fourth == 'o') {
+            const char *o = option;
+            if (o[5] == 'b' && o[6] == 'j') {
+                AdditionalOptions += option;
+                break;
+            }
+        }
+        found = false;
+        break;
+    case 'c':
+        if(second == 'l') {
+            if(*(option+5) == 'p') {
+                CompileAsManaged = "Pure";
+            } else if(*(option+5) == 's') {
+                CompileAsManaged = "Safe";
+            } else if(*(option+5) == 'o') {
+                CompileAsManaged = "OldSyntax";
+            } else {
+                CompileAsManaged = "true";
+            }
+        } else {
+            found = false;
+            break;
+        }
+        break;
+    case 'd':
+        if(second != 'o' && third == 'c') {
+            GenerateXMLDocumentationFiles = _True;
+            XMLDocumentationFileName += option+4;
+            break;
+        }
+        found = false;
+        break;
+    case 'e':
+        if (second == 'r' && third == 'r' && fourth == 'o') {
+            if (option[12] == ':') {
+                if ( option[13] == 'n') {
+                    ErrorReporting = "None";
+                } else if (option[13] == 'p') {
+                    ErrorReporting = "Prompt";
+                } else if (option[13] == 'q') {
+                    ErrorReporting = "Queue";
+                } else if (option[13] == 's') {
+                    ErrorReporting = "Send";
+                } else {
+                    found = false;
+                }
+                break;
+            }
+        }
+        found = false;
+        break;
+    case 'f':
+        if(second == 'p' && third == ':') {
+            // Go to the end of the option
+            const char *c = option + 4;
+            while (*c != '\0' && *c != ' ' && *c != '-')
+                ++c;
+            switch (fourth) {
+            case 'e':
+                FloatingPointExceptions = ((*c) == '-' ? _False : _True);
+                break;
+            case 'f':
+                FloatingPointModel = "Fast";
+                break;
+            case 'p':
+                FloatingPointModel = "Precise";
+                break;
+            case 's':
+                FloatingPointModel = "Strict";
+                break;
+            default:
+                found = false;
+                break;
+            }
+        }
+        break;
+    case 'h':
+        if(second == 'o' && third == 't' && fourth == 'p') {
+            CreateHotpatchableImage = _True;
+            break;
+        }
+        qWarning("Generator: Option '/help': MSVC.NET projects do not support outputting help info");
+        found = false;
+        break;
+    case 'n':
+        if(second == 'o' && third == 'l' && fourth == 'o') {
+            SuppressStartupBanner = _True;
+            break;
+        }
+        found = false;
+        break;
+    case 'o':
+        if (second == 'p' && third == 'e' && fourth == 'n') {
+            OpenMPSupport = _True;
+            break;
+        }
+        found = false;
+        break;
+    case 's':
+        if(second == 'h' && third == 'o' && fourth == 'w') {
+            ShowIncludes = _True;
+            break;
+        }
+        found = false;
+        break;
+    case 'u':
+        UndefineAllPreprocessorDefinitions = _True;
+        break;
+    case 'v':
+        if(second == 'd' || second == 'm') {
+            AdditionalOptions += option;
+            break;
+        }
+        found = false;
+        break;
+    case 'w':
+        switch (second) {
+        case 'd':
+            DisableSpecificWarnings += option+3;
+            break;
+        case 'e':
+            TreatSpecificWarningsAsErrors = option+3;
+            break;
+        default:
+            AdditionalOptions += option;
+        }
+        break;
+    default:
+        AdditionalOptions += option;
+        break;
+    }
+    if(!found) {
+        warn_msg(WarnLogic, "Could not parse Compiler option: %s, added as AdditionalOption", option);
+        AdditionalOptions += option;
+    }
+    return true;
+}
+
+// VCLinkerTool -----------------------------------------------------
+VCXLinkerTool::VCXLinkerTool()
+    :        AllowIsolation(unset),
+        AssemblyDebug(unset),
+        DataExecutionPrevention(unset),
+        DelaySign(unset),
+        EnableCOMDATFolding(unset),
+        EnableUAC(unset),
+        FixedBaseAddress(unset),
+        GenerateDebugInformation(unset),
+        GenerateManifest(unset),
+        GenerateMapFile(unset),
+        HeapCommitSize(-1),
+        HeapReserveSize(-1),
+        IgnoreAllDefaultLibraries(unset),
+        IgnoreEmbeddedIDL(unset),
+        IgnoreImportLibrary(_True),
+        ImageHasSafeExceptionHandlers(unset),
+        LargeAddressAware(unset),
+        LinkDLL(unset),
+        LinkIncremental(unset),
+        LinkStatus(unset),
+        MapExports(unset),
+        NoEntryPoint(unset),
+        OptimizeReferences(unset),
+        PreventDllBinding(unset),
+        RandomizedBaseAddress(unset),
+        RegisterOutput(unset),
+        SectionAlignment(-1),
+        SetChecksum(unset),
+        //StackCommitSize(-1),
+        //StackReserveSize(-1),
+        SupportNobindOfDelayLoadedDLL(unset),
+        SupportUnloadOfDelayLoadedDLL(unset),
+        SuppressStartupBanner(unset),
+        SwapRunFromCD(unset),
+        SwapRunFromNet(unset),
+        TerminalServerAware(unset),
+        TreatLinkerWarningAsErrors(unset),
+        TurnOffAssemblyGeneration(unset),
+        TypeLibraryResourceID(0),
+        UACUIAccess(unset)
+{
+}
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXLinkerTool &tool)
+{
+    return xml
+        << tag(_Link)
+            << attrTagX(_AdditionalDependencies, tool.AdditionalDependencies, ";")
+            << attrTagX(_AdditionalLibraryDirectories, tool.AdditionalLibraryDirectories, ";")
+            << attrTagX(_AdditionalManifestDependencies, tool.AdditionalManifestDependencies, ";")
+            << attrTagX(_AdditionalOptions, tool.AdditionalOptions, " ")
+            << attrTagX(_AddModuleNamesToAssembly, tool.AddModuleNamesToAssembly, ";")
+            << attrTagT(_AllowIsolation, tool.AllowIsolation)
+            << attrTagT(_AssemblyDebug, tool.AssemblyDebug)
+            << attrTagX(_AssemblyLinkResource, tool.AssemblyLinkResource, ";")
+            << attrTagS(_BaseAddress, tool.BaseAddress)
+            << attrTagS(_CLRImageType, tool.CLRImageType)
+            << attrTagS(_CLRSupportLastError, tool.CLRSupportLastError)
+            << attrTagS(_CLRThreadAttribute, tool.CLRThreadAttribute)
+            << attrTagS(_CLRUnmanagedCodeCheck, tool.CLRUnmanagedCodeCheck)
+            << attrTagS(_CreateHotPatchableImage, tool.CreateHotPatchableImage)
+            << attrTagT(_DataExecutionPrevention, tool.DataExecutionPrevention)
+            << attrTagX(_DelayLoadDLLs, tool.DelayLoadDLLs, ";")
+            << attrTagT(_DelaySign, tool.DelaySign)
+            << attrTagS(_Driver, tool.Driver)
+            << attrTagX(_EmbedManagedResourceFile, tool.EmbedManagedResourceFile, ";")
+            << attrTagT(_EnableCOMDATFolding, tool.EnableCOMDATFolding)
+            << attrTagT(_EnableUAC, tool.EnableUAC)
+            << attrTagS(_EntryPointSymbol, tool.EntryPointSymbol)
+            << attrTagT(_FixedBaseAddress, tool.FixedBaseAddress)
+            << attrTagS(_ForceFileOutput, tool.ForceFileOutput)
+            << attrTagX(_ForceSymbolReferences, tool.ForceSymbolReferences, ";")
+            << attrTagS(_FunctionOrder, tool.FunctionOrder)
+            << attrTagT(_GenerateDebugInformation, tool.GenerateDebugInformation)
+            << attrTagT(_GenerateManifest, tool.GenerateManifest)
+            << attrTagT(_GenerateMapFile, tool.GenerateMapFile)
+            << attrTagL(_HeapCommitSize, tool.HeapCommitSize, /*ifNot*/ -1)
+            << attrTagL(_HeapReserveSize, tool.HeapReserveSize, /*ifNot*/ -1)
+            << attrTagT(_IgnoreAllDefaultLibraries, tool.IgnoreAllDefaultLibraries)
+            << attrTagT(_IgnoreEmbeddedIDL, tool.IgnoreEmbeddedIDL)
+            << attrTagT(_IgnoreImportLibrary, tool.IgnoreImportLibrary)
+            << attrTagX(_IgnoreSpecificDefaultLibraries, tool.IgnoreSpecificDefaultLibraries, ";")
+            << attrTagT(_ImageHasSafeExceptionHandlers, tool.ImageHasSafeExceptionHandlers)
+            << attrTagS(_ImportLibrary, tool.ImportLibrary)
+            << attrTagS(_KeyContainer, tool.KeyContainer)
+            << attrTagS(_KeyFile, tool.KeyFile)
+            << attrTagT(_LargeAddressAware, tool.LargeAddressAware)
+            << attrTagT(_LinkDLL, tool.LinkDLL)
+            << attrTagS(_LinkErrorReporting, tool.LinkErrorReporting)
+            << attrTagT(_LinkIncremental, tool.LinkIncremental)
+            << attrTagT(_LinkStatus, tool.LinkStatus)
+            << attrTagS(_LinkTimeCodeGeneration, tool.LinkTimeCodeGeneration)
+            << attrTagS(_ManifestFile, tool.ManifestFile)
+            << attrTagT(_MapExports, tool.MapExports)
+            << attrTagS(_MapFileName, tool.MapFileName)
+            << attrTagS(_MergedIDLBaseFileName, tool.MergedIDLBaseFileName)
+            << attrTagS(_MergeSections, tool.MergeSections)
+            << attrTagS(_MidlCommandFile, tool.MidlCommandFile)
+            << attrTagS(_ModuleDefinitionFile, tool.ModuleDefinitionFile)
+            << attrTagS(_MSDOSStubFileName, tool.MSDOSStubFileName)
+            << attrTagT(_NoEntryPoint, tool.NoEntryPoint)
+            << attrTagT(_OptimizeReferences, tool.OptimizeReferences)
+            << attrTagS(_OutputFile, tool.OutputFile)
+            << attrTagT(_PreventDllBinding, tool.PreventDllBinding)
+            << attrTagS(_Profile, tool.Profile)
+            << attrTagS(_ProfileGuidedDatabase, tool.ProfileGuidedDatabase)
+            << attrTagS(_ProgramDatabaseFile, tool.ProgramDatabaseFile)
+            << attrTagT(_RandomizedBaseAddress, tool.RandomizedBaseAddress)
+            << attrTagT(_RegisterOutput, tool.RegisterOutput)
+            << attrTagL(_SectionAlignment, tool.SectionAlignment, /*ifNot*/ -1)
+            << attrTagT(_SetChecksum, tool.SetChecksum)
+            << attrTagS(_ShowProgress, tool.ShowProgress)
+            << attrTagS(_SpecifySectionAttributes, tool.SpecifySectionAttributes)
+            << attrTagS(_StackCommitSize, tool.StackCommitSize)
+            << attrTagS(_StackReserveSize, tool.StackReserveSize)
+            << attrTagS(_StripPrivateSymbols, tool.StripPrivateSymbols)
+            << attrTagS(_SubSystem, tool.SubSystem)
+            << attrTagT(_SupportNobindOfDelayLoadedDLL, tool.SupportNobindOfDelayLoadedDLL)
+            << attrTagT(_SupportUnloadOfDelayLoadedDLL, tool.SupportUnloadOfDelayLoadedDLL)
+            << attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
+            << attrTagT(_SwapRunFromCD, tool.SwapRunFromCD)
+            << attrTagT(_SwapRunFromNet, tool.SwapRunFromNet)
+            << attrTagS(_TargetMachine, tool.TargetMachine)
+            << attrTagT(_TerminalServerAware, tool.TerminalServerAware)
+            << attrTagT(_TreatLinkerWarningAsErrors, tool.TreatLinkerWarningAsErrors)
+            << attrTagT(_TurnOffAssemblyGeneration, tool.TurnOffAssemblyGeneration)
+            << attrTagS(_TypeLibraryFile, tool.TypeLibraryFile)
+            << attrTagL(_TypeLibraryResourceID, tool.TypeLibraryResourceID, /*ifNot*/ 0)
+            << attrTagS(_UACExecutionLevel, tool.UACExecutionLevel)
+            << attrTagT(_UACUIAccess, tool.UACUIAccess)
+            << attrTagS(_Version, tool.Version)
+        << closetag(_Link);
+}
+
+// Hashing routine to do fast option lookups ----
+// Slightly rewritten to stop on ':' ',' and '\0'
+// Original routine in qtranslator.cpp ----------
+static uint elfHash(const char* name)
+{
+    const uchar *k;
+    uint h = 0;
+    uint g;
+
+    if(name) {
+        k = (const uchar *) name;
+        while((*k) &&
+                (*k)!= ':' &&
+                (*k)!=',' &&
+                (*k)!=' ') {
+            h = (h << 4) + *k++;
+            if((g = (h & 0xf0000000)) != 0)
+                h ^= g >> 24;
+            h &= ~g;
+        }
+    }
+    if(!h)
+        h = 1;
+    return h;
+}
+
+//#define USE_DISPLAY_HASH
+#ifdef USE_DISPLAY_HASH
+static void displayHash(const char* str)
+{
+    printf("case 0x%07x: // %s\n    break;\n", elfHash(str), str);
+}
+#endif
+
+bool VCXLinkerTool::parseOption(const char* option)
+{
+#ifdef USE_DISPLAY_HASH
+    // Main options
+    displayHash("/ALIGN"); displayHash("/ALLOWBIND"); displayHash("/ASSEMBLYMODULE");
+    displayHash("/ASSEMBLYRESOURCE"); displayHash("/BASE"); displayHash("/DEBUG");
+    displayHash("/DEF"); displayHash("/DEFAULTLIB"); displayHash("/DELAY");
+    displayHash("/DELAYLOAD"); displayHash("/DLL"); displayHash("/DRIVER");
+    displayHash("/ENTRY"); displayHash("/EXETYPE"); displayHash("/EXPORT");
+    displayHash("/FIXED"); displayHash("/FORCE"); displayHash("/HEAP");
+    displayHash("/IDLOUT"); displayHash("/IGNORE"); displayHash("/IGNOREIDL"); displayHash("/IMPLIB");
+    displayHash("/INCLUDE"); displayHash("/INCREMENTAL"); displayHash("/LARGEADDRESSAWARE");
+    displayHash("/LIBPATH"); displayHash("/LTCG"); displayHash("/MACHINE");
+    displayHash("/MAP"); displayHash("/MAPINFO"); displayHash("/MERGE");
+    displayHash("/MIDL"); displayHash("/NOASSEMBLY"); displayHash("/NODEFAULTLIB");
+    displayHash("/NOENTRY"); displayHash("/NOLOGO"); displayHash("/OPT");
+    displayHash("/ORDER"); displayHash("/OUT"); displayHash("/PDB");
+    displayHash("/PDBSTRIPPED"); displayHash("/RELEASE"); displayHash("/SECTION");
+    displayHash("/STACK"); displayHash("/STUB"); displayHash("/SUBSYSTEM");
+    displayHash("/SWAPRUN"); displayHash("/TLBID"); displayHash("/TLBOUT");
+    displayHash("/TSAWARE"); displayHash("/VERBOSE"); displayHash("/VERSION");
+    displayHash("/VXD"); displayHash("/WS "); displayHash("/libpath");
+
+#endif
+#ifdef USE_DISPLAY_HASH
+    // Sub options
+    displayHash("UNLOAD"); displayHash("NOBIND"); displayHash("no"); displayHash("NOSTATUS"); displayHash("STATUS");
+    displayHash("AM33"); displayHash("ARM"); displayHash("CEE"); displayHash("EBC"); displayHash("IA64"); displayHash("X86"); displayHash("X64"); displayHash("M32R");
+    displayHash("MIPS"); displayHash("MIPS16"); displayHash("MIPSFPU"); displayHash("MIPSFPU16"); displayHash("MIPSR41XX"); displayHash("PPC");
+    displayHash("SH3"); displayHash("SH3DSP"); displayHash("SH4"); displayHash("SH5"); displayHash("THUMB"); displayHash("TRICORE"); displayHash("EXPORTS");
+    displayHash("LINES"); displayHash("REF"); displayHash("NOREF"); displayHash("ICF"); displayHash("WIN98"); displayHash("NOWIN98");
+    displayHash("CONSOLE"); displayHash("EFI_APPLICATION"); displayHash("EFI_BOOT_SERVICE_DRIVER"); displayHash("EFI_ROM"); displayHash("EFI_RUNTIME_DRIVER"); displayHash("NATIVE");
+    displayHash("POSIX"); displayHash("WINDOWS"); displayHash("WINDOWSCE"); displayHash("NET"); displayHash("CD"); displayHash("NO");
+#endif
+    bool found = true;
+    switch (elfHash(option)) {
+    case 0x6b21972: // /DEFAULTLIB:library
+    case 0xaca9d75: // /EXETYPE[:DYNAMIC | :DEV386]
+    case 0x3ad5444: // /EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
+    case 0x3dc3455: // /IGNORE:number,number,number,number  ### NOTE: This one is undocumented, but it is even used by Microsoft.
+                    //                                      In recent versions of the Microsoft linker they have disabled this undocumented feature.
+    case 0x0034bc4: // /VXD
+        AdditionalOptions += option;
+        break;
+    case 0x3360dbe: // /ALIGN[:number]
+        SectionAlignment = QString(option+7).toLongLong();
+        break;
+    case 0x1485c34: // /ALLOWBIND[:NO]
+        if(*(option+10) == ':' && (*(option+11) == 'n' || *(option+11) == 'N'))
+            PreventDllBinding = _False;
+        else
+            PreventDllBinding = _True;
+        break;
+    case 0x312011e: // /ALLOWISOLATION[:NO]
+        if(*(option+15) == ':' && (*(option+16) == 'n' || *(option+16) == 'N'))
+            AllowIsolation = _False;
+        else
+            AllowIsolation = _True;
+        break;
+    case 0x679c075: // /ASSEMBLYMODULE:filename
+        AddModuleNamesToAssembly += option+15;
+        break;
+    case 0x75f35f7: // /ASSEMBLYDEBUG[:DISABLE]
+        if(*(option+14) == ':' && (*(option+15) == 'D'))
+            AssemblyDebug = _False;
+        else
+            AssemblyDebug = _True;
+        break;
+    case 0x43294a5: // /ASSEMBLYLINKRESOURCE:filename
+            AssemblyLinkResource += option+22;
+        break;
+    case 0x062d065: // /ASSEMBLYRESOURCE:filename
+        EmbedManagedResourceFile += option+18;
+        break;
+    case 0x0336675: // /BASE:{address | @filename,key}
+        // Do we need to do a manual lookup when '@filename,key'?
+        // Seems BaseAddress only can contain the location...
+        // We don't use it in Qt, so keep it simple for now
+        BaseAddress = option+6;
+        break;
+    case 0x63bf065: // /CLRIMAGETYPE:{IJW|PURE|SAFE}
+        if(*(option+14) == 'I')
+            CLRImageType = "ForceIJWImage";
+        else if(*(option+14) == 'P')
+            CLRImageType = "ForcePureILImage";
+        else if(*(option+14) == 'S')
+            CLRImageType = "ForceSafeILImage";
+        break;
+    case 0x5f2a6a2: // /CLRSUPPORTLASTERROR{:NO | SYSTEMDLL}
+        if(*(option+20) == ':') {
+            if(*(option+21) == 'N') {
+                CLRSupportLastError = "Disabled";
+            } else if(*(option+21) == 'S') {
+                CLRSupportLastError = "SystemDlls";
+            }
+        } else {
+            CLRSupportLastError = "Enabled";
+        }
+        break;
+    case 0xc7984f5: // /CLRTHREADATTRIBUTE:{STA|MTA|NONE}
+        if(*(option+20) == 'N')
+            CLRThreadAttribute = "DefaultThreadingAttribute";
+        else if(*(option+20) == 'M')
+            CLRThreadAttribute = "MTAThreadingAttribute";
+        else if(*(option+20) == 'S')
+            CLRThreadAttribute = "STAThreadingAttribute";
+        break;
+    case 0xa8c637b: // /CLRUNMANAGEDCODECHECK[:NO]
+        if(*(option+23) == 'N')
+            CLRUnmanagedCodeCheck = _False;
+        else
+            CLRUnmanagedCodeCheck = _True;
+        break;
+    case 0x3389797: // /DEBUG
+        GenerateDebugInformation = _True;
+        break;
+    case 0x0033896: // /DEF:filename
+        ModuleDefinitionFile = option+5;
+        break;
+    case 0x338a069: // /DELAY:{UNLOAD | NOBIND}
+        if(*(option+7) == 'U')
+            SupportNobindOfDelayLoadedDLL = _True;
+        else if(*(option+7) == 'N')
+            SupportUnloadOfDelayLoadedDLL = _True;
+        break;
+    case 0x06f4bf4: // /DELAYLOAD:dllname
+        DelayLoadDLLs += option+11;
+        break;
+    case 0x06d451e: // /DELAYSIGN[:NO]
+        if(*(option+10) == ':' && (*(option+11) == 'n' || *(option+11) == 'N'))
+            DelaySign = _False;
+        else
+            DelaySign = _True;
+        break;
+    case 0x003390c: // /DLL
+        LinkDLL = _True;
+        break;
+    case 0x396ea92: // /DRIVER[:UPONLY | :WDM]
+        if((*(option+7) == ':') && (*(option+8) == 'U'))
+            Driver = "UpOnly";
+        else if((*(option+7) == ':') && (*(option+8) == 'W'))
+            Driver = "WDM";
+        else
+            Driver = "Driver";
+        break;
+    case 0x2ee8415: // /DYNAMICBASE[:NO]
+        if(*(option+12) == ':' && (*(option+13) == 'n' || *(option+13) == 'N'))
+            RandomizedBaseAddress = _False;
+        else
+            RandomizedBaseAddress = _True;
+        break;
+    case 0x33a3979: // /ENTRY:function
+        EntryPointSymbol = option+7;
+        break;
+    case 0x4504334: // /ERRORREPORT:[ NONE | PROMPT | QUEUE | SEND ]
+        if(*(option+12) == ':' ) {
+            if(*(option+13) == 'N')
+                LinkErrorReporting = "NoErrorReport";
+            else if(*(option+13) == 'P')
+                LinkErrorReporting = "PromptImmediately";
+            else if(*(option+13) == 'Q')
+                LinkErrorReporting = "QueueForNextLogin";
+            else if(*(option+13) == 'S')
+                LinkErrorReporting = "SendErrorReport";
+        }
+        break;
+    case 0x33aec94: // /FIXED[:NO]
+        if(*(option+6) == ':' && (*(option+7) == 'n' || *(option+7) == 'N'))
+            FixedBaseAddress = _False;
+        else
+            FixedBaseAddress = _True;
+        break;
+    case 0x33b4675: // /FORCE:[MULTIPLE|UNRESOLVED]
+        if(*(option+6) == ':' && *(option+7) == 'M' )
+            ForceFileOutput = "MultiplyDefinedSymbolOnly";
+        else if(*(option+6) == ':' && *(option+7) == 'U' )
+            ForceFileOutput = "UndefinedSymbolOnly";
+        else
+            ForceFileOutput = "Enabled";
+        break;
+    case 0x96d4e4e: // /FUNCTIONPADMIN[:space]
+        if(*(option+15) == ':') {
+            if(*(option+16) == '5')
+                CreateHotPatchableImage = "X86Image";
+            else if(*(option+16) == '6')
+                CreateHotPatchableImage = "X64Image";
+            else if((*(option+16) == '1') && (*(option+17) == '6'))
+                CreateHotPatchableImage = "ItaniumImage";
+        } else {
+            CreateHotPatchableImage = "Enabled";
+        }
+        break;
+    case 0x033c960: // /HEAP:reserve[,commit]
+        {
+            QStringList both = QString(option+6).split(",");
+            HeapReserveSize = both[0].toLongLong();
+            if(both.count() == 2)
+                HeapCommitSize = both[1].toLongLong();
+        }
+        break;
+    case 0x3d91494: // /IDLOUT:[path\]filename
+        MergedIDLBaseFileName = option+8;
+        break;
+    case 0x345a04c: // /IGNOREIDL
+        IgnoreEmbeddedIDL = _True;
+        break;
+    case 0x3e250e2: // /IMPLIB:filename
+        ImportLibrary = option+8;
+        break;
+    case 0xe281ab5: // /INCLUDE:symbol
+        ForceSymbolReferences += option+9;
+        break;
+    case 0xb28103c: // /INCREMENTAL[:no]
+        if(*(option+12) == ':' &&
+             (*(option+13) == 'n' || *(option+13) == 'N'))
+            LinkIncremental = _False;
+        else
+            LinkIncremental = _True;
+        break;
+    case 0x07f1ab2: // /KEYCONTAINER:name
+        KeyContainer = option+14;
+        break;
+    case 0xfadaf35: // /KEYFILE:filename
+        KeyFile = option+9;
+        break;
+    case 0x26e4675: // /LARGEADDRESSAWARE[:no]
+        if(*(option+18) == ':' &&
+             *(option+19) == 'n')
+            LargeAddressAware = _False;
+        else
+            LargeAddressAware = _True;
+        break;
+    case 0x2f96bc8: // /libpath:dir
+    case 0x0d745c8: // /LIBPATH:dir
+        AdditionalLibraryDirectories += option+9;
+        break;
+    case 0x0341877: // /LTCG[:NOSTATUS|:STATUS]
+        config->WholeProgramOptimization = _True;
+        LinkTimeCodeGeneration = "UseLinkTimeCodeGeneration";
+        if(*(option+5) == ':') {
+            const char* str = option+6;
+            if (*str == 'S')
+                LinkStatus = _True;
+            else if (*str == 'N')
+                LinkStatus = _False;
+#ifndef Q_OS_WIN
+            else if (strncasecmp(str, "pginstrument", 12))
+                LinkTimeCodeGeneration = "PGInstrument";
+            else if (strncasecmp(str, "pgoptimize", 10))
+                LinkTimeCodeGeneration = "PGOptimization";
+            else if (strncasecmp(str, "pgupdate", 8 ))
+                LinkTimeCodeGeneration = "PGUpdate";
+#else
+
+            else if (_stricmp(str, "pginstrument"))
+                LinkTimeCodeGeneration = "PGInstrument";
+            else if (_stricmp(str, "pgoptimize"))
+                LinkTimeCodeGeneration = "PGOptimization";
+            else if (_stricmp(str, "pgupdate"))
+                LinkTimeCodeGeneration = "PGUpdate";
+#endif
+        }
+        break;
+	case 0x379ED25:
+    case 0x157cf65: // /MACHINE:{AM33|ARM|CEE|IA64|X86|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|MIPSR41XX|PPC|SH3|SH4|SH5|THUMB|TRICORE}
+        switch (elfHash(option+9)) {
+        case 0x0005bb6: // X86
+            TargetMachine = "MachineX86";
+            break;
+        case 0x0005b94: // X64
+            TargetMachine = "MachineX64";
+            break;
+        case 0x000466d: // ARM
+            TargetMachine = "MachineARM";
+            break;
+        case 0x0004963: // EBC
+            TargetMachine = "MachineEBC";
+            break;
+        case 0x004d494: // IA64
+            TargetMachine = "MachineIA64";
+            break;
+        case 0x0051e53: // MIPS
+            TargetMachine = "MachineMIPS";
+            break;
+        case 0x51e5646: // MIPS16
+            TargetMachine = "MachineMIPS16";
+            break;
+        case 0x1e57b05: // MIPSFPU
+            TargetMachine = "MachineMIPSFPU";
+            break;
+        case 0x57b09a6: // MIPSFPU16
+            TargetMachine = "MachineMIPSFPU16";
+            break;
+        case 0x00057b4: // SH4
+            TargetMachine = "MachineSH4";
+            break;
+        case 0x058da12: // THUMB
+            TargetMachine = "MachineTHUMB";
+            break;
+        // put the others in AdditionalOptions...
+        case 0x0046063: // AM33
+        case 0x0004795: // CEE
+        case 0x0050672: // M32R
+        case 0x5852738: // MIPSR41XX
+        case 0x0005543: // PPC
+        case 0x00057b3: // SH3
+        case 0x57b7980: // SH3DSP
+        case 0x00057b5: // SH5
+        case 0x96d8435: // TRICORE
+        default:
+            AdditionalOptions += option;
+            break;
+        }
+        break;
+    case 0x62d9e94: // /MANIFEST[:NO]
+        if ((*(option+9) == ':' && (*(option+10) == 'N' || *(option+10) == 'n')))
+            GenerateManifest = _False;
+        else
+            GenerateManifest = _True;
+        break;
+    case 0x8b64559: // /MANIFESTDEPENDENCY:manifest_dependency
+        AdditionalManifestDependencies += option+20;
+        break;
+    case 0xe9e8195: // /MANIFESTFILE:filename
+        ManifestFile = option+14;
+        break;
+    case 0x9e9fb83: // /MANIFESTUAC http://msdn.microsoft.com/en-us/library/bb384691%28VS.100%29.aspx
+        if ((*(option+12) == ':' && (*(option+13) == 'N' || *(option+13) == 'n')))
+            EnableUAC = _False;
+        else if((*(option+12) == ':' && (*(option+13) == 'l' || *(option+14) == 'e'))) { // level
+            if(*(option+20) == 'a')
+                UACExecutionLevel = "AsInvoker";
+            else if(*(option+20) == 'h')
+                UACExecutionLevel = "HighestAvailable";
+            else if(*(option+20) == 'r')
+                UACExecutionLevel = "RequireAdministrator";
+        } else if((*(option+12) == ':' && (*(option+13) == 'u' || *(option+14) == 'i'))) { // uiAccess
+            if(*(option+22) == 't')
+                UACUIAccess = _True;
+            else
+                UACUIAccess = _False;
+        } else if((*(option+12) == ':' && (*(option+13) == 'f' || *(option+14) == 'r'))) { // fragment
+            AdditionalOptions += option;
+        }else
+            EnableUAC = _True;
+        break;
+    case 0x0034160: // /MAP[:filename]
+        GenerateMapFile = _True;
+        MapFileName = option+5;
+        break;
+    case 0x164e1ef: // /MAPINFO:{EXPORTS}
+        if(*(option+9) == 'E')
+            MapExports = _True;
+        break;
+    case 0x341a6b5: // /MERGE:from=to
+        MergeSections = option+7;
+        break;
+    case 0x0341d8c: // /MIDL:@file
+        MidlCommandFile = option+7;
+        break;
+    case 0x84e2679: // /NOASSEMBLY
+        TurnOffAssemblyGeneration = _True;
+        break;
+    case 0x2b21942: // /NODEFAULTLIB[:library]
+        if(*(option+13) == '\0')
+            IgnoreAllDefaultLibraries = _True;
+        else
+            IgnoreSpecificDefaultLibraries += option+14;
+        break;
+    case 0x33a3a39: // /NOENTRY
+        NoEntryPoint = _True;
+        break;
+    case 0x434138f: // /NOLOGO
+        SuppressStartupBanner = _True;
+        break;
+    case 0xc841054: // /NXCOMPAT[:NO]
+        if ((*(option+9) == ':' && (*(option+10) == 'N' || *(option+10) == 'n')))
+            DataExecutionPrevention = _False;
+        else
+            DataExecutionPrevention = _True;
+        break;
+    case 0x0034454: // /OPT:{REF | NOREF | ICF[=iterations] | NOICF | WIN98 | NOWIN98}
+        {
+            char third = *(option+7);
+            switch (third) {
+            case 'F': // REF
+                if(*(option+5) == 'R') {
+                    OptimizeReferences = _True;
+                } else { // ICF[=iterations]
+                    EnableCOMDATFolding = _True;
+                    // [=iterations] case is not documented
+                }
+                break;
+            case 'R': // NOREF
+                OptimizeReferences = _False;
+                break;
+            case 'I': // NOICF
+                EnableCOMDATFolding = _False;
+                break;
+            default:
+                found = false;
+            }
+        }
+        break;
+    case 0x34468a2: // /ORDER:@filename
+        FunctionOrder = option+8;
+        break;
+    case 0x00344a4: // /OUT:filename
+        OutputFile = option+5;
+        break;
+    case 0x0034482: // /PDB:filename
+        ProgramDatabaseFile = option+5;
+        break;
+    case 0xa2ad314: // /PDBSTRIPPED:pdb_file_name
+        StripPrivateSymbols = option+13;
+        break;
+    case 0x00344b4: // /PGD:filename
+        ProfileGuidedDatabase = option+5;
+        break;
+    case 0x573af45: // /PROFILE
+        Profile = _True;
+        break;
+    case 0x6a09535: // /RELEASE
+        SetChecksum = _True;
+        break;
+    case 0x75AA4D8: // /SAFESEH:{NO}
+        {
+            if(*(option+8) == ':' && *(option+9) == 'N')
+                ImageHasSafeExceptionHandlers = _False;
+            else
+                ImageHasSafeExceptionHandlers = _True;
+        }
+        break;
+    case 0x7988f7e: // /SECTION:name,[E][R][W][S][D][K][L][P][X][,ALIGN=#]
+        SpecifySectionAttributes = option+9;
+        break;
+    case 0x348857b: // /STACK:reserve[,commit]
+        {
+            QStringList both = QString(option+7).split(",");
+            StackReserveSize = both[0].toLongLong();
+            if(both.count() == 2)
+                StackCommitSize = both[1].toLongLong();
+        }
+        break;
+    case 0x0348992: // /STUB:filename
+        MSDOSStubFileName = option+6;
+        break;
+    case 0x9B3C00D:
+    case 0x78dc00d: // /SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}[,major[.minor]]
+        {
+            // Split up in subsystem, and version number
+            QStringList both = QString(option+11).split(",");
+            switch (elfHash(both[0].toLatin1())) {
+            case 0x8438445: // CONSOLE
+                SubSystem = "Console";
+                break;
+            case 0xbe29493: // WINDOWS
+                SubSystem = "Windows";
+                break;
+            case 0x5268ea5: // NATIVE
+                SubSystem = "Native";
+                break;
+            case 0x240949e: // EFI_APPLICATION
+                SubSystem = "EFI Application";
+                break;
+            case 0xe617652: // EFI_BOOT_SERVICE_DRIVER
+                SubSystem = "EFI Boot Service Driver";
+                break;
+            case 0x9af477d: // EFI_ROM
+                SubSystem = "EFI ROM";
+                break;
+            case 0xd34df42: // EFI_RUNTIME_DRIVER
+                SubSystem = "EFI Runtime";
+                break;
+            case 0x2949c95: // WINDOWSCE
+                SubSystem = "WindowsCE";
+                break;
+            case 0x05547e8: // POSIX
+                SubSystem = "POSIX";
+                break;
+            // The following are undocumented, so add them to AdditionalOptions
+            case 0x4B69795: // windowsce
+                AdditionalOptions += option;
+                break;
+            default:
+                found = false;
+            }
+        }
+        break;
+    case 0x8b654de: // /SWAPRUN:{NET | CD}
+        if(*(option+9) == 'N')
+            SwapRunFromNet = _True;
+        else if(*(option+9) == 'C')
+            SwapRunFromCD = _True;
+        else
+            found = false;
+        break;
+    case 0x34906d4: // /TLBID:id
+        TypeLibraryResourceID = QString(option+7).toLongLong();
+        break;
+    case 0x4907494: // /TLBOUT:[path\]filename
+        TypeLibraryFile = option+8;
+        break;
+    case 0x976b525: // /TSAWARE[:NO]
+        if(*(option+8) == ':')
+            TerminalServerAware = _False;
+        else
+            TerminalServerAware = _True;
+        break;
+    case 0xaa67735: // /VERBOSE[:ICF |:LIB |:REF |:SAFESEH]
+        if(*(option+9) == ':') {
+            if (*(option+10) == 'I') {
+                ShowProgress = "LinkVerboseICF";
+            } else if ( *(option+10) == 'L') {
+                ShowProgress = "LinkVerboseLib";
+            } else if ( *(option+10) == 'R') {
+                ShowProgress = "LinkVerboseREF";
+            } else if ( *(option+10) == 'S') {
+                ShowProgress = "LinkVerboseSAFESEH";
+            } else if ( *(option+10) == 'C') {
+                ShowProgress = "LinkVerboseCLR";
+            }
+        } else {
+            ShowProgress = "LinkVerbose";
+        }
+        break;
+    case 0xaa77f7e: // /VERSION:major[.minor]
+        Version = option+9;
+        break;
+    case 0x0034c50: // /WS[:NO]
+        if(*(option+3) == ':')
+            TreatLinkerWarningAsErrors = _False;
+        else
+            TreatLinkerWarningAsErrors = _True;
+        break;
+    default:
+        AdditionalOptions += option;
+        break;
+    }
+    if(!found) {
+        warn_msg(WarnLogic, "Could not parse Linker options: %s, added as AdditionalOption", option);
+        AdditionalOptions += option;
+    }
+    return found;
+}
+
+// VCMIDLTool -------------------------------------------------------
+VCXMIDLTool::VCXMIDLTool()
+    :   ApplicationConfigurationMode(unset),
+        ErrorCheckAllocations(unset),
+        ErrorCheckBounds(unset),
+        ErrorCheckEnumRange(unset),
+        ErrorCheckRefPointers(unset),
+        ErrorCheckStubData(unset),
+        GenerateStublessProxies(unset),
+        GenerateTypeLibrary(unset),
+        IgnoreStandardIncludePath(unset),
+        LocaleID(-1),
+        MkTypLibCompatible(unset),
+        SuppressCompilerWarnings(unset),
+        SuppressStartupBanner(unset),
+        ValidateAllParameters(unset),
+        WarnAsError(unset)
+{
+}
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXMIDLTool &tool)
+{
+    return xml
+        << tag(_Midl)
+            << attrTagX(_AdditionalIncludeDirectories, tool.AdditionalIncludeDirectories, ";")
+            << attrTagX(_AdditionalOptions, tool.AdditionalOptions, " ")
+            << attrTagT(_ApplicationConfigurationMode, tool.ApplicationConfigurationMode)
+            << attrTagS(_ClientStubFile, tool.ClientStubFile)
+            << attrTagS(_CPreprocessOptions, tool.CPreprocessOptions)
+            << attrTagS(_DefaultCharType, tool.DefaultCharType)
+            << attrTagS(_DLLDataFileName, tool.DLLDataFileName)
+            << attrTagS(_EnableErrorChecks, tool.EnableErrorChecks)
+            << attrTagT(_ErrorCheckAllocations, tool.ErrorCheckAllocations)
+            << attrTagT(_ErrorCheckBounds, tool.ErrorCheckBounds)
+            << attrTagT(_ErrorCheckEnumRange, tool.ErrorCheckEnumRange)
+            << attrTagT(_ErrorCheckRefPointers, tool.ErrorCheckRefPointers)
+            << attrTagT(_ErrorCheckStubData, tool.ErrorCheckStubData)
+            << attrTagS(_GenerateClientFiles, tool.GenerateClientFiles)
+            << attrTagS(_GenerateServerFiles, tool.GenerateServerFiles)
+            << attrTagT(_GenerateStublessProxies, tool.GenerateStublessProxies)
+            << attrTagT(_GenerateTypeLibrary, tool.GenerateTypeLibrary)
+            << attrTagS(_HeaderFileName, tool.HeaderFileName)
+            << attrTagT(_IgnoreStandardIncludePath, tool.IgnoreStandardIncludePath)
+            << attrTagS(_InterfaceIdentifierFileName, tool.InterfaceIdentifierFileName)
+            << attrTagL(_LocaleID, tool.LocaleID, /*ifNot*/ -1)
+            << attrTagT(_MkTypLibCompatible, tool.MkTypLibCompatible)
+            << attrTagS(_OutputDirectory, tool.OutputDirectory)
+            << attrTagX(_PreprocessorDefinitions, tool.PreprocessorDefinitions, ";")
+            << attrTagS(_ProxyFileName, tool.ProxyFileName)
+            << attrTagS(_RedirectOutputAndErrors, tool.RedirectOutputAndErrors)
+            << attrTagS(_ServerStubFile, tool.ServerStubFile)
+            << attrTagS(_StructMemberAlignment, tool.StructMemberAlignment)
+            << attrTagT(_SuppressCompilerWarnings, tool.SuppressCompilerWarnings)
+            << attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
+            << attrTagS(_TargetEnvironment, tool.TargetEnvironment)
+            << attrTagS(_TypeLibFormat, tool.TypeLibFormat)
+            << attrTagS(_TypeLibraryName, tool.TypeLibraryName)
+            << attrTagX(_UndefinePreprocessorDefinitions, tool.UndefinePreprocessorDefinitions, ";")
+            << attrTagT(_ValidateAllParameters, tool.ValidateAllParameters)
+            << attrTagT(_WarnAsError, tool.WarnAsError)
+            << attrTagS(_WarningLevel, tool.WarningLevel)
+        << closetag(_Midl);
+}
+
+bool VCXMIDLTool::parseOption(const char* option)
+{
+#ifdef USE_DISPLAY_HASH
+    displayHash("/D name[=def]"); displayHash("/I directory-list"); displayHash("/Oi");
+    displayHash("/Oic"); displayHash("/Oicf"); displayHash("/Oif"); displayHash("/Os");
+    displayHash("/U name"); displayHash("/WX"); displayHash("/W{0|1|2|3|4}");
+    displayHash("/Zp {N}"); displayHash("/Zs"); displayHash("/acf filename");
+    displayHash("/align {N}"); displayHash("/app_config"); displayHash("/c_ext");
+    displayHash("/char ascii7"); displayHash("/char signed"); displayHash("/char unsigned");
+    displayHash("/client none"); displayHash("/client stub"); displayHash("/confirm");
+    displayHash("/cpp_cmd cmd_line"); displayHash("/cpp_opt options");
+    displayHash("/cstub filename"); displayHash("/dlldata filename"); displayHash("/env win32");
+    displayHash("/env win64"); displayHash("/error all"); displayHash("/error allocation");
+    displayHash("/error bounds_check"); displayHash("/error enum"); displayHash("/error none");
+    displayHash("/error ref"); displayHash("/error stub_data"); displayHash("/h filename");
+    displayHash("/header filename"); displayHash("/iid filename"); displayHash("/lcid");
+    displayHash("/mktyplib203"); displayHash("/ms_ext"); displayHash("/ms_union");
+    displayHash("/msc_ver <nnnn>"); displayHash("/newtlb"); displayHash("/no_cpp");
+    displayHash("/no_def_idir"); displayHash("/no_default_epv"); displayHash("/no_format_opt");
+    displayHash("/no_warn"); displayHash("/nocpp"); displayHash("/nologo"); displayHash("/notlb");
+    displayHash("/o filename"); displayHash("/oldnames"); displayHash("/oldtlb");
+    displayHash("/osf"); displayHash("/out directory"); displayHash("/pack {N}");
+    displayHash("/prefix all"); displayHash("/prefix client"); displayHash("/prefix server");
+    displayHash("/prefix switch"); displayHash("/protocol all"); displayHash("/protocol dce");
+    displayHash("/protocol ndr64"); displayHash("/proxy filename"); displayHash("/robust");
+    displayHash("/rpcss"); displayHash("/savePP"); displayHash("/server none");
+    displayHash("/server stub"); displayHash("/sstub filename"); displayHash("/syntax_check");
+    displayHash("/target {system}"); displayHash("/tlb filename"); displayHash("/use_epv");
+    displayHash("/win32"); displayHash("/win64");
+#endif
+    bool found = true;
+    int offset = 0;
+    switch(elfHash(option)) {
+    case 0x0000334: // /D name[=def]
+        PreprocessorDefinitions += option+3;
+        break;
+    case 0x0000339: // /I directory-list
+        AdditionalIncludeDirectories += option+3;
+        break;
+    case 0x0345f96: // /Oicf
+    case 0x00345f6: // /Oif
+        GenerateStublessProxies = _True;
+        break;
+    case 0x0000345: // /U name
+        UndefinePreprocessorDefinitions += option+3;
+        break;
+    case 0x00034c8: // /WX
+        WarnAsError = _True;
+        break;
+    case 0x3582fde: // /align {N}
+        offset = 3;  // Fallthrough
+    case 0x0003510: // /Zp {N}
+        switch (*(option+offset+4)) {
+        case '1':
+            StructMemberAlignment = (*(option+offset+5) == '\0') ? "1" : "16";
+            break;
+        case '2':
+            StructMemberAlignment = "2";
+            break;
+        case '4':
+            StructMemberAlignment = "4";
+            break;
+        case '8':
+            StructMemberAlignment = "8";
+            break;
+        default:
+            found = false;
+        }
+        break;
+    case 0x5b1cb97: // /app_config
+        ApplicationConfigurationMode = _True;
+        break;
+    case 0x0359e82: // /char {ascii7|signed|unsigned}
+        switch(*(option+6)) {
+        case 'a':
+            DefaultCharType = "Ascii";
+            break;
+        case 's':
+            DefaultCharType = "Signed";
+            break;
+        case 'u':
+            DefaultCharType = "Unsigned";
+            break;
+        default:
+            found = false;
+        }
+        break;
+    case 0x5a2fc64: // /client {none|stub}
+        if(*(option+8) == 's')
+            GenerateClientFiles = "Stub";
+        else
+            GenerateClientFiles = "None";
+        break;
+    case 0xa766524: // /cpp_opt options
+        CPreprocessOptions += option+9;
+        break;
+    case 0x35aabb2: // /cstub filename
+        ClientStubFile = option+7;
+        break;
+    case 0xb32abf1: // /dlldata filename
+        DLLDataFileName = option + 9;
+        break;
+    case 0x0035c56: // /env {win32|ia64|x64}
+        if(*(option+7) == 'w' && *(option+10) == '3')
+            TargetEnvironment = "Win32";
+        else if(*(option+7) == 'i')
+            TargetEnvironment = "Itanium";
+        else if(*(option+7) == 'x')
+            TargetEnvironment = "X64";
+        else
+            AdditionalOptions += option;
+        break;
+    case 0x35c9962: // /error {all|allocation|bounds_check|enum|none|ref|stub_data}
+        EnableErrorChecks = midlEnableCustom;
+        switch (*(option+7)) {
+        case '\0':
+            EnableErrorChecks = "EnableCustom";
+            break;
+        case 'a':
+            if(*(option+10) == '\0')
+                EnableErrorChecks = "All";
+            else
+                ErrorCheckAllocations = _True;
+            break;
+        case 'b':
+            ErrorCheckBounds = _True;
+            break;
+        case 'e':
+            ErrorCheckEnumRange = _True;
+            break;
+        case 'n':
+            EnableErrorChecks = "None";
+            break;
+        case 'r':
+            ErrorCheckRefPointers = _True;
+            break;
+        case 's':
+            ErrorCheckStubData = _True;
+            break;
+        default:
+            found = false;
+        }
+        break;
+    case 0x5eb7af2: // /header filename
+        offset = 5;
+    case 0x0000358: // /h filename
+        HeaderFileName = option + offset + 3;
+        break;
+    case 0x0035ff4: // /iid filename
+        InterfaceIdentifierFileName = option+5;
+        break;
+    case 0x64b7933: // /mktyplib203
+        MkTypLibCompatible = _True;
+        break;
+    case 0x64ceb12: // /newtlb
+        TypeLibFormat = "NewFormat";
+        break;
+    case 0x8e0b0a2: // /no_def_idir
+        IgnoreStandardIncludePath = _True;
+        break;
+    case 0x65635ef: // /nologo
+        SuppressStartupBanner = _True;
+        break;
+    case 0x695e9f4: // /no_robust
+        ValidateAllParameters = _False;
+        break;
+    case 0x3656b22: // /notlb
+        GenerateTypeLibrary = _True;
+        break;
+    case 0x556dbee: // /no_warn
+        SuppressCompilerWarnings = _True;
+        break;
+    case 0x000035f: // /o filename
+        RedirectOutputAndErrors = option+3;
+        break;
+    case 0x662bb12: // /oldtlb
+        TypeLibFormat = "OldFormat";
+        break;
+    case 0x00366c4: // /out directory
+        OutputDirectory = option+5;
+        break;
+    case 0x36796f9: // /proxy filename
+        ProxyFileName = option+7;
+        break;
+    case 0x6959c94: // /robust
+        ValidateAllParameters = _True;
+        break;
+    case 0x69c9cf2: // /server {none|stub}
+        if(*(option+8) == 's')
+            GenerateServerFiles = "Stub";
+        else
+            GenerateServerFiles = "None";
+        break;
+    case 0x36aabb2: // /sstub filename
+        ServerStubFile = option+7;
+        break;
+    case 0x0036b22: // /tlb filename
+        TypeLibraryName = option+5;
+        break;
+    case 0x36e0162: // /win32
+        TargetEnvironment = "Win32";
+        break;
+    case 0x36e0194: // /win64
+        TargetEnvironment = "Itanium";
+        break;
+    case 0x0003459: // /Oi
+    case 0x00345f3: // /Oic
+    case 0x0003463: // /Os
+    case 0x0003513: // /Zs
+    case 0x0035796: // /acf filename
+    case 0x3595cf4: // /c_ext
+    case 0xa64d3dd: // /confirm
+    case 0xa765b64: // /cpp_cmd cmd_line
+    case 0x03629f4: // /lcid
+    case 0x6495cc4: // /ms_ext
+    case 0x96c7a1e: // /ms_union
+    case 0x4996fa2: // /msc_ver <nnnn>
+    case 0x6555a40: // /no_cpp
+    case 0xf64d6a6: // /no_default_epv
+    case 0x6dd9384: // /no_format_opt
+    case 0x3655a70: // /nocpp
+    case 0x2b455a3: // /oldnames
+    case 0x0036696: // /osf
+    case 0x036679b: // /pack {N}
+    case 0x678bd38: // /prefix {all|client|server|switch}
+    case 0x96b702c: // /protocol {all|dce|ndr64}
+    case 0x3696aa3: // /rpcss
+    case 0x698ca60: // /savePP
+    case 0xce9b12b: // /syntax_check
+    case 0xc9b5f16: // /use_epv
+        AdditionalOptions += option;
+        break;
+    default:
+        // /W{0|1|2|3|4} case
+        if(*(option+1) == 'W') {
+            switch (*(option+2)) {
+            case '0':
+                WarningLevel = "0";
+                break;
+            case '1':
+                WarningLevel = "1";
+                break;
+            case '2':
+                WarningLevel = "2";
+                break;
+            case '3':
+                WarningLevel = "3";
+                break;
+            case '4':
+                WarningLevel = "4";
+                break;
+            default:
+                found = false;
+            }
+        }
+        break;
+    }
+    if(!found)
+        warn_msg(WarnLogic, "Could not parse MIDL option: %s", option);
+    return true;
+}
+
+// VCLibrarianTool --------------------------------------------------
+VCXLibrarianTool::VCXLibrarianTool()
+    :        IgnoreAllDefaultLibraries(unset),
+        LinkTimeCodeGeneration(unset),
+        SuppressStartupBanner(_True),
+        TreatLibWarningAsErrors(unset),
+        Verbose(unset)
+{
+}
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXLibrarianTool &tool)
+{
+    return xml
+        << tag(_Link)
+            << attrTagX(_AdditionalDependencies, tool.AdditionalDependencies, ";")
+            << attrTagX(_AdditionalLibraryDirectories, tool.AdditionalLibraryDirectories, ";")
+            << attrTagX(_AdditionalOptions, tool.AdditionalOptions, " ")
+            << attrTagS(_DisplayLibrary, tool.DisplayLibrary)
+            << attrTagS(_ErrorReporting, tool.ErrorReporting)
+            << attrTagX(_ExportNamedFunctions, tool.ExportNamedFunctions, ";")
+            << attrTagX(_ForceSymbolReferences, tool.ForceSymbolReferences, ";")
+            << attrTagT(_IgnoreAllDefaultLibraries, tool.IgnoreAllDefaultLibraries)
+            << attrTagX(_IgnoreSpecificDefaultLibraries, tool.IgnoreSpecificDefaultLibraries, ";")
+            << attrTagT(_LinkTimeCodeGeneration, tool.LinkTimeCodeGeneration)
+            << attrTagS(_ModuleDefinitionFile, tool.ModuleDefinitionFile)
+            << attrTagS(_Name, tool.Name)
+            << attrTagS(_OutputFile, tool.OutputFile)
+            << attrTagX(_RemoveObjects, tool.RemoveObjects, ";")
+            << attrTagS(_SubSystem, tool.SubSystem)
+            << attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
+            << attrTagS(_TargetMachine, tool.TargetMachine)
+            << attrTagT(_TreatLibWarningAsErrors, tool.TreatLibWarningAsErrors)
+            << attrTagT(_Verbose, tool.Verbose)
+        << closetag(_Link);
+}
+
+// VCCustomBuildTool ------------------------------------------------
+VCXCustomBuildTool::VCXCustomBuildTool()
+{
+    ToolName = "VCXCustomBuildTool";
+}
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXCustomBuildTool &tool)
+{
+    // The code below offers two ways to split custom build step commands.
+    // Normally the $$escape_expand(\n\t) is used in a project file, which is correctly translated
+    // in all generators. However, if you use $$escape_expand(\n\r) (or \n\h) instead, the VCPROJ
+    // generator will instead of binding the commands with " && " will insert a proper newline into
+    // the VCPROJ file. We sometimes use this method of splitting commands if the custom buildstep
+    // contains a command-line which is too big to run on certain OS.
+    QString cmds;
+    int end = tool.CommandLine.count();
+    for(int i = 0; i < end; ++i) {
+        QString cmdl = tool.CommandLine.at(i);
+        if (cmdl.contains("\r\t")) {
+            if (i == end - 1)
+                cmdl = cmdl.trimmed();
+            cmdl.replace("\r\t", " && ");
+        } else if (cmdl.contains("\r\n")) {
+            ;
+        } else if (cmdl.contains("\r\\h")) {
+            // The above \r\n should work, but doesn't, so we have this hack
+            cmdl.replace("\r\\h", "\r\n");
+        } else {
+            if (i < end - 1)
+                cmdl += " && ";
+        }
+        cmds += cmdl;
+    }
+
+    if ( !tool.AdditionalDependencies.isEmpty() )
+    {
+        xml << tag("AdditionalInputs")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.ConfigName))
+            << valueTagDefX(tool.AdditionalDependencies, "AdditionalInputs", ";");
+    }
+
+    if( !cmds.isEmpty() )
+    {
+        xml << tag("Command")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.ConfigName))
+            << valueTag(cmds);
+    }
+
+    if ( !tool.Description.isEmpty() )
+    {
+        xml << tag("Message")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.ConfigName))
+            << valueTag(tool.Description);
+    }
+
+    if ( !tool.Outputs.isEmpty() )
+    {
+        xml << tag("Outputs")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.ConfigName))
+            << valueTagDefX(tool.Outputs, "Outputs", ";");
+    }
+
+    return xml;
+}
+
+// VCResourceCompilerTool -------------------------------------------
+VCXResourceCompilerTool::VCXResourceCompilerTool()
+    :   IgnoreStandardIncludePath(unset),
+        NullTerminateStrings(unset),
+        ShowProgress(unset),
+        SuppressStartupBanner(unset)
+{
+    PreprocessorDefinitions = QStringList("NDEBUG");
+}
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXResourceCompilerTool &tool)
+{
+    return xml
+        << tag(_ResourceCompile)
+            << attrTagX(_AdditionalIncludeDirectories, tool.AdditionalIncludeDirectories, ";")
+            << attrTagS(_AdditionalOptions, tool.AdditionalOptions)
+            << attrTagS(_Culture, tool.Culture)
+            << attrTagT(_IgnoreStandardIncludePath, tool.IgnoreStandardIncludePath)
+            << attrTagT(_NullTerminateStrings, tool.NullTerminateStrings)
+            << attrTagX(_PreprocessorDefinitions, tool.PreprocessorDefinitions, ";")
+            << attrTagS(_ResourceOutputFileName, tool.ResourceOutputFileName)
+            << attrTagT(_ShowProgress, tool.ShowProgress)
+            << attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
+            << attrTagS(_TrackerLogDirectory, tool.TrackerLogDirectory)
+            << attrTagS(_UndefinePreprocessorDefinitions, tool.UndefinePreprocessorDefinitions)
+        << closetag(_ResourceCompile);
+}
+
+// VCXDeploymentTool --------------------------------------------
+VCXDeploymentTool::VCXDeploymentTool()
+{
+    DeploymentTag = "DeploymentTool";
+    RemoteDirectory = "";
+}
+
+// http://msdn.microsoft.com/en-us/library/sa69he4t.aspx
+XmlOutput &operator<<(XmlOutput &xml, const VCXDeploymentTool &tool)
+{
+    if (tool.AdditionalFiles.isEmpty())
+        return xml;
+    return xml
+        << tag(tool.DeploymentTag)
+        << closetag(tool.DeploymentTag);
+}
+
+// VCEventTool -------------------------------------------------
+XmlOutput &operator<<(XmlOutput &xml, const VCXEventTool &tool)
+{
+    return xml
+        << tag(tool.EventName)
+        << attrTagS(_Command, tool.CommandLine)
+        << attrTagS(_Message, tool.Description)
+        << closetag(tool.EventName);
+}
+
+// VCXPostBuildEventTool ---------------------------------------------
+VCXPostBuildEventTool::VCXPostBuildEventTool()
+{
+    EventName = "PostBuildEvent";
+}
+
+// VCXPreBuildEventTool ----------------------------------------------
+VCXPreBuildEventTool::VCXPreBuildEventTool()
+{
+    EventName = "PreBuildEvent";
+}
+
+// VCXPreLinkEventTool -----------------------------------------------
+VCXPreLinkEventTool::VCXPreLinkEventTool()
+{
+    EventName = "PreLinkEvent";
+}
+
+// VCConfiguration --------------------------------------------------
+
+VCXConfiguration::VCXConfiguration()
+    :        ATLMinimizesCRunTimeLibraryUsage(unset),
+        BuildBrowserInformation(unset),
+        RegisterOutput(unset),
+        WholeProgramOptimization(unset)
+{
+    compiler.config = this;
+    linker.config = this;
+    idl.config = this;
+}
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXConfiguration &tool)
+{
+        xml << tag("PropertyGroup")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Name))
+            << attrTag("Label", "Configuration")
+            << attrTagS(_OutputDirectory, tool.OutputDirectory)
+            << attrTagT(_ATLMinimizesCRunTimeLibraryUsage, tool.ATLMinimizesCRunTimeLibraryUsage)
+            << attrTagT(_BuildBrowserInformation, tool.BuildBrowserInformation)
+            << attrTagS(_CharacterSet, tool.CharacterSet)
+            << attrTagS(_ConfigurationType, tool.ConfigurationType)
+            << attrTagS(_DeleteExtensionsOnClean, tool.DeleteExtensionsOnClean)
+            << attrTagS(_ImportLibrary, tool.ImportLibrary)
+            << attrTagS(_IntermediateDirectory, tool.IntermediateDirectory)
+            << attrTagS(_PrimaryOutput, tool.PrimaryOutput)
+            << attrTagS(_ProgramDatabase, tool.ProgramDatabase)
+            << attrTagT(_RegisterOutput, tool.RegisterOutput)
+            << attrTagS(_UseOfATL, tool.UseOfATL)
+            << attrTagS(_UseOfMfc, tool.UseOfMfc)
+            << attrTagT(_WholeProgramOptimization, tool.WholeProgramOptimization)
+        << closetag();
+    return xml;
+}
+// VCXFilter ---------------------------------------------------------
+VCXFilter::VCXFilter()
+    :   ParseFiles(unset),
+        Config(0)
+{
+    useCustomBuildTool = false;
+    useCompilerTool = false;
+}
+
+void VCXFilter::addFile(const QString& filename)
+{
+    Files += VCXFilterFile(filename);
+}
+
+void VCXFilter::addFile(const VCXFilterFile& fileInfo)
+{
+    Files += VCXFilterFile(fileInfo);
+}
+
+void VCXFilter::addFiles(const QStringList& fileList)
+{
+    for (int i = 0; i < fileList.count(); ++i)
+        addFile(fileList.at(i));
+}
+
+void VCXFilter::modifyPCHstage(QString str)
+{
+    bool autogenSourceFile = Project->autogenPrecompCPP;
+    bool pchThroughSourceFile = !Project->precompCPP.isEmpty();
+    bool isCFile = false;
+    for (QStringList::Iterator it = Option::c_ext.begin(); it != Option::c_ext.end(); ++it) {
+        if (str.endsWith(*it)) {
+            isCFile = true;
+            break;
+        }
+    }
+    bool isHFile = str.endsWith(".h") && (str == Project->precompH);
+    bool isCPPFile = pchThroughSourceFile && (str == Project->precompCPP);
+
+    if(!isCFile && !isHFile && !isCPPFile)
+        return;
+
+    if(isHFile && pchThroughSourceFile) {
+        if (autogenSourceFile) {
+            useCustomBuildTool = true;
+            QString toFile(Project->precompCPP);
+            CustomBuildTool.Description = "Generating precompiled header source file '" + toFile + "' ...";
+            CustomBuildTool.Outputs += toFile;
+
+            QStringList lines;
+            CustomBuildTool.CommandLine +=
+                "echo /*-------------------------------------------------------------------- >" + toFile;
+            lines << "* Precompiled header source file used by Visual Studio.NET to generate";
+            lines << "* the .pch file.";
+            lines << "*";
+            lines << "* Due to issues with the dependencies checker within the IDE, it";
+            lines << "* sometimes fails to recompile the PCH file, if we force the IDE to";
+            lines << "* create the PCH file directly from the header file.";
+            lines << "*";
+            lines << "* This file is auto-generated by qmake since no PRECOMPILED_SOURCE was";
+            lines << "* specified, and is used as the common stdafx.cpp. The file is only";
+            lines << "* generated when creating .vcxproj project files, and is not used for";
+            lines << "* command line compilations by nmake.";
+            lines << "*";
+            lines << "* WARNING: All changes made in this file will be lost.";
+            lines << "--------------------------------------------------------------------*/";
+            lines << "#include \"" + Project->precompHFilename + "\"";
+            foreach(QString line, lines)
+                CustomBuildTool.CommandLine += "echo " + line + ">>" + toFile;
+        }
+        return;
+    }
+
+    useCompilerTool = true;
+    // Setup PCH options
+    CompilerTool.PrecompiledHeader     = (isCFile ? "NotUsing" : "Create" );
+    CompilerTool.PrecompiledHeaderFile = (isCPPFile ? QString("$(INHERIT)") : QString("$(NOINHERIT)"));
+    CompilerTool.ForcedIncludeFiles       = QStringList("$(NOINHERIT)");
+}
+
+bool VCXFilter::addExtraCompiler(const VCXFilterFile &info)
+{
+    const QStringList &extraCompilers = Project->extraCompilerSources.value(info.file);
+    if (extraCompilers.isEmpty())
+        return false;
+
+    QString inFile = info.file;
+
+    // is the extracompiler rule on a file with a built in compiler?
+    const QStringList &objectMappedFile = Project->extraCompilerOutputs[inFile];
+    bool hasBuiltIn = false;
+    if (!objectMappedFile.isEmpty()) {
+        hasBuiltIn = Project->hasBuiltinCompiler(objectMappedFile.at(0));
+//        qDebug("*** Extra compiler file has object mapped file '%s' => '%s'", qPrintable(inFile), qPrintable(objectMappedFile.join(" ")));
+    }
+
+    CustomBuildTool.AdditionalDependencies.clear();
+    CustomBuildTool.CommandLine.clear();
+    CustomBuildTool.Description.clear();
+    CustomBuildTool.Outputs.clear();
+    CustomBuildTool.ToolPath.clear();
+    CustomBuildTool.ToolName = QLatin1String(_VCCustomBuildTool);
+
+    for (int x = 0; x < extraCompilers.count(); ++x) {
+        const QString &extraCompilerName = extraCompilers.at(x);
+
+        if (!Project->verifyExtraCompiler(extraCompilerName, inFile) && !hasBuiltIn)
+            continue;
+
+        // All information about the extra compiler
+        QString tmp_out = Project->project->first(extraCompilerName + ".output");
+        QString tmp_cmd = Project->project->variables()[extraCompilerName + ".commands"].join(" ");
+        QString tmp_cmd_name = Project->project->variables()[extraCompilerName + ".name"].join(" ");
+        QStringList tmp_dep = Project->project->variables()[extraCompilerName + ".depends"];
+        QString tmp_dep_cmd = Project->project->variables()[extraCompilerName + ".depend_command"].join(" ");
+        QStringList vars = Project->project->variables()[extraCompilerName + ".variables"];
+        QStringList configs = Project->project->variables()[extraCompilerName + ".CONFIG"];
+        bool combined = configs.indexOf("combine") != -1;
+
+        QString cmd, cmd_name, out;
+        QStringList deps, inputs;
+        // Variabel replacement of output name
+        out = Option::fixPathToTargetOS(
+                    Project->replaceExtraCompilerVariables(tmp_out, inFile, QString()),
+                    false);
+
+        // If file has built-in compiler, we've swapped the input and output of
+        // the command, as we in Visual Studio cannot have a Custom Buildstep on
+        // a file which uses a built-in compiler. We would in this case only get
+        // the result from the extra compiler. If 'hasBuiltIn' is true, we know
+        // that we're actually on the _output_file_ of the result, and we
+        // therefore swap inFile and out below, since the extra-compiler still
+        // must see it as the original way. If the result also has a built-in
+        // compiler, too bad..
+        if (hasBuiltIn) {
+            out = inFile;
+            inFile = objectMappedFile.at(0);
+        }
+
+        // Dependency for the output
+        if(!tmp_dep.isEmpty())
+            deps = tmp_dep;
+        if(!tmp_dep_cmd.isEmpty()) {
+            // Execute dependency command, and add every line as a dep
+            char buff[256];
+            QString dep_cmd = Project->replaceExtraCompilerVariables(tmp_dep_cmd, Option::fixPathToLocalOS(inFile, true, false), out);
+            if(Project->canExecute(dep_cmd)) {
+                if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
+                    QString indeps;
+                    while(!feof(proc)) {
+                        int read_in = (int)fread(buff, 1, 255, proc);
+                        if(!read_in)
+                            break;
+                        indeps += QByteArray(buff, read_in);
+                    }
+                    QT_PCLOSE(proc);
+                    if(!indeps.isEmpty()) {
+                        QStringList extradeps = indeps.split(QLatin1Char('\n'));
+                        for (int i = 0; i < extradeps.count(); ++i) {
+                            QString dd = extradeps.at(i).simplified();
+                            if (!dd.isEmpty())
+                                deps += Project->fileFixify(dd);
+                        }
+                    }
+                }
+            }
+        }
+        for (int i = 0; i < deps.count(); ++i)
+            deps[i] = Option::fixPathToTargetOS(
+                        Project->replaceExtraCompilerVariables(deps.at(i), inFile, out),
+                        false).trimmed();
+        // Command for file
+        if (combined) {
+            // Add dependencies for each file
+            QStringList tmp_in = Project->project->variables()[extraCompilerName + ".input"];
+            for (int a = 0; a < tmp_in.count(); ++a) {
+                const QStringList &files = Project->project->variables()[tmp_in.at(a)];
+                for (int b = 0; b < files.count(); ++b) {
+                    deps += Project->findDependencies(files.at(b));
+                    inputs += Option::fixPathToTargetOS(files.at(b), false);
+                }
+            }
+            deps += inputs; // input files themselves too..
+
+            // Replace variables for command w/all input files
+            // ### join gives path issues with directories containing spaces!
+            cmd = Project->replaceExtraCompilerVariables(tmp_cmd,
+                                                         inputs.join(" "),
+                                                         out);
+        } else {
+            deps += inFile; // input file itself too..
+            cmd = Project->replaceExtraCompilerVariables(tmp_cmd,
+                                                         inFile,
+                                                         out);
+        }
+        // Name for command
+    if(!tmp_cmd_name.isEmpty()) {
+        cmd_name = Project->replaceExtraCompilerVariables(tmp_cmd_name, inFile, out);
+	} else {
+        int space = cmd.indexOf(' ');
+        if(space != -1)
+        cmd_name = cmd.left(space);
+        else
+        cmd_name = cmd;
+        if((cmd_name[0] == '\'' || cmd_name[0] == '"') &&
+        cmd_name[0] == cmd_name[cmd_name.length()-1])
+        cmd_name = cmd_name.mid(1,cmd_name.length()-2);
+	}
+
+        // Fixify paths
+        for (int i = 0; i < deps.count(); ++i)
+            deps[i] = Option::fixPathToTargetOS(deps[i], false);
+
+
+        // Output in info.additionalFile -----------
+        if (!CustomBuildTool.Description.isEmpty())
+            CustomBuildTool.Description += " & ";
+        CustomBuildTool.Description += cmd_name;
+        CustomBuildTool.CommandLine += cmd.trimmed().split("\n", QString::SkipEmptyParts);
+        int space = cmd.indexOf(' ');
+        QFileInfo finf(cmd.left(space));
+        if (CustomBuildTool.ToolPath.isEmpty())
+            CustomBuildTool.ToolPath += Option::fixPathToTargetOS(finf.path());
+        CustomBuildTool.Outputs += out;
+
+        deps += CustomBuildTool.AdditionalDependencies;
+        deps += cmd.left(cmd.indexOf(' '));
+        // Make sure that all deps are only once
+        QMap<QString, bool> uniqDeps;
+        for (int c = 0; c < deps.count(); ++c) {
+            QString aDep = deps.at(c).trimmed();
+            if (!aDep.isEmpty())
+                uniqDeps[aDep] = false;
+        }
+        CustomBuildTool.AdditionalDependencies = uniqDeps.keys();
+    }
+
+    // Ensure that none of the output files are also dependencies. Or else, the custom buildstep
+    // will be rebuild every time, even if nothing has changed.
+    foreach(QString output, CustomBuildTool.Outputs) {
+        CustomBuildTool.AdditionalDependencies.removeAll(output);
+    }
+
+    useCustomBuildTool = !CustomBuildTool.CommandLine.isEmpty();
+    return useCustomBuildTool;
+}
+
+bool VCXFilter::outputFileConfig(XmlOutput &xml, XmlOutput &xmlFilter, const QString &filename, const QString &filtername, bool fileAllreadyAdded)
+{
+    bool fileAdded = false;
+
+    // Clearing each filter tool
+    useCustomBuildTool = false;
+    useCompilerTool = false;
+    CustomBuildTool = VCXCustomBuildTool();
+    CompilerTool = VCXCLCompilerTool();
+
+    // Unset some default options
+    CompilerTool.BufferSecurityCheck = unset;
+    CompilerTool.DebugInformationFormat = "";
+    CompilerTool.ExceptionHandling = "";
+    //CompilerTool.Optimization = optimizeDefault;
+    CompilerTool.ProgramDataBaseFileName.clear();
+    CompilerTool.RuntimeLibrary = "";
+    //CompilerTool.WarningLevel = warningLevelUnknown;
+    CompilerTool.config = Config;
+
+    bool inBuild = false;
+    VCXFilterFile info;
+    for (int i = 0; i < Files.count(); ++i) {
+        if (Files.at(i).file == filename) {
+            info = Files.at(i);
+            inBuild = true;
+        }
+    }
+    inBuild &= !info.excludeFromBuild;
+
+    if (inBuild) {
+        addExtraCompiler(info);
+        if(Project->usePCH)
+            modifyPCHstage(info.file);
+    } else {
+        // Excluded files uses an empty compiler stage
+        if(info.excludeFromBuild)
+            useCompilerTool = true;
+    }
+
+    // Actual XML output ----------------------------------
+    if(useCustomBuildTool || useCompilerTool || !inBuild) {
+
+        if (useCustomBuildTool)
+        {
+            CustomBuildTool.ConfigName = (*Config).Name;
+
+            if ( !fileAllreadyAdded ) {
+
+                fileAdded = true;
+
+                xmlFilter << tag("CustomBuild")
+                    << attrTag("Include",Option::fixPathToLocalOS(filename))
+                    << attrTagS("Filter", filtername);
+
+                xml << tag("CustomBuild")
+                    << attrTag("Include",Option::fixPathToLocalOS(filename));
+
+                if ( filtername == "Form Files" || filtername == "Generated Files" || filtername == "Resource Files" )
+                    xml << attrTagS("FileType", "Document");
+            }
+
+            xml << CustomBuildTool;
+        }
+
+        if ( !fileAdded && !fileAllreadyAdded )
+        {
+            fileAdded = true;
+
+            if (filtername == "Source Files") {
+
+                xmlFilter << tag("ClCompile")
+                          << attrTag("Include",Option::fixPathToLocalOS(filename))
+                          << attrTagS("Filter", filtername);
+
+                xml << tag("ClCompile")
+                    << attrTag("Include",Option::fixPathToLocalOS(filename));
+
+            } else if(filtername == "Header Files") {
+
+                xmlFilter << tag("ClInclude")
+                    << attrTag("Include",Option::fixPathToLocalOS(filename))
+                    << attrTagS("Filter", filtername);
+
+                xml << tag("ClInclude")
+                    << attrTag("Include",Option::fixPathToLocalOS(filename));
+            } else if(filtername == "Generated Files" || filtername == "Form Files") {
+
+                if (filename.endsWith(".h")) {
+
+                    xmlFilter << tag("ClInclude")
+                              << attrTag("Include",Option::fixPathToLocalOS(filename))
+                              << attrTagS("Filter", filtername);
+
+                    xml << tag("ClInclude")
+                        << attrTag("Include",Option::fixPathToLocalOS(filename));
+                } else if(filename.endsWith(".cpp")) {
+
+                    xmlFilter << tag("ClCompile")
+                              << attrTag("Include",Option::fixPathToLocalOS(filename))
+                              << attrTagS("Filter", filtername);
+
+                    xml << tag("ClCompile")
+                        << attrTag("Include",Option::fixPathToLocalOS(filename));
+                } else {
+
+                    xmlFilter << tag("CustomBuild")
+                              << attrTag("Include",Option::fixPathToLocalOS(filename))
+                              << attrTagS("Filter", filtername);
+
+                    xml << tag("CustomBuild")
+                        << attrTag("Include",Option::fixPathToLocalOS(filename));
+                }
+            }
+        }
+
+        if(!inBuild) {
+
+            xml << tag("ExcludedFromBuild")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg((*Config).Name))
+                << valueTag("true");
+        }
+
+        if (useCompilerTool) {
+
+            if ( !CompilerTool.ForcedIncludeFiles.isEmpty() ) {
+                xml << tag("ForcedIncludeFiles")
+                    << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg((*Config).Name))
+                    << valueTagX(CompilerTool.ForcedIncludeFiles);
+            }
+
+            if ( !CompilerTool.PrecompiledHeaderFile.isEmpty() ) {
+
+                xml << tag("PrecompiledHeaderFile")
+                    << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg((*Config).Name))
+                    << valueTag(CompilerTool.PrecompiledHeaderFile);
+            }
+
+            if ( !CompilerTool.PrecompiledHeader.isEmpty() ) {
+
+                xml << tag("PrecompiledHeader")
+                    << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg((*Config).Name))
+                    << valueTag(CompilerTool.PrecompiledHeader);
+            }
+
+            //xml << CompilerTool;
+        }
+    }
+
+    return fileAdded;
+}
+
+
+// VCXProjectSingleConfig --------------------------------------------
+VCXFilter nullFilter;
+VCXFilter& VCXProjectSingleConfig::filterForExtraCompiler(const QString &compilerName)
+{
+    for (int i = 0; i < ExtraCompilersFiles.count(); ++i)
+        if (ExtraCompilersFiles.at(i).Name == compilerName)
+            return ExtraCompilersFiles[i];
+    return nullFilter;
+}
+
+
+XmlOutput &operator<<(XmlOutput &xml, const VCXProjectSingleConfig &tool)
+{
+    xml.setIndentString("  ");
+
+    xml << decl("1.0", "utf-8")
+        << tag("Project")
+        << attrTag("DefaultTargets","Build")
+        << attrTag("ToolsVersion", "4.0")
+        << attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003")
+        << tag("ItemGroup")
+        << attrTag("Label", "ProjectConfigurations");
+
+    xml << tag("ProjectConfiguration")
+        << attrTag("Include" , tool.Configuration.Name)
+        << tagValue("Configuration", tool.Configuration.ConfigurationName)
+        << tagValue("Platform", tool.PlatformName)
+        << closetag();
+
+    xml << closetag()
+        << tag("PropertyGroup")
+        << attrTag("Label", "Globals")
+        << tagValue("ProjectGuid", tool.ProjectGUID)
+        << tagValue("RootNamespace", tool.Name)
+        << tagValue("Keyword", tool.Keyword)
+        << closetag();
+
+    // config part.
+    xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");
+
+    xml << tool.Configuration;
+
+    xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props");
+
+    // Extension settings
+    xml << tag("ImportGroup")
+        << attrTag("Label", "ExtensionSettings")
+        << closetag();
+
+    // PropertySheets
+    xml << tag("ImportGroup")
+        << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+        << attrTag("Label", "PropertySheets");
+
+    xml << tag("Import")
+        << attrTag("Project", "$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props")
+        << attrTag("Condition", "exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')")
+        << closetag()
+        << closetag();
+
+
+    // UserMacros
+    xml << tag("PropertyGroup")
+        << attrTag("Label", "UserMacros")
+        << closetag();
+
+    xml << tag("PropertyGroup");
+
+    if ( !tool.Configuration.OutputDirectory.isEmpty() ) {
+        xml<< tag("OutDir")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTag(tool.Configuration.OutputDirectory);
+    }
+    if ( !tool.Configuration.IntermediateDirectory.isEmpty() ) {
+        xml<< tag("IntDir")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTag(tool.Configuration.IntermediateDirectory);
+    }
+    if ( !tool.Configuration.TargetName.isEmpty() ) {
+        xml<< tag("TargetName")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTag(tool.Configuration.TargetName);
+    }
+
+    if ( tool.Configuration.linker.IgnoreImportLibrary != unset) {
+        xml<< tag("IgnoreImportLibrary")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTagT(tool.Configuration.linker.IgnoreImportLibrary);
+    }
+
+    if ( tool.Configuration.linker.LinkIncremental != unset) {
+        xml<< tag("LinkIncremental")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTagT(tool.Configuration.linker.LinkIncremental);
+    }
+
+    if ( tool.Configuration.preBuild.UseInBuild != unset )
+    {
+        xml<< tag("PreBuildEventUseInBuild")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTagT(tool.Configuration.preBuild.UseInBuild);
+    }
+
+    if ( tool.Configuration.preLink.UseInBuild != unset )
+    {
+        xml<< tag("PreLinkEventUseInBuild")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTagT(tool.Configuration.preLink.UseInBuild);
+    }
+
+    if ( tool.Configuration.postBuild.UseInBuild != unset )
+    {
+        xml<< tag("PostBuildEventUseInBuild")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name))
+            << valueTagT(tool.Configuration.postBuild.UseInBuild);
+    }
+    xml << closetag();
+
+    xml << tag("ItemDefinitionGroup")
+        << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.Configuration.Name));
+
+    // ClCompile
+    xml << tool.Configuration.compiler;
+
+    // Link
+    xml << tool.Configuration.linker;
+
+    // Midl
+    xml << tool.Configuration.idl;
+
+    // ResourceCompiler
+    xml << tool.Configuration.resource;
+
+    xml << closetag();
+
+    QFile filterFile;
+    filterFile.setFileName(Option::output.fileName().append(".filters"));
+    filterFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate);
+    QTextStream ts(&filterFile);
+    XmlOutput xmlFilter(ts, XmlOutput::NoConversion);
+
+    xmlFilter.setIndentString("  ");
+
+    xmlFilter << decl("1.0", "utf-8")
+              << tag("Project")
+              << attrTag("ToolsVersion", "4.0")
+              << attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
+
+    xmlFilter << tag("ItemGroup");
+
+    VCXProject tempProj;
+    tempProj.SingleProjects += tool;
+
+    tempProj.addFilters(xmlFilter, "Form Files");
+    tempProj.addFilters(xmlFilter, "Generated Files");
+    tempProj.addFilters(xmlFilter, "Header Files");
+    tempProj.addFilters(xmlFilter, "LexYacc Files");
+    tempProj.addFilters(xmlFilter, "Resource Files");
+    tempProj.addFilters(xmlFilter, "Source Files");
+    tempProj.addFilters(xmlFilter, "Translation Files");
+    xmlFilter << closetag();
+
+    tempProj.outputFilter(xml, xmlFilter, "Source Files");
+    tempProj.outputFilter(xml, xmlFilter, "Header Files");
+    tempProj.outputFilter(xml, xmlFilter, "Generated Files");
+    tempProj.outputFilter(xml, xmlFilter, "LexYacc Files");
+    tempProj.outputFilter(xml, xmlFilter, "Translation Files");
+    tempProj.outputFilter(xml, xmlFilter, "Form Files");
+    tempProj.outputFilter(xml, xmlFilter, "Resource Files");
+
+    for (int x = 0; x < tempProj.ExtraCompilers.count(); ++x) {
+        tempProj.outputFilter(xml, xmlFilter, tempProj.ExtraCompilers.at(x));
+    }
+
+    xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
+
+    xml << tag("ImportGroup")
+        << attrTag("Label", "ExtensionTargets")
+        << closetag();
+
+    return xml;
+}
+
+
+// Tree file generation ---------------------------------------------
+void XTreeNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCXProject &tool, const QString &filter) {
+
+    if (children.size()) {
+        // Filter
+        ChildrenMap::ConstIterator it, end = children.constEnd();
+        if (!tagName.isEmpty()) {
+            xmlFilter << tag("Filter")
+                      << attrTag("Include", tagName)
+                      << attrTagS("Extensions", "");
+        }
+        // First round, do nested filters
+        for (it = children.constBegin(); it != end; ++it)
+            if ((*it)->children.size())
+                (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter);
+        // Second round, do leafs
+        for (it = children.constBegin(); it != end; ++it)
+            if (!(*it)->children.size())
+                (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter);
+
+        if (!tagName.isEmpty())
+            xml << closetag("Filter");
+    } else {
+        // Leaf
+        tool.outputFileConfigs(xml, xmlFilter, info, filter);
+    }
+}
+
+
+// Flat file generation ---------------------------------------------
+void XFlatNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &/*tagName*/, VCXProject &tool, const QString &filter) {
+    if (children.size()) {
+        ChildrenMapFlat::ConstIterator it = children.constBegin();
+        ChildrenMapFlat::ConstIterator end = children.constEnd();
+        xml << tag(_ItemGroup);
+        xmlFilter << tag(_ItemGroup);
+        for (; it != end; ++it) {
+            tool.outputFileConfigs(xml, xmlFilter, (*it), filter);
+        }
+        xml << closetag();
+        xmlFilter << closetag();
+    }
+}
+
+
+// VCXProject --------------------------------------------------------
+// Output all configurations (by filtername) for a file (by info)
+// A filters config output is in VCXFilter.outputFileConfig()
+void VCXProject::outputFileConfigs(XmlOutput &xml,
+                                  XmlOutput &xmlFilter,
+                                  const VCXFilterFile &info,
+                                  const QString &filtername)
+{
+    // We need to check if the file has any custom build step.
+    // If there is one then it has to be included with "CustomBuild Include"
+    bool fileAdded = false;
+
+    for (int i = 0; i < SingleProjects.count(); ++i) {
+        VCXFilter filter;
+        if (filtername == "Root Files") {
+            filter = SingleProjects.at(i).RootFiles;
+        } else if (filtername == "Source Files") {
+            filter = SingleProjects.at(i).SourceFiles;
+        } else if (filtername == "Header Files") {
+            filter = SingleProjects.at(i).HeaderFiles;
+        } else if (filtername == "Generated Files") {
+            filter = SingleProjects.at(i).GeneratedFiles;
+        } else if (filtername == "LexYacc Files") {
+            filter = SingleProjects.at(i).LexYaccFiles;
+        } else if (filtername == "Translation Files") {
+            filter = SingleProjects.at(i).TranslationFiles;
+        } else if (filtername == "Form Files") {
+            filter = SingleProjects.at(i).FormFiles;
+        } else if (filtername == "Resource Files") {
+            filter = SingleProjects.at(i).ResourceFiles;
+        } else {
+            // ExtraCompilers
+            filter = SingleProjects[i].filterForExtraCompiler(filtername);
+        }
+
+        if (filter.Config) // only if the filter is not empty
+            if (filter.outputFileConfig(xml, xmlFilter, info.file, filtername, fileAdded)) // only add it once.
+                fileAdded = true;
+    }
+
+    if ( !fileAdded )
+    {
+        if (filtername == "Source Files") {
+
+            xmlFilter << tag("ClCompile")
+                      << attrTag("Include",Option::fixPathToLocalOS(info.file))
+                      << attrTagS("Filter", filtername);
+
+            xml << tag("ClCompile")
+                << attrTag("Include",Option::fixPathToLocalOS(info.file));
+
+        } else if(filtername == "Header Files") {
+
+            xmlFilter << tag("ClInclude")
+                << attrTag("Include",Option::fixPathToLocalOS(info.file))
+                << attrTagS("Filter", filtername);
+
+            xml << tag("ClInclude")
+                << attrTag("Include",Option::fixPathToLocalOS(info.file));
+        } else if(filtername == "Generated Files" || filtername == "Form Files") {
+
+            if (info.file.endsWith(".h")) {
+
+                xmlFilter << tag("ClInclude")
+                          << attrTag("Include",Option::fixPathToLocalOS(info.file))
+                          << attrTagS("Filter", filtername);
+
+                xml << tag("ClInclude")
+                    << attrTag("Include",Option::fixPathToLocalOS(info.file));
+            } else if(info.file.endsWith(".cpp")) {
+
+                xmlFilter << tag("ClCompile")
+                          << attrTag("Include",Option::fixPathToLocalOS(info.file))
+                          << attrTagS("Filter", filtername);
+
+                xml << tag("ClCompile")
+                    << attrTag("Include",Option::fixPathToLocalOS(info.file));
+            } else {
+
+                xmlFilter << tag("CustomBuild")
+                          << attrTag("Include",Option::fixPathToLocalOS(info.file))
+                          << attrTagS("Filter", filtername);
+
+                xml << tag("CustomBuild")
+                    << attrTag("Include",Option::fixPathToLocalOS(info.file));
+            }
+
+        } else {
+
+            xmlFilter << tag("None")
+                      << attrTag("Include",Option::fixPathToLocalOS(info.file))
+                      << attrTagS("Filter", filtername);
+
+                xml << tag("None")
+                    << attrTag("Include",Option::fixPathToLocalOS(info.file));
+        }
+    }
+
+    xml << closetag();
+    xmlFilter << closetag();
+}
+
+// outputs a given filter for all existing configurations of a project
+void VCXProject::outputFilter(XmlOutput &xml,
+                              XmlOutput &xmlFilter,
+                              const QString &filtername)
+{
+    XNode *root;
+    if (SingleProjects.at(0).flat_files)
+        root = new XFlatNode;
+    else
+        root = new XTreeNode;
+
+    QString name, extfilter;
+    triState parse;
+
+    for (int i = 0; i < SingleProjects.count(); ++i) {
+        VCXFilter filter;
+        if (filtername == "Root Files") {
+            filter = SingleProjects.at(i).RootFiles;
+        } else if (filtername == "Source Files") {
+            filter = SingleProjects.at(i).SourceFiles;
+        } else if (filtername == "Header Files") {
+            filter = SingleProjects.at(i).HeaderFiles;
+        } else if (filtername == "Generated Files") {
+            filter = SingleProjects.at(i).GeneratedFiles;
+        } else if (filtername == "LexYacc Files") {
+            filter = SingleProjects.at(i).LexYaccFiles;
+        } else if (filtername == "Translation Files") {
+            filter = SingleProjects.at(i).TranslationFiles;
+        } else if (filtername == "Form Files") {
+            filter = SingleProjects.at(i).FormFiles;
+        } else if (filtername == "Resource Files") {
+            filter = SingleProjects.at(i).ResourceFiles;
+        } else {
+            // ExtraCompilers
+            filter = SingleProjects[i].filterForExtraCompiler(filtername);
+        }
+
+        // Merge all files in this filter to root tree
+        for (int x = 0; x < filter.Files.count(); ++x)
+            root->addElement(filter.Files.at(x));
+
+        // Save filter setting from first filter. Next filters
+        // may differ but we cannot handle that. (ex. extfilter)
+        if (name.isEmpty()) {
+            name = filter.Name;
+            extfilter = filter.Filter;
+            parse = filter.ParseFiles;
+        }
+    }
+
+    if (!root->hasElements())
+        return;
+
+    root->generateXML(xml, xmlFilter, "", *this, filtername); // output root tree
+}
+
+
+void VCXProject::addFilters(XmlOutput &xmlFilter,
+                            const QString &filtername)
+{
+    bool added = false;
+
+    for (int i = 0; i < SingleProjects.count(); ++i) {
+        VCXFilter filter;
+        if (filtername == "Root Files") {
+            filter = SingleProjects.at(i).RootFiles;
+        } else if (filtername == "Source Files") {
+            filter = SingleProjects.at(i).SourceFiles;
+        } else if (filtername == "Header Files") {
+            filter = SingleProjects.at(i).HeaderFiles;
+        } else if (filtername == "Generated Files") {
+            filter = SingleProjects.at(i).GeneratedFiles;
+        } else if (filtername == "LexYacc Files") {
+            filter = SingleProjects.at(i).LexYaccFiles;
+        } else if (filtername == "Translation Files") {
+            filter = SingleProjects.at(i).TranslationFiles;
+        } else if (filtername == "Form Files") {
+            filter = SingleProjects.at(i).FormFiles;
+        } else if (filtername == "Resource Files") {
+            filter = SingleProjects.at(i).ResourceFiles;
+        } else {
+            // ExtraCompilers
+            filter = SingleProjects[i].filterForExtraCompiler(filtername);
+        }
+
+        if(!filter.Files.isEmpty() && !added) {
+            added = true;
+            xmlFilter << tag("Filter")
+                      << attrTag("Include", filtername)
+                      << attrTagS("UniqueIdentifier", filter.Guid)
+                      << attrTagS("Extensions", filter.Filter)
+                      << attrTagT("ParseFiles", filter.ParseFiles)
+                      << closetag();
+        }
+    }
+}
+
+
+XmlOutput &operator<<(XmlOutput &xml, VCXProject &tool)
+{
+
+    if (tool.SingleProjects.count() == 0) {
+        warn_msg(WarnLogic, "Generator: .NET: no single project in merge project, no output");
+        return xml;
+    }
+
+    xml.setIndentString("  ");
+
+    xml << decl("1.0", "utf-8")
+        << tag("Project")
+        << attrTag("DefaultTargets","Build")
+        << attrTag("ToolsVersion", "4.0")
+        << attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003")
+        << tag("ItemGroup")
+        << attrTag("Label", "ProjectConfigurations");
+
+    for (int i = 0; i < tool.SingleProjects.count(); ++i) {
+        xml << tag("ProjectConfiguration")
+            << attrTag("Include" , tool.SingleProjects.at(i).Configuration.Name)
+            << tagValue("Configuration", tool.SingleProjects.at(i).Configuration.ConfigurationName)
+            << tagValue("Platform", tool.SingleProjects.at(i).PlatformName)
+            << closetag();
+    }
+
+    xml << closetag()
+        << tag("PropertyGroup")
+        << attrTag("Label", "Globals")
+        << tagValue("ProjectGuid", tool.ProjectGUID)
+        << tagValue("RootNamespace", tool.Name)
+        << tagValue("Keyword", tool.Keyword)
+        << closetag();
+
+    // config part.
+    xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");
+    for (int i = 0; i < tool.SingleProjects.count(); ++i)
+        xml << tool.SingleProjects.at(i).Configuration;
+    xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props");
+
+    // Extension settings
+    xml << tag("ImportGroup")
+        << attrTag("Label", "ExtensionSettings")
+        << closetag();
+
+    // PropertySheets
+    for (int i = 0; i < tool.SingleProjects.count(); ++i) {
+        xml << tag("ImportGroup")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+            << attrTag("Label", "PropertySheets");
+
+        xml << tag("Import")
+            << attrTag("Project", "$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props")
+            << attrTag("Condition", "exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')")
+            << closetag()
+            << closetag();
+    }
+
+    // UserMacros
+    xml << tag("PropertyGroup")
+        << attrTag("Label", "UserMacros")
+        << closetag();
+
+    xml << tag("PropertyGroup");
+    for (int i = 0; i < tool.SingleProjects.count(); ++i) {
+
+        if ( !tool.SingleProjects.at(i).Configuration.OutputDirectory.isEmpty() ) {
+            xml << tag("OutDir")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTag(tool.SingleProjects.at(i).Configuration.OutputDirectory);
+        }
+        if ( !tool.SingleProjects.at(i).Configuration.IntermediateDirectory.isEmpty() ) {
+            xml << tag("IntDir")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTag(tool.SingleProjects.at(i).Configuration.IntermediateDirectory);
+        }
+        if ( !tool.SingleProjects.at(i).Configuration.TargetName.isEmpty() ) {
+            xml << tag("TargetName")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTag(tool.SingleProjects.at(i).Configuration.TargetName);
+        }
+
+        if ( tool.SingleProjects.at(i).Configuration.linker.IgnoreImportLibrary != unset) {
+            xml << tag("IgnoreImportLibrary")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTagT(tool.SingleProjects.at(i).Configuration.linker.IgnoreImportLibrary);
+        }
+
+        if ( tool.SingleProjects.at(i).Configuration.linker.LinkIncremental != unset) {
+            xml << tag("LinkIncremental")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTagT(tool.SingleProjects.at(i).Configuration.linker.LinkIncremental);
+        }
+
+        if ( tool.SingleProjects.at(i).Configuration.preBuild.UseInBuild != unset )
+        {
+            xml << tag("PreBuildEventUseInBuild")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTagT(tool.SingleProjects.at(i).Configuration.preBuild.UseInBuild);
+        }
+
+        if ( tool.SingleProjects.at(i).Configuration.preLink.UseInBuild != unset )
+        {
+            xml << tag("PreLinkEventUseInBuild")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTagT(tool.SingleProjects.at(i).Configuration.preLink.UseInBuild);
+        }
+
+        if ( tool.SingleProjects.at(i).Configuration.postBuild.UseInBuild != unset )
+        {
+            xml << tag("PostBuildEventUseInBuild")
+                << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name))
+                << valueTagT(tool.SingleProjects.at(i).Configuration.postBuild.UseInBuild);
+        }
+    }
+    xml << closetag();
+
+    for (int i = 0; i < tool.SingleProjects.count(); ++i) {
+        xml << tag("ItemDefinitionGroup")
+            << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name));
+
+        // ClCompile
+        xml << tool.SingleProjects.at(i).Configuration.compiler;
+
+        // Link
+        xml << tool.SingleProjects.at(i).Configuration.linker;
+
+        // Midl
+        xml << tool.SingleProjects.at(i).Configuration.idl;
+
+        // ResourceCompiler
+        xml << tool.SingleProjects.at(i).Configuration.resource;
+
+        xml << closetag();
+    }
+
+    // The file filters are added in a separate file for MSBUILD.
+    QFile filterFile;
+    filterFile.setFileName(Option::output.fileName().append(".filters"));
+    filterFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate);
+    QTextStream ts(&filterFile);
+    XmlOutput xmlFilter(ts, XmlOutput::NoConversion);
+
+    xmlFilter.setIndentString("  ");
+
+    xmlFilter << decl("1.0", "utf-8")
+              << tag("Project")
+              << attrTag("ToolsVersion", "4.0")
+              << attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
+
+    xmlFilter << tag("ItemGroup");
+
+    tool.addFilters(xmlFilter, "Form Files");
+    tool.addFilters(xmlFilter, "Generated Files");
+    tool.addFilters(xmlFilter, "Header Files");
+    tool.addFilters(xmlFilter, "LexYacc Files");
+    tool.addFilters(xmlFilter, "Resource Files");
+    tool.addFilters(xmlFilter, "Source Files");
+    tool.addFilters(xmlFilter, "Translation Files");
+    xmlFilter << closetag();
+
+    tool.outputFilter(xml, xmlFilter, "Source Files");
+    tool.outputFilter(xml, xmlFilter, "Header Files");
+    tool.outputFilter(xml, xmlFilter, "Generated Files");
+    tool.outputFilter(xml, xmlFilter, "LexYacc Files");
+    tool.outputFilter(xml, xmlFilter, "Translation Files");
+    tool.outputFilter(xml, xmlFilter, "Form Files");
+    tool.outputFilter(xml, xmlFilter, "Resource Files");
+    for (int x = 0; x < tool.ExtraCompilers.count(); ++x) {
+        tool.outputFilter(xml, xmlFilter, tool.ExtraCompilers.at(x));
+    }
+
+    xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
+
+    xml << tag("ImportGroup")
+        << attrTag("Label", "ExtensionTargets")
+        << closetag();
+
+    return xml;
+}
+
+QT_END_NAMESPACE
diff --git a/qmake/generators/win32/msbuild_objectmodel.h b/qmake/generators/win32/msbuild_objectmodel.h
new file mode 100644
index 0000000..567985d
--- /dev/null
+++ b/qmake/generators/win32/msbuild_objectmodel.h
@@ -0,0 +1,708 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MSBUILD_OBJECTMODEL_H
+#define MSBUILD_OBJECTMODEL_H
+
+#include "project.h"
+#include "xmloutput.h"
+#include "msvc_objectmodel.h"
+#include <qatomic.h>
+#include <qlist.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qmap.h>
+#include <qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+
+class VCXConfiguration;
+class VCXProject;
+
+class VCXCLCompilerTool : public VCToolBase
+{
+public:
+    // Functions
+    VCXCLCompilerTool();
+    virtual ~VCXCLCompilerTool(){}
+    bool parseOption(const char* option);
+
+    // Variables
+    QStringList             AdditionalIncludeDirectories;
+    QStringList             AdditionalOptions;
+    QStringList             AdditionalUsingDirectories;
+    QString                 AlwaysAppend;
+    QString                 AssemblerListingLocation;
+    QString                 AssemblerOutput;
+    QString                 BasicRuntimeChecks;
+    triState                BrowseInformation;
+    QString                 BrowseInformationFile;
+    triState                BufferSecurityCheck;
+    QString                 CallingConvention;
+    QString                 CompileAs;
+    QString                 CompileAsManaged;
+    triState                CreateHotpatchableImage;
+    QString                 DebugInformationFormat;
+    triState                DisableLanguageExtensions;
+    QStringList             DisableSpecificWarnings;
+    QString                 EnableEnhancedInstructionSet;
+    triState                EnableFiberSafeOptimizations;
+    triState                EnablePREfast;
+    QString                 ErrorReporting;
+    QString                 ExceptionHandling;
+    triState                ExpandAttributedSource;
+    QString                 FavorSizeOrSpeed;
+    triState                FloatingPointExceptions;
+    QString                 FloatingPointModel;
+    triState                ForceConformanceInForLoopScope;
+    QStringList             ForcedIncludeFiles;
+    QStringList             ForcedUsingFiles;
+    triState                FunctionLevelLinking;
+    triState                GenerateXMLDocumentationFiles;
+    triState                IgnoreStandardIncludePath;
+    QString                 InlineFunctionExpansion;
+    triState                IntrinsicFunctions;
+    triState                MinimalRebuild;
+    triState                MultiProcessorCompilation;
+    QString                 ObjectFileName;
+    QStringList             ObjectFiles;
+    triState                OmitDefaultLibName;
+    triState                OmitFramePointers;
+    triState                OpenMPSupport;
+    QString                 Optimization;
+    QString                 PrecompiledHeader;
+    QString                 PrecompiledHeaderFile;
+    QString                 PrecompiledHeaderOutputFile;
+    triState                PreprocessKeepComments;
+    QStringList             PreprocessorDefinitions;
+    QString                 PreprocessOutputPath;
+    triState                PreprocessSuppressLineNumbers;
+    triState                PreprocessToFile;
+    QString                 ProgramDataBaseFileName;
+    QString                 ProcessorNumber;
+    QString                 RuntimeLibrary;
+    triState                RuntimeTypeInfo;
+    triState                ShowIncludes;
+    triState                SmallerTypeCheck;
+    triState                StringPooling;
+    QString                 StructMemberAlignment;
+    triState                SuppressStartupBanner;
+    QString                 TreatSpecificWarningsAsErrors;
+    triState                TreatWarningAsError;
+    triState                TreatWChar_tAsBuiltInType;
+    triState                UndefineAllPreprocessorDefinitions;
+    QStringList             UndefinePreprocessorDefinitions;
+    triState                UseFullPaths;
+    triState                UseUnicodeForAssemblerListing;
+    QString                 WarningLevel;
+    triState                WholeProgramOptimization;
+    QString                 XMLDocumentationFileName;
+
+    VCXConfiguration*       config;
+};
+
+class VCXLinkerTool : public VCToolBase
+{
+public:
+    // Functions
+    VCXLinkerTool();
+    virtual ~VCXLinkerTool(){}
+    bool parseOption(const char* option);
+
+    // Variables
+    QStringList             AdditionalDependencies;
+    QStringList             AdditionalLibraryDirectories;
+    QStringList             AdditionalManifestDependencies;
+    QStringList             AdditionalOptions;
+    QStringList             AddModuleNamesToAssembly;
+    triState                AllowIsolation;
+    triState                AssemblyDebug;
+    QStringList             AssemblyLinkResource;
+    QString                 BaseAddress;
+    QString                 CLRImageType;
+    QString                 CLRSupportLastError;
+    QString                 CLRThreadAttribute;
+    QString                 CLRUnmanagedCodeCheck;
+    QString                 CreateHotPatchableImage;
+    triState                DataExecutionPrevention;
+    QStringList             DelayLoadDLLs;
+    triState                DelaySign;
+    QString                 Driver;
+    QStringList             EmbedManagedResourceFile;
+    triState                EnableCOMDATFolding;
+    triState                EnableUAC;
+    QString                 EntryPointSymbol;
+    triState                FixedBaseAddress;
+    QString                 ForceFileOutput;
+    QStringList             ForceSymbolReferences;
+    QString                 FunctionOrder;
+    triState                GenerateDebugInformation;
+    triState                GenerateManifest;
+    triState                GenerateMapFile;
+    qlonglong               HeapCommitSize;
+    qlonglong               HeapReserveSize;
+    triState                IgnoreAllDefaultLibraries;
+    triState                IgnoreEmbeddedIDL;
+    triState                IgnoreImportLibrary;
+    QStringList             IgnoreSpecificDefaultLibraries;
+    triState                ImageHasSafeExceptionHandlers;
+    QString                 ImportLibrary;
+    QString                 KeyContainer;
+    QString                 KeyFile;
+    triState                LargeAddressAware;
+    triState                LinkDLL;
+    QString                 LinkErrorReporting;
+    triState                LinkIncremental;
+    triState                LinkStatus;
+    QString                 LinkTimeCodeGeneration;
+    QString                 ManifestFile;
+    triState                MapExports;
+    QString                 MapFileName;
+    QString                 MergedIDLBaseFileName;
+    QString                 MergeSections;
+    QString                 MidlCommandFile;
+    QString                 ModuleDefinitionFile;
+    QString                 MSDOSStubFileName;
+    triState                NoEntryPoint;
+    triState                OptimizeReferences;
+    QString                 OutputFile;
+    triState                PreventDllBinding;
+    QString                 Profile;
+    QString                 ProfileGuidedDatabase;
+    QString                 ProgramDatabaseFile;
+    triState                RandomizedBaseAddress;
+    triState                RegisterOutput;
+    qlonglong               SectionAlignment;
+    triState                SetChecksum;
+    QString                 ShowProgress;
+    QString                 SpecifySectionAttributes;
+    QString                 StackCommitSize;
+    QString                 StackReserveSize;
+    QString                 StripPrivateSymbols;
+    QString                 SubSystem;
+    triState                SupportNobindOfDelayLoadedDLL;
+    triState                SupportUnloadOfDelayLoadedDLL;
+    triState                SuppressStartupBanner;
+    triState                SwapRunFromCD;
+    triState                SwapRunFromNet;
+    QString                 TargetMachine;
+    triState                TerminalServerAware;
+    triState                TreatLinkerWarningAsErrors;
+    triState                TurnOffAssemblyGeneration;
+    QString                 TypeLibraryFile;
+    qlonglong               TypeLibraryResourceID;
+    QString                 UACExecutionLevel;
+    triState                UACUIAccess;
+    QString                 Version;
+
+
+    VCXConfiguration*       config;
+};
+
+class VCXMIDLTool : public VCToolBase
+{
+public:
+    // Functions
+    VCXMIDLTool();
+    virtual ~VCXMIDLTool(){}
+    bool parseOption(const char* option);
+
+    // Variables
+    QStringList             AdditionalIncludeDirectories;
+    QStringList             AdditionalOptions;
+    triState                ApplicationConfigurationMode;
+    QString                 ClientStubFile;
+    QString                 CPreprocessOptions;
+    QString                 DefaultCharType;
+    QString                 DLLDataFileName;
+    QString                 EnableErrorChecks;
+    triState                ErrorCheckAllocations;
+    triState                ErrorCheckBounds;
+    triState                ErrorCheckEnumRange;
+    triState                ErrorCheckRefPointers;
+    triState                ErrorCheckStubData;
+    QString                 GenerateClientFiles;
+    QString                 GenerateServerFiles;
+    triState                GenerateStublessProxies;
+    triState                GenerateTypeLibrary;
+    QString                 HeaderFileName;
+    triState                IgnoreStandardIncludePath;
+    QString                 InterfaceIdentifierFileName;
+    qlonglong               LocaleID;
+    triState                MkTypLibCompatible;
+    QString                 OutputDirectory;
+    QStringList             PreprocessorDefinitions;
+    QString                 ProxyFileName;
+    QString                 RedirectOutputAndErrors;
+    QString                 ServerStubFile;
+    QString                 StructMemberAlignment;
+    triState                SuppressCompilerWarnings;
+    triState                SuppressStartupBanner;
+    QString                 TargetEnvironment;
+    QString                 TypeLibFormat;
+    QString                 TypeLibraryName;
+    QStringList             UndefinePreprocessorDefinitions;
+    triState                ValidateAllParameters;
+    triState                WarnAsError;
+    QString                 WarningLevel;
+
+    VCXConfiguration*       config;
+};
+
+class VCXLibrarianTool : public VCToolBase
+{
+public:
+    // Functions
+    VCXLibrarianTool();
+    virtual ~VCXLibrarianTool(){}
+    bool parseOption(const char*){ return false; };
+
+    // Variables
+    QStringList             AdditionalDependencies;
+    QStringList             AdditionalLibraryDirectories;
+    QStringList             AdditionalOptions;
+    QString                 DisplayLibrary;
+    QString                 ErrorReporting;
+    QStringList             ExportNamedFunctions;
+    QStringList             ForceSymbolReferences;
+    triState                IgnoreAllDefaultLibraries;
+    QStringList             IgnoreSpecificDefaultLibraries;
+    triState                LinkTimeCodeGeneration;
+    QString                 ModuleDefinitionFile;
+    QString                 Name;
+    QString                 OutputFile;
+    QStringList             RemoveObjects;
+    QString                 SubSystem;
+    triState                SuppressStartupBanner;
+    QString                 TargetMachine;
+    triState                TreatLibWarningAsErrors;
+    triState                Verbose;
+
+};
+
+class VCXCustomBuildTool : public VCToolBase
+{
+public:
+    // Functions
+    VCXCustomBuildTool();
+    virtual ~VCXCustomBuildTool(){}
+    bool parseOption(const char*){ return false; };
+
+    // Variables
+    QStringList             AdditionalDependencies;
+    QStringList             CommandLine;
+    QString                 Description;
+    QStringList             Outputs;
+    QString                 ToolName;
+    QString                 ToolPath;
+    QString                 ConfigName;
+};
+
+class VCXResourceCompilerTool : public VCToolBase
+{
+public:
+    // Functions
+    VCXResourceCompilerTool();
+    virtual ~VCXResourceCompilerTool(){}
+    bool parseOption(const char*){ return false; };
+
+    // Variables
+    QStringList             AdditionalIncludeDirectories;
+    QString                 AdditionalOptions;
+    QString                 Culture;
+    triState                IgnoreStandardIncludePath;
+    triState                NullTerminateStrings;
+    QStringList             PreprocessorDefinitions;
+    QString                 ResourceOutputFileName;
+    triState                ShowProgress;
+    triState                SuppressStartupBanner;
+    QString                 TrackerLogDirectory;
+    QString                 UndefinePreprocessorDefinitions;
+};
+
+class VCXDeploymentTool
+{
+public:
+    // Functions
+    VCXDeploymentTool();
+    virtual ~VCXDeploymentTool() {}
+
+    // Variables
+    QString                 DeploymentTag;
+    QString                 RemoteDirectory;
+    QString                 AdditionalFiles;
+};
+
+class VCXEventTool : public VCToolBase
+{
+protected:
+    // Functions
+    VCXEventTool() : UseInBuild(unset){};
+    virtual ~VCXEventTool(){}
+    bool parseOption(const char*){ return false; };
+
+public:
+    // Variables
+    QString                 CommandLine;
+    QString                 Description;
+    triState                UseInBuild;
+    QString                 EventName;
+    QString                 ToolPath;
+};
+
+class VCXPostBuildEventTool : public VCXEventTool
+{
+public:
+    VCXPostBuildEventTool();
+    ~VCXPostBuildEventTool(){}
+};
+
+class VCXPreBuildEventTool : public VCXEventTool
+{
+public:
+    VCXPreBuildEventTool();
+    ~VCXPreBuildEventTool(){}
+};
+
+class VCXPreLinkEventTool : public VCXEventTool
+{
+public:
+    VCXPreLinkEventTool();
+    ~VCXPreLinkEventTool(){}
+};
+
+class VCXConfiguration
+{
+public:
+    // Functions
+    VCXConfiguration();
+    ~VCXConfiguration(){}
+
+    // Variables
+    triState                ATLMinimizesCRunTimeLibraryUsage;
+    triState                BuildBrowserInformation;
+    QString                 CharacterSet;
+    QString                 ConfigurationType;
+    QString                 DeleteExtensionsOnClean;
+    QString                 ImportLibrary;
+    QString                 IntermediateDirectory;
+    QString                 Name;
+    QString                 ConfigurationName;
+    QString                 OutputDirectory;
+    QString                 PrimaryOutput;
+    QString                 ProgramDatabase;
+    triState                RegisterOutput;
+    QString                 TargetName;
+    QString                 UseOfATL;
+    QString                 UseOfMfc;
+    triState                WholeProgramOptimization;
+
+    // XML sub-parts
+    VCXCLCompilerTool        compiler;
+    VCXLibrarianTool         librarian;
+    VCXLinkerTool            linker;
+    VCXMIDLTool              idl;
+    VCXResourceCompilerTool  resource;
+    VCXCustomBuildTool       custom;
+    VCXDeploymentTool        deployment;     // Not likely to be supported: http://msdn.microsoft.com/en-us/library/sa69he4t.aspx
+    VCXPostBuildEventTool    postBuild;
+    VCXPreBuildEventTool     preBuild;
+    VCXPreLinkEventTool      preLink;
+};
+
+struct VCXFilterFile
+{
+    VCXFilterFile()
+    { excludeFromBuild = false; }
+    VCXFilterFile(const QString &filename, bool exclude = false )
+    { file = filename; excludeFromBuild = exclude; }
+    VCXFilterFile(const QString &filename, const QString &additional, bool exclude = false )
+    { file = filename; excludeFromBuild = exclude; additionalFile = additional; }
+    bool operator==(const VCXFilterFile &other){
+        return file == other.file
+               && additionalFile == other.additionalFile
+               && excludeFromBuild == other.excludeFromBuild;
+    }
+
+    bool                    excludeFromBuild;
+    QString                 file;
+    QString                 additionalFile; // For tools like MOC
+};
+
+class VcxprojGenerator;
+class VCXFilter
+{
+public:
+    // Functions
+    VCXFilter();
+    ~VCXFilter(){};
+
+    void addFile(const QString& filename);
+    void addFile(const VCXFilterFile& fileInfo);
+    void addFiles(const QStringList& fileList);
+    bool addExtraCompiler(const VCXFilterFile &info);
+    void modifyPCHstage(QString str);
+    bool outputFileConfig(XmlOutput &xml, XmlOutput &xmlFilter, const QString &filename, const QString &filtername, bool fileAllreadyAdded);
+
+    // Variables
+    QString                 Name;
+    QString                 Filter;
+    QString                 Guid;
+    triState                ParseFiles;
+    VcxprojGenerator*       Project;
+    VCXConfiguration*       Config;
+    QList<VCXFilterFile>    Files;
+
+    customBuildCheck        CustomBuild;
+
+    bool                    useCustomBuildTool;
+    VCXCustomBuildTool      CustomBuildTool;
+
+    bool                    useCompilerTool;
+    VCXCLCompilerTool       CompilerTool;
+};
+
+typedef QList<VCXFilter> VCXFilterList;
+class VCXProjectSingleConfig
+{
+public:
+    enum FilterTypes {
+        None,
+        Source,
+        Header,
+        Generated,
+        LexYacc,
+        Translation,
+        Resources,
+        Extras
+    };
+    // Functions
+    VCXProjectSingleConfig(){};
+    ~VCXProjectSingleConfig(){}
+
+    // Variables
+    QString                 Name;
+    QString                 Version;
+    QString                 ProjectGUID;
+    QString                 Keyword;
+    QString                 SccProjectName;
+    QString                 SccLocalPath;
+    QString                 PlatformName;
+
+    // XML sub-parts
+    VCXConfiguration        Configuration;
+    VCXFilter               RootFiles;
+    VCXFilter               SourceFiles;
+    VCXFilter               HeaderFiles;
+    VCXFilter               GeneratedFiles;
+    VCXFilter               LexYaccFiles;
+    VCXFilter               TranslationFiles;
+    VCXFilter               FormFiles;
+    VCXFilter               ResourceFiles;
+    VCXFilterList           ExtraCompilersFiles;
+
+    bool                    flat_files;
+
+    // Accessor for extracompilers
+    VCXFilter               &filterForExtraCompiler(const QString &compilerName);
+};
+
+
+
+// Tree & Flat view of files --------------------------------------------------
+class VCXFilter;
+class XNode
+{
+public:
+    virtual ~XNode() { }
+    void addElement(const VCXFilterFile &file) {
+        addElement(file.file, file);
+    }
+    virtual void addElement(const QString &filepath, const VCXFilterFile &allInfo) = 0;
+    virtual void removeElements()= 0;
+    virtual void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCXProject &tool, const QString &filter) = 0;
+    virtual bool hasElements() = 0;
+};
+
+class XTreeNode : public XNode
+{
+    typedef QMap<QString, XTreeNode*> ChildrenMap;
+    VCXFilterFile info;
+    ChildrenMap children;
+
+public:
+    virtual ~XTreeNode() { removeElements(); }
+
+    int pathIndex(const QString &filepath) {
+        int Windex = filepath.indexOf("\\");
+        int Uindex = filepath.indexOf("/");
+        if (Windex != -1 && Uindex != -1)
+            return qMin(Windex, Uindex);
+        else if (Windex != -1)
+            return Windex;
+        return Uindex;
+    }
+
+    void addElement(const QString &filepath, const VCXFilterFile &allInfo){
+        QString newNodeName(filepath);
+
+        int index = pathIndex(filepath);
+        if (index != -1)
+            newNodeName = filepath.left(index);
+
+        XTreeNode *n = children.value(newNodeName);
+        if (!n) {
+            n = new XTreeNode;
+            n->info = allInfo;
+            children.insert(newNodeName, n);
+        }
+        if (index != -1)
+            n->addElement(filepath.mid(index+1), allInfo);
+    }
+
+    void removeElements() {
+        ChildrenMap::ConstIterator it = children.constBegin();
+        ChildrenMap::ConstIterator end = children.constEnd();
+        for( ; it != end; it++) {
+            (*it)->removeElements();
+            delete it.value();
+        }
+        children.clear();
+    }
+
+    void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCXProject &tool, const QString &filter);
+    bool hasElements() {
+        return children.size() != 0;
+    }
+};
+
+class XFlatNode : public XNode
+{
+    typedef QMap<QString, VCXFilterFile> ChildrenMapFlat;
+    ChildrenMapFlat children;
+
+public:
+    virtual ~XFlatNode() { removeElements(); }
+
+    int pathIndex(const QString &filepath) {
+        int Windex = filepath.lastIndexOf("\\");
+        int Uindex = filepath.lastIndexOf("/");
+        if (Windex != -1 && Uindex != -1)
+            return qMax(Windex, Uindex);
+        else if (Windex != -1)
+            return Windex;
+        return Uindex;
+    }
+
+    void addElement(const QString &filepath, const VCXFilterFile &allInfo){
+        QString newKey(filepath);
+
+        int index = pathIndex(filepath);
+        if (index != -1)
+            newKey = filepath.mid(index+1);
+
+        // Key designed to sort files with same
+        // name in different paths correctly
+        children.insert(newKey + "\0" + allInfo.file, allInfo);
+    }
+
+    void removeElements() {
+        children.clear();
+    }
+
+    void generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCXProject &proj, const QString &filter);
+    bool hasElements() {
+        return children.size() != 0;
+    }
+};
+// ----------------------------------------------------------------------------
+
+class VCXProject
+{
+public:
+    // Variables
+    QString                 Name;
+    QString                 Version;
+    QString                 ProjectGUID;
+    QString                 Keyword;
+    QString                 SccProjectName;
+    QString                 SccLocalPath;
+    QString                 PlatformName;
+
+    // Single projects
+    QList<VCXProjectSingleConfig>  SingleProjects;
+
+    // List of all extracompilers
+    QStringList             ExtraCompilers;
+
+    // Functions
+    void                    outputFilter(XmlOutput &xml,
+                                         XmlOutput &xmlFilter,
+                                         const QString &filtername);
+
+    void                    outputFileConfigs(XmlOutput &xml,
+                                              XmlOutput &xmlFilter,
+                                              const VCXFilterFile &info,
+                                              const QString &filtername);
+
+    void                    addFilters(XmlOutput &xmlFilter,
+                                       const QString &filtername);
+
+};
+
+
+XmlOutput &operator<<(XmlOutput &, const VCXCLCompilerTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXLinkerTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXMIDLTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXCustomBuildTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXLibrarianTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXResourceCompilerTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXEventTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXDeploymentTool &);
+XmlOutput &operator<<(XmlOutput &, const VCXConfiguration &);
+XmlOutput &operator<<(XmlOutput &, const VCXProjectSingleConfig &);
+XmlOutput &operator<<(XmlOutput &, VCXProject &);
+
+
+QT_END_NAMESPACE
+
+#endif // MSVC_OBJECTMODEL_H
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index 5f3d433..604aa8a 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -41,6 +41,7 @@
 
 #include "msvc_objectmodel.h"
 #include "msvc_vcproj.h"
+#include "msvc_vcxproj.h"
 #include <qstringlist.h>
 #include <qfileinfo.h>
 
diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h
index c56187c..3f60a13 100644
--- a/qmake/generators/win32/msvc_objectmodel.h
+++ b/qmake/generators/win32/msvc_objectmodel.h
@@ -58,7 +58,8 @@ enum DotNET {
     NET2002 = 0x70,
     NET2003 = 0x71,
     NET2005 = 0x80,
-    NET2008 = 0x90
+    NET2008 = 0x90,
+    NET2010 = 0x91
 };
 
 /*
@@ -867,7 +868,7 @@ public:
 
     customBuildCheck	    CustomBuild;
 
-    bool		    useCustomBuildTool;
+    bool                    useCustomBuildTool;
     VCCustomBuildTool       CustomBuildTool;
 
     bool                    useCompilerTool;
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index f1777e1..8c9bba8 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -77,6 +77,8 @@ struct {
     const char *regKey;
 } dotNetCombo[] = {
 #ifdef Q_OS_WIN64
+    {NET2010, "MSVC.NET 2010 (10.0)", "Software\\Wow6432Node\\Microsoft\\VisualStudio\\10.0\\Setup\\VC\\ProductDir"},
+    {NET2010, "MSVC.NET 2010 Express Edition (10.0)", "Software\\Wow6432Node\\Microsoft\\VCExpress\\10.0\\Setup\\VC\\ProductDir"},
     {NET2008, "MSVC.NET 2008 (9.0)", "Software\\Wow6432Node\\Microsoft\\VisualStudio\\9.0\\Setup\\VC\\ProductDir"},
     {NET2008, "MSVC.NET 2008 Express Edition (9.0)", "Software\\Wow6432Node\\Microsoft\\VCExpress\\9.0\\Setup\\VC\\ProductDir"},
     {NET2005, "MSVC.NET 2005 (8.0)", "Software\\Wow6432Node\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"},
@@ -84,6 +86,8 @@ struct {
     {NET2003, "MSVC.NET 2003 (7.1)", "Software\\Wow6432Node\\Microsoft\\VisualStudio\\7.1\\Setup\\VC\\ProductDir"},
     {NET2002, "MSVC.NET 2002 (7.0)", "Software\\Wow6432Node\\Microsoft\\VisualStudio\\7.0\\Setup\\VC\\ProductDir"},
 #else
+    {NET2010, "MSVC.NET 2010 (10.0)", "Software\\Microsoft\\VisualStudio\\10.0\\Setup\\VC\\ProductDir"},
+    {NET2010, "MSVC.NET 2010 Express Edition (10.0)", "Software\\Microsoft\\VCExpress\\10.0\\Setup\\VC\\ProductDir"},
     {NET2008, "MSVC.NET 2008 (9.0)", "Software\\Microsoft\\VisualStudio\\9.0\\Setup\\VC\\ProductDir"},
     {NET2008, "MSVC.NET 2008 Express Edition (9.0)", "Software\\Microsoft\\VCExpress\\9.0\\Setup\\VC\\ProductDir"},
     {NET2005, "MSVC.NET 2005 (8.0)", "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"},
@@ -165,8 +169,12 @@ DotNET which_dotnet_version()
 // Flatfile Tags ----------------------------------------------------
 const char _slnHeader70[]       = "Microsoft Visual Studio Solution File, Format Version 7.00";
 const char _slnHeader71[]       = "Microsoft Visual Studio Solution File, Format Version 8.00";
-const char _slnHeader80[]       = "Microsoft Visual Studio Solution File, Format Version 9.00";
-const char _slnHeader90[]       = "Microsoft Visual Studio Solution File, Format Version 10.00";
+const char _slnHeader80[]       = "Microsoft Visual Studio Solution File, Format Version 9.00"
+                                  "\n# Visual Studio 2005";
+const char _slnHeader90[]       = "Microsoft Visual Studio Solution File, Format Version 10.00"
+                                  "\n# Visual Studio 2008";
+const char _slnHeader100[]      = "Microsoft Visual Studio Solution File, Format Version 11.00"
+                                  "\n# Visual Studio 2010";
                                   // The following UUID _may_ change for later servicepacks...
                                   // If so we need to search through the registry at
                                   // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.0\Projects
@@ -354,6 +362,9 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
     }
 
     switch(which_dotnet_version()) {
+    case NET2010:
+        t << _slnHeader100;
+        break;
     case NET2008:
         t << _slnHeader90;
         break;
diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h
index ed67ea7..8f028a1 100644
--- a/qmake/generators/win32/msvc_vcproj.h
+++ b/qmake/generators/win32/msvc_vcproj.h
@@ -61,7 +61,6 @@ class VcprojGenerator : public Win32MakefileGenerator
 
     bool writeMakefile(QTextStream &);
     bool writeProjectMakefile();
-    void writeSubDirs(QTextStream &t);
 
     QString findTemplate(QString file);
     void init();
@@ -119,6 +118,9 @@ protected:
     void initLexYaccFiles();
     void initExtraCompilerOutputs();
 
+    void writeSubDirs(QTextStream &t); // Called from VCXProj backend
+    QUuid getProjectUUID(const QString &filename=QString()); // Called from VCXProj backend
+
     Target projectTarget;
 
     // Used for single project
@@ -129,7 +131,6 @@ protected:
 
 private:
     QString fixCommandLine(DotNET version, const QString &input) const;
-    QUuid getProjectUUID(const QString &filename=QString());
     QUuid increaseUUID(const QUuid &id);
     friend class VCFilter;
 };
diff --git a/qmake/generators/win32/msvc_vcxproj.cpp b/qmake/generators/win32/msvc_vcxproj.cpp
new file mode 100644
index 0000000..6a91c6b
--- /dev/null
+++ b/qmake/generators/win32/msvc_vcxproj.cpp
@@ -0,0 +1,851 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "msvc_vcxproj.h"
+#include "msbuild_objectmodel.h"
+#include <qdir.h>
+#include <qdiriterator.h>
+#include <quuid.h>
+
+
+QT_BEGIN_NAMESPACE
+// Filter GUIDs (Do NOT change these!) ------------------------------
+const char _GUIDSourceFiles[]          = "{4FC737F1-C7A5-4376-A066-2A32D752A2FF}";
+const char _GUIDHeaderFiles[]          = "{93995380-89BD-4b04-88EB-625FBE52EBFB}";
+const char _GUIDGeneratedFiles[]       = "{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}";
+const char _GUIDResourceFiles[]        = "{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}";
+const char _GUIDLexYaccFiles[]         = "{E12AE0D2-192F-4d59-BD23-7D3FA58D3183}";
+const char _GUIDTranslationFiles[]     = "{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}";
+const char _GUIDFormFiles[]            = "{99349809-55BA-4b9d-BF79-8FDBB0286EB3}";
+const char _GUIDExtraCompilerFiles[]   = "{E0D8C965-CC5F-43d7-AD63-FAEF0BBC0F85}";
+QT_END_NAMESPACE
+
+QT_BEGIN_NAMESPACE
+
+
+VcxprojGenerator::VcxprojGenerator() : VcprojGenerator()
+{
+}
+bool VcxprojGenerator::writeMakefile(QTextStream &t)
+{
+    initProject(); // Fills the whole project with proper data
+
+    // Generate solution file
+    if(project->first("TEMPLATE") == "vcsubdirs") {
+        if (!project->isActiveConfig("build_pass")) {
+            debug_msg(1, "Generator: MSVC.NET: Writing solution file");
+            writeSubDirs(t);
+        } else {
+            debug_msg(1, "Generator: MSVC.NET: Not writing solution file for build_pass configs");
+        }
+        return true;
+    } else
+    // Generate single configuration project file
+    if (project->first("TEMPLATE") == "vcapp" ||
+        project->first("TEMPLATE") == "vclib") {
+        if(!project->isActiveConfig("build_pass")) {
+            debug_msg(1, "Generator: MSVC.NET: Writing single configuration project file");
+            XmlOutput xmlOut(t);
+            xmlOut << vcxProject;
+        }
+        return true;
+    }
+    return project->isActiveConfig("build_pass");
+    return true;
+}
+
+
+void VcxprojGenerator::initProject()
+{
+    // Initialize XML sub elements
+    // - Do this first since project elements may need
+    // - to know of certain configuration options
+    initConfiguration();
+    initRootFiles();
+    initSourceFiles();
+    initHeaderFiles();
+    initGeneratedFiles();
+    initLexYaccFiles();
+    initTranslationFiles();
+    initFormFiles();
+    initResourceFiles();
+    initExtraCompilerOutputs();
+
+    // Own elements -----------------------------
+    vcxProject.Name = unescapeFilePath(project->first("QMAKE_ORIG_TARGET"));
+
+    vcxProject.Keyword = project->first("VCPROJ_KEYWORD");
+    if (project->isEmpty("CE_SDK") || project->isEmpty("CE_ARCH")) {
+        vcxProject.PlatformName = vcxProject.Configuration.idl.TargetEnvironment;
+        if ( vcxProject.Configuration.idl.TargetEnvironment.isEmpty() )
+            vcxProject.PlatformName = "Win32";
+    } else {
+        vcxProject.PlatformName = project->values("CE_SDK").join(" ") + " (" + project->first("CE_ARCH") + ")";
+    }
+    // These are not used by Qt, but may be used by customers
+    vcxProject.SccProjectName = project->first("SCCPROJECTNAME");
+    vcxProject.SccLocalPath = project->first("SCCLOCALPATH");
+    vcxProject.flat_files = project->isActiveConfig("flat");
+}
+
+
+void VcxprojGenerator::initConfiguration()
+{
+    // Initialize XML sub elements
+    // - Do this first since main configuration elements may need
+    // - to know of certain compiler/linker options
+    VCXConfiguration &conf = vcxProject.Configuration;
+
+    initCompilerTool();
+
+    // Only on configuration per build
+    bool isDebug = project->isActiveConfig("debug");
+
+    if(projectTarget == StaticLib)
+        initLibrarianTool();
+    else {
+        conf.linker.GenerateDebugInformation = isDebug ? _True : _False;
+        initLinkerTool();
+    }
+    initResourceTool();
+    initIDLTool();
+
+    // Own elements -----------------------------
+    QString temp = project->first("BuildBrowserInformation");
+    switch (projectTarget) {
+    case SharedLib:
+        conf.ConfigurationType = "DynamicLibrary";
+        break;
+    case StaticLib:
+        conf.ConfigurationType = "StaticLibrary";
+        break;
+    case Application:
+    default:
+        conf.ConfigurationType = "Application";
+        break;
+    }
+
+    conf.OutputDirectory = project->first("DESTDIR");
+
+    if(conf.OutputDirectory.isEmpty())
+        conf.OutputDirectory = ".\\";
+
+    if(!conf.OutputDirectory.endsWith("\\"))
+        conf.OutputDirectory += '\\';
+
+    // The target name could have been changed.
+    conf.TargetName = project->first("TARGET");
+    if ( !conf.TargetName.isEmpty() && !project->first("TARGET_VERSION_EXT").isEmpty() && project->isActiveConfig("shared"))
+        conf.TargetName.append(project->first("TARGET_VERSION_EXT"));
+
+    conf.Name = project->values("BUILD_NAME").join(" ");
+    if (conf.Name.isEmpty())
+        conf.Name = isDebug ? "Debug" : "Release";
+    conf.ConfigurationName = conf.Name;
+    if (project->isEmpty("CE_SDK") || project->isEmpty("CE_ARCH")) {
+        conf.Name += (conf.idl.TargetEnvironment == "Win64" ? "|Win64" : "|Win32");
+    } else {
+        conf.Name += "|" + project->values("CE_SDK").join(" ") + " (" + project->first("CE_ARCH") + ")";
+    }
+    conf.ATLMinimizesCRunTimeLibraryUsage = (project->first("ATLMinimizesCRunTimeLibraryUsage").isEmpty() ? _False : _True);
+    conf.BuildBrowserInformation = triState(temp.isEmpty() ? (short)unset : temp.toShort());
+    temp = project->first("CharacterSet");
+    if (!temp.isEmpty())
+    {
+        switch (charSet(temp.toShort())) {
+
+            case charSetMBCS:
+                conf.CharacterSet = "MultiByte";
+                break;
+            case charSetUnicode:
+                conf.CharacterSet = "Unicode";
+                break;
+            case charSetNotSet:
+            default:
+                conf.CharacterSet = "NotSet";
+                break;
+        }
+        conf.CharacterSet = charSet(temp.isEmpty() ? (short)charSetNotSet : temp.toShort());
+    }
+    conf.DeleteExtensionsOnClean = project->first("DeleteExtensionsOnClean");
+    conf.ImportLibrary = conf.linker.ImportLibrary;
+    conf.IntermediateDirectory = project->first("OBJECTS_DIR");
+    //conf.OutputDirectory = ".";
+    conf.PrimaryOutput = project->first("PrimaryOutput");
+    conf.WholeProgramOptimization = conf.compiler.WholeProgramOptimization;
+    temp = project->first("UseOfATL");
+    if(!temp.isEmpty())
+    {
+        switch (useOfATL(temp.toShort())) {
+
+            case useATLStatic:
+                conf.UseOfATL = "Static";
+                break;
+            case useATLDynamic:
+                conf.UseOfATL = "Dynamic";
+                break;
+            case useATLNotSet:
+            default:
+                conf.UseOfATL = "false";
+                break;
+        }
+    }
+    temp = project->first("UseOfMfc");
+    if(!temp.isEmpty())
+    {
+        switch (useOfMfc(temp.toShort())) {
+
+            case useMfcStatic:
+                conf.UseOfMfc = "Static";
+                break;
+            case useMfcDynamic:
+                conf.UseOfMfc = "Dynamic";
+                break;
+            case useMfcStdWin:
+            default:
+                conf.UseOfMfc = "false";
+                break;
+        }
+    }
+
+    // Configuration does not need parameters from
+    // these sub XML items;
+    initCustomBuildTool();
+    initPreBuildEventTools();
+    initPostBuildEventTools();
+    // Only deploy for CE projects
+    if (!project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH"))
+        initDeploymentTool();
+    initPreLinkEventTools();
+
+    // Set definite values in both configurations
+    if (isDebug) {
+        conf.compiler.PreprocessorDefinitions.removeAll("NDEBUG");
+    } else {
+        conf.compiler.PreprocessorDefinitions += "NDEBUG";
+    }
+}
+
+
+void VcxprojGenerator::initCompilerTool()
+{
+    QString placement = project->first("OBJECTS_DIR");
+    if(placement.isEmpty())
+        placement = ".\\";
+
+    VCXConfiguration &conf = vcxProject.Configuration;
+    conf.compiler.AssemblerListingLocation = placement ;
+    conf.compiler.ProgramDataBaseFileName = ".\\" ;
+    conf.compiler.ObjectFileName = placement ;
+    // PCH
+    if (usePCH) {
+        conf.compiler.PrecompiledHeader             = "Use";
+        conf.compiler.PrecompiledHeaderOutputFile   = "$(IntDir)\\" + precompPch;
+        conf.compiler.PrecompiledHeaderFile         = project->first("PRECOMPILED_HEADER");
+        conf.compiler.ForcedIncludeFiles            = project->values("PRECOMPILED_HEADER");
+        conf.compiler.PreprocessToFile              = _False;
+        conf.compiler.PreprocessSuppressLineNumbers = _False;
+        // Minimal build option triggers an Internal Compiler Error
+        // when used in conjunction with /FI and /Yu, so remove it
+        project->values("QMAKE_CFLAGS_DEBUG").removeAll("-Gm");
+        project->values("QMAKE_CFLAGS_DEBUG").removeAll("/Gm");
+        project->values("QMAKE_CXXFLAGS_DEBUG").removeAll("-Gm");
+        project->values("QMAKE_CXXFLAGS_DEBUG").removeAll("/Gm");
+    }
+
+    conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS"));
+    if(project->isActiveConfig("debug")){
+        // Debug version
+        conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_DEBUG"));
+        if((projectTarget == Application) || (projectTarget == StaticLib))
+            conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_MT_DBG"));
+        else
+            conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_MT_DLLDBG"));
+    } else {
+        // Release version
+        conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_RELEASE"));
+        conf.compiler.PreprocessorDefinitions += "QT_NO_DEBUG";
+        conf.compiler.PreprocessorDefinitions += "NDEBUG";
+        if((projectTarget == Application) || (projectTarget == StaticLib))
+            conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_MT"));
+        else
+            conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_MT_DLL"));
+    }
+
+    // Common for both release and debug
+    if(project->isActiveConfig("warn_off"))
+        conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_WARN_OFF"));
+    else if(project->isActiveConfig("warn_on"))
+        conf.compiler.parseOptions(project->values("QMAKE_CXXFLAGS_WARN_ON"));
+    if(project->isActiveConfig("windows"))
+        conf.compiler.PreprocessorDefinitions += project->values("MSVCPROJ_WINCONDEF");
+
+    // Can this be set for ALL configs?
+    // If so, use qmake.conf!
+    if(projectTarget == SharedLib)
+        conf.compiler.PreprocessorDefinitions += "_WINDOWS";
+
+    conf.compiler.PreprocessorDefinitions += project->values("DEFINES");
+    conf.compiler.PreprocessorDefinitions += project->values("PRL_EXPORT_DEFINES");
+    conf.compiler.parseOptions(project->values("MSVCPROJ_INCPATH"));
+}
+
+void VcxprojGenerator::initLinkerTool()
+{
+    findLibraries(); // Need to add the highest version of the libs
+    VCXConfiguration &conf = vcxProject.Configuration;
+    conf.linker.parseOptions(project->values("MSVCPROJ_LFLAGS"));
+
+    foreach(QString libs, project->values("MSVCPROJ_LIBS")) {
+        if (libs.left(9).toUpper() == "/LIBPATH:") {
+            QStringList l = QStringList(libs);
+            conf.linker.parseOptions(l);
+        } else {
+            conf.linker.AdditionalDependencies += libs;
+        }
+    }
+
+    switch (projectTarget) {
+    case Application:
+        conf.linker.OutputFile = project->first("DESTDIR");
+        break;
+    case SharedLib:
+        conf.linker.parseOptions(project->values("MSVCPROJ_LIBOPTIONS"));
+        conf.linker.OutputFile = project->first("DESTDIR");
+        break;
+    case StaticLib: //unhandled - added to remove warnings..
+        break;
+    }
+
+    if(conf.linker.OutputFile.isEmpty())
+        conf.linker.OutputFile = ".\\";
+
+    if(!conf.linker.OutputFile.endsWith("\\"))
+        conf.linker.OutputFile += '\\';
+
+    conf.linker.OutputFile += project->first("MSVCPROJ_TARGET");
+
+    if(project->isActiveConfig("debug")){
+        conf.linker.parseOptions(project->values("QMAKE_LFLAGS_DEBUG"));
+    } else {
+        conf.linker.parseOptions(project->values("QMAKE_LFLAGS_RELEASE"));
+    }
+
+    if(project->isActiveConfig("dll")){
+        conf.linker.parseOptions(project->values("QMAKE_LFLAGS_QT_DLL"));
+    }
+
+    if(project->isActiveConfig("console")){
+        conf.linker.parseOptions(project->values("QMAKE_LFLAGS_CONSOLE"));
+    } else {
+        conf.linker.parseOptions(project->values("QMAKE_LFLAGS_WINDOWS"));
+    }
+
+}
+
+void VcxprojGenerator::initResourceTool()
+{
+    VCXConfiguration &conf = vcxProject.Configuration;
+    conf.resource.PreprocessorDefinitions = conf.compiler.PreprocessorDefinitions;
+
+    // We need to add _DEBUG for the debug version of the project, since the normal compiler defines
+    // do not contain it. (The compiler defines this symbol automatically, which is wy we don't need
+    // to add it for the compiler) However, the resource tool does not do this.
+    if(project->isActiveConfig("debug"))
+        conf.resource.PreprocessorDefinitions += "_DEBUG";
+    if(project->isActiveConfig("staticlib"))
+        conf.resource.ResourceOutputFileName = project->first("DESTDIR") + "/$(InputName).res";
+}
+
+
+void VcxprojGenerator::initPostBuildEventTools()
+{
+    VCXConfiguration &conf = vcxProject.Configuration;
+    if(!project->values("QMAKE_POST_LINK").isEmpty()) {
+        QString cmdline = var("QMAKE_POST_LINK");
+        conf.postBuild.CommandLine = cmdline;
+        conf.postBuild.Description = cmdline;
+    }
+
+    QString signature = !project->isEmpty("SIGNATURE_FILE") ? var("SIGNATURE_FILE") : var("DEFAULT_SIGNATURE");
+    bool useSignature = !signature.isEmpty() && !project->isActiveConfig("staticlib") &&
+                        !project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH");
+    if(useSignature)
+        conf.postBuild.CommandLine.prepend(QLatin1String("signtool sign /F ") + signature + " \"$(TargetPath)\"\n" +
+            (!conf.postBuild.CommandLine.isEmpty() ? " && " : ""));
+
+    if(!project->values("MSVCPROJ_COPY_DLL").isEmpty()) {
+        if(!conf.postBuild.CommandLine.isEmpty())
+            conf.postBuild.CommandLine += " && ";
+        conf.postBuild.Description += var("MSVCPROJ_COPY_DLL_DESC");
+        conf.postBuild.CommandLine += var("MSVCPROJ_COPY_DLL");
+    }
+}
+
+
+void VcxprojGenerator::initDeploymentTool()
+{
+    VCXConfiguration &conf = vcxProject.Configuration;
+    QString targetPath = project->values("deploy.path").join(" ");
+    if (targetPath.isEmpty())
+        targetPath = QString("%CSIDL_PROGRAM_FILES%\\") + project->first("TARGET");
+    if (targetPath.endsWith("/") || targetPath.endsWith("\\"))
+        targetPath.chop(1);
+
+    // Only deploy Qt libs for shared build
+    if (!project->values("QMAKE_QT_DLL").isEmpty()) {
+        QStringList& arg = project->values("MSVCPROJ_LIBS");
+        for (QStringList::ConstIterator it = arg.constBegin(); it != arg.constEnd(); ++it) {
+            if (it->contains(project->first("QMAKE_LIBDIR"))) {
+                QString dllName = *it;
+
+                if (dllName.contains(QLatin1String("QAxContainer"))
+                    || dllName.contains(QLatin1String("qtmain"))
+                    || dllName.contains(QLatin1String("QtUiTools")))
+                    continue;
+                dllName.replace(QLatin1String(".lib") , QLatin1String(".dll"));
+                QFileInfo info(dllName);
+                conf.deployment.AdditionalFiles += info.fileName()
+                                                + "|" + QDir::toNativeSeparators(info.absolutePath())
+                                                + "|" + targetPath
+                                                + "|0;";
+            }
+        }
+    }
+
+    // C-runtime deployment
+    QString runtime = project->values("QT_CE_C_RUNTIME").join(QLatin1String(" "));
+    if (!runtime.isEmpty() && (runtime != QLatin1String("no"))) {
+        QString runtimeVersion = QLatin1String("msvcr");
+        QString mkspec = project->first("QMAKESPEC");
+        // If no .qmake.cache has been found, we fallback to the original mkspec
+        if (mkspec.isEmpty())
+            mkspec = project->first("QMAKESPEC_ORIGINAL");
+
+        if (!mkspec.isEmpty()) {
+            if (mkspec.endsWith("2010"))
+                runtimeVersion.append("100");
+            else if (mkspec.endsWith("2008"))
+                runtimeVersion.append("90");
+            else
+                runtimeVersion.append("80");
+            if (project->isActiveConfig("debug"))
+                runtimeVersion.append("d");
+            runtimeVersion.append(".dll");
+
+            if (runtime == "yes") {
+                // Auto-find C-runtime
+                QString vcInstallDir = qgetenv("VCINSTALLDIR");
+                if (!vcInstallDir.isEmpty()) {
+                    vcInstallDir += "\\ce\\dll\\";
+                    vcInstallDir += project->values("CE_ARCH").join(QLatin1String(" "));
+                    if (!QFileInfo(vcInstallDir + QDir::separator() + runtimeVersion).exists())
+                        runtime.clear();
+                    else
+                        runtime = vcInstallDir;
+                }
+            }
+        }
+
+        if (!runtime.isEmpty() && runtime != QLatin1String("yes")) {
+            conf.deployment.AdditionalFiles += runtimeVersion
+                                            + "|" + QDir::toNativeSeparators(runtime)
+                                            + "|" + targetPath
+                                            + "|0;";
+        }
+    }
+
+    // foreach item in DEPLOYMENT
+    foreach(QString item, project->values("DEPLOYMENT")) {
+        // get item.path
+        QString devicePath = project->first(item + ".path");
+        if (devicePath.isEmpty())
+            devicePath = targetPath;
+        // check if item.path is relative (! either /,\ or %)
+        if (!(devicePath.at(0) == QLatin1Char('/')
+            || devicePath.at(0) == QLatin1Char('\\')
+            || devicePath.at(0) == QLatin1Char('%'))) {
+            // create output path
+            devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('\\') + devicePath));
+        }
+        // foreach d in item.sources
+        foreach(QString source, project->values(item + ".sources")) {
+            QString itemDevicePath = devicePath;
+            source = Option::fixPathToLocalOS(source);
+            QString nameFilter;
+            QFileInfo info(source);
+            QString searchPath;
+            if (info.isDir()) {
+                nameFilter = QLatin1String("*");
+                itemDevicePath += "\\" + info.fileName();
+                searchPath = info.absoluteFilePath();
+            } else {
+                nameFilter = source.split('\\').last();
+                searchPath = info.absolutePath();
+            }
+
+            int pathSize = searchPath.size();
+            QDirIterator iterator(searchPath, QStringList() << nameFilter
+                                  , QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks
+                                  , QDirIterator::Subdirectories);
+            // foreach dirIterator-entry in d
+            while(iterator.hasNext()) {
+                iterator.next();
+                QString absoluteItemPath = Option::fixPathToLocalOS(QFileInfo(iterator.filePath()).absolutePath());
+                // Identify if it is just another subdir
+                int diffSize = absoluteItemPath.size() - pathSize;
+                // write out rules
+                conf.deployment.AdditionalFiles += iterator.fileName()
+                    + "|" + absoluteItemPath
+                    + "|" + itemDevicePath + (diffSize ? (absoluteItemPath.right(diffSize)) : QLatin1String(""))
+                    + "|0;";
+            }
+        }
+    }
+}
+
+void VcxprojGenerator::initPreLinkEventTools()
+{
+    VCXConfiguration &conf = vcxProject.Configuration;
+    if(!project->values("QMAKE_PRE_LINK").isEmpty()) {
+        QString cmdline = var("QMAKE_PRE_LINK");
+        conf.preLink.Description = cmdline;
+        conf.preLink.CommandLine = cmdline;
+    }
+}
+
+void VcxprojGenerator::initRootFiles()
+{
+    vcxProject.RootFiles.addFiles(project->values("RC_FILE"));
+    vcxProject.RootFiles.Project = this;
+    vcxProject.RootFiles.Config = &(vcxProject.Configuration);
+    vcxProject.RootFiles.CustomBuild = none;
+}
+
+void VcxprojGenerator::initSourceFiles()
+{
+    vcxProject.SourceFiles.Name = "Source Files";
+    vcxProject.SourceFiles.Filter = "cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx";
+    vcxProject.SourceFiles.Guid = _GUIDSourceFiles;
+
+    vcxProject.SourceFiles.addFiles(project->values("SOURCES"));
+
+    vcxProject.SourceFiles.Project = this;
+    vcxProject.SourceFiles.Config = &(vcxProject.Configuration);
+    vcxProject.SourceFiles.CustomBuild = none;
+}
+
+void VcxprojGenerator::initHeaderFiles()
+{
+    vcxProject.HeaderFiles.Name = "Header Files";
+    vcxProject.HeaderFiles.Filter = "h;hpp;hxx;hm;inl;inc;xsd";
+    vcxProject.HeaderFiles.Guid = _GUIDHeaderFiles;
+
+    vcxProject.HeaderFiles.addFiles(project->values("HEADERS"));
+    if (usePCH) // Generated PCH cpp file
+        vcxProject.HeaderFiles.addFile(precompH);
+
+    vcxProject.HeaderFiles.Project = this;
+    vcxProject.HeaderFiles.Config = &(vcxProject.Configuration);
+}
+
+void VcxprojGenerator::initGeneratedFiles()
+{
+    vcxProject.GeneratedFiles.Name = "Generated Files";
+    vcxProject.GeneratedFiles.Filter = "cpp;c;cxx;moc;h;def;odl;idl;res";
+    vcxProject.GeneratedFiles.Guid = _GUIDGeneratedFiles;
+
+    // ### These cannot have CustomBuild (mocSrc)!!
+    vcxProject.GeneratedFiles.addFiles(project->values("GENERATED_SOURCES"));
+    vcxProject.GeneratedFiles.addFiles(project->values("GENERATED_FILES"));
+    vcxProject.GeneratedFiles.addFiles(project->values("IDLSOURCES"));
+    vcxProject.GeneratedFiles.addFiles(project->values("RES_FILE"));
+    vcxProject.GeneratedFiles.addFiles(project->values("QMAKE_IMAGE_COLLECTION"));   // compat
+    if(!extraCompilerOutputs.isEmpty())
+        vcxProject.GeneratedFiles.addFiles(extraCompilerOutputs.keys());
+
+    vcxProject.GeneratedFiles.Project = this;
+    vcxProject.GeneratedFiles.Config = &(vcxProject.Configuration);
+}
+
+void VcxprojGenerator::initLexYaccFiles()
+{
+    vcxProject.LexYaccFiles.Name = "Lex / Yacc Files";
+    vcxProject.LexYaccFiles.ParseFiles = _False;
+    vcxProject.LexYaccFiles.Filter = "l;y";
+    vcxProject.LexYaccFiles.Guid = _GUIDLexYaccFiles;
+
+    vcxProject.LexYaccFiles.addFiles(project->values("LEXSOURCES"));
+    vcxProject.LexYaccFiles.addFiles(project->values("YACCSOURCES"));
+
+    vcxProject.LexYaccFiles.Project = this;
+    vcxProject.LexYaccFiles.Config = &(vcxProject.Configuration);
+    vcxProject.LexYaccFiles.CustomBuild = lexyacc;
+}
+
+void VcxprojGenerator::initTranslationFiles()
+{
+    vcxProject.TranslationFiles.Name = "Translation Files";
+    vcxProject.TranslationFiles.ParseFiles = _False;
+    vcxProject.TranslationFiles.Filter = "ts;xlf";
+    vcxProject.TranslationFiles.Guid = _GUIDTranslationFiles;
+
+    vcxProject.TranslationFiles.addFiles(project->values("TRANSLATIONS"));
+
+    vcxProject.TranslationFiles.Project = this;
+    vcxProject.TranslationFiles.Config = &(vcxProject.Configuration);
+    vcxProject.TranslationFiles.CustomBuild = none;
+}
+
+
+void VcxprojGenerator::initFormFiles()
+{
+    vcxProject.FormFiles.Name = "Form Files";
+    vcxProject.FormFiles.ParseFiles = _False;
+    vcxProject.FormFiles.Filter = "ui";
+    vcxProject.FormFiles.Guid = _GUIDFormFiles;
+
+    vcxProject.FormFiles.addFiles(project->values("FORMS"));
+    vcxProject.FormFiles.addFiles(project->values("FORMS3"));
+
+    vcxProject.FormFiles.Project = this;
+    vcxProject.FormFiles.Config = &(vcxProject.Configuration);
+    vcxProject.FormFiles.CustomBuild = none;
+}
+
+
+void VcxprojGenerator::initResourceFiles()
+{
+    vcxProject.ResourceFiles.Name = "Resource Files";
+    vcxProject.ResourceFiles.ParseFiles = _False;
+    vcxProject.ResourceFiles.Filter = "qrc;*"; //"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;ts;xlf;qrc";
+    vcxProject.ResourceFiles.Guid = _GUIDResourceFiles;
+
+    // Bad hack, please look away -------------------------------------
+    QString rcc_dep_cmd = project->values("rcc.depend_command").join(" ");
+    if(!rcc_dep_cmd.isEmpty()) {
+        QStringList qrc_files = project->values("RESOURCES");
+        QStringList deps;
+        if(!qrc_files.isEmpty()) {
+            for (int i = 0; i < qrc_files.count(); ++i) {
+                char buff[256];
+                QString dep_cmd = replaceExtraCompilerVariables(rcc_dep_cmd, qrc_files.at(i),"");
+
+                dep_cmd = Option::fixPathToLocalOS(dep_cmd, true, false);
+                if(canExecute(dep_cmd)) {
+                    if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
+                        QString indeps;
+                        while(!feof(proc)) {
+                            int read_in = (int)fread(buff, 1, 255, proc);
+                            if(!read_in)
+                                break;
+                            indeps += QByteArray(buff, read_in);
+                        }
+                        QT_PCLOSE(proc);
+                        if(!indeps.isEmpty())
+                            deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '));
+                    }
+                }
+            }
+            vcxProject.ResourceFiles.addFiles(deps);
+        }
+    }
+    // You may look again --------------------------------------------
+
+    vcxProject.ResourceFiles.addFiles(project->values("RESOURCES"));
+    vcxProject.ResourceFiles.addFiles(project->values("IMAGES"));
+
+    vcxProject.ResourceFiles.Project = this;
+    vcxProject.ResourceFiles.Config = &(vcxProject.Configuration);
+    vcxProject.ResourceFiles.CustomBuild = none;
+}
+
+void VcxprojGenerator::initExtraCompilerOutputs()
+{
+    QStringList otherFilters;
+    otherFilters << "FORMS"
+                 << "FORMS3"
+                 << "GENERATED_FILES"
+                 << "GENERATED_SOURCES"
+                 << "HEADERS"
+                 << "IDLSOURCES"
+                 << "IMAGES"
+                 << "LEXSOURCES"
+                 << "QMAKE_IMAGE_COLLECTION"
+                 << "RC_FILE"
+                 << "RESOURCES"
+                 << "RES_FILE"
+                 << "SOURCES"
+                 << "TRANSLATIONS"
+                 << "YACCSOURCES";
+    const QStringList &quc = project->values("QMAKE_EXTRA_COMPILERS");
+    for(QStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) {
+        QString extracompilerName = project->first((*it) + ".name");
+        if (extracompilerName.isEmpty())
+            extracompilerName = (*it);
+
+        // Create an extra compiler filter and add the files
+        VCXFilter extraCompile;
+        extraCompile.Name = extracompilerName;
+        extraCompile.ParseFiles = _False;
+        extraCompile.Filter = "";
+        extraCompile.Guid = QString(_GUIDExtraCompilerFiles) + "-" + (*it);
+
+        // If the extra compiler has a variable_out set the output file
+        // is added to an other file list, and does not need its own..
+        bool addOnInput = hasBuiltinCompiler(project->first((*it) + ".output"));
+        QString tmp_other_out = project->first((*it) + ".variable_out");
+        if (!tmp_other_out.isEmpty() && !addOnInput)
+            continue;
+
+        if (!addOnInput) {
+            QString tmp_out = project->first((*it) + ".output");
+            if (project->values((*it) + ".CONFIG").indexOf("combine") != -1) {
+                // Combined output, only one file result
+                extraCompile.addFile(
+                    Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, QString(), QString()), false));
+            } else {
+                // One output file per input
+                QStringList tmp_in = project->values(project->first((*it) + ".input"));
+                for (int i = 0; i < tmp_in.count(); ++i) {
+                    const QString &filename = tmp_in.at(i);
+                    if (extraCompilerSources.contains(filename))
+                        extraCompile.addFile(
+                            Option::fixPathToTargetOS(replaceExtraCompilerVariables(filename, tmp_out, QString()), false));
+                }
+            }
+        } else {
+            // In this case we the outputs have a built-in compiler, so we cannot add the custom
+            // build steps there. So, we turn it around and add it to the input files instead,
+            // provided that the input file variable is not handled already (those in otherFilters
+            // are handled, so we avoid them).
+            QStringList inputVars = project->values((*it) + ".input");
+            foreach(QString inputVar, inputVars) {
+                if (!otherFilters.contains(inputVar)) {
+                    QStringList tmp_in = project->values(inputVar);
+                    for (int i = 0; i < tmp_in.count(); ++i) {
+                        const QString &filename = tmp_in.at(i);
+                        if (extraCompilerSources.contains(filename))
+                            extraCompile.addFile(
+                                Option::fixPathToTargetOS(replaceExtraCompilerVariables(filename, QString(), QString()), false));
+                    }
+                }
+            }
+        }
+        extraCompile.Project = this;
+        extraCompile.Config = &(vcxProject.Configuration);
+        extraCompile.CustomBuild = none;
+
+        vcxProject.ExtraCompilersFiles.append(extraCompile);
+    }
+}
+
+
+
+bool VcxprojGenerator::writeProjectMakefile()
+{
+    usePlatformDir();
+    QTextStream t(&Option::output);
+
+    // Check if all requirements are fulfilled
+    if(!project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()) {
+        fprintf(stderr, "Project file not generated because all requirements not met:\n\t%s\n",
+                var("QMAKE_FAILED_REQUIREMENTS").toLatin1().constData());
+        return true;
+    }
+
+    // Generate project file
+    if(project->first("TEMPLATE") == "vcapp" ||
+       project->first("TEMPLATE") == "vclib") {
+        if (!mergedProjects.count()) {
+            warn_msg(WarnLogic, "Generator: MSVC.NET: no single configuration created, cannot output project!");
+            return false;
+        }
+
+        debug_msg(1, "Generator: MSVC.NET: Writing project file");
+        VCXProject mergedProject;
+        for (int i = 0; i < mergedProjects.count(); ++i) {
+            VCXProjectSingleConfig *singleProject = &(mergedProjects.at(i)->vcxProject);
+            mergedProject.SingleProjects += *singleProject;
+            for (int j = 0; j < singleProject->ExtraCompilersFiles.count(); ++j) {
+                const QString &compilerName = singleProject->ExtraCompilersFiles.at(j).Name;
+                if (!mergedProject.ExtraCompilers.contains(compilerName))
+                    mergedProject.ExtraCompilers += compilerName;
+            }
+        }
+
+        if(mergedProjects.count() > 1 &&
+           mergedProjects.at(0)->vcxProject.Name ==
+           mergedProjects.at(1)->vcxProject.Name)
+            mergedProjects.at(0)->writePrlFile();
+        mergedProject.Name = unescapeFilePath(project->first("QMAKE_ORIG_TARGET"));
+        mergedProject.Version = mergedProjects.at(0)->vcxProject.Version;
+        mergedProject.ProjectGUID = project->isEmpty("QMAKE_UUID") ? getProjectUUID().toString().toUpper() : project->first("QMAKE_UUID");
+        mergedProject.Keyword = project->first("VCPROJ_KEYWORD");
+        mergedProject.SccProjectName = mergedProjects.at(0)->vcxProject.SccProjectName;
+        mergedProject.SccLocalPath = mergedProjects.at(0)->vcxProject.SccLocalPath;
+        mergedProject.PlatformName = mergedProjects.at(0)->vcxProject.PlatformName;
+
+        XmlOutput xmlOut(t);
+        xmlOut << mergedProject;
+        return true;
+    } else if(project->first("TEMPLATE") == "vcsubdirs") {
+        return writeMakefile(t);
+    }
+    return false;
+}
+
+
+
+
+bool VcxprojGenerator::mergeBuildProject(MakefileGenerator *other)
+{
+    VcxprojGenerator *otherVC = static_cast<VcxprojGenerator*>(other);
+    if (!otherVC) {
+        warn_msg(WarnLogic, "VcxprojGenerator: Cannot merge other types of projects! (ignored)");
+        return false;
+    }
+    mergedProjects += otherVC;
+    return true;
+}
+
+QT_END_NAMESPACE
+
diff --git a/qmake/generators/win32/msvc_vcxproj.h b/qmake/generators/win32/msvc_vcxproj.h
new file mode 100644
index 0000000..8a183e9
--- /dev/null
+++ b/qmake/generators/win32/msvc_vcxproj.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MSVC_VCXPROJ_H
+#define MSVC_VCXPROJ_H
+
+#include "winmakefile.h"
+#include "msbuild_objectmodel.h"
+#include "msvc_vcproj.h"
+
+QT_BEGIN_NAMESPACE
+
+class VcxprojGenerator : public VcprojGenerator
+{
+    bool writeMakefile(QTextStream &);
+    bool writeProjectMakefile();
+
+public:
+    VcxprojGenerator();
+    ~VcxprojGenerator();
+
+protected:
+    virtual bool supportsMetaBuild() { return true; }
+    virtual bool supportsMergedBuilds() { return true; }
+    virtual bool mergeBuildProject(MakefileGenerator *other);
+
+    virtual void initProject();
+
+    void initConfiguration();
+    void initCompilerTool();
+    void initDeploymentTool();
+    void initLinkerTool();
+    void initPreLinkEventTools();
+    void initPostBuildEventTools();
+    void initRootFiles();
+    void initResourceTool();
+    void initSourceFiles();
+    void initHeaderFiles();
+    void initGeneratedFiles();
+    void initTranslationFiles();
+    void initFormFiles();
+    void initResourceFiles();
+    void initLexYaccFiles();
+    void initExtraCompilerOutputs();
+
+    // Used for single project
+    VCXProjectSingleConfig vcxProject;
+
+    // Holds all configurations for glue (merged) project
+    QList<VcxprojGenerator*> mergedProjects;
+
+private:
+    friend class VCXFilter;
+
+};
+
+inline VcxprojGenerator::~VcxprojGenerator()
+{ }
+
+QT_END_NAMESPACE
+
+#endif // MSVC_VCXPROJ_H
diff --git a/qmake/generators/xmloutput.cpp b/qmake/generators/xmloutput.cpp
index e8578aa..718bdd6 100644
--- a/qmake/generators/xmloutput.cpp
+++ b/qmake/generators/xmloutput.cpp
@@ -81,6 +81,11 @@ void XmlOutput::setState(XMLState state)
     currentState = state;
 }
 
+void XmlOutput::setFormat(XMLFormat newFormat)
+{
+    format = newFormat;
+}
+
 XmlOutput::XMLState XmlOutput::state()
 {
     return currentState;
@@ -172,6 +177,20 @@ XmlOutput& XmlOutput::operator<<(const xml_output& o)
     case tTag:
         newTagOpen(o.xo_text);
         break;
+    case tTagValue:
+        addRaw(QString("\n%1<%2>").arg(currentIndent).arg(o.xo_text));
+        addRaw(QString("%1").arg(o.xo_value));
+        addRaw(QString("</%1>").arg(o.xo_text));
+        break;
+    case tValueTag:
+        addRaw(QString("%1").arg(doConversion(o.xo_text)));
+        setFormat(NoNewLine);
+        closeTag();
+        setFormat(NewLine);
+        break;
+    case tImport:
+        addRaw(QString("\n%1<Import %2=\"%3\" />").arg(currentIndent).arg(o.xo_text).arg(o.xo_value));
+        break;
     case tCloseTag:
         if (o.xo_value.count())
             closeAll();
@@ -183,6 +202,9 @@ XmlOutput& XmlOutput::operator<<(const xml_output& o)
     case tAttribute:
         addAttribute(o.xo_text, o.xo_value);
         break;
+    case tAttributeTag:
+        addAttributeTag(o.xo_text, o.xo_value);
+        break;
     case tData:
         {
             // Special case to be able to close tag in normal
@@ -266,7 +288,7 @@ void XmlOutput::closeTag()
             tagStack.pop_back();
             break;
         case Attribute:
-            xmlFile << "/>";
+            xmlFile << " />";
             tagStack.pop_back();
             currentState = Tag;
             decreaseIndent(); // <--- Post-decrease indent
@@ -307,7 +329,7 @@ void XmlOutput::addDeclaration(const QString &version, const QString &encoding)
             qDebug("<%s>: Cannot add declaration when not in bare state", tagStack.last().toLatin1().constData());
             return;
     }
-    QString outData = QString("<?xml version=\"%1\" encoding = \"%2\"?>")
+    QString outData = QString("<?xml version=\"%1\" encoding=\"%2\"?>")
                               .arg(doConversion(version))
                               .arg(doConversion(encoding));
     addRaw(outData);
@@ -337,4 +359,20 @@ void XmlOutput::addAttribute(const QString &attribute, const QString &value)
     xmlFile << currentIndent << doConversion(attribute) << "=\"" << doConversion(value) << "\"";
 }
 
+void XmlOutput::addAttributeTag(const QString &attribute, const QString &value)
+{
+     switch(currentState) {
+        case Bare:
+        case Tag:
+            //warn_msg(WarnLogic, "<%s>: Cannot add attribute since tags not open", tagStack.last().toLatin1().constData());
+            qDebug("<%s>: Cannot add attribute (%s) since tag's not open",
+                   (tagStack.count() ? tagStack.last().toLatin1().constData() : "Root"),
+                   attribute.toLatin1().constData());
+            return;
+        case Attribute:
+            break;
+    }
+    xmlFile << " " << doConversion(attribute) << "=\"" << doConversion(value) << "\"";
+}
+
 QT_END_NAMESPACE
diff --git a/qmake/generators/xmloutput.h b/qmake/generators/xmloutput.h
index a472c99..7c0667c 100644
--- a/qmake/generators/xmloutput.h
+++ b/qmake/generators/xmloutput.h
@@ -69,9 +69,13 @@ public:
         tRaw,               // Raw text (no formating)
         tDeclaration,       // <?xml version="x.x" encoding="xxx"?>
         tTag,               // <tagname attribute1="value"
+        tTagValue,          // <tagname>value</tagname>
+        tValueTag,          // value</tagname>
         tCloseTag,          // Closes an open tag
         tAttribute,         //  attribute2="value">
+        tAttributeTag,      //  attribute on the same line as a tag
         tData,              // Tag data (formating done)
+        tImport,            // <import "type"="path" />
         tComment,           // <!-- Comment -->
         tCDATA              // <![CDATA[ ... ]]>
     };
@@ -85,6 +89,7 @@ public:
     void setIndentLevel(int level);
     int indentLevel();
     void setState(XMLState state);
+    void setFormat(XMLFormat newFormat);
     XMLState state();
 
 
@@ -121,6 +126,7 @@ private:
     void addDeclaration(const QString &version, const QString &encoding);
     void addRaw(const QString &rawText);
     void addAttribute(const QString &attribute, const QString &value);
+    void addAttributeTag(const QString &attribute, const QString &value);
     void addData(const QString &data);
 
     // Data
@@ -163,6 +169,22 @@ inline XmlOutput::xml_output tag(const QString &name)
     return XmlOutput::xml_output(XmlOutput::tTag, name, QString());
 }
 
+
+inline XmlOutput::xml_output valueTag(const QString &value)
+{
+    return XmlOutput::xml_output(XmlOutput::tValueTag, value, QString());
+}
+
+inline XmlOutput::xml_output tagValue(const QString &tagName, const QString &value)
+{
+    return XmlOutput::xml_output(XmlOutput::tTagValue, tagName, value);
+}
+
+inline XmlOutput::xml_output import(const QString &tagName, const QString &value)
+{
+    return XmlOutput::xml_output(XmlOutput::tImport, tagName, value);
+}
+
 inline XmlOutput::xml_output closetag()
 {
     return XmlOutput::xml_output(XmlOutput::tCloseTag, QString(), QString());
@@ -184,12 +206,24 @@ inline XmlOutput::xml_output attribute(const QString &name,
     return XmlOutput::xml_output(XmlOutput::tAttribute, name, value);
 }
 
+inline XmlOutput::xml_output attributeTag(const QString &name,
+                                       const QString &value)
+{
+    return XmlOutput::xml_output(XmlOutput::tAttributeTag, name, value);
+}
+
 inline XmlOutput::xml_output attr(const QString &name,
                                   const QString &value)
 {
     return attribute(name, value);
 }
 
+inline XmlOutput::xml_output attrTag(const QString &name,
+                                  const QString &value)
+{
+    return attributeTag(name, value);
+}
+
 inline XmlOutput::xml_output data(const QString &text = QString())
 {
     return XmlOutput::xml_output(XmlOutput::tData, text, QString());
diff --git a/qmake/qmake.pro b/qmake/qmake.pro
index f3f9d53..4213253 100644
--- a/qmake/qmake.pro
+++ b/qmake/qmake.pro
@@ -19,7 +19,8 @@ VPATH += $$QT_SOURCE_TREE/src/corelib/global \
          $$QT_SOURCE_TREE/src/corelib/plugin \
          $$QT_SOURCE_TREE/src/corelib/xml \
          $$QT_SOURCE_TREE/src/corelib/io
-INCPATH += generators \
+INCPATH += . \
+           generators \
            generators/unix \
            generators/win32 \
            generators/mac \
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 8a004fc..f4bd92e 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -1186,7 +1186,8 @@ void Configure::parseCmdLine()
             dictionary[ "QMAKESPEC" ].endsWith( "-msvc2002" ) ||
             dictionary[ "QMAKESPEC" ].endsWith( "-msvc2003" ) ||
             dictionary[ "QMAKESPEC" ].endsWith( "-msvc2005" ) ||
-            dictionary[ "QMAKESPEC" ].endsWith( "-msvc2008" )) {
+            dictionary[ "QMAKESPEC" ].endsWith( "-msvc2008" ) ||
+            dictionary[ "QMAKESPEC" ].endsWith( "-msvc2010" )) {
             if ( dictionary[ "MAKE" ].isEmpty() ) dictionary[ "MAKE" ] = "nmake";
             dictionary[ "QMAKEMAKEFILE" ] = "Makefile.win32";
         } else if ( dictionary[ "QMAKESPEC" ] == QString( "win32-g++" ) ) {
@@ -2095,7 +2096,7 @@ bool Configure::checkAvailability(const QString &part)
     } else if (part == "MULTIMEDIA" || part == "SCRIPT" || part == "SCRIPTTOOLS" || part == "DECLARATIVE") {
         available = true;
     } else if (part == "WEBKIT") {
-        available = (dictionary.value("QMAKESPEC") == "win32-msvc2005") || (dictionary.value("QMAKESPEC") == "win32-msvc2008") || (dictionary.value("QMAKESPEC") == "win32-g++");
+        available = (dictionary.value("QMAKESPEC") == "win32-msvc2005") || (dictionary.value("QMAKESPEC") == "win32-msvc2008") || (dictionary.value("QMAKESPEC") == "win32-msvc2010") || (dictionary.value("QMAKESPEC") == "win32-g++");
     } else if (part == "AUDIO_BACKEND") {
         available = true;
         if (dictionary.contains("XQMAKESPEC") && dictionary["XQMAKESPEC"].startsWith("symbian")) {
diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp
index 60b8dcc..943a8a2 100644
--- a/tools/configure/environment.cpp
+++ b/tools/configure/environment.cpp
@@ -80,6 +80,7 @@ struct CompilerInfo{
     {CC_NET2003, "Microsoft (R) 32-bit C/C++ Optimizing Compiler.NET 2003 (7.1)",  "Software\\Microsoft\\VisualStudio\\7.1\\Setup\\VC\\ProductDir", "cl.exe"}, // link.exe, lib.exe
     {CC_NET2005, "Microsoft (R) 32-bit C/C++ Optimizing Compiler.NET 2005 (8.0)",  "Software\\Microsoft\\VisualStudio\\SxS\\VC7\\8.0", "cl.exe"}, // link.exe, lib.exe
     {CC_NET2008, "Microsoft (R) 32-bit C/C++ Optimizing Compiler.NET 2008 (9.0)",  "Software\\Microsoft\\VisualStudio\\SxS\\VC7\\9.0", "cl.exe"}, // link.exe, lib.exe
+    {CC_NET2010, "Microsoft (R) 32-bit C/C++ Optimizing Compiler.NET 2010 (10.0)", "Software\\Microsoft\\VisualStudio\\SxS\\VC7\\10.0", "cl.exe"}, // link.exe, lib.exe
     {CC_UNKNOWN, "Unknown", 0, 0},
 };
 
@@ -105,6 +106,9 @@ QString Environment::detectQMakeSpec()
 {
     QString spec;
     switch (detectCompiler()) {
+    case CC_NET2010:
+        spec = "win32-msvc2010";
+        break;
     case CC_NET2008:
         spec = "win32-msvc2008";
         break;
diff --git a/tools/configure/environment.h b/tools/configure/environment.h
index b1cbe3a..16af8df 100644
--- a/tools/configure/environment.h
+++ b/tools/configure/environment.h
@@ -56,7 +56,8 @@ enum Compiler {
     CC_NET2002 = 0x70,
     CC_NET2003 = 0x71,
     CC_NET2005 = 0x80,
-    CC_NET2008 = 0x90
+    CC_NET2008 = 0x90,
+    CC_NET2010 = 0x91
 };
 
 struct CompilerInfo;
-- 
cgit v0.12


From d2e32241b227a7662390ade8639f48804493f6fc Mon Sep 17 00:00:00 2001
From: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
Date: Wed, 21 Apr 2010 12:48:45 +0200
Subject: New configure.exe binary

---
 configure.exe | Bin 1318400 -> 1318400 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/configure.exe b/configure.exe
index ab97e1e..f1e0215 100755
Binary files a/configure.exe and b/configure.exe differ
-- 
cgit v0.12


From 744db77f203b4a0c234b32a3f56edf1901b35b3a Mon Sep 17 00:00:00 2001
From: David Boddie <dboddie@trolltech.com>
Date: Thu, 22 Apr 2010 20:51:42 +0200
Subject: Doc: Fixed the Declarative documentation set. Tweaked the others.

Reviewed-by: Trust Me
---
 tools/qdoc3/test/assistant.qdocconf    |  3 +-
 tools/qdoc3/test/designer.qdocconf     |  3 +-
 tools/qdoc3/test/linguist.qdocconf     |  3 +-
 tools/qdoc3/test/qdeclarative.qdocconf | 58 +++++++++++++++++++++++-----------
 tools/qdoc3/test/qmake.qdocconf        |  3 +-
 5 files changed, 44 insertions(+), 26 deletions(-)

diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf
index 65137f5..1deefce 100644
--- a/tools/qdoc3/test/assistant.qdocconf
+++ b/tools/qdoc3/test/assistant.qdocconf
@@ -16,8 +16,7 @@ qhp.Assistant.file                = assistant.qhp
 qhp.Assistant.namespace           = com.trolltech.assistant.470
 qhp.Assistant.virtualFolder       = qdoc
 qhp.Assistant.indexTitle          = Qt Assistant Manual
-qhp.Assistant.extraFiles          = index.html \
-				    images/api_examples.png \
+qhp.Assistant.extraFiles          = images/api_examples.png \
                              	    images/api_lookup.png \
                              	    images/api_topics.png \
                              	    images/bg_l_blank.png \
diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf
index 69e3a90..513801a 100644
--- a/tools/qdoc3/test/designer.qdocconf
+++ b/tools/qdoc3/test/designer.qdocconf
@@ -16,8 +16,7 @@ qhp.Designer.file                = designer.qhp
 qhp.Designer.namespace           = com.trolltech.designer.470
 qhp.Designer.virtualFolder       = qdoc
 qhp.Designer.indexTitle          = Qt Designer Manual
-qhp.Designer.extraFiles          = index.html \
-				   images/api_examples.png \
+qhp.Designer.extraFiles          = images/api_examples.png \
                              	   images/api_lookup.png \
                              	   images/api_topics.png \
                              	   images/bg_l_blank.png \
diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf
index e398d29..a3f4f00 100644
--- a/tools/qdoc3/test/linguist.qdocconf
+++ b/tools/qdoc3/test/linguist.qdocconf
@@ -16,8 +16,7 @@ qhp.Linguist.file                = linguist.qhp
 qhp.Linguist.namespace           = com.trolltech.linguist.470
 qhp.Linguist.virtualFolder       = qdoc
 qhp.Linguist.indexTitle          = Qt Linguist Manual
-qhp.Linguist.extraFiles          = index.html \
-				   images/api_examples.png \
+qhp.Linguist.extraFiles          = images/api_examples.png \
                              	   images/api_lookup.png \
                              	   images/api_topics.png \
                              	   images/bg_l_blank.png \
diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf
index 03514c1..ee88ada 100644
--- a/tools/qdoc3/test/qdeclarative.qdocconf
+++ b/tools/qdoc3/test/qdeclarative.qdocconf
@@ -27,8 +27,46 @@ qhp.Qml.indexTitle          = Qml Reference
 
 # Files not referenced in any qdoc file
 # See also extraimages.HTML
-qhp.Qml.extraFiles          = classic.css \
-                             images/qt-logo.png
+qhp.Qml.extraFiles          = \
+                             images/api_examples.png \
+                             images/api_lookup.png \
+                             images/api_topics.png \
+                             images/bg_l_blank.png \
+                             images/bg_ll_blank.png \
+                             images/bg_ll.png \
+                             images/bg_l.png \
+                             images/bg_lr.png \
+                             images/bg_r.png \
+                             images/bg_ul_blank.png \
+                             images/bg_ul.png \
+                             images/bg_ur_blank.png \
+                             images/bg_ur.png \
+                             images/box_bg.png \
+                             images/breadcrumb.png \
+                             images/bullet_dn.png \
+                             images/bullet_gt.png \
+                             images/bullet_sq.png \
+                             images/bullet_up.png \
+                             images/coloreditorfactoryimage.png \
+                             images/content_bg.png \
+                             images/dynamiclayouts-example.png \
+                             images/feedbackground.png \
+                             images/form_bg.png \
+                             images/horBar.png \
+                             images/page_bg.png \
+                             images/print.png \
+                             images/qt_guide.png \
+                             images/qt_icon.png \
+                             images/qt-logo.png \
+                             images/qt_ref_doc.png \
+                             images/qt_tools.png \
+                             images/sep.png \
+                             images/sprites-combined.png \
+                             images/stylesheet-coffee-plastique.png \
+                             images/taskmenuextension-example.png \
+                             scripts/functions.js \
+                             scripts/jquery.js \
+                             style/style.css
 
 qhp.Qml.filterAttributes    = qt 4.6.0 qtrefdoc
 qhp.Qml.customFilters.Qt.name = Qt 4.6.0
@@ -63,19 +101,3 @@ imagedirs               = $QT_SOURCE_TREE/doc/src/images \
 outputdir               = $QT_BUILD_TREE/doc-build/html-qml
 tagfile                 = $QT_BUILD_TREE/doc-build/html-qml/qt.tags
 base                    = file:$QT_BUILD_TREE/doc/html-qml
-
-HTML.stylesheets        = classic.css
-
-HTML.postheader         = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n" \
-                          "<tr>\n" \
-                          "<td align=\"left\" valign=\"top\">" \
-                          "<img src=\"images/qt-logo.png\" align=\"left\" border=\"0\"/>" \
-                          "</td>\n" \
-                          "<td width=\"1\">&nbsp;&nbsp;</td>" \
-                          "<td class=\"postheader\" valign=\"center\" align=\"left\">" \
-                          "<a href=\"qmlreference.html\">" \
-                          "<font color=\"#004faf\">Home</font></a>&nbsp;&middot;" \
-                          " <a href=\"qmlelements.html\">" \
-                          "<font color=\"#004faf\">Elements</font></a>" \
-                          "</td>\n" \
-                          "</tr></table>"
diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf
index fbb59c0..f38a2a4 100644
--- a/tools/qdoc3/test/qmake.qdocconf
+++ b/tools/qdoc3/test/qmake.qdocconf
@@ -16,8 +16,7 @@ qhp.qmake.file                = qmake.qhp
 qhp.qmake.namespace           = com.trolltech.qmake.470
 qhp.qmake.virtualFolder       = qdoc
 qhp.qmake.indexTitle          = QMake Manual
-qhp.qmake.extraFiles          = index.html \
-				images/api_examples.png \
+qhp.qmake.extraFiles          = images/api_examples.png \
                              	images/api_lookup.png \
                              	images/api_topics.png \
                              	images/bg_l_blank.png \
-- 
cgit v0.12


From 6a56b0222c15116150dd78883204f65708a927ca Mon Sep 17 00:00:00 2001
From: Andrew den Exter <andrew.den-exter@nokia.com>
Date: Fri, 23 Apr 2010 16:08:55 +1000
Subject: Remove trace code from directshowaudioendpointcontrol.h.

Quack.

Reviewed-by: Justin McPherson
---
 .../directshow/mediaplayer/directshowaudioendpointcontrol.h          | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
index 5dd36c3..8d23751 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.h
@@ -82,11 +82,6 @@ private:
 
 #define QAudioEndpointSelector_iid "com.nokia.Qt.QAudioEndpointSelector/1.0"
 
-class Duck
-{
-    uint quack;
-};
-
 QT_END_NAMESPACE
 
 QT_END_HEADER
-- 
cgit v0.12


From 41b110e17b3deb102c7521d19964896228fcc8c6 Mon Sep 17 00:00:00 2001
From: Shane Kearns <shane.kearns@accenture.com>
Date: Fri, 23 Apr 2010 09:39:40 +0200
Subject: Stub implementations for EGL for symbian

This is done to keep binary compatibility between Qt built with openvg
vs Qt built without openvg support.
The problem is that Symbian uses .def files to map between exported
symbol names and ordinals in the DLL export table. The alternative of
manually maintaining two versions of the QtGui def files proved to be
too error prone and time consuming.
Note that the EGL exports are defined in a private header, for use by
the openvg and opengl graphics system plugins.
These plugins should always be compiled against Qt configured with
support for the graphics system, as the headers contain default parameters
which are inlined into the plugin binary.

Task-number: QTBUG-7870
Reviewed-by: Tom Cooksey
---
 src/gui/egl/egl.pri                 |  43 +++---
 src/gui/egl/qegl_p.h                |  28 +++-
 src/gui/egl/qegl_stub.cpp           | 292 ++++++++++++++++++++++++++++++++++++
 src/gui/egl/qeglproperties_stub.cpp | 148 ++++++++++++++++++
 src/gui/gui.pro                     |   3 +-
 src/s60installs/bwins/QtGuiu.def    | 106 ++++++-------
 src/s60installs/eabi/QtGuiu.def     |  88 +++++------
 7 files changed, 587 insertions(+), 121 deletions(-)
 create mode 100644 src/gui/egl/qegl_stub.cpp
 create mode 100644 src/gui/egl/qeglproperties_stub.cpp

diff --git a/src/gui/egl/egl.pri b/src/gui/egl/egl.pri
index b90b9b0..9ca1f0a 100644
--- a/src/gui/egl/egl.pri
+++ b/src/gui/egl/egl.pri
@@ -1,24 +1,29 @@
-CONFIG += egl
+contains(QT_CONFIG, egl): {
+	CONFIG += egl
 
-HEADERS += \
-    egl/qegl_p.h \
-    egl/qeglcontext_p.h \
-    egl/qeglproperties_p.h
+	HEADERS += \
+	    egl/qegl_p.h \
+	    egl/qeglcontext_p.h \
+	    egl/qeglproperties_p.h
 
-SOURCES += \
-    egl/qegl.cpp \
-    egl/qeglproperties.cpp
+	SOURCES += \
+	    egl/qegl.cpp \
+	    egl/qeglproperties.cpp
 
-wince*: SOURCES += egl/qegl_wince.cpp
+	wince*: SOURCES += egl/qegl_wince.cpp
 
-unix {
-    embedded {
-        SOURCES += egl/qegl_qws.cpp
-    } else {
-        symbian {
-            SOURCES += egl/qegl_symbian.cpp
-        } else {
-            SOURCES += egl/qegl_x11.cpp
-        }
-    }
+	unix {
+	    embedded {
+	        SOURCES += egl/qegl_qws.cpp
+	    } else {
+	        symbian {
+	            SOURCES += egl/qegl_symbian.cpp
+	        } else {
+	            SOURCES += egl/qegl_x11.cpp
+	        }
+	    }
+	}
+} else:symbian {
+	SOURCES += egl/qegl_stub.cpp
+	SOURCES += egl/qeglproperties_stub.cpp
 }
diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h
index 83bdb5e..6c562ef 100644
--- a/src/gui/egl/qegl_p.h
+++ b/src/gui/egl/qegl_p.h
@@ -55,6 +55,7 @@
 
 QT_BEGIN_INCLUDE_NAMESPACE
 
+#ifndef QT_NO_EGL
 #if defined(QT_OPENGL_ES_2)
 #   include <GLES2/gl2.h>
 #endif
@@ -64,6 +65,23 @@ QT_BEGIN_INCLUDE_NAMESPACE
 #else
 #   include <EGL/egl.h>
 #endif
+#else
+
+//types from egltypes.h for compiling stub without EGL headers
+typedef int EGLBoolean;
+typedef int EGLint;
+typedef int EGLenum;
+typedef int    NativeDisplayType;
+typedef void*  NativeWindowType;
+typedef void*  NativePixmapType;
+typedef int EGLDisplay;
+typedef int EGLConfig;
+typedef int EGLSurface;
+typedef int EGLContext;
+typedef int EGLClientBuffer;
+#define EGL_NONE            0x3038  /* Attrib list terminator */
+
+#endif
 
 #if defined(Q_WS_X11)
 // If <EGL/egl.h> included <X11/Xlib.h>, then the global namespace
@@ -169,7 +187,7 @@ namespace QEgl {
         Translucent = 0x01,
         Renderable  = 0x02  // Config will be compatable with the paint engines (VG or GL)
     };
-    Q_DECLARE_FLAGS(ConfigOptions, ConfigOption);
+    Q_DECLARE_FLAGS(ConfigOptions, ConfigOption)
 
     // Most of the time we use the same config for things like widgets & pixmaps, so rather than
     // go through the eglChooseConfig loop every time, we use defaultConfig, which will return
@@ -182,7 +200,11 @@ namespace QEgl {
 
     Q_GUI_EXPORT void dumpAllConfigs();
 
+#ifdef QT_NO_EGL
+    Q_GUI_EXPORT QString errorString(EGLint code = 0);
+#else
     Q_GUI_EXPORT QString errorString(EGLint code = eglGetError());
+#endif
 
     Q_GUI_EXPORT QString extensions();
     Q_GUI_EXPORT bool hasExtension(const char* extensionName);
@@ -200,9 +222,9 @@ namespace QEgl {
 #ifdef Q_WS_X11
     Q_GUI_EXPORT VisualID getCompatibleVisualId(EGLConfig config);
 #endif
-};
+}
 
-Q_DECLARE_OPERATORS_FOR_FLAGS(QEgl::ConfigOptions);
+Q_DECLARE_OPERATORS_FOR_FLAGS(QEgl::ConfigOptions)
 
 QT_END_NAMESPACE
 
diff --git a/src/gui/egl/qegl_stub.cpp b/src/gui/egl/qegl_stub.cpp
new file mode 100644
index 0000000..0bd3451
--- /dev/null
+++ b/src/gui/egl/qegl_stub.cpp
@@ -0,0 +1,292 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qpaintdevice.h>
+#include <QtGui/qpixmap.h>
+#include <QtGui/qwidget.h>
+#include <QtCore/qdebug.h>
+
+#include "qegl_p.h"
+#include "qeglcontext_p.h"
+
+
+QT_BEGIN_NAMESPACE
+
+static void noegl(const char *fn)
+{
+    qWarning() << fn << " called, but Qt configured without EGL" << endl;
+}
+
+#define NOEGL noegl(__FUNCTION__);
+
+QEglContext::QEglContext()
+    : apiType(QEgl::OpenGL)
+    , ctx(0)
+    , cfg(QEGL_NO_CONFIG)
+    , currentSurface(0)
+    , current(false)
+    , ownsContext(true)
+    , sharing(false)
+{
+    NOEGL
+}
+
+QEglContext::~QEglContext()
+{
+    NOEGL
+}
+
+bool QEglContext::isValid() const
+{
+    NOEGL
+    return false;
+}
+
+bool QEglContext::isCurrent() const
+{
+    NOEGL
+    return false;
+}
+
+EGLConfig QEgl::defaultConfig(int devType, API api, ConfigOptions options)
+{
+    Q_UNUSED(devType)
+    Q_UNUSED(api)
+    Q_UNUSED(options)
+    NOEGL
+    return QEGL_NO_CONFIG;
+}
+
+
+// Choose a configuration that matches "properties".
+EGLConfig QEgl::chooseConfig(const QEglProperties* properties, QEgl::PixelFormatMatch match)
+{
+    Q_UNUSED(properties)
+    Q_UNUSED(match)
+    NOEGL
+    return QEGL_NO_CONFIG;
+}
+
+bool QEglContext::chooseConfig(const QEglProperties& properties, QEgl::PixelFormatMatch match)
+{
+    Q_UNUSED(properties)
+    Q_UNUSED(match)
+    NOEGL
+    return false;
+}
+
+EGLSurface QEglContext::createSurface(QPaintDevice* device, const QEglProperties *properties)
+{
+    Q_UNUSED(device)
+    Q_UNUSED(properties)
+    NOEGL
+    return 0;
+}
+
+
+// Create the EGLContext.
+bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties *properties)
+{
+    Q_UNUSED(shareContext)
+    Q_UNUSED(properties)
+    NOEGL
+    return false;
+}
+
+// Destroy an EGL surface object.  If it was current on this context
+// then call doneCurrent() for it first.
+void QEglContext::destroySurface(EGLSurface surface)
+{
+    Q_UNUSED(surface)
+    NOEGL
+}
+
+// Destroy the context.  Note: this does not destroy the surface.
+void QEglContext::destroyContext()
+{
+    NOEGL
+}
+
+bool QEglContext::makeCurrent(EGLSurface surface)
+{
+    Q_UNUSED(surface)
+    NOEGL
+    return false;
+}
+
+bool QEglContext::doneCurrent()
+{
+    NOEGL
+    return false;
+}
+
+// Act as though doneCurrent() was called, but keep the context
+// and the surface active for the moment.  This allows makeCurrent()
+// to skip a call to eglMakeCurrent() if we are using the same
+// surface as the last set of painting operations.  We leave the
+// currentContext() pointer as-is for now.
+bool QEglContext::lazyDoneCurrent()
+{
+    NOEGL
+    return false;
+}
+
+bool QEglContext::swapBuffers(EGLSurface surface)
+{
+    Q_UNUSED(surface)
+    NOEGL
+    return false;
+}
+
+int QEglContext::configAttrib(int name) const
+{
+    Q_UNUSED(name)
+    NOEGL
+    return 0;
+}
+
+typedef EGLImageKHR (EGLAPIENTRY *_eglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*);
+typedef EGLBoolean (EGLAPIENTRY *_eglDestroyImageKHR)(EGLDisplay, EGLImageKHR);
+
+// Defined in qegl.cpp:
+static _eglCreateImageKHR qt_eglCreateImageKHR = 0;
+static _eglDestroyImageKHR qt_eglDestroyImageKHR = 0;
+
+
+EGLDisplay QEgl::display()
+{
+    NOEGL
+    return 0;
+}
+
+EGLImageKHR QEgl::eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
+{
+    Q_UNUSED(dpy)
+    Q_UNUSED(ctx)
+    Q_UNUSED(target)
+    Q_UNUSED(buffer)
+    Q_UNUSED(attrib_list)
+    NOEGL
+    return 0;
+}
+
+EGLBoolean QEgl::eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img)
+{
+    Q_UNUSED(dpy)
+    Q_UNUSED(img)
+    NOEGL
+    return 0;
+}
+
+
+#ifndef Q_WS_X11
+EGLSurface QEgl::createSurface(QPaintDevice *device, EGLConfig cfg, const QEglProperties *properties)
+{
+    Q_UNUSED(device)
+    Q_UNUSED(cfg)
+    Q_UNUSED(properties)
+    NOEGL
+    return 0;
+}
+#endif
+
+
+// Return the error string associated with a specific code.
+QString QEgl::errorString(EGLint code)
+{
+    Q_UNUSED(code)
+    NOEGL
+    return QString();
+}
+
+// Dump all of the EGL configurations supported by the system.
+void QEgl::dumpAllConfigs()
+{
+    NOEGL
+}
+
+QString QEgl::extensions()
+{
+    NOEGL
+    return QString();
+}
+
+bool QEgl::hasExtension(const char* extensionName)
+{
+    Q_UNUSED(extensionName)
+    NOEGL
+    return false;
+}
+
+QEglContext *QEglContext::currentContext(QEgl::API api)
+{
+    Q_UNUSED(api)
+    NOEGL
+    return false;
+}
+
+void QEglContext::setCurrentContext(QEgl::API api, QEglContext *context)
+{
+    Q_UNUSED(api)
+    Q_UNUSED(context)
+    NOEGL
+}
+
+EGLNativeDisplayType QEgl::nativeDisplay()
+{
+    NOEGL
+    return 0;
+}
+
+EGLNativeWindowType QEgl::nativeWindow(QWidget* widget)
+{
+    Q_UNUSED(widget)
+    NOEGL
+    return (EGLNativeWindowType)0;
+}
+
+EGLNativePixmapType QEgl::nativePixmap(QPixmap*)
+{
+    NOEGL
+    return (EGLNativePixmapType)0;
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/egl/qeglproperties_stub.cpp b/src/gui/egl/qeglproperties_stub.cpp
new file mode 100644
index 0000000..2012ebd
--- /dev/null
+++ b/src/gui/egl/qeglproperties_stub.cpp
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qstringlist.h>
+
+#include "qeglproperties_p.h"
+#include "qeglcontext_p.h"
+
+QT_BEGIN_NAMESPACE
+
+static void noegl(const char *fn)
+{
+    qWarning() << fn << " called, but Qt configured without EGL" << endl;
+}
+
+#define NOEGL noegl(__FUNCTION__);
+
+// Initialize a property block.
+QEglProperties::QEglProperties()
+{
+    NOEGL
+}
+
+QEglProperties::QEglProperties(EGLConfig cfg)
+{
+    Q_UNUSED(cfg)
+    NOEGL
+}
+
+// Fetch the current value associated with a property.
+int QEglProperties::value(int name) const
+{
+    Q_UNUSED(name)
+    NOEGL
+    return 0;
+}
+
+// Set the value associated with a property, replacing an existing
+// value if there is one.
+void QEglProperties::setValue(int name, int value)
+{
+    Q_UNUSED(name)
+    Q_UNUSED(value)
+    NOEGL
+}
+
+// Remove a property value.  Returns false if the property is not present.
+bool QEglProperties::removeValue(int name)
+{
+    Q_UNUSED(name)
+    NOEGL
+    return false;
+}
+
+void QEglProperties::setDeviceType(int devType)
+{
+    Q_UNUSED(devType)
+    NOEGL
+}
+
+
+// Sets the red, green, blue, and alpha sizes based on a pixel format.
+// Normally used to match a configuration request to the screen format.
+void QEglProperties::setPixelFormat(QImage::Format pixelFormat)
+{
+    Q_UNUSED(pixelFormat)
+    NOEGL
+
+}
+
+void QEglProperties::setRenderableType(QEgl::API api)
+{
+    Q_UNUSED(api);
+    NOEGL
+}
+
+// Reduce the complexity of a configuration request to ask for less
+// because the previous request did not result in success.  Returns
+// true if the complexity was reduced, or false if no further
+// reductions in complexity are possible.
+bool QEglProperties::reduceConfiguration()
+{
+    NOEGL
+    return false;
+}
+
+static void addTag(QString& str, const QString& tag)
+{
+    Q_UNUSED(str)
+    Q_UNUSED(tag)
+    NOEGL
+}
+
+// Convert a property list to a string suitable for debug output.
+QString QEglProperties::toString() const
+{
+    NOEGL
+    return QString();
+}
+
+void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev)
+{
+    Q_UNUSED(dev)
+    NOEGL
+}
+
+QT_END_NAMESPACE
+
+
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 300a03f..a6370b2 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -40,9 +40,8 @@ include(statemachine/statemachine.pri)
 include(math3d/math3d.pri)
 include(effects/effects.pri)
 
-contains(QT_CONFIG, egl): include(egl/egl.pri)
+include(egl/egl.pri)
 win32:!wince*: DEFINES += QT_NO_EGL
-
 embedded: QT += network
 
 QMAKE_LIBS += $$QMAKE_LIBS_GUI
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index a948f73..d99a6e4 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -12551,56 +12551,56 @@ EXPORTS
 	?isOpacityNull@QGraphicsItemPrivate@@SA_NM@Z @ 12550 NONAME ; bool QGraphicsItemPrivate::isOpacityNull(float)
 	?isOpacityNull@QGraphicsItemPrivate@@QBE_NXZ @ 12551 NONAME ; bool QGraphicsItemPrivate::isOpacityNull(void) const
 	?api@QEglContext@@QBE?AW4API@QEgl@@XZ @ 12552 NONAME ABSENT ; enum QEgl::API QEglContext::api(void) const
-	?chooseConfig@QEglContext@@QAE_NABVQEglProperties@@W4PixelFormatMatch@QEgl@@@Z @ 12553 NONAME ABSENT ; bool QEglContext::chooseConfig(class QEglProperties const &, enum QEgl::PixelFormatMatch)
-	?destroySurface@QEglContext@@QAEXH@Z @ 12554 NONAME ABSENT ; void QEglContext::destroySurface(int)
-	?lazyDoneCurrent@QEglContext@@QAE_NXZ @ 12555 NONAME ABSENT ; bool QEglContext::lazyDoneCurrent(void)
+	?chooseConfig@QEglContext@@QAE_NABVQEglProperties@@W4PixelFormatMatch@QEgl@@@Z @ 12553 NONAME ; bool QEglContext::chooseConfig(class QEglProperties const &, enum QEgl::PixelFormatMatch)
+	?destroySurface@QEglContext@@QAEXH@Z @ 12554 NONAME ; void QEglContext::destroySurface(int)
+	?lazyDoneCurrent@QEglContext@@QAE_NXZ @ 12555 NONAME ; bool QEglContext::lazyDoneCurrent(void)
 	?waitNative@QEglContext@@QAEXXZ @ 12556 NONAME ABSENT ; void QEglContext::waitNative(void)
 	?context@QEglContext@@QBEHXZ @ 12557 NONAME ABSENT ; int QEglContext::context(void) const
 	?configAttrib@QEglContext@@QBE_NHPAH@Z @ 12558 NONAME ABSENT ; bool QEglContext::configAttrib(int, int *) const
-	??0QEglProperties@@QAE@ABV0@@Z @ 12559 NONAME ABSENT ; QEglProperties::QEglProperties(class QEglProperties const &)
+	??0QEglProperties@@QAE@ABV0@@Z @ 12559 NONAME ; QEglProperties::QEglProperties(class QEglProperties const &)
 	?config@QEglContext@@QBEHXZ @ 12560 NONAME ABSENT ; int QEglContext::config(void) const
 	?openDisplay@QEglContext@@QAE_NPAVQPaintDevice@@@Z @ 12561 NONAME ABSENT ; bool QEglContext::openDisplay(class QPaintDevice *)
 	?error@QEglContext@@SAHXZ @ 12562 NONAME ABSENT ; int QEglContext::error(void)
-	?swapBuffers@QEglContext@@QAE_NH@Z @ 12563 NONAME ABSENT ; bool QEglContext::swapBuffers(int)
-	?setApi@QEglContext@@QAEXW4API@QEgl@@@Z @ 12564 NONAME ABSENT ; void QEglContext::setApi(enum QEgl::API)
-	?makeCurrent@QEglContext@@QAE_NH@Z @ 12565 NONAME ABSENT ; bool QEglContext::makeCurrent(int)
-	?createSurface@QEglContext@@QAEHPAVQPaintDevice@@PBVQEglProperties@@@Z @ 12566 NONAME ABSENT ; int QEglContext::createSurface(class QPaintDevice *, class QEglProperties const *)
-	?dumpAllConfigs@QEglContext@@QAEXXZ @ 12567 NONAME ABSENT ; void QEglContext::dumpAllConfigs(void)
-	?reduceConfiguration@QEglProperties@@QAE_NXZ @ 12568 NONAME ABSENT ; bool QEglProperties::reduceConfiguration(void)
-	?removeValue@QEglProperties@@QAE_NH@Z @ 12569 NONAME ABSENT ; bool QEglProperties::removeValue(int)
-	?toString@QEglProperties@@QBE?AVQString@@XZ @ 12570 NONAME ABSENT ; class QString QEglProperties::toString(void) const
-	?dumpAllConfigs@QEglProperties@@SAXXZ @ 12571 NONAME ABSENT ; void QEglProperties::dumpAllConfigs(void)
+	?swapBuffers@QEglContext@@QAE_NH@Z @ 12563 NONAME ; bool QEglContext::swapBuffers(int)
+	?setApi@QEglContext@@QAEXW4API@QEgl@@@Z @ 12564 NONAME ; void QEglContext::setApi(enum QEgl::API)
+	?makeCurrent@QEglContext@@QAE_NH@Z @ 12565 NONAME ; bool QEglContext::makeCurrent(int)
+	?createSurface@QEglContext@@QAEHPAVQPaintDevice@@PBVQEglProperties@@@Z @ 12566 NONAME ; int QEglContext::createSurface(class QPaintDevice *, class QEglProperties const *)
+	?dumpAllConfigs@QEglContext@@QAEXXZ @ 12567 NONAME ; void QEglContext::dumpAllConfigs(void)
+	?reduceConfiguration@QEglProperties@@QAE_NXZ @ 12568 NONAME ; bool QEglProperties::reduceConfiguration(void)
+	?removeValue@QEglProperties@@QAE_NH@Z @ 12569 NONAME ; bool QEglProperties::removeValue(int)
+	?toString@QEglProperties@@QBE?AVQString@@XZ @ 12570 NONAME ; class QString QEglProperties::toString(void) const
+	?dumpAllConfigs@QEglProperties@@SAXXZ @ 12571 NONAME ; void QEglProperties::dumpAllConfigs(void)
 	?defaultDisplay@QEglContext@@SAHPAVQPaintDevice@@@Z @ 12572 NONAME ABSENT ; int QEglContext::defaultDisplay(class QPaintDevice *)
 	?configProperties@QEglContext@@QBE?AVQEglProperties@@H@Z @ 12573 NONAME ABSENT ; class QEglProperties QEglContext::configProperties(int) const
-	?properties@QEglProperties@@QBEPBHXZ @ 12574 NONAME ABSENT ; int const * QEglProperties::properties(void) const
-	??0QEglContext@@QAE@XZ @ 12575 NONAME ABSENT ; QEglContext::QEglContext(void)
-	??1QEglContext@@QAE@XZ @ 12576 NONAME ABSENT ; QEglContext::~QEglContext(void)
-	?isValid@QEglContext@@QBE_NXZ @ 12577 NONAME ABSENT ; bool QEglContext::isValid(void) const
-	?value@QEglProperties@@QBEHH@Z @ 12578 NONAME ABSENT ; int QEglProperties::value(int) const
+	?properties@QEglProperties@@QBEPBHXZ @ 12574 NONAME ; int const * QEglProperties::properties(void) const
+	??0QEglContext@@QAE@XZ @ 12575 NONAME ; QEglContext::QEglContext(void)
+	??1QEglContext@@QAE@XZ @ 12576 NONAME ; QEglContext::~QEglContext(void)
+	?isValid@QEglContext@@QBE_NXZ @ 12577 NONAME ; bool QEglContext::isValid(void) const
+	?value@QEglProperties@@QBEHH@Z @ 12578 NONAME ; int QEglProperties::value(int) const
 	?clearError@QEglContext@@SAXXZ @ 12579 NONAME ABSENT ; void QEglContext::clearError(void)
-	??0QEglProperties@@QAE@H@Z @ 12580 NONAME ABSENT ; QEglProperties::QEglProperties(int)
-	?setValue@QEglProperties@@QAEXHH@Z @ 12581 NONAME ABSENT ; void QEglProperties::setValue(int, int)
-	?setPaintDeviceFormat@QEglProperties@@QAEXPAVQPaintDevice@@@Z @ 12582 NONAME ABSENT ; void QEglProperties::setPaintDeviceFormat(class QPaintDevice *)
+	??0QEglProperties@@QAE@H@Z @ 12580 NONAME ; QEglProperties::QEglProperties(int)
+	?setValue@QEglProperties@@QAEXHH@Z @ 12581 NONAME ; void QEglProperties::setValue(int, int)
+	?setPaintDeviceFormat@QEglProperties@@QAEXPAVQPaintDevice@@@Z @ 12582 NONAME ; void QEglProperties::setPaintDeviceFormat(class QPaintDevice *)
 	?destroy@QEglContext@@QAEXXZ @ 12583 NONAME ABSENT ; void QEglContext::destroy(void)
-	?setRenderableType@QEglProperties@@QAEXW4API@QEgl@@@Z @ 12584 NONAME ABSENT ; void QEglProperties::setRenderableType(enum QEgl::API)
-	?setContext@QEglContext@@QAEXH@Z @ 12585 NONAME ABSENT ; void QEglContext::setContext(int)
+	?setRenderableType@QEglProperties@@QAEXW4API@QEgl@@@Z @ 12584 NONAME ; void QEglProperties::setRenderableType(enum QEgl::API)
+	?setContext@QEglContext@@QAEXH@Z @ 12585 NONAME ; void QEglContext::setContext(int)
 	?waitClient@QEglContext@@QAEXXZ @ 12586 NONAME ABSENT ; void QEglContext::waitClient(void)
-	?isEmpty@QEglProperties@@QBE_NXZ @ 12587 NONAME ABSENT ; bool QEglProperties::isEmpty(void) const
+	?isEmpty@QEglProperties@@QBE_NXZ @ 12587 NONAME ; bool QEglProperties::isEmpty(void) const
 	?getDisplay@QEglContext@@CAHPAVQPaintDevice@@@Z @ 12588 NONAME ABSENT ; int QEglContext::getDisplay(class QPaintDevice *)
-	?isSharing@QEglContext@@QBE_NXZ @ 12589 NONAME ABSENT ; bool QEglContext::isSharing(void) const
-	?isCurrent@QEglContext@@QBE_NXZ @ 12590 NONAME ABSENT ; bool QEglContext::isCurrent(void) const
-	??0QEglProperties@@QAE@XZ @ 12591 NONAME ABSENT ; QEglProperties::QEglProperties(void)
+	?isSharing@QEglContext@@QBE_NXZ @ 12589 NONAME ; bool QEglContext::isSharing(void) const
+	?isCurrent@QEglContext@@QBE_NXZ @ 12590 NONAME ; bool QEglContext::isCurrent(void) const
+	??0QEglProperties@@QAE@XZ @ 12591 NONAME ; QEglProperties::QEglProperties(void)
 	?extensions@QEglContext@@SA?AVQString@@XZ @ 12592 NONAME ABSENT ; class QString QEglContext::extensions(void)
-	?setCurrentContext@QEglContext@@CAXW4API@QEgl@@PAV1@@Z @ 12593 NONAME ABSENT ; void QEglContext::setCurrentContext(enum QEgl::API, class QEglContext *)
-	??1QEglProperties@@QAE@XZ @ 12594 NONAME ABSENT ; QEglProperties::~QEglProperties(void)
-	?createContext@QEglContext@@QAE_NPAV1@PBVQEglProperties@@@Z @ 12595 NONAME ABSENT ; bool QEglContext::createContext(class QEglContext *, class QEglProperties const *)
-	?setConfig@QEglContext@@QAEXH@Z @ 12596 NONAME ABSENT ; void QEglContext::setConfig(int)
+	?setCurrentContext@QEglContext@@CAXW4API@QEgl@@PAV1@@Z @ 12593 NONAME ; void QEglContext::setCurrentContext(enum QEgl::API, class QEglContext *)
+	??1QEglProperties@@QAE@XZ @ 12594 NONAME ; QEglProperties::~QEglProperties(void)
+	?createContext@QEglContext@@QAE_NPAV1@PBVQEglProperties@@@Z @ 12595 NONAME ; bool QEglContext::createContext(class QEglContext *, class QEglProperties const *)
+	?setConfig@QEglContext@@QAEXH@Z @ 12596 NONAME ; void QEglContext::setConfig(int)
 	?hasExtension@QEglContext@@SA_NPBD@Z @ 12597 NONAME ABSENT ; bool QEglContext::hasExtension(char const *)
-	?doneCurrent@QEglContext@@QAE_NXZ @ 12598 NONAME ABSENT ; bool QEglContext::doneCurrent(void)
-	?display@QEglContext@@QBEHXZ @ 12599 NONAME ABSENT ; int QEglContext::display(void) const
-	?setPixelFormat@QEglProperties@@QAEXW4Format@QImage@@@Z @ 12600 NONAME ABSENT ; void QEglProperties::setPixelFormat(enum QImage::Format)
-	?currentContext@QEglContext@@CAPAV1@W4API@QEgl@@@Z @ 12601 NONAME ABSENT ; class QEglContext * QEglContext::currentContext(enum QEgl::API)
-	?errorString@QEglContext@@SA?AVQString@@H@Z @ 12602 NONAME ABSENT ; class QString QEglContext::errorString(int)
+	?doneCurrent@QEglContext@@QAE_NXZ @ 12598 NONAME ; bool QEglContext::doneCurrent(void)
+	?display@QEglContext@@QBEHXZ @ 12599 NONAME ; int QEglContext::display(void) const
+	?setPixelFormat@QEglProperties@@QAEXW4Format@QImage@@@Z @ 12600 NONAME ; void QEglProperties::setPixelFormat(enum QImage::Format)
+	?currentContext@QEglContext@@CAPAV1@W4API@QEgl@@@Z @ 12601 NONAME ; class QEglContext * QEglContext::currentContext(enum QEgl::API)
+	?errorString@QEglContext@@SA?AVQString@@H@Z @ 12602 NONAME ; class QString QEglContext::errorString(int)
 	?removeAllApplicationFonts@QFontDatabase@@SA_NXZ @ 12603 NONAME ; bool QFontDatabase::removeAllApplicationFonts()
 	??0FileInfo@QZipReader@@QAE@XZ @ 12604 NONAME ; QZipReader::FileInfo::FileInfo(void)
 	??0QAbstractScrollAreaPrivate@@QAE@XZ @ 12605 NONAME ; QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate(void)
@@ -12770,27 +12770,27 @@ EXPORTS
 	?children_append@QGraphicsItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsObject@@@@PAVQGraphicsObject@@@Z @ 12769 NONAME ; void QGraphicsItemPrivate::children_append(class QDeclarativeListProperty<class QGraphicsObject> *, class QGraphicsObject *)
 	?children_at@QGraphicsItemPrivate@@SAPAVQGraphicsObject@@PAV?$QDeclarativeListProperty@VQGraphicsObject@@@@H@Z @ 12770 NONAME ; class QGraphicsObject * QGraphicsItemPrivate::children_at(class QDeclarativeListProperty<class QGraphicsObject> *, int)
 	?children_count@QGraphicsItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQGraphicsObject@@@@@Z @ 12771 NONAME ; int QGraphicsItemPrivate::children_count(class QDeclarativeListProperty<class QGraphicsObject> *)
-	?display@QEglContext@@QAEHXZ @ 12772 NONAME  ABSENT ; int QEglContext::display(void)
-	?defaultConfig@QEgl@@YAHHW4API@1@V?$QFlags@W4ConfigOption@QEgl@@@@@Z @ 12773 NONAME ABSENT ; int QEgl::defaultConfig(int, enum QEgl::API, class QFlags<enum QEgl::ConfigOption>)
-	?configAttrib@QEglContext@@QBEHH@Z @ 12774 NONAME ABSENT ; int QEglContext::configAttrib(int) const
+	?display@QEglContext@@QAEHXZ @ 12772 NONAME ; int QEglContext::display(void)
+	?defaultConfig@QEgl@@YAHHW4API@1@V?$QFlags@W4ConfigOption@QEgl@@@@@Z @ 12773 NONAME ; int QEgl::defaultConfig(int, enum QEgl::API, class QFlags<enum QEgl::ConfigOption>)
+	?configAttrib@QEglContext@@QBEHH@Z @ 12774 NONAME ; int QEglContext::configAttrib(int) const
 	?error@QEgl@@YAHXZ @ 12775 NONAME ABSENT ; int QEgl::error(void)
 	?errorString@QEgl@@YA?AVQString@@XZ @ 12776 NONAME ABSENT ; class QString QEgl::errorString(void)
 	?configProperties@QEglContext@@QBE?AVQEglProperties@@XZ @ 12777 NONAME ABSENT ; class QEglProperties QEglContext::configProperties(void) const
-	?extensions@QEgl@@YA?AVQString@@XZ @ 12778 NONAME ABSENT ; class QString QEgl::extensions(void)
-	?nativePixmap@QEgl@@YAPAXPAVQPixmap@@@Z @ 12779 NONAME ABSENT ; void * QEgl::nativePixmap(class QPixmap *)
-	?display@QEgl@@YAHXZ @ 12780 NONAME ABSENT ; int QEgl::display(void)
-	?eglCreateImageKHR@QEgl@@YAHHHHHPBH@Z @ 12781 NONAME ABSENT ; int QEgl::eglCreateImageKHR(int, int, int, int, int const *)
-	?hasExtension@QEgl@@YA_NPBD@Z @ 12782 NONAME ABSENT ; bool QEgl::hasExtension(char const *)
-	?destroyContext@QEglContext@@QAEXXZ @ 12783 NONAME ABSENT ; void QEglContext::destroyContext(void)
-	?nativeWindow@QEgl@@YAPAXPAVQWidget@@@Z @ 12784 NONAME ABSENT ; void * QEgl::nativeWindow(class QWidget *)
-	?errorString@QEgl@@YA?AVQString@@H@Z @ 12785 NONAME ABSENT ; class QString QEgl::errorString(int)
-	?chooseConfig@QEgl@@YAHPBVQEglProperties@@W4PixelFormatMatch@1@@Z @ 12786 NONAME ABSENT ; int QEgl::chooseConfig(class QEglProperties const *, enum QEgl::PixelFormatMatch)
-	?eglDestroyImageKHR@QEgl@@YAHHH@Z @ 12787 NONAME ABSENT ; int QEgl::eglDestroyImageKHR(int, int)
+	?extensions@QEgl@@YA?AVQString@@XZ @ 12778 NONAME ; class QString QEgl::extensions(void)
+	?nativePixmap@QEgl@@YAPAXPAVQPixmap@@@Z @ 12779 NONAME ; void * QEgl::nativePixmap(class QPixmap *)
+	?display@QEgl@@YAHXZ @ 12780 NONAME ; int QEgl::display(void)
+	?eglCreateImageKHR@QEgl@@YAHHHHHPBH@Z @ 12781 NONAME ; int QEgl::eglCreateImageKHR(int, int, int, int, int const *)
+	?hasExtension@QEgl@@YA_NPBD@Z @ 12782 NONAME ; bool QEgl::hasExtension(char const *)
+	?destroyContext@QEglContext@@QAEXXZ @ 12783 NONAME ; void QEglContext::destroyContext(void)
+	?nativeWindow@QEgl@@YAPAXPAVQWidget@@@Z @ 12784 NONAME ; void * QEgl::nativeWindow(class QWidget *)
+	?errorString@QEgl@@YA?AVQString@@H@Z @ 12785 NONAME ; class QString QEgl::errorString(int)
+	?chooseConfig@QEgl@@YAHPBVQEglProperties@@W4PixelFormatMatch@1@@Z @ 12786 NONAME ; int QEgl::chooseConfig(class QEglProperties const *, enum QEgl::PixelFormatMatch)
+	?eglDestroyImageKHR@QEgl@@YAHHH@Z @ 12787 NONAME ; int QEgl::eglDestroyImageKHR(int, int)
 	?isEmpty@QItemSelectionRange@@QBE_NXZ @ 12788 NONAME ; bool QItemSelectionRange::isEmpty(void) const
 	?clearError@QEgl@@YAXXZ @ 12789 NONAME ABSENT ; void QEgl::clearError(void)
-	?nativeDisplay@QEgl@@YAHXZ @ 12790 NONAME ABSENT ; int QEgl::nativeDisplay(void)
-	?dumpAllConfigs@QEgl@@YAXXZ @ 12791 NONAME ABSENT ; void QEgl::dumpAllConfigs(void)
-	?setDeviceType@QEglProperties@@QAEXH@Z @ 12792 NONAME ABSENT ; void QEglProperties::setDeviceType(int)
+	?nativeDisplay@QEgl@@YAHXZ @ 12790 NONAME ; int QEgl::nativeDisplay(void)
+	?dumpAllConfigs@QEgl@@YAXXZ @ 12791 NONAME ; void QEgl::dumpAllConfigs(void)
+	?setDeviceType@QEglProperties@@QAEXH@Z @ 12792 NONAME ; void QEglProperties::setDeviceType(int)
 	?glyphPadding@QTextureGlyphCache@@UBEHXZ @ 12793 NONAME ; int QTextureGlyphCache::glyphPadding(void) const
-	?createSurface@QEgl@@YAHPAVQPaintDevice@@HPBVQEglProperties@@@Z @ 12794 NONAME ABSENT ; int QEgl::createSurface(class QPaintDevice *, int, class QEglProperties const *)
+	?createSurface@QEgl@@YAHPAVQPaintDevice@@HPBVQEglProperties@@@Z @ 12794 NONAME ; int QEgl::createSurface(class QPaintDevice *, int, class QEglProperties const *)
 
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index cadcf59..daceee3 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -11745,43 +11745,43 @@ EXPORTS
 	_ZN11QEglContext10getDisplayEP12QPaintDevice @ 11744 NONAME ABSENT
 	_ZN11QEglContext10waitClientEv @ 11745 NONAME ABSENT
 	_ZN11QEglContext10waitNativeEv @ 11746 NONAME ABSENT
-	_ZN11QEglContext11doneCurrentEv @ 11747 NONAME ABSENT
+	_ZN11QEglContext11doneCurrentEv @ 11747 NONAME
 	_ZN11QEglContext11errorStringEi @ 11748 NONAME ABSENT
-	_ZN11QEglContext11makeCurrentEi @ 11749 NONAME ABSENT
+	_ZN11QEglContext11makeCurrentEi @ 11749 NONAME
 	_ZN11QEglContext11openDisplayEP12QPaintDevice @ 11750 NONAME ABSENT
-	_ZN11QEglContext11swapBuffersEi @ 11751 NONAME ABSENT
-	_ZN11QEglContext12chooseConfigERK14QEglPropertiesN4QEgl16PixelFormatMatchE @ 11752 NONAME ABSENT
+	_ZN11QEglContext11swapBuffersEi @ 11751 NONAME
+	_ZN11QEglContext12chooseConfigERK14QEglPropertiesN4QEgl16PixelFormatMatchE @ 11752 NONAME
 	_ZN11QEglContext12hasExtensionEPKc @ 11753 NONAME ABSENT
-	_ZN11QEglContext13createContextEPS_PK14QEglProperties @ 11754 NONAME ABSENT
-	_ZN11QEglContext13createSurfaceEP12QPaintDevicePK14QEglProperties @ 11755 NONAME ABSENT
-	_ZN11QEglContext14currentContextEN4QEgl3APIE @ 11756 NONAME ABSENT
+	_ZN11QEglContext13createContextEPS_PK14QEglProperties @ 11754 NONAME
+	_ZN11QEglContext13createSurfaceEP12QPaintDevicePK14QEglProperties @ 11755 NONAME
+	_ZN11QEglContext14currentContextEN4QEgl3APIE @ 11756 NONAME
 	_ZN11QEglContext14defaultDisplayEP12QPaintDevice @ 11757 NONAME ABSENT
-	_ZN11QEglContext14destroySurfaceEi @ 11758 NONAME ABSENT
+	_ZN11QEglContext14destroySurfaceEi @ 11758 NONAME
 	_ZN11QEglContext14dumpAllConfigsEv @ 11759 NONAME ABSENT
-	_ZN11QEglContext15lazyDoneCurrentEv @ 11760 NONAME ABSENT
-	_ZN11QEglContext17setCurrentContextEN4QEgl3APIEPS_ @ 11761 NONAME ABSENT
+	_ZN11QEglContext15lazyDoneCurrentEv @ 11760 NONAME
+	_ZN11QEglContext17setCurrentContextEN4QEgl3APIEPS_ @ 11761 NONAME
 	_ZN11QEglContext7destroyEv @ 11762 NONAME ABSENT
-	_ZN11QEglContextC1Ev @ 11763 NONAME ABSENT
-	_ZN11QEglContextC2Ev @ 11764 NONAME ABSENT
-	_ZN11QEglContextD1Ev @ 11765 NONAME ABSENT
-	_ZN11QEglContextD2Ev @ 11766 NONAME ABSENT
-	_ZN14QEglProperties11removeValueEi @ 11767 NONAME ABSENT
+	_ZN11QEglContextC1Ev @ 11763 NONAME
+	_ZN11QEglContextC2Ev @ 11764 NONAME
+	_ZN11QEglContextD1Ev @ 11765 NONAME
+	_ZN11QEglContextD2Ev @ 11766 NONAME
+	_ZN14QEglProperties11removeValueEi @ 11767 NONAME
 	_ZN14QEglProperties14dumpAllConfigsEv @ 11768 NONAME ABSENT
-	_ZN14QEglProperties14setPixelFormatEN6QImage6FormatE @ 11769 NONAME ABSENT
-	_ZN14QEglProperties17setRenderableTypeEN4QEgl3APIE @ 11770 NONAME ABSENT
-	_ZN14QEglProperties19reduceConfigurationEv @ 11771 NONAME ABSENT
-	_ZN14QEglProperties20setPaintDeviceFormatEP12QPaintDevice @ 11772 NONAME ABSENT
-	_ZN14QEglProperties8setValueEii @ 11773 NONAME ABSENT
-	_ZN14QEglPropertiesC1Ei @ 11774 NONAME ABSENT
-	_ZN14QEglPropertiesC1Ev @ 11775 NONAME ABSENT
-	_ZN14QEglPropertiesC2Ei @ 11776 NONAME ABSENT
-	_ZN14QEglPropertiesC2Ev @ 11777 NONAME ABSENT
+	_ZN14QEglProperties14setPixelFormatEN6QImage6FormatE @ 11769 NONAME
+	_ZN14QEglProperties17setRenderableTypeEN4QEgl3APIE @ 11770 NONAME
+	_ZN14QEglProperties19reduceConfigurationEv @ 11771 NONAME
+	_ZN14QEglProperties20setPaintDeviceFormatEP12QPaintDevice @ 11772 NONAME
+	_ZN14QEglProperties8setValueEii @ 11773 NONAME
+	_ZN14QEglPropertiesC1Ei @ 11774 NONAME
+	_ZN14QEglPropertiesC1Ev @ 11775 NONAME
+	_ZN14QEglPropertiesC2Ei @ 11776 NONAME
+	_ZN14QEglPropertiesC2Ev @ 11777 NONAME
 	_ZNK11QEglContext12configAttribEiPi @ 11778 NONAME ABSENT
 	_ZNK11QEglContext16configPropertiesEi @ 11779 NONAME ABSENT
-	_ZNK11QEglContext7isValidEv @ 11780 NONAME ABSENT
-	_ZNK11QEglContext9isCurrentEv @ 11781 NONAME ABSENT
-	_ZNK14QEglProperties5valueEi @ 11782 NONAME ABSENT
-	_ZNK14QEglProperties8toStringEv @ 11783 NONAME ABSENT
+	_ZNK11QEglContext7isValidEv @ 11780 NONAME
+	_ZNK11QEglContext9isCurrentEv @ 11781 NONAME
+	_ZNK14QEglProperties5valueEi @ 11782 NONAME
+	_ZNK14QEglProperties8toStringEv @ 11783 NONAME
 	_ZNK11QFontEngine10glyphCacheEPvN21QFontEngineGlyphCache4TypeERK10QTransform @ 11784 NONAME
 	_ZNK20QGraphicsItemPrivate21effectiveBoundingRectERK6QRectF @ 11785 NONAME
 	_Z12qt_blurImageP8QPainterR6QImagefbbi @ 11786 NONAME
@@ -11973,25 +11973,25 @@ EXPORTS
 	_ZN20QGraphicsItemPrivate11children_atEP24QDeclarativeListPropertyI15QGraphicsObjectEi @ 11972 NONAME
 	_ZN20QGraphicsItemPrivate14children_countEP24QDeclarativeListPropertyI15QGraphicsObjectE @ 11973 NONAME
 	_ZN20QGraphicsItemPrivate15children_appendEP24QDeclarativeListPropertyI15QGraphicsObjectEPS1_ @ 11974 NONAME
-	_ZN11QEglContext14destroyContextEv @ 11975 NONAME ABSENT
-	_ZN14QEglProperties13setDeviceTypeEi @ 11976 NONAME ABSENT
+	_ZN11QEglContext14destroyContextEv @ 11975 NONAME
+	_ZN14QEglProperties13setDeviceTypeEi @ 11976 NONAME
 	_ZN4QEgl10clearErrorEv @ 11977 NONAME ABSENT
-	_ZN4QEgl10extensionsEv @ 11978 NONAME ABSENT
-	_ZN4QEgl11errorStringEi @ 11979 NONAME ABSENT
+	_ZN4QEgl10extensionsEv @ 11978 NONAME
+	_ZN4QEgl11errorStringEi @ 11979 NONAME
 	_ZN4QEgl11errorStringEv @ 11980 NONAME ABSENT
-	_ZN4QEgl12chooseConfigEPK14QEglPropertiesNS_16PixelFormatMatchE @ 11981 NONAME ABSENT
-	_ZN4QEgl12hasExtensionEPKc @ 11982 NONAME ABSENT
-	_ZN4QEgl12nativePixmapEP7QPixmap @ 11983 NONAME ABSENT
-	_ZN4QEgl12nativeWindowEP7QWidget @ 11984 NONAME ABSENT
-	_ZN4QEgl13createSurfaceEP12QPaintDeviceiPK14QEglProperties @ 11985 NONAME ABSENT
-	_ZN4QEgl13defaultConfigEiNS_3APIE6QFlagsINS_12ConfigOptionEE @ 11986 NONAME ABSENT
-	_ZN4QEgl13nativeDisplayEv @ 11987 NONAME ABSENT
-	_ZN4QEgl14dumpAllConfigsEv @ 11988 NONAME ABSENT
-	_ZN4QEgl17eglCreateImageKHREiiiiPKi @ 11989 NONAME ABSENT
-	_ZN4QEgl18eglDestroyImageKHREii @ 11990 NONAME ABSENT
+	_ZN4QEgl12chooseConfigEPK14QEglPropertiesNS_16PixelFormatMatchE @ 11981 NONAME
+	_ZN4QEgl12hasExtensionEPKc @ 11982 NONAME
+	_ZN4QEgl12nativePixmapEP7QPixmap @ 11983 NONAME
+	_ZN4QEgl12nativeWindowEP7QWidget @ 11984 NONAME
+	_ZN4QEgl13createSurfaceEP12QPaintDeviceiPK14QEglProperties @ 11985 NONAME
+	_ZN4QEgl13defaultConfigEiNS_3APIE6QFlagsINS_12ConfigOptionEE @ 11986 NONAME
+	_ZN4QEgl13nativeDisplayEv @ 11987 NONAME
+	_ZN4QEgl14dumpAllConfigsEv @ 11988 NONAME
+	_ZN4QEgl17eglCreateImageKHREiiiiPKi @ 11989 NONAME
+	_ZN4QEgl18eglDestroyImageKHREii @ 11990 NONAME
 	_ZN4QEgl5errorEv @ 11991 NONAME ABSENT
-	_ZN4QEgl7displayEv @ 11992 NONAME ABSENT
-	_ZNK11QEglContext12configAttribEi @ 11993 NONAME ABSENT
+	_ZN4QEgl7displayEv @ 11992 NONAME
+	_ZNK11QEglContext12configAttribEi @ 11993 NONAME
 	_ZNK11QEglContext16configPropertiesEv @ 11994 NONAME ABSENT
 	_ZNK19QItemSelectionRange7isEmptyEv @ 11995 NONAME
 
-- 
cgit v0.12


From 4743831d128dfad4ac9fbafa6e7544dbe7fb7ed2 Mon Sep 17 00:00:00 2001
From: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com>
Date: Fri, 23 Apr 2010 10:22:44 +0200
Subject: QTabBar: Widgets inside the tab bar where not properly laid out after
 moveTab()

Only the leftmost tab was being correctly laid out after the move due
to a mistake in QTabBarPrivate::layoutTab().

Auto-test included.

Reviewed-by: Thierry
Task-number: QTBUG-10052
---
 src/gui/widgets/qtabbar.cpp        | 15 +++++----------
 src/gui/widgets/qtabbar_p.h        |  2 +-
 tests/auto/qtabbar/tst_qtabbar.cpp | 35 +++++++++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 11 deletions(-)

diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp
index 7559311..d03a2f4 100644
--- a/src/gui/widgets/qtabbar.cpp
+++ b/src/gui/widgets/qtabbar.cpp
@@ -580,16 +580,10 @@ void QTabBarPrivate::layoutTab(int index)
     }
 }
 
-void QTabBarPrivate::layoutWidgets(int index)
+void QTabBarPrivate::layoutWidgets(int start)
 {
     Q_Q(QTabBar);
-    int start = 0;
-    int end = q->count();
-    if (index != -1) {
-        start = qMax(index, 0);
-        end = qMin(end, start + 1);
-    }
-    for (int i = start; i < end; ++i) {
+    for (int i = start; i < q->count(); ++i) {
         layoutTab(i);
     }
 }
@@ -1171,8 +1165,9 @@ void QTabBar::setCurrentIndex(int index)
         update();
         d->makeVisible(index);
         d->tabList[index].lastTab = oldIndex;
-        d->layoutWidgets(oldIndex);
-        d->layoutWidgets(index);
+        if (oldIndex >= 0 && oldIndex < count())
+            d->layoutTab(oldIndex);
+        d->layoutTab(index);
 #ifdef QT3_SUPPORT
         emit selected(index);
 #endif
diff --git a/src/gui/widgets/qtabbar_p.h b/src/gui/widgets/qtabbar_p.h
index 83636e6..37741f7 100644
--- a/src/gui/widgets/qtabbar_p.h
+++ b/src/gui/widgets/qtabbar_p.h
@@ -178,7 +178,7 @@ public:
 
     void refresh();
     void layoutTabs();
-    void layoutWidgets(int index = -1);
+    void layoutWidgets(int start = 0);
     void layoutTab(int index);
     void updateMacBorderMetrics();
     void setupMovableTab();
diff --git a/tests/auto/qtabbar/tst_qtabbar.cpp b/tests/auto/qtabbar/tst_qtabbar.cpp
index 72f9dd3..ac3de20 100644
--- a/tests/auto/qtabbar/tst_qtabbar.cpp
+++ b/tests/auto/qtabbar/tst_qtabbar.cpp
@@ -95,6 +95,8 @@ private slots:
 
     void task251184_removeTab();
     void changeTitleWhileDoubleClickingTab();
+
+    void taskQTBUG_10052_widgetLayoutWhenMoving();
 };
 
 // Testing get/set functions
@@ -576,5 +578,38 @@ void tst_QTabBar::changeTitleWhileDoubleClickingTab()
         QTest::mouseDClick(&bar, Qt::LeftButton, 0, tabPos);
 }
 
+class Widget10052 : public QWidget
+{
+public:
+    Widget10052(QWidget *parent) : QWidget(parent), moved(false)
+    { }
+
+    void moveEvent(QMoveEvent *e)
+    {
+        moved = e->oldPos() != e->pos();
+        QWidget::moveEvent(e);
+    }
+
+    bool moved;
+};
+
+void tst_QTabBar::taskQTBUG_10052_widgetLayoutWhenMoving()
+{
+    QTabBar tabBar;
+    tabBar.insertTab(0, "My first tab");
+    Widget10052 w1(&tabBar);
+    tabBar.setTabButton(0, QTabBar::RightSide, &w1);
+    tabBar.insertTab(1, "My other tab");
+    Widget10052 w2(&tabBar);
+    tabBar.setTabButton(1, QTabBar::RightSide, &w2);
+
+    tabBar.show();
+    QTest::qWaitForWindowShown(&tabBar);
+    w1.moved = w2.moved = false;
+    tabBar.moveTab(0, 1);
+    QTRY_VERIFY(w1.moved);
+    QVERIFY(w2.moved);
+}
+
 QTEST_MAIN(tst_QTabBar)
 #include "tst_qtabbar.moc"
-- 
cgit v0.12


From c1431e6daa5f0e229c2e79a945f28d00d70b0978 Mon Sep 17 00:00:00 2001
From: aavit <qt-info@nokia.com>
Date: Fri, 9 Apr 2010 15:30:04 +0200
Subject: Optimization: Avoid data copy when reading jpegs from memory

If the iodevice is actually a qbuffer, avoid read() and just give
libjpeg a pointer to the contained data directly.
Related to QTBUG-9095.

Reviewed-by: Kim
---
 src/plugins/imageformats/jpeg/qjpeghandler.cpp | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
index 93b7cc6..1c6a289 100644
--- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp
+++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
@@ -44,6 +44,7 @@
 #include <qimage.h>
 #include <qvariant.h>
 #include <qvector.h>
+#include <qbuffer.h>
 
 #include <stdio.h>      // jpeglib needs this to be pre-included
 #include <setjmp.h>
@@ -102,6 +103,7 @@ struct my_jpeg_source_mgr : public jpeg_source_mgr {
     // Nothing dynamic - cannot rely on destruction over longjump
     QIODevice *device;
     JOCTET buffer[max_buf];
+    const QBuffer *memDevice;
 
 public:
     my_jpeg_source_mgr(QIODevice *device);
@@ -117,10 +119,14 @@ static void qt_init_source(j_decompress_ptr)
 
 static boolean qt_fill_input_buffer(j_decompress_ptr cinfo)
 {
-    int num_read;
     my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src;
+    if (src->memDevice) {
+        src->next_input_byte = (const JOCTET *)src->memDevice->data().constData();
+        src->bytes_in_buffer = (size_t)src->memDevice->data().size();
+        return true;
+    }
     src->next_input_byte = src->buffer;
-    num_read = src->device->read((char*)src->buffer, max_buf);
+    int num_read = src->device->read((char*)src->buffer, max_buf);
     if (num_read <= 0) {
         // Insert a fake EOI marker - as per jpeglib recommendation
         src->buffer[0] = (JOCTET) 0xFF;
@@ -147,7 +153,7 @@ static void qt_skip_input_data(j_decompress_ptr cinfo, long num_bytes)
      * any trouble anyway --- large skips are infrequent.
      */
     if (num_bytes > 0) {
-        while (num_bytes > (long) src->bytes_in_buffer) {
+        while (num_bytes > (long) src->bytes_in_buffer) {  // Should not happen in case of memDevice
             num_bytes -= (long) src->bytes_in_buffer;
             (void) qt_fill_input_buffer(cinfo);
             /* note we assume that qt_fill_input_buffer will never return false,
@@ -178,6 +184,7 @@ inline my_jpeg_source_mgr::my_jpeg_source_mgr(QIODevice *device)
     jpeg_source_mgr::resync_to_restart = jpeg_resync_to_restart;
     jpeg_source_mgr::term_source = qt_term_source;
     this->device = device;
+    memDevice = qobject_cast<QBuffer *>(device);
     bytes_in_buffer = 0;
     next_input_byte = buffer;
 }
-- 
cgit v0.12


From 0e3200866d90c579a8951e4ef843c6fe54c2c7bd Mon Sep 17 00:00:00 2001
From: David Boddie <dboddie@trolltech.com>
Date: Fri, 23 Apr 2010 14:12:08 +0200
Subject: Ensure that all qthelp URLs have paths that start with /qdoc/.

Reviewed-by: kh
---
 tools/assistant/tools/assistant/helpviewer.cpp     | 4 +---
 tools/assistant/tools/assistant/helpviewer_qwv.cpp | 7 ++++---
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/tools/assistant/tools/assistant/helpviewer.cpp b/tools/assistant/tools/assistant/helpviewer.cpp
index 22b3f30..25214e2 100644
--- a/tools/assistant/tools/assistant/helpviewer.cpp
+++ b/tools/assistant/tools/assistant/helpviewer.cpp
@@ -52,9 +52,7 @@
 
 QT_BEGIN_NAMESPACE
 
-QString AbstractHelpViewer::DocPath = QString::fromLatin1("qthelp://com."
-    "trolltech.qt.%1/").arg(QString(QLatin1String(QT_VERSION_STR))
-    .replace(QLatin1String("."), QLatin1String("")));
+QString AbstractHelpViewer::DocPath = QString::fromLatin1("qthelp://com.trolltech.");
 
 QString AbstractHelpViewer::AboutBlank =
     QCoreApplication::translate("HelpViewer", "<title>about:blank</title>");
diff --git a/tools/assistant/tools/assistant/helpviewer_qwv.cpp b/tools/assistant/tools/assistant/helpviewer_qwv.cpp
index a19b29a..585c69d 100644
--- a/tools/assistant/tools/assistant/helpviewer_qwv.cpp
+++ b/tools/assistant/tools/assistant/helpviewer_qwv.cpp
@@ -139,9 +139,10 @@ QNetworkReply *HelpNetworkAccessManager::createRequest(Operation /*op*/,
     // the virtual folder
     if (!helpEngine.findFile(url).isValid()) {
         if (url.startsWith(AbstractHelpViewer::DocPath)) {
-            if (!url.startsWith(AbstractHelpViewer::DocPath + QLatin1String("qdoc/"))) {
-                url = url.replace(AbstractHelpViewer::DocPath,
-                    AbstractHelpViewer::DocPath + QLatin1String("qdoc/"));
+            QUrl newUrl = request.url();
+            if (!newUrl.path().startsWith(QLatin1String("/qdoc/"))) {
+                newUrl.setPath(QLatin1String("/qdoc/")+newUrl.path());
+                url = newUrl.toString();
             }
         }
     }
-- 
cgit v0.12


From 9206f0f867e39bbcfa2670a7ba71211b7384c601 Mon Sep 17 00:00:00 2001
From: David Boddie <dboddie@trolltech.com>
Date: Fri, 23 Apr 2010 14:23:57 +0200
Subject: Doc: Fixed typos.

Reviewed-by: Trust Me
---
 demos/sqlbrowser/browser.cpp | 2 +-
 doc/src/index.qdoc           | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/demos/sqlbrowser/browser.cpp b/demos/sqlbrowser/browser.cpp
index 1232428..fe699c7 100644
--- a/demos/sqlbrowser/browser.cpp
+++ b/demos/sqlbrowser/browser.cpp
@@ -242,6 +242,6 @@ void Browser::updateActions()
 void Browser::about()
 {
     QMessageBox::about(this, tr("About"), tr("The SQL Browser demonstration "
-        "show how a data browser can be used to visualize the results of SQL"
+        "shows how a data browser can be used to visualize the results of SQL"
         "statements on a live database"));
 }
diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc
index 2f23e6e..2e6f9bd 100644
--- a/doc/src/index.qdoc
+++ b/doc/src/index.qdoc
@@ -75,7 +75,7 @@
                   <li><a href="classes.html">All classes</a></li>
                   <li><a href="namespaces.html">All namespaces</a></li>
                   <li><a href="functions.html">All functions</a></li>
-                  <li><a href="platform-specific.html">Platform support &amp; speciffics</a></li>
+                  <li><a href="platform-specific.html">Platform support &amp; specifics</a></li>
                 </ul>
               </div>
               <div class="sectionlist">
-- 
cgit v0.12


From ffb5db8aafbe2b49be5cd454841a2af8acc426ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <sroedal@trolltech.com>
Date: Fri, 23 Apr 2010 10:51:31 +0200
Subject: Avoided O(n^2) behavior in painter path clipper.

Use a binary tree when producing the line vs line intersections to get
O(n * log n) behavior instead. Also tweak the threshold a bit to avoid
tessellating the bezier curves too finely.

Reviewed-by: Gunnar Sletta
---
 src/gui/painting/qpathclipper.cpp | 344 ++++++++++++++++++++++++++++++--------
 1 file changed, 276 insertions(+), 68 deletions(-)

diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp
index 9dedf3a..c910024 100644
--- a/src/gui/painting/qpathclipper.cpp
+++ b/src/gui/painting/qpathclipper.cpp
@@ -43,6 +43,7 @@
 
 #include <private/qbezier_p.h>
 #include <private/qdatabuffer_p.h>
+#include <private/qnumeric_p.h>
 #include <qmath.h>
 
 /**
@@ -105,7 +106,6 @@ public:
     bool hasIntersections(const QPathSegments &a, const QPathSegments &b) const;
 
 private:
-    void intersectLines(const QLineF &a, const QLineF &b, QDataBuffer<QIntersection> &intersections);
     bool linesIntersect(const QLineF &a, const QLineF &b) const;
 };
 
@@ -176,7 +176,223 @@ bool QIntersectionFinder::linesIntersect(const QLineF &a, const QLineF &b) const
     return tq >= 0 && tq <= 1;
 }
 
-void QIntersectionFinder::intersectLines(const QLineF &a, const QLineF &b, QDataBuffer<QIntersection> &intersections)
+bool QIntersectionFinder::hasIntersections(const QPathSegments &a, const QPathSegments &b) const
+{
+    if (a.segments() == 0 || b.segments() == 0)
+        return false;
+
+    const QRectF &rb0 = b.elementBounds(0);
+
+    qreal minX = rb0.left();
+    qreal minY = rb0.top();
+    qreal maxX = rb0.right();
+    qreal maxY = rb0.bottom();
+
+    for (int i = 1; i < b.segments(); ++i) {
+        const QRectF &r = b.elementBounds(i);
+        minX = qMin(minX, r.left());
+        minY = qMin(minY, r.top());
+        maxX = qMax(maxX, r.right());
+        maxY = qMax(maxY, r.bottom());
+    }
+
+    QRectF rb(minX, minY, maxX - minX, maxY - minY);
+
+    for (int i = 0; i < a.segments(); ++i) {
+        const QRectF &r1 = a.elementBounds(i);
+
+        if (r1.left() > rb.right() || rb.left() > r1.right())
+            continue;
+        if (r1.top() > rb.bottom() || rb.top() > r1.bottom())
+            continue;
+
+        for (int j = 0; j < b.segments(); ++j) {
+            const QRectF &r2 = b.elementBounds(j);
+
+            if (r1.left() > r2.right() || r2.left() > r1.right())
+                continue;
+            if (r1.top() > r2.bottom() || r2.top() > r1.bottom())
+                continue;
+
+            if (linesIntersect(a.lineAt(i), b.lineAt(j)))
+                return true;
+        }
+    }
+
+    return false;
+}
+
+namespace {
+struct TreeNode
+{
+    qreal splitLeft;
+    qreal splitRight;
+    bool leaf;
+
+    int lowestLeftIndex;
+    int lowestRightIndex;
+
+    union {
+        struct {
+            int first;
+            int last;
+        } interval;
+        struct {
+            int left;
+            int right;
+        } children;
+    } index;
+};
+
+struct RectF
+{
+    qreal x1;
+    qreal y1;
+    qreal x2;
+    qreal y2;
+};
+
+class SegmentTree
+{
+public:
+    SegmentTree(QPathSegments &segments);
+
+    QRectF boundingRect() const;
+
+    void produceIntersections(int segment);
+
+private:
+    TreeNode buildTree(int first, int last, int depth, const RectF &bounds);
+
+    void produceIntersectionsLeaf(const TreeNode &node, int segment);
+    void produceIntersections(const TreeNode &node, int segment, const RectF &segmentBounds, const RectF &nodeBounds, int axis);
+    void intersectLines(const QLineF &a, const QLineF &b, QDataBuffer<QIntersection> &intersections);
+
+    QPathSegments &m_segments;
+    QVector<int> m_index;
+
+    RectF m_bounds;
+
+    QVector<TreeNode> m_tree;
+    QDataBuffer<QIntersection> m_intersections;
+};
+
+SegmentTree::SegmentTree(QPathSegments &segments)
+    : m_segments(segments)
+{
+    m_bounds.x1 = qt_inf();
+    m_bounds.y1 = qt_inf();
+    m_bounds.x2 = -qt_inf();
+    m_bounds.y2 = -qt_inf();
+
+    m_index.resize(m_segments.segments());
+
+    for (int i = 0; i < m_index.size(); ++i) {
+        m_index[i] = i;
+
+        const QRectF &segmentBounds = m_segments.elementBounds(i);
+
+        if (segmentBounds.left() < m_bounds.x1)
+            m_bounds.x1 = segmentBounds.left();
+        if (segmentBounds.top() < m_bounds.y1)
+            m_bounds.y1 = segmentBounds.top();
+        if (segmentBounds.right() > m_bounds.x2)
+            m_bounds.x2 = segmentBounds.right();
+        if (segmentBounds.bottom() > m_bounds.y2)
+            m_bounds.y2 = segmentBounds.bottom();
+    }
+
+    m_tree.resize(1);
+
+    TreeNode root = buildTree(0, m_index.size(), 0, m_bounds);
+    m_tree[0] = root;
+}
+
+QRectF SegmentTree::boundingRect() const
+{
+    return QRectF(QPointF(m_bounds.x1, m_bounds.y1),
+                  QPointF(m_bounds.x2, m_bounds.y2));
+}
+
+static inline qreal coordinate(const QPointF &pos, int axis)
+{
+    return axis == 0 ? pos.x() : pos.y();
+}
+
+TreeNode SegmentTree::buildTree(int first, int last, int depth, const RectF &bounds)
+{
+    if (depth >= 24 || (last - first) <= 10) {
+        TreeNode node;
+        node.leaf = true;
+        node.index.interval.first = first;
+        node.index.interval.last = last;
+
+        return node;
+    }
+
+    int splitAxis = (depth & 1);
+
+    TreeNode node;
+    node.leaf = false;
+
+    qreal split = 0.5f * ((&bounds.x1)[splitAxis] + (&bounds.x2)[splitAxis]);
+
+    node.splitLeft = (&bounds.x1)[splitAxis];
+    node.splitRight = (&bounds.x2)[splitAxis];
+
+    node.lowestLeftIndex = INT_MAX;
+    node.lowestRightIndex = INT_MAX;
+
+    const int treeSize = m_tree.size();
+
+    node.index.children.left = treeSize;
+    node.index.children.right = treeSize + 1;
+
+    m_tree.resize(treeSize + 2);
+
+    int l = first;
+    int r = last - 1;
+
+    // partition into left and right sets
+    while (l <= r) {
+        const int index = m_index.at(l);
+        const QRectF &segmentBounds = m_segments.elementBounds(index);
+
+        qreal lowCoordinate = coordinate(segmentBounds.topLeft(), splitAxis);
+
+        if (coordinate(segmentBounds.center(), splitAxis) < split) {
+            qreal highCoordinate = coordinate(segmentBounds.bottomRight(), splitAxis);
+            if (highCoordinate > node.splitLeft)
+                node.splitLeft = highCoordinate;
+            if (index < node.lowestLeftIndex)
+                node.lowestLeftIndex = index;
+            ++l;
+        } else {
+            if (lowCoordinate < node.splitRight)
+                node.splitRight = lowCoordinate;
+            if (index < node.lowestRightIndex)
+                node.lowestRightIndex = index;
+            qSwap(m_index[l], m_index[r]);
+            --r;
+        }
+    }
+
+    RectF lbounds = bounds;
+    (&lbounds.x2)[splitAxis] = node.splitLeft;
+
+    RectF rbounds = bounds;
+    (&rbounds.x1)[splitAxis] = node.splitRight;
+
+    TreeNode left = buildTree(first, l, depth + 1, lbounds);
+    m_tree[node.index.children.left] = left;
+
+    TreeNode right = buildTree(l, last, depth + 1, rbounds);
+    m_tree[node.index.children.right] = right;
+
+    return node;
+}
+
+void SegmentTree::intersectLines(const QLineF &a, const QLineF &b, QDataBuffer<QIntersection> &intersections)
 {
     const QPointF p1 = a.p1();
     const QPointF p2 = a.p2();
@@ -298,90 +514,86 @@ void QIntersectionFinder::intersectLines(const QLineF &a, const QLineF &b, QData
     intersections.add(intersection);
 }
 
-bool QIntersectionFinder::hasIntersections(const QPathSegments &a, const QPathSegments &b) const
+void SegmentTree::produceIntersections(int segment)
 {
-    if (a.segments() == 0 || b.segments() == 0)
-        return false;
+    const QRectF &segmentBounds = m_segments.elementBounds(segment);
 
-    const QRectF &rb0 = b.elementBounds(0);
+    RectF sbounds;
+    sbounds.x1 = segmentBounds.left();
+    sbounds.y1 = segmentBounds.top();
+    sbounds.x2 = segmentBounds.right();
+    sbounds.y2 = segmentBounds.bottom();
 
-    qreal minX = rb0.left();
-    qreal minY = rb0.top();
-    qreal maxX = rb0.right();
-    qreal maxY = rb0.bottom();
+    produceIntersections(m_tree.at(0), segment, sbounds, m_bounds, 0);
+}
 
-    for (int i = 1; i < b.segments(); ++i) {
-        const QRectF &r = b.elementBounds(i);
-        minX = qMin(minX, r.left());
-        minY = qMin(minY, r.top());
-        maxX = qMax(maxX, r.right());
-        maxY = qMax(maxY, r.bottom());
-    }
+void SegmentTree::produceIntersectionsLeaf(const TreeNode &node, int segment)
+{
+    const QRectF &r1 = m_segments.elementBounds(segment);
+    const QLineF lineA = m_segments.lineAt(segment);
 
-    QRectF rb(minX, minY, maxX - minX, maxY - minY);
+    for (int i = node.index.interval.first; i < node.index.interval.last; ++i) {
+        const int other = m_index.at(i);
+        if (other >= segment)
+            continue;
 
-    for (int i = 0; i < a.segments(); ++i) {
-        const QRectF &r1 = a.elementBounds(i);
+        const QRectF &r2 = m_segments.elementBounds(other);
 
-        if (r1.left() > rb.right() || rb.left() > r1.right())
+        if (r1.left() > r2.right() || r2.left() > r1.right())
             continue;
-        if (r1.top() > rb.bottom() || rb.top() > r1.bottom())
+        if (r1.top() > r2.bottom() || r2.top() > r1.bottom())
             continue;
 
-        for (int j = 0; j < b.segments(); ++j) {
-            const QRectF &r2 = b.elementBounds(j);
+        m_intersections.reset();
 
-            if (r1.left() > r2.right() || r2.left() > r1.right())
-                continue;
-            if (r1.top() > r2.bottom() || r2.top() > r1.bottom())
-                continue;
+        const QLineF lineB = m_segments.lineAt(other);
 
-            if (linesIntersect(a.lineAt(i), b.lineAt(j)))
-                return true;
-        }
-    }
+        intersectLines(lineA, lineB, m_intersections);
 
-    return false;
-}
+        for (int k = 0; k < m_intersections.size(); ++k) {
+            QPathSegments::Intersection i_isect, j_isect;
+            i_isect.vertex = j_isect.vertex = m_segments.addPoint(m_intersections.at(k).pos);
 
-void QIntersectionFinder::produceIntersections(QPathSegments &segments)
-{
-    QVector<QPair<qreal, qreal> > t;
-    QDataBuffer<QIntersection> intersections;
+            i_isect.t = m_intersections.at(k).alphaA;
+            j_isect.t = m_intersections.at(k).alphaB;
 
-    for (int i = 0; i < segments.segments(); ++i) {
-        const QRectF &r1 = segments.elementBounds(i);
+            i_isect.next = 0;
+            j_isect.next = 0;
 
-        for (int j = 0; j < i; ++j) {
-            const QRectF &r2 = segments.elementBounds(j);
+            m_segments.addIntersection(segment, i_isect);
+            m_segments.addIntersection(other, j_isect);
+        }
+    }
+}
 
-            if (r1.left() > r2.right() || r2.left() > r1.right())
-                continue;
-            if (r1.top() > r2.bottom() || r2.top() > r1.bottom())
-                continue;
+void SegmentTree::produceIntersections(const TreeNode &node, int segment, const RectF &segmentBounds, const RectF &nodeBounds, int axis)
+{
+    if (node.leaf) {
+        produceIntersectionsLeaf(node, segment);
+        return;
+    }
 
-            intersections.reset();
+    RectF lbounds = nodeBounds;
+    (&lbounds.x2)[axis] = node.splitLeft;
 
-            const QLineF lineA = segments.lineAt(i);
-            const QLineF lineB = segments.lineAt(j);
+    RectF rbounds = nodeBounds;
+    (&rbounds.x1)[axis] = node.splitRight;
 
-            intersectLines(lineA, lineB, intersections);
+    if (segment > node.lowestLeftIndex && (&segmentBounds.x1)[axis] <= node.splitLeft)
+        produceIntersections(m_tree.at(node.index.children.left), segment, segmentBounds, lbounds, !axis);
 
-            for (int k = 0; k < intersections.size(); ++k) {
-                QPathSegments::Intersection i_isect, j_isect;
-                i_isect.vertex = j_isect.vertex = segments.addPoint(intersections.at(k).pos);
+    if (segment > node.lowestRightIndex && (&segmentBounds.x2)[axis] >= node.splitRight)
+        produceIntersections(m_tree.at(node.index.children.right), segment, segmentBounds, rbounds, !axis);
+}
 
-                i_isect.t = intersections.at(k).alphaA;
-                j_isect.t = intersections.at(k).alphaB;
+}
 
-                i_isect.next = 0;
-                j_isect.next = 0;
+void QIntersectionFinder::produceIntersections(QPathSegments &segments)
+{
+    SegmentTree tree(segments);
 
-                segments.addIntersection(i, i_isect);
-                segments.addIntersection(j, j_isect);
-            }
-        }
-    }
+    for (int i = 0; i < segments.segments(); ++i)
+        tree.produceIntersections(i);
 }
 
 class QKdPointTree
@@ -707,9 +919,6 @@ void QPathSegments::addPath(const QPainterPath &path)
 {
     int firstSegment = m_segments.size();
 
-    QRectF pathBounds = path.boundingRect();
-    qreal invPathScale = 1 / qMax(pathBounds.width(), pathBounds.height());
-
     bool hasMoveTo = false;
     int lastMoveTo = 0;
     int last = 0;
@@ -746,10 +955,9 @@ void QPathSegments::addPath(const QPainterPath &path)
                 } else {
                     QRectF bounds = bezier.bounds();
 
-                    qreal segmentScale = qMax(bounds.width(), bounds.height());
+                    // threshold based on similar algorithm as in qtriangulatingstroker.cpp
+                    int threshold = qMin<float>(64, qMax(bounds.width(), bounds.height()) * (2 * qreal(3.14) / 6));
 
-                    // threshold based on same algorithm as in qtriangulatingstroker.cpp
-                    int threshold = qMin<float>(64, segmentScale * invPathScale * (512 * 3.14f / 6));
                     if (threshold < 3) threshold = 3;
                     qreal one_over_threshold_minus_1 = qreal(1) / (threshold - 1);
 
-- 
cgit v0.12


From 02c65146610cdd5bfe1f3ee4656ba07af82afcc7 Mon Sep 17 00:00:00 2001
From: Janne Koskinen <janne.p.koskinen@digia.com>
Date: Fri, 23 Apr 2010 16:59:18 +0300
Subject: DEF file fix Open C unnecessarily exports inlined getloc. entry
 removed.

Reviewed-by: Shane Kearns
---
 .../webkit/WebKit/qt/symbian/bwins/QtWebKitu.def   | 49 +++++++++++-----------
 1 file changed, 24 insertions(+), 25 deletions(-)

diff --git a/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def b/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def
index 1442795..a450f9e 100644
--- a/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def
+++ b/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def
@@ -625,29 +625,28 @@ EXPORTS
 	?qt_suspendActiveDOMObjects@@YAXPAVQWebFrame@@@Z @ 624 NONAME ; void qt_suspendActiveDOMObjects(class QWebFrame *)
 	?qtwebkit_webframe_scrollRecursively@@YA_NPAVQWebFrame@@HH@Z @ 625 NONAME ABSENT ; bool qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int)
 	?closeEvent@QWebInspector@@MAEXPAVQCloseEvent@@@Z @ 626 NONAME ; void QWebInspector::closeEvent(class QCloseEvent *)
-	?getloc@ios_base@std@@QBE?AVlocale@2@XZ @ 627 NONAME ; class std::locale std::ios_base::getloc(void) const
-	?inspectorUrl@QWebSettings@@QBE?AVQUrl@@XZ @ 628 NONAME ; class QUrl QWebSettings::inspectorUrl(void) const
-	?isTiledBackingStoreFrozen@QGraphicsWebView@@QBE_NXZ @ 629 NONAME ; bool QGraphicsWebView::isTiledBackingStoreFrozen(void) const
-	?pageChanged@QWebFrame@@IAEXXZ @ 630 NONAME ; void QWebFrame::pageChanged(void)
-	?qt_drt_enableCaretBrowsing@@YAXPAVQWebPage@@_N@Z @ 631 NONAME ; void qt_drt_enableCaretBrowsing(class QWebPage *, bool)
-	?qt_drt_evaluateScriptInIsolatedWorld@@YAXPAVQWebFrame@@HABVQString@@@Z @ 632 NONAME ; void qt_drt_evaluateScriptInIsolatedWorld(class QWebFrame *, int, class QString const &)
-	?qt_drt_hasDocumentElement@@YA_NPAVQWebFrame@@@Z @ 633 NONAME ; bool qt_drt_hasDocumentElement(class QWebFrame *)
-	?qt_drt_numberOfPages@@YAHPAVQWebFrame@@MM@Z @ 634 NONAME ; int qt_drt_numberOfPages(class QWebFrame *, float, float)
-	?qt_drt_pageNumberForElementById@@YAHPAVQWebFrame@@ABVQString@@MM@Z @ 635 NONAME ; int qt_drt_pageNumberForElementById(class QWebFrame *, class QString const &, float, float)
-	?qt_drt_pauseSVGAnimation@@YA_NPAVQWebFrame@@ABVQString@@N1@Z @ 636 NONAME ; bool qt_drt_pauseSVGAnimation(class QWebFrame *, class QString const &, double, class QString const &)
-	?qt_drt_setDomainRelaxationForbiddenForURLScheme@@YAX_NABVQString@@@Z @ 637 NONAME ; void qt_drt_setDomainRelaxationForbiddenForURLScheme(bool, class QString const &)
-	?qt_drt_setFrameFlatteningEnabled@@YAXPAVQWebPage@@_N@Z @ 638 NONAME ; void qt_drt_setFrameFlatteningEnabled(class QWebPage *, bool)
-	?qt_drt_setMediaType@@YAXPAVQWebFrame@@ABVQString@@@Z @ 639 NONAME ; void qt_drt_setMediaType(class QWebFrame *, class QString const &)
-	?qt_drt_setTimelineProfilingEnabled@@YAXPAVQWebPage@@_N@Z @ 640 NONAME ; void qt_drt_setTimelineProfilingEnabled(class QWebPage *, bool)
-	?qt_drt_webinspector_close@@YAXPAVQWebPage@@@Z @ 641 NONAME ; void qt_drt_webinspector_close(class QWebPage *)
-	?qt_drt_webinspector_executeScript@@YAXPAVQWebPage@@JABVQString@@@Z @ 642 NONAME ; void qt_drt_webinspector_executeScript(class QWebPage *, long, class QString const &)
-	?qt_drt_webinspector_show@@YAXPAVQWebPage@@@Z @ 643 NONAME ; void qt_drt_webinspector_show(class QWebPage *)
-	?qt_drt_workerThreadCount@@YAHXZ @ 644 NONAME ; int qt_drt_workerThreadCount(void)
-	?qt_wrt_setViewMode@@YAXPAVQWebPage@@ABVQString@@@Z @ 645 NONAME ; void qt_wrt_setViewMode(class QWebPage *, class QString const &)
-	?qtwebkit_webframe_scrollRecursively@@YAXPAVQWebFrame@@HHABVQPoint@@@Z @ 646 NONAME ; void qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int, class QPoint const &)
-	?resizesToContents@QGraphicsWebView@@QBE_NXZ @ 647 NONAME ; bool QGraphicsWebView::resizesToContents(void) const
-	?scrollToAnchor@QWebFrame@@QAEXABVQString@@@Z @ 648 NONAME ; void QWebFrame::scrollToAnchor(class QString const &)
-	?setInspectorUrl@QWebSettings@@QAEXABVQUrl@@@Z @ 649 NONAME ; void QWebSettings::setInspectorUrl(class QUrl const &)
-	?setResizesToContents@QGraphicsWebView@@QAEX_N@Z @ 650 NONAME ; void QGraphicsWebView::setResizesToContents(bool)
-	?setTiledBackingStoreFrozen@QGraphicsWebView@@QAEX_N@Z @ 651 NONAME ; void QGraphicsWebView::setTiledBackingStoreFrozen(bool)
+	?inspectorUrl@QWebSettings@@QBE?AVQUrl@@XZ @ 627 NONAME ; class QUrl QWebSettings::inspectorUrl(void) const
+	?isTiledBackingStoreFrozen@QGraphicsWebView@@QBE_NXZ @ 628 NONAME ; bool QGraphicsWebView::isTiledBackingStoreFrozen(void) const
+	?pageChanged@QWebFrame@@IAEXXZ @ 629 NONAME ; void QWebFrame::pageChanged(void)
+	?qt_drt_enableCaretBrowsing@@YAXPAVQWebPage@@_N@Z @ 630 NONAME ; void qt_drt_enableCaretBrowsing(class QWebPage *, bool)
+	?qt_drt_evaluateScriptInIsolatedWorld@@YAXPAVQWebFrame@@HABVQString@@@Z @ 631 NONAME ; void qt_drt_evaluateScriptInIsolatedWorld(class QWebFrame *, int, class QString const &)
+	?qt_drt_hasDocumentElement@@YA_NPAVQWebFrame@@@Z @ 632 NONAME ; bool qt_drt_hasDocumentElement(class QWebFrame *)
+	?qt_drt_numberOfPages@@YAHPAVQWebFrame@@MM@Z @ 633 NONAME ; int qt_drt_numberOfPages(class QWebFrame *, float, float)
+	?qt_drt_pageNumberForElementById@@YAHPAVQWebFrame@@ABVQString@@MM@Z @ 634 NONAME ; int qt_drt_pageNumberForElementById(class QWebFrame *, class QString const &, float, float)
+	?qt_drt_pauseSVGAnimation@@YA_NPAVQWebFrame@@ABVQString@@N1@Z @ 635 NONAME ; bool qt_drt_pauseSVGAnimation(class QWebFrame *, class QString const &, double, class QString const &)
+	?qt_drt_setDomainRelaxationForbiddenForURLScheme@@YAX_NABVQString@@@Z @ 636 NONAME ; void qt_drt_setDomainRelaxationForbiddenForURLScheme(bool, class QString const &)
+	?qt_drt_setFrameFlatteningEnabled@@YAXPAVQWebPage@@_N@Z @ 637 NONAME ; void qt_drt_setFrameFlatteningEnabled(class QWebPage *, bool)
+	?qt_drt_setMediaType@@YAXPAVQWebFrame@@ABVQString@@@Z @ 638 NONAME ; void qt_drt_setMediaType(class QWebFrame *, class QString const &)
+	?qt_drt_setTimelineProfilingEnabled@@YAXPAVQWebPage@@_N@Z @ 639 NONAME ; void qt_drt_setTimelineProfilingEnabled(class QWebPage *, bool)
+	?qt_drt_webinspector_close@@YAXPAVQWebPage@@@Z @ 640 NONAME ; void qt_drt_webinspector_close(class QWebPage *)
+	?qt_drt_webinspector_executeScript@@YAXPAVQWebPage@@JABVQString@@@Z @ 641 NONAME ; void qt_drt_webinspector_executeScript(class QWebPage *, long, class QString const &)
+	?qt_drt_webinspector_show@@YAXPAVQWebPage@@@Z @ 642 NONAME ; void qt_drt_webinspector_show(class QWebPage *)
+	?qt_drt_workerThreadCount@@YAHXZ @ 643 NONAME ; int qt_drt_workerThreadCount(void)
+	?qt_wrt_setViewMode@@YAXPAVQWebPage@@ABVQString@@@Z @ 644 NONAME ; void qt_wrt_setViewMode(class QWebPage *, class QString const &)
+	?qtwebkit_webframe_scrollRecursively@@YAXPAVQWebFrame@@HHABVQPoint@@@Z @ 645 NONAME ; void qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int, class QPoint const &)
+	?resizesToContents@QGraphicsWebView@@QBE_NXZ @ 646 NONAME ; bool QGraphicsWebView::resizesToContents(void) const
+	?scrollToAnchor@QWebFrame@@QAEXABVQString@@@Z @ 647 NONAME ; void QWebFrame::scrollToAnchor(class QString const &)
+	?setInspectorUrl@QWebSettings@@QAEXABVQUrl@@@Z @ 648 NONAME ; void QWebSettings::setInspectorUrl(class QUrl const &)
+	?setResizesToContents@QGraphicsWebView@@QAEX_N@Z @ 649 NONAME ; void QGraphicsWebView::setResizesToContents(bool)
+	?setTiledBackingStoreFrozen@QGraphicsWebView@@QAEX_N@Z @ 650 NONAME ; void QGraphicsWebView::setTiledBackingStoreFrozen(bool)
 
-- 
cgit v0.12


From a1839a7a067c47a328c1bdb651a89dc325cb0691 Mon Sep 17 00:00:00 2001
From: Liang Qi <liang.qi@nokia.com>
Date: Fri, 23 Apr 2010 23:57:11 +0200
Subject: Fix for EGL for symbian on 3.1/3.2/5.0, define QT_NO_EGL.

Reviewed-by: Jason Barron
---
 src/gui/egl/egl.pri | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/gui/egl/egl.pri b/src/gui/egl/egl.pri
index 9ca1f0a..c6c020d 100644
--- a/src/gui/egl/egl.pri
+++ b/src/gui/egl/egl.pri
@@ -24,6 +24,7 @@ contains(QT_CONFIG, egl): {
 	    }
 	}
 } else:symbian {
+	DEFINES += QT_NO_EGL
 	SOURCES += egl/qegl_stub.cpp
 	SOURCES += egl/qeglproperties_stub.cpp
 }
-- 
cgit v0.12


From 9af9e1d92504647e41d27c1229a2572a90bf4fd7 Mon Sep 17 00:00:00 2001
From: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
Date: Fri, 23 Apr 2010 08:10:12 +0200
Subject: Fix all qmake Makefiles to include the MSBuild backend

Reviewed-by: trustme
---
 qmake/Makefile.unix                            | 10 ++++++++--
 qmake/Makefile.win32-g++                       | 10 ++++++++--
 qmake/Makefile.win32-g++-sh                    | 10 ++++++++--
 qmake/generators/win32/msbuild_objectmodel.cpp |  4 ++--
 4 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix
index 875b9d1..8d56fc8 100644
--- a/qmake/Makefile.unix
+++ b/qmake/Makefile.unix
@@ -9,7 +9,7 @@ LFLAGS = @QMAKE_LFLAGS@
 OBJS=project.o property.o main.o makefile.o unixmake2.o unixmake.o  \
      mingw_make.o option.o winmakefile.o projectgenerator.o \
      meta.o makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o \
-     borland_bmake.o msvc_vcproj.o msvc_nmake.o msvc_objectmodel.o \
+     borland_bmake.o msvc_vcproj.o msvc_vcxproj.o msvc_nmake.o msvc_objectmodel.o msbuild_objectmodel.o \
      symmake.o initprojectdeploy_symbian.o symmake_abld.o symmake_sbsv2.o \
      symbiancommon.o registry.o epocroot.o
 
@@ -31,7 +31,7 @@ DEPEND_SRC=project.cpp property.cpp meta.cpp main.cpp generators/makefile.cpp ge
 	   generators/unix/unixmake.cpp generators/win32/winmakefile.cpp generators/projectgenerator.cpp \
 	   generators/mac/pbuilder_pbx.cpp generators/mac/xmloutput.cpp generators/metamakefile.cpp \
 	   generators/makefiledeps.cpp option.cpp generators/win32/mingw_make.cpp generators/makefile.cpp \
-	   generators/win32/msvc_objectmodel.cpp generators/win32/msvc_nmake.cpp generators/win32/borland_bmake.cpp \
+	   generators/win32/msvc_vcproj.cpp generators/win32/msvc_vcxproj.cpp generators/win32/msvc_objectmodel.cpp generators/win32/msbuild_objectmodel.cpp generators/win32/msbuild_objectmodel.cpp generators/win32/msvc_nmake.cpp generators/win32/borland_bmake.cpp \
 	   generators/symbian/symmake.cpp generators/symbian/initprojectdeploy_symbian.cpp \
 	   $(SOURCE_PATH)/tools/shared/windows/registry.cpp \
 	   $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp \
@@ -265,6 +265,12 @@ msvc_objectmodel.o: generators/win32/msvc_objectmodel.cpp
 msvc_vcproj.o: generators/win32/msvc_vcproj.cpp
 	$(CXX) -c -o $@ $(CXXFLAGS) generators/win32/msvc_vcproj.cpp
 
+msbuild_objectmodel.o: generators/win32/msbuild_objectmodel.cpp
+	$(CXX) -c -o $@ $(CXXFLAGS) generators/win32/msbuild_objectmodel.cpp
+
+msvc_vcxproj.o: generators/win32/msvc_vcxproj.cpp
+	$(CXX) -c -o $@ $(CXXFLAGS) generators/win32/msvc_vcxproj.cpp
+
 msvc_nmake.o: generators/win32/msvc_nmake.cpp
 	$(CXX) -c -o $@ $(CXXFLAGS) generators/win32/msvc_nmake.cpp
 
diff --git a/qmake/Makefile.win32-g++ b/qmake/Makefile.win32-g++
index ab7d558..477203d 100644
--- a/qmake/Makefile.win32-g++
+++ b/qmake/Makefile.win32-g++
@@ -37,8 +37,8 @@ ADDCLEAN    =
 OBJS        = project.o main.o makefile.o unixmake.o unixmake2.o mingw_make.o \
               option.o winmakefile.o projectgenerator.o property.o meta.o \
               makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o \
-              borland_bmake.o msvc_nmake.o msvc_vcproj.o \
-              msvc_objectmodel.o symmake.o initprojectdeploy_symbian.o \
+              borland_bmake.o msvc_nmake.o msvc_vcproj.o msvc_vcxproj.o \
+              msvc_objectmodel.o msbuild_objectmodel.o symmake.o initprojectdeploy_symbian.o \
               symmake_abld.o symmake_sbsv2.o symbiancommon.o registry.o epocroot.o
 
 ifdef QMAKE_OPENSOURCE_EDITION
@@ -264,6 +264,12 @@ msvc_vcproj.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_vcproj.cpp
 msvc_objectmodel.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_objectmodel.cpp
 	$(CXX) $(CXXFLAGS) generators/win32/msvc_objectmodel.cpp
 
+msvc_vcxproj.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_vcxproj.cpp
+	$(CXX) $(CXXFLAGS) generators/win32/msvc_vcxproj.cpp
+
+msbuild_objectmodel.o: $(SOURCE_PATH)/qmake/generators/win32/msbuild_objectmodel.cpp
+	$(CXX) $(CXXFLAGS) generators/win32/msbuild_objectmodel.cpp
+
 symmake.o: $(SOURCE_PATH)/qmake/generators/symbian/symmake.cpp
 	$(CXX) $(CXXFLAGS) generators/symbian/symmake.cpp
 
diff --git a/qmake/Makefile.win32-g++-sh b/qmake/Makefile.win32-g++-sh
index 755d046..6aac39f 100644
--- a/qmake/Makefile.win32-g++-sh
+++ b/qmake/Makefile.win32-g++-sh
@@ -37,8 +37,8 @@ ADDCLEAN    =
 OBJS        = project.o main.o makefile.o unixmake.o unixmake2.o mingw_make.o \
               option.o winmakefile.o projectgenerator.o property.o meta.o \
               makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o \
-              borland_bmake.o msvc_nmake.o msvc_vcproj.o \
-              msvc_objectmodel.o symmake.o initprojectdeploy_symbian.o \
+              borland_bmake.o msvc_nmake.o msvc_vcproj.o msvc_vcxproj.o \
+              msvc_objectmodel.o msbuild_objectmodel.o symmake.o initprojectdeploy_symbian.o \
               symmake_abld.o symmake_sbsv2.o symbiancommon.o registry.o epocroot.o
 
 ifdef QMAKE_OPENSOURCE_EDITION
@@ -263,6 +263,12 @@ msvc_vcproj.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_vcproj.cpp
 msvc_objectmodel.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_objectmodel.cpp
 	$(CXX) $(CXXFLAGS) generators/win32/msvc_objectmodel.cpp
 
+msvc_vcxproj.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_vcxproj.cpp
+	$(CXX) $(CXXFLAGS) generators/win32/msvc_vcxproj.cpp
+
+msbuild_objectmodel.o: $(SOURCE_PATH)/qmake/generators/win32/msbuild_objectmodel.cpp
+	$(CXX) $(CXXFLAGS) generators/win32/msbuild_objectmodel.cpp
+
 symmake.o: $(SOURCE_PATH)/qmake/generators/symbian/symmake.cpp
 	$(CXX) $(CXXFLAGS) generators/symbian/symmake.cpp
 
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index f459885..d011c5c 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -2705,13 +2705,13 @@ bool VCXFilter::outputFileConfig(XmlOutput &xml, XmlOutput &xmlFilter, const QSt
 
 
 // VCXProjectSingleConfig --------------------------------------------
-VCXFilter nullFilter;
+VCXFilter nullVCXFilter;
 VCXFilter& VCXProjectSingleConfig::filterForExtraCompiler(const QString &compilerName)
 {
     for (int i = 0; i < ExtraCompilersFiles.count(); ++i)
         if (ExtraCompilersFiles.at(i).Name == compilerName)
             return ExtraCompilersFiles[i];
-    return nullFilter;
+    return nullVCXFilter;
 }
 
 
-- 
cgit v0.12


From 8669823d5a5c0f26ff3909ad9c83fa99a63a89f3 Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Fri, 23 Apr 2010 15:08:17 +0200
Subject: Force full-screen updates for QGLWindowSurface

If the back buffer is destroyed when swap buffers is called, we must
tell the backing store any update needs to invalidate the entire
window surface, so everything gets re-drawn.

Task-number: QTBUG-9978
Reviewed-By: Trond
---
 src/opengl/qwindowsurface_gl.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index b693245..bcb96fa 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -82,7 +82,7 @@
 #define GLX_SAMPLES_ARB         100001
 #endif
 
-#ifdef QT_OPENGL_ES
+#ifndef QT_NO_EGL
 #include <private/qeglcontext_p.h>
 #endif
 
@@ -354,6 +354,11 @@ void QGLWindowSurface::hijackWindow(QWidget *widget)
     QGLContext *ctx = new QGLContext(surfaceFormat, widget);
     ctx->create(qt_gl_share_widget()->context());
 
+#ifndef QT_NO_EGL
+    if (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) != EGL_BUFFER_PRESERVED)
+        setPartialUpdateSupport(false); // Force full-screen updates
+#endif
+
     widgetPrivate->extraData()->glContext = ctx;
 
     union { QGLContext **ctxPtr; void **voidPtr; };
-- 
cgit v0.12


From 372392153a2c1de69d9257753ba84f44cbbd9cf1 Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Fri, 23 Apr 2010 15:24:19 +0200
Subject: Enable QX11GLWindowSurface using "-graphicssystem x11gl" option

When the OpenGL graphics system is in X11GL mode, it will use the
QX11GLWindowSurface for all widgets except QGraphicsViews with the
FullViewportUpdate update mode set, where it will use the regular
QGLWindowSurface, as this is probabbly faster.

QX11GLWindowSurface differs from QGLWindowSurface because it allows
accelerated scrolling and partial updates, while still being using
opengl to do rendering.

Task-number: QT-280
Task-number: QT-2625
Reviewed-By: Trond
---
 src/opengl/qgraphicssystem_gl.cpp           | 22 ++++++++++++++--------
 src/opengl/qgraphicssystem_gl_p.h           |  4 +++-
 src/opengl/qpixmapdata_x11gl_egl.cpp        | 16 +++++++---------
 src/opengl/qwindowsurface_gl.cpp            |  4 ++--
 src/plugins/graphicssystems/opengl/main.cpp | 14 +++++++++++---
 5 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/src/opengl/qgraphicssystem_gl.cpp b/src/opengl/qgraphicssystem_gl.cpp
index a282e4c..58cc28a 100644
--- a/src/opengl/qgraphicssystem_gl.cpp
+++ b/src/opengl/qgraphicssystem_gl.cpp
@@ -40,6 +40,7 @@
 ****************************************************************************/
 
 #include "qgraphicssystem_gl_p.h"
+#include <QGraphicsView>
 
 #include "private/qpixmap_raster_p.h"
 #include "private/qpixmapdata_gl_p.h"
@@ -47,7 +48,7 @@
 #include "private/qgl_p.h"
 #include <private/qwindowsurface_raster_p.h>
 
-#if defined(Q_WS_X11) && defined(QT_OPENGL_ES)
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
 #include "private/qpixmapdata_x11gl_p.h"
 #include "private/qwindowsurface_x11gl_p.h"
 #endif
@@ -58,10 +59,6 @@ extern QGLWidget *qt_gl_getShareWidget();
 
 QPixmapData *QGLGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const
 {
-#if defined(Q_WS_X11) && defined(QT_OPENGL_ES)
-    if (type == QPixmapData::PixmapType && QX11GLPixmapData::hasX11GLPixmaps())
-        return new QX11GLPixmapData();
-#endif
     return new QGLPixmapData(type);
 }
 
@@ -75,9 +72,18 @@ QWindowSurface *QGLGraphicsSystem::createWindowSurface(QWidget *widget) const
         return new QRasterWindowSurface(widget);
 #endif
 
-#if defined(Q_WS_X11) && defined(QT_OPENGL_ES)
-    if (QX11GLPixmapData::hasX11GLPixmaps())
-        return new QX11GLWindowSurface(widget);
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
+    if (m_useX11GL && QX11GLPixmapData::hasX11GLPixmaps()) {
+        // If the widget is a QGraphicsView which will be re-drawing the entire
+        // scene each frame anyway, we should use QGLWindowSurface as this may
+        // provide proper buffer flipping, which should be faster than QX11GL's
+        // blitting approach:
+        QGraphicsView* qgv = qobject_cast<QGraphicsView*>(widget);
+        if (qgv && qgv->viewportUpdateMode() == QGraphicsView::FullViewportUpdate)
+            return new QGLWindowSurface(widget);
+        else
+            return new QX11GLWindowSurface(widget);
+    }
 #endif
 
     return new QGLWindowSurface(widget);
diff --git a/src/opengl/qgraphicssystem_gl_p.h b/src/opengl/qgraphicssystem_gl_p.h
index ff47854..9d2d506 100644
--- a/src/opengl/qgraphicssystem_gl_p.h
+++ b/src/opengl/qgraphicssystem_gl_p.h
@@ -62,10 +62,12 @@ QT_BEGIN_NAMESPACE
 class Q_OPENGL_EXPORT QGLGraphicsSystem : public QGraphicsSystem
 {
 public:
-    QGLGraphicsSystem();
+    QGLGraphicsSystem(bool useX11GL);
 
     QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
     QWindowSurface *createWindowSurface(QWidget *widget) const;
+private:
+    bool m_useX11GL;
 };
 
 QT_END_NAMESPACE
diff --git a/src/opengl/qpixmapdata_x11gl_egl.cpp b/src/opengl/qpixmapdata_x11gl_egl.cpp
index 58d34fc..e0c274a 100644
--- a/src/opengl/qpixmapdata_x11gl_egl.cpp
+++ b/src/opengl/qpixmapdata_x11gl_egl.cpp
@@ -216,18 +216,16 @@ QX11GLSharedContexts* QX11GLPixmapData::sharedContexts()
 
 bool QX11GLPixmapData::hasX11GLPixmaps()
 {
-    static bool checkedForX11Pixmaps = false;
-    static bool haveX11Pixmaps = false;
+    static bool checkedForX11GLPixmaps = false;
+    static bool haveX11GLPixmaps = false;
 
-    if (checkedForX11Pixmaps)
-        return haveX11Pixmaps;
+    if (checkedForX11GLPixmaps)
+        return haveX11GLPixmaps;
 
-    checkedForX11Pixmaps = true;
+    checkedForX11GLPixmaps = true;
+    haveX11GLPixmaps = sharedContexts()->isValid();
 
-    if (!qgetenv("QT_USE_X11GL_PIXMAPS").isEmpty() && sharedContexts()->isValid())
-        haveX11Pixmaps = true;
-
-    return haveX11Pixmaps;
+    return haveX11GLPixmaps;
 }
 
 QX11GLPixmapData::QX11GLPixmapData()
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index bcb96fa..92a347b 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -94,8 +94,8 @@ QT_BEGIN_NAMESPACE
 #ifdef Q_WS_WIN
 extern Q_GUI_EXPORT bool qt_win_owndc_required;
 #endif
-QGLGraphicsSystem::QGLGraphicsSystem()
-    : QGraphicsSystem()
+QGLGraphicsSystem::QGLGraphicsSystem(bool useX11GL)
+    : QGraphicsSystem(), m_useX11GL(useX11GL)
 {
     QGLWindowSurface::surfaceFormat.setSampleBuffers(true);
 #if defined(Q_WS_X11) && !defined(QT_OPENGL_ES)
diff --git a/src/plugins/graphicssystems/opengl/main.cpp b/src/plugins/graphicssystems/opengl/main.cpp
index abcfb7f..4c740ca 100644
--- a/src/plugins/graphicssystems/opengl/main.cpp
+++ b/src/plugins/graphicssystems/opengl/main.cpp
@@ -59,6 +59,9 @@ QStringList QGLGraphicsSystemPlugin::keys() const
 #if !defined(QT_OPENGL_ES_1)
     list << QLatin1String("OpenGL2");
 #endif
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
+    list << QLatin1String("X11GL");
+#endif
     return list;
 }
 
@@ -66,18 +69,23 @@ QGraphicsSystem* QGLGraphicsSystemPlugin::create(const QString& system)
 {
     if (system.toLower() == QLatin1String("opengl1")) {
         QGL::setPreferredPaintEngine(QPaintEngine::OpenGL);
-        return new QGLGraphicsSystem;
+        return new QGLGraphicsSystem(false);
     }
 
 #if !defined(QT_OPENGL_ES_1)
     if (system.toLower() == QLatin1String("opengl2")) {
         QGL::setPreferredPaintEngine(QPaintEngine::OpenGL2);
-        return new QGLGraphicsSystem;
+        return new QGLGraphicsSystem(false);
     }
 #endif
 
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
+    if (system.toLower() == QLatin1String("x11gl"))
+        return new QGLGraphicsSystem(true);
+#endif
+
     if (system.toLower() == QLatin1String("opengl"))
-        return new QGLGraphicsSystem;
+        return new QGLGraphicsSystem(false);
 
     return 0;
 }
-- 
cgit v0.12


From bdd7372edf4cb64177e97ef6087a6ec2a4903225 Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Fri, 23 Apr 2010 17:21:39 +0200
Subject: Don't leak objects if QX11GLSharedContexts is instanciated twice

If two threads call the Q_GLOBAL_STATIC accessor at the same time,
two QX11GLSharedContexts objects can be created with one being
destroyed.

Reviewed-By: TrustMe
---
 src/opengl/qpixmapdata_x11gl_egl.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/opengl/qpixmapdata_x11gl_egl.cpp b/src/opengl/qpixmapdata_x11gl_egl.cpp
index e0c274a..2c11a0b 100644
--- a/src/opengl/qpixmapdata_x11gl_egl.cpp
+++ b/src/opengl/qpixmapdata_x11gl_egl.cpp
@@ -74,7 +74,6 @@ public:
         EGLint rgbConfigId;
         EGLint argbConfigId;
 
-
         do {
             EGLConfig rgbConfig = QEgl::defaultConfig(QInternal::Pixmap, QEgl::OpenGL, QEgl::Renderable);
             EGLConfig argbConfig = QEgl::defaultConfig(QInternal::Pixmap, QEgl::OpenGL,
@@ -138,6 +137,7 @@ public:
                 valid = argbContext->makeCurrent(argbPixmapSurface);
                 argbContext->doneCurrent();
                 eglDestroySurface(QEgl::display(), argbPixmapSurface);
+                argbPixmapData->gl_surface = 0;
             }
 
             if (!valid) {
@@ -150,7 +150,6 @@ public:
             QGLTextureCache::instance();
         } while(0);
 
-
         if (!valid)
             cleanup();
         else
@@ -158,6 +157,10 @@ public:
 
     }
 
+    ~QX11GLSharedContexts() {
+        cleanup();
+    }
+
     void cleanup() {
         if (sharedQGLContext) {
             delete sharedQGLContext;
@@ -222,8 +225,8 @@ bool QX11GLPixmapData::hasX11GLPixmaps()
     if (checkedForX11GLPixmaps)
         return haveX11GLPixmaps;
 
+    haveX11GLPixmaps = qt_x11gl_share_contexts()->isValid();
     checkedForX11GLPixmaps = true;
-    haveX11GLPixmaps = sharedContexts()->isValid();
 
     return haveX11GLPixmaps;
 }
-- 
cgit v0.12


From 89aa90f58e7df3c2f6b0f4b3d2bab65dca9cf140 Mon Sep 17 00:00:00 2001
From: Tom Cooksey <thomas.cooksey@nokia.com>
Date: Mon, 26 Apr 2010 10:42:14 +0200
Subject: Remove stray qDebug

Reviewed-By: TrustMe
---
 src/opengl/qgl_x11egl.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp
index c0b1515..9d28de0 100644
--- a/src/opengl/qgl_x11egl.cpp
+++ b/src/opengl/qgl_x11egl.cpp
@@ -351,7 +351,6 @@ void QGLWidgetPrivate::recreateEglSurface()
     }
 
     if (glcx->d_func()->eglSurface == EGL_NO_SURFACE) {
-        qDebug("Re-creating the surface");
         glcx->d_func()->eglSurface = glcx->d_func()->eglContext->createSurface(q);
         eglSurfaceWindowId = currentId;
     }
-- 
cgit v0.12


From 7bee9774dfe4b09ca8c8e6a63d0de34737a1aaa0 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen <morten.engvoldsen@nokia.com>
Date: Mon, 26 Apr 2010 10:51:49 +0200
Subject: Doc: correcting a character bug in the footer. Changed "subsidiaries.
 Nokia, Qt and their respective logos are trademarks of Nokia Corporation>\n"
 \ into  "subsidiaries. Nokia, Qt and their respective logos are trademarks of
 Nokia Corporation \n" \

Reviewed-by: trust me
---
 tools/qdoc3/test/qt-html-templates.qdocconf | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf
index 158aef3..8253c45 100644
--- a/tools/qdoc3/test/qt-html-templates.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates.qdocconf
@@ -113,7 +113,7 @@ HTML.footer             = "        </div>\n" \
 			  "  <div class=\"footer\">\n" \
 			  "    <p>\n" \
 			  "      <acronym title=\"Copyright\">&copy;</acronym> 2008-2010 Nokia Corporation and/or its\n" \
-			  "      subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation>\n" \
+			  "      subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \
 			  "      in Finland and/or other countries worldwide.</p>\n" \
 			  "    <p>\n" \
 			  "      All other trademarks are property of their respective owners. <a title=\"Privacy Policy\"\n" \
-- 
cgit v0.12


From 2ee996bb3e8449e9c9d153326a2f55bc07b6b864 Mon Sep 17 00:00:00 2001
From: kh1 <qt-info@nokia.com>
Date: Mon, 26 Apr 2010 12:47:50 +0200
Subject: Improved workaround for new qt documentation, base on dboddie's work.

Make the check more generic, to also work for all other Qt namespaces
than qt.ver.s.ion. Still there's something broken in Qt webkit or so.
Backported from Qt Creator code.

Reviewed-by: ck
---
 tools/assistant/tools/assistant/helpviewer.cpp     | 10 ++++------
 tools/assistant/tools/assistant/helpviewer.h       |  8 ++++----
 tools/assistant/tools/assistant/helpviewer_qwv.cpp |  7 ++++---
 3 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/tools/assistant/tools/assistant/helpviewer.cpp b/tools/assistant/tools/assistant/helpviewer.cpp
index 22b3f30..6499139 100644
--- a/tools/assistant/tools/assistant/helpviewer.cpp
+++ b/tools/assistant/tools/assistant/helpviewer.cpp
@@ -52,17 +52,15 @@
 
 QT_BEGIN_NAMESPACE
 
-QString AbstractHelpViewer::DocPath = QString::fromLatin1("qthelp://com."
-    "trolltech.qt.%1/").arg(QString(QLatin1String(QT_VERSION_STR))
-    .replace(QLatin1String("."), QLatin1String("")));
+const QLatin1String AbstractHelpViewer::DocPath("qthelp://com.trolltech.");
 
-QString AbstractHelpViewer::AboutBlank =
+const QString AbstractHelpViewer::AboutBlank =
     QCoreApplication::translate("HelpViewer", "<title>about:blank</title>");
 
-QString AbstractHelpViewer::LocalHelpFile = QLatin1String("qthelp://"
+const QString AbstractHelpViewer::LocalHelpFile = QLatin1String("qthelp://"
     "com.trolltech.com.assistantinternal-1.0.0/assistant/assistant.html");
 
-QString AbstractHelpViewer::PageNotFoundMessage =
+const QString AbstractHelpViewer::PageNotFoundMessage =
     QCoreApplication::translate("HelpViewer", "<title>Error 404...</title><div "
     "align=\"center\"><br><br><h1>The page could not be found</h1><br><h3>'%1'"
     "</h3></div>");
diff --git a/tools/assistant/tools/assistant/helpviewer.h b/tools/assistant/tools/assistant/helpviewer.h
index 80a6f87..def9418 100644
--- a/tools/assistant/tools/assistant/helpviewer.h
+++ b/tools/assistant/tools/assistant/helpviewer.h
@@ -67,10 +67,10 @@ public:
 
     virtual bool handleForwardBackwardMouseButtons(QMouseEvent *e) = 0;
 
-    static QString DocPath;
-    static QString AboutBlank;
-    static QString LocalHelpFile;
-    static QString PageNotFoundMessage;
+    static const QLatin1String DocPath;
+    static const QString AboutBlank;
+    static const QString LocalHelpFile;
+    static const QString PageNotFoundMessage;
 
     static bool isLocalUrl(const QUrl &url);
     static bool canOpenPage(const QString &url);
diff --git a/tools/assistant/tools/assistant/helpviewer_qwv.cpp b/tools/assistant/tools/assistant/helpviewer_qwv.cpp
index a19b29a..adaa45b 100644
--- a/tools/assistant/tools/assistant/helpviewer_qwv.cpp
+++ b/tools/assistant/tools/assistant/helpviewer_qwv.cpp
@@ -139,9 +139,10 @@ QNetworkReply *HelpNetworkAccessManager::createRequest(Operation /*op*/,
     // the virtual folder
     if (!helpEngine.findFile(url).isValid()) {
         if (url.startsWith(AbstractHelpViewer::DocPath)) {
-            if (!url.startsWith(AbstractHelpViewer::DocPath + QLatin1String("qdoc/"))) {
-                url = url.replace(AbstractHelpViewer::DocPath,
-                    AbstractHelpViewer::DocPath + QLatin1String("qdoc/"));
+            QUrl newUrl = request.url();
+            if (!newUrl.path().startsWith(QLatin1String("/qdoc/"))) {
+                newUrl.setPath(QLatin1String("qdoc") + newUrl.path());
+                url = newUrl.toString();
             }
         }
     }
-- 
cgit v0.12


From 51c40fdceaa7caec60f8934d9f95dbff76d5ed8e Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 19 Apr 2010 21:02:54 +0200
Subject: Don't rely on tryStart() to do job control.

It may fail but threads become available the next instant. Instead,
simply use our own currentLookups count.

Reviewed-by: Markus Goetz
---
 src/network/kernel/qhostinfo.cpp | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index 7e006e0..f287630 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -565,13 +565,11 @@ void QHostInfoLookupManager::work()
                 }
             }
 
-            if (scheduled && threadPool.tryStart(scheduled)) {
+            if (scheduled && currentLookups.size() < threadPool.maxThreadCount()) {
                 // runnable now running in new thread, track this in currentLookups
+                threadPool.start(scheduled);
                 iterator.remove();
                 currentLookups.append(scheduled);
-            } else if (scheduled) {
-                // wanted to start, but could not because thread pool is busy
-                break;
             } else {
                 // was postponed, continue iterating
                 continue;
-- 
cgit v0.12


From 9e46d92af90ed6fb5b98a1a043f7564ec1e67a94 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@nokia.com>
Date: Mon, 19 Apr 2010 21:43:03 +0200
Subject: Ensure we stop the name lookups in QAbstractSocket if we abort().

If we're not even going to connect, there's no point in trying to get
the host resolution

Reviewed-By: Markus Goetz
---
 src/network/socket/qabstractsocket.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index 21cd0fd..b604e89 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -2382,6 +2382,10 @@ void QAbstractSocket::disconnectFromHostImplementation()
 #if defined(QABSTRACTSOCKET_DEBUG)
         qDebug("QAbstractSocket::disconnectFromHost() aborting immediately");
 #endif
+        if (d->state == HostLookupState) {
+            QHostInfo::abortHostLookup(d->hostLookupId);
+            d->hostLookupId = -1;
+        }
     } else {
         // Perhaps emit closing()
         if (d->state != ClosingState) {
-- 
cgit v0.12


From e7e38aa43dc57f206b7d64189a598f6f49b0d8d3 Mon Sep 17 00:00:00 2001
From: Frans Englich <frans.englich@nokia.com>
Date: Mon, 26 Apr 2010 14:22:26 +0200
Subject: Assigned a UID3 to qml.exe.

Allocated in S60 Team's wiki over UID3s in Qt.
---
 tools/qml/qml.pro | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro
index 869907f..7a101d0 100644
--- a/tools/qml/qml.pro
+++ b/tools/qml/qml.pro
@@ -26,7 +26,7 @@ QT += scripttools \
     }
 }
 symbian {
-#    TARGET.UID3 =
+    TARGET.UID3 = 0x20021317
     include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
     INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
-- 
cgit v0.12


From 1c1f655d82e4af2ff98970472f687e55216e9fcf Mon Sep 17 00:00:00 2001
From: Robin Burchell <robin.burchell@collabora.co.uk>
Date: Mon, 26 Apr 2010 14:36:58 +0200
Subject: Don't use QList's begin() and end() where possible. This avoids an
 unnecessary iterator creation, which can speed up some cases.

Merge-request: 2371
Reviewed-by: Andreas Kling <andreas.kling@nokia.com>
---
 src/corelib/tools/qlist.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index 67f63f3..722744c 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -267,9 +267,9 @@ public:
     inline int count() const { return p.size(); }
     inline int length() const { return p.size(); } // Same as count()
     inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); }
-    inline const T& first() const { Q_ASSERT(!isEmpty()); return *begin(); }
+    inline const T& first() const { Q_ASSERT(!isEmpty()); return at(0); }
     T& last() { Q_ASSERT(!isEmpty()); return *(--end()); }
-    const T& last() const { Q_ASSERT(!isEmpty()); return *(--end()); }
+    const T& last() const { Q_ASSERT(!isEmpty()); return at(count() - 1); }
     inline void removeFirst() { Q_ASSERT(!isEmpty()); erase(begin()); }
     inline void removeLast() { Q_ASSERT(!isEmpty()); erase(--end()); }
     inline bool startsWith(const T &t) const { return !isEmpty() && first() == t; }
-- 
cgit v0.12


From b50ab5629d81bd6ea3a1a420fd09dfd963382da8 Mon Sep 17 00:00:00 2001
From: Thomas Zander <t.zander@nokia.com>
Date: Mon, 26 Apr 2010 14:51:44 +0200
Subject: Revert "Add QML imports to s60installs.pro"

This reverts commit e1b1b11afbddbe260d4de61f20181ffd3b941996.

Seems this was not tested, it doesn't work.
---
 src/s60installs/s60installs.pro | 19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index c3809b2..dfce7d2 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -143,25 +143,6 @@ symbian: {
 
     contains(QT_CONFIG, declarative): {
         qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtDeclarative$${QT_LIBINFIX}.dll
-
-        widgetImport.sources = widgets.dll $$QT_BUILD_TREE/src/imports/widgets/qmldir
-        widgetImport.path = $$QT_IMPORTS_BASE_DIR/Qt/widgets
-        DEPLOYMENT += widgetImport
-
-        particlesImport.sources = particles.dll $$QT_BUILD_TREE/src/imports/particles/qmldir
-        particlesImport.path = $$QT_IMPORTS_BASE_DIR/Qt/labs/particles
-        DEPLOYMENT += particlesImport
-
-        contains(QT_CONFIG, webkit): {
-            webkitImport.sources = webkitqmlplugin.dll $$QT_BUILD_TREE/src/imports/webkit/qmldir
-            webkitImport.path = $$QT_IMPORTS_BASE_DIR/org/webkit
-            DEPLOYMENT += webkitImport
-        }
-        contains(QT_CONFIG, multimedia): {
-            multimediaImport.sources = multimedia.dll $$QT_BUILD_TREE/src/imports/multimedia/qmldir
-            multimediaImport.path = $$QT_IMPORTS_BASE_DIR/Qt/multimedia
-            DEPLOYMENT += multimediaImport
-        }
     }
 
     graphicssystems_plugins.path = c:$$QT_PLUGINS_BASE_DIR/graphicssystems
-- 
cgit v0.12


From 1558dcdc98f21c3bcf9e394dec98e13ae8665401 Mon Sep 17 00:00:00 2001
From: Thomas Zander <t.zander@nokia.com>
Date: Mon, 26 Apr 2010 15:17:45 +0200
Subject: Fix typo

Reviewed-by: TrustMe
---
 bin/createpackage.pl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bin/createpackage.pl b/bin/createpackage.pl
index 23fe26d..e844767 100755
--- a/bin/createpackage.pl
+++ b/bin/createpackage.pl
@@ -68,7 +68,7 @@ Convenience script for creating signed packages you can install on your phone.
 
 Usage: createpackage.pl [options] templatepkg [target]-[platform] [certificate key [passphrase]]
 
-Where supported optiobns are as follows:
+Where supported options are as follows:
      [-i|install]            = Install the package right away using PC suite
      [-p|preprocess]         = Only preprocess the template .pkg file.
      [-c|certfile=<file>]    = The file containing certificate information for signing.
-- 
cgit v0.12


From 9b3dceaac61a48a4524e586705c50637f62993d2 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Tue, 20 Apr 2010 17:01:42 +0200
Subject: save a QFile::encodeName()

Reviewed-by: joao
---
 src/corelib/io/qfsfileengine_unix.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 1415e44..5762d94 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -122,7 +122,7 @@ void QFSFileEnginePrivate::setSymbianError(int symbianError, QFile::FileError de
 
     Returns the stdlib open string corresponding to a QIODevice::OpenMode.
 */
-static inline QByteArray openModeToFopenMode(QIODevice::OpenMode flags, const QString &fileName)
+static inline QByteArray openModeToFopenMode(QIODevice::OpenMode flags, const QByteArray &fileName)
 {
     QByteArray mode;
     if ((flags & QIODevice::ReadOnly) && !(flags & QIODevice::Truncate)) {
@@ -130,7 +130,7 @@ static inline QByteArray openModeToFopenMode(QIODevice::OpenMode flags, const QS
         if (flags & QIODevice::WriteOnly) {
             QT_STATBUF statBuf;
             if (!fileName.isEmpty()
-                && QT_STAT(QFile::encodeName(fileName), &statBuf) == 0
+                && QT_STAT(fileName, &statBuf) == 0
                 && (statBuf.st_mode & S_IFMT) == S_IFREG) {
                 mode += '+';
             } else {
@@ -254,7 +254,7 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
 
         fh = 0;
     } else {
-        QByteArray fopenMode = openModeToFopenMode(openMode, filePath);
+        QByteArray fopenMode = openModeToFopenMode(openMode, nativeFilePath.constData());
 
         // Try to open the file in buffered mode.
         do {
-- 
cgit v0.12


From 22c57db236d7cd72ea6c06dfd22c174d81cd8504 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Wed, 21 Apr 2010 13:05:37 +0200
Subject: add translator comment

---
 src/gui/kernel/qkeysequence.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index 9efcc4e..931bc33 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -390,6 +390,9 @@ static const struct {
     int key;
     const char* name;
 } keyname[] = {
+    //: This and all following "incomprehensible" strings in QShortcut context
+    //: are key names. Please use the localized names appearing on actual
+    //: keyboards or whatever is commonly used.
     { Qt::Key_Space,        QT_TRANSLATE_NOOP("QShortcut", "Space") },
     { Qt::Key_Escape,       QT_TRANSLATE_NOOP("QShortcut", "Esc") },
     { Qt::Key_Tab,          QT_TRANSLATE_NOOP("QShortcut", "Tab") },
-- 
cgit v0.12


From 9b7c1eb6fbfab71cfd3ebe8cb5ded98141ae2304 Mon Sep 17 00:00:00 2001
From: Iain <qt-info@nokia.com>
Date: Mon, 26 Apr 2010 21:12:41 +0200
Subject: DEF file updates for BWINS and EABI for Symbian

Reviewed-by: TrustMe
---
 src/s60installs/bwins/QtCoreu.def        |  1 +
 src/s60installs/bwins/QtDeclarativeu.def | 82 +++++++++++++++++++++++---------
 src/s60installs/bwins/QtGuiu.def         | 13 +++--
 src/s60installs/bwins/QtNetworku.def     |  3 +-
 src/s60installs/bwins/QtOpenVGu.def      |  4 ++
 src/s60installs/eabi/QtCoreu.def         |  4 +-
 src/s60installs/eabi/QtDeclarativeu.def  | 58 ++++++++++++----------
 src/s60installs/eabi/QtGuiu.def          |  4 ++
 src/s60installs/eabi/QtNetworku.def      |  2 +-
 src/s60installs/eabi/QtOpenVGu.def       |  2 +
 10 files changed, 119 insertions(+), 54 deletions(-)

diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index 8b2d7e8..d0a446b 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -4462,4 +4462,5 @@ EXPORTS
 	?parentChanged@QDeclarativeData@@2P6AXPAV1@PAVQObject@@1@ZA @ 4461 NONAME ABSENT ; void (*QDeclarativeData::parentChanged)(class QDeclarativeData *, class QObject *, class QObject *)
 	?parentChanged@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@1@ZA @ 4462 NONAME ; void (*QAbstractDeclarativeData::parentChanged)(class QAbstractDeclarativeData *, class QObject *, class QObject *)
 	?destroyed@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4463 NONAME ; void (*QAbstractDeclarativeData::destroyed)(class QAbstractDeclarativeData *, class QObject *)
+	?selectThread@QEventDispatcherSymbian@@AAEAAVQSelectThread@@XZ @ 4464 NONAME ; class QSelectThread & QEventDispatcherSymbian::selectThread(void)
 
diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def
index 35cb06d..ec25b5c 100644
--- a/src/s60installs/bwins/QtDeclarativeu.def
+++ b/src/s60installs/bwins/QtDeclarativeu.def
@@ -107,7 +107,7 @@ EXPORTS
 	??0QDeclarativeImage@@IAE@AAVQDeclarativeImagePrivate@@PAVQDeclarativeItem@@@Z @ 106 NONAME ; QDeclarativeImage::QDeclarativeImage(class QDeclarativeImagePrivate &, class QDeclarativeItem *)
 	??0QDeclarativeImage@@QAE@PAVQDeclarativeItem@@@Z @ 107 NONAME ; QDeclarativeImage::QDeclarativeImage(class QDeclarativeItem *)
 	??0QDeclarativeImageBase@@IAE@AAVQDeclarativeImageBasePrivate@@PAVQDeclarativeItem@@@Z @ 108 NONAME ; QDeclarativeImageBase::QDeclarativeImageBase(class QDeclarativeImageBasePrivate &, class QDeclarativeItem *)
-	??0QDeclarativeInfo@@QAE@PBVQObject@@@Z @ 109 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QObject const *)
+	??0QDeclarativeInfo@@QAE@PBVQObject@@@Z @ 109 NONAME ABSENT ; QDeclarativeInfo::QDeclarativeInfo(class QObject const *)
 	??0QDeclarativeInstruction@@QAE@XZ @ 110 NONAME ; QDeclarativeInstruction::QDeclarativeInstruction(void)
 	??0QDeclarativeItem@@IAE@AAVQDeclarativeItemPrivate@@PAV0@@Z @ 111 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItemPrivate &, class QDeclarativeItem *)
 	??0QDeclarativeItem@@QAE@PAV0@@Z @ 112 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItem *)
@@ -400,7 +400,7 @@ EXPORTS
 	??8QDeclarativeProperty@@QBE_NABV0@@Z @ 399 NONAME ; bool QDeclarativeProperty::operator==(class QDeclarativeProperty const &) const
 	??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@ABVQByteArray@@@Z @ 400 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](class QByteArray const &)
 	??AQDeclarativePropertyMap@@QAEAAVQVariant@@ABVQString@@@Z @ 401 NONAME ; class QVariant & QDeclarativePropertyMap::operator[](class QString const &)
-	??AQDeclarativePropertyMap@@QBE?BVQVariant@@ABVQString@@@Z @ 402 NONAME ; class QVariant const QDeclarativePropertyMap::operator[](class QString const &) const
+	??AQDeclarativePropertyMap@@QBE?BVQVariant@@ABVQString@@@Z @ 402 NONAME ABSENT ; class QVariant const QDeclarativePropertyMap::operator[](class QString const &) const
 	??AQDeclarativeValueTypeFactory@@QBEPAVQDeclarativeValueType@@H@Z @ 403 NONAME ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::operator[](int) const
 	??_EQDeclarativeAction@@QAE@I@Z @ 404 NONAME ; QDeclarativeAction::~QDeclarativeAction(unsigned int)
 	??_EQDeclarativeAnchorChanges@@UAE@I@Z @ 405 NONAME ; QDeclarativeAnchorChanges::~QDeclarativeAnchorChanges(unsigned int)
@@ -516,7 +516,7 @@ EXPORTS
 	??_EQPacket@@UAE@I@Z @ 515 NONAME ; QPacket::~QPacket(unsigned int)
 	??_EQPacketAutoSend@@UAE@I@Z @ 516 NONAME ; QPacketAutoSend::~QPacketAutoSend(unsigned int)
 	??_EQPacketProtocol@@UAE@I@Z @ 517 NONAME ; QPacketProtocol::~QPacketProtocol(unsigned int)
-	?__q_notify@QDeclarativeExpression@@AAEXXZ @ 518 NONAME ; void QDeclarativeExpression::__q_notify(void)
+	?__q_notify@QDeclarativeExpression@@AAEXXZ @ 518 NONAME ABSENT ; void QDeclarativeExpression::__q_notify(void)
 	?_q_createdPackage@QDeclarativeVisualDataModel@@AAEXHPAVQDeclarativePackage@@@Z @ 519 NONAME ; void QDeclarativeVisualDataModel::_q_createdPackage(int, class QDeclarativePackage *)
 	?_q_dataChanged@QDeclarativeVisualDataModel@@AAEXABVQModelIndex@@0@Z @ 520 NONAME ; void QDeclarativeVisualDataModel::_q_dataChanged(class QModelIndex const &, class QModelIndex const &)
 	?_q_destroyingPackage@QDeclarativeVisualDataModel@@AAEXPAVQDeclarativePackage@@@Z @ 521 NONAME ; void QDeclarativeVisualDataModel::_q_destroyingPackage(class QDeclarativePackage *)
@@ -650,7 +650,7 @@ EXPORTS
 	?buildPropertyInNamespace@QDeclarativeCompiler@@AAE_NPAUImportedNamespace@QDeclarativeEnginePrivate@@PAVProperty@QDeclarativeParser@@PAVObject@5@ABUBindingContext@1@@Z @ 649 NONAME ; bool QDeclarativeCompiler::buildPropertyInNamespace(struct QDeclarativeEnginePrivate::ImportedNamespace *, class QDeclarativeParser::Property *, class QDeclarativeParser::Object *, struct QDeclarativeCompiler::BindingContext const &)
 	?buildPropertyLiteralAssignment@QDeclarativeCompiler@@AAE_NPAVProperty@QDeclarativeParser@@PAVObject@3@PAVValue@3@ABUBindingContext@1@@Z @ 650 NONAME ; bool QDeclarativeCompiler::buildPropertyLiteralAssignment(class QDeclarativeParser::Property *, class QDeclarativeParser::Object *, class QDeclarativeParser::Value *, struct QDeclarativeCompiler::BindingContext const &)
 	?buildPropertyObjectAssignment@QDeclarativeCompiler@@AAE_NPAVProperty@QDeclarativeParser@@PAVObject@3@PAVValue@3@ABUBindingContext@1@@Z @ 651 NONAME ; bool QDeclarativeCompiler::buildPropertyObjectAssignment(class QDeclarativeParser::Property *, class QDeclarativeParser::Object *, class QDeclarativeParser::Value *, struct QDeclarativeCompiler::BindingContext const &)
-	?buildScript@QDeclarativeCompiler@@AAE_NPAVObject@QDeclarativeParser@@0@Z @ 652 NONAME ; bool QDeclarativeCompiler::buildScript(class QDeclarativeParser::Object *, class QDeclarativeParser::Object *)
+	?buildScript@QDeclarativeCompiler@@AAE_NPAVObject@QDeclarativeParser@@0@Z @ 652 NONAME ABSENT ; bool QDeclarativeCompiler::buildScript(class QDeclarativeParser::Object *, class QDeclarativeParser::Object *)
 	?buildScriptStringProperty@QDeclarativeCompiler@@AAE_NPAVProperty@QDeclarativeParser@@PAVObject@3@ABUBindingContext@1@@Z @ 653 NONAME ; bool QDeclarativeCompiler::buildScriptStringProperty(class QDeclarativeParser::Property *, class QDeclarativeParser::Object *, struct QDeclarativeCompiler::BindingContext const &)
 	?buildSignal@QDeclarativeCompiler@@AAE_NPAVProperty@QDeclarativeParser@@PAVObject@3@ABUBindingContext@1@@Z @ 654 NONAME ; bool QDeclarativeCompiler::buildSignal(class QDeclarativeParser::Property *, class QDeclarativeParser::Object *, struct QDeclarativeCompiler::BindingContext const &)
 	?buildSubObject@QDeclarativeCompiler@@AAE_NPAVObject@QDeclarativeParser@@ABUBindingContext@1@@Z @ 655 NONAME ; bool QDeclarativeCompiler::buildSubObject(class QDeclarativeParser::Object *, struct QDeclarativeCompiler::BindingContext const &)
@@ -663,7 +663,7 @@ EXPORTS
 	?canAppend@QDeclarativeListReference@@QBE_NXZ @ 662 NONAME ; bool QDeclarativeListReference::canAppend(void) const
 	?canAt@QDeclarativeListReference@@QBE_NXZ @ 663 NONAME ; bool QDeclarativeListReference::canAt(void) const
 	?canClear@QDeclarativeListReference@@QBE_NXZ @ 664 NONAME ; bool QDeclarativeListReference::canClear(void) const
-	?canCoerce@QDeclarativeCompiler@@AAE_NHH@Z @ 665 NONAME ; bool QDeclarativeCompiler::canCoerce(int, int)
+	?canCoerce@QDeclarativeCompiler@@AAE_NHH@Z @ 665 NONAME ABSENT ; bool QDeclarativeCompiler::canCoerce(int, int)
 	?canCoerce@QDeclarativeCompiler@@AAE_NHPAVObject@QDeclarativeParser@@@Z @ 666 NONAME ; bool QDeclarativeCompiler::canCoerce(int, class QDeclarativeParser::Object *)
 	?canCount@QDeclarativeListReference@@QBE_NXZ @ 667 NONAME ; bool QDeclarativeListReference::canCount(void) const
 	?cancel@QDeclarativePixmapCache@@SAXABVQUrl@@PAVQObject@@@Z @ 668 NONAME ; void QDeclarativePixmapCache::cancel(class QUrl const &, class QObject *)
@@ -825,7 +825,7 @@ EXPORTS
 	?create@QDeclarativeComponent@@UAEPAVQObject@@PAVQDeclarativeContext@@@Z @ 824 NONAME ; class QObject * QDeclarativeComponent::create(class QDeclarativeContext *)
 	?create@QDeclarativeType@@QBEPAVQObject@@XZ @ 825 NONAME ; class QObject * QDeclarativeType::create(void) const
 	?createCursor@QDeclarativeTextInput@@AAEXXZ @ 826 NONAME ; void QDeclarativeTextInput::createCursor(void)
-	?createObject@QDeclarativeComponent@@QAE?AVQScriptValue@@XZ @ 827 NONAME ; class QScriptValue QDeclarativeComponent::createObject(void)
+	?createObject@QDeclarativeComponent@@QAE?AVQScriptValue@@XZ @ 827 NONAME ABSENT ; class QScriptValue QDeclarativeComponent::createObject(void)
 	?createPlugin@QDeclarativeWebPage@@MAEPAVQObject@@ABVQString@@ABVQUrl@@ABVQStringList@@2@Z @ 828 NONAME ABSENT ; class QObject * QDeclarativeWebPage::createPlugin(class QString const &, class QUrl const &, class QStringList const &, class QStringList const &)
 	?createPointCache@QDeclarativePath@@ABEXXZ @ 829 NONAME ; void QDeclarativePath::createPointCache(void) const
 	?createProperty@QDeclarativeOpenMetaObject@@MAEHPBD0@Z @ 830 NONAME ; int QDeclarativeOpenMetaObject::createProperty(char const *, char const *)
@@ -1099,9 +1099,9 @@ EXPORTS
 	?eventFilter@QDeclarativeGraphicsObjectContainer@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 1098 NONAME ABSENT ; bool QDeclarativeGraphicsObjectContainer::eventFilter(class QObject *, class QEvent *)
 	?eventFilter@QDeclarativeLoader@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 1099 NONAME ; bool QDeclarativeLoader::eventFilter(class QObject *, class QEvent *)
 	?eventFilter@QDeclarativeSystemPalette@@EAE_NPAVQObject@@PAVQEvent@@@Z @ 1100 NONAME ; bool QDeclarativeSystemPalette::eventFilter(class QObject *, class QEvent *)
-	?execute@QDeclarativeAnchorChanges@@UAEXXZ @ 1101 NONAME ; void QDeclarativeAnchorChanges::execute(void)
-	?execute@QDeclarativeParentChange@@UAEXXZ @ 1102 NONAME ; void QDeclarativeParentChange::execute(void)
-	?execute@QDeclarativeStateChangeScript@@UAEXXZ @ 1103 NONAME ; void QDeclarativeStateChangeScript::execute(void)
+	?execute@QDeclarativeAnchorChanges@@UAEXXZ @ 1101 NONAME ABSENT ; void QDeclarativeAnchorChanges::execute(void)
+	?execute@QDeclarativeParentChange@@UAEXXZ @ 1102 NONAME ABSENT ; void QDeclarativeParentChange::execute(void)
+	?execute@QDeclarativeStateChangeScript@@UAEXXZ @ 1103 NONAME ABSENT ; void QDeclarativeStateChangeScript::execute(void)
 	?exited@QDeclarativeMouseArea@@IAEXXZ @ 1104 NONAME ; void QDeclarativeMouseArea::exited(void)
 	?expandToWebPage@QDeclarativeWebView@@AAEXXZ @ 1105 NONAME ABSENT ; void QDeclarativeWebView::expandToWebPage(void)
 	?expression@QDeclarativeDebugExpressionQuery@@QBE?AVQString@@XZ @ 1106 NONAME ; class QString QDeclarativeDebugExpressionQuery::expression(void) const
@@ -1781,7 +1781,7 @@ EXPORTS
 	?newWindowParent@QDeclarativeWebView@@QBEPAVQDeclarativeItem@@XZ @ 1780 NONAME ABSENT ; class QDeclarativeItem * QDeclarativeWebView::newWindowParent(void) const
 	?newWindowParentChanged@QDeclarativeWebView@@IAEXXZ @ 1781 NONAME ABSENT ; void QDeclarativeWebView::newWindowParentChanged(void)
 	?noteContentsSizeChanged@QDeclarativeWebView@@AAEXABVQSize@@@Z @ 1782 NONAME ABSENT ; void QDeclarativeWebView::noteContentsSizeChanged(class QSize const &)
-	?notifyOnServerStart@QDeclarativeDebugService@@SAXPAVQObject@@PBD@Z @ 1783 NONAME ; void QDeclarativeDebugService::notifyOnServerStart(class QObject *, char const *)
+	?notifyOnServerStart@QDeclarativeDebugService@@SAXPAVQObject@@PBD@Z @ 1783 NONAME ABSENT ; void QDeclarativeDebugService::notifyOnServerStart(class QObject *, char const *)
 	?notifyOnValueChanged@QDeclarativeExpression@@QBE_NXZ @ 1784 NONAME ; bool QDeclarativeExpression::notifyOnValueChanged(void) const
 	?notifySignal@QMetaPropertyBuilder@@QBE?AVQMetaMethodBuilder@@XZ @ 1785 NONAME ; class QMetaMethodBuilder QMetaPropertyBuilder::notifySignal(void) const
 	?number@QDeclarativeNumberFormatter@@QBEMXZ @ 1786 NONAME ABSENT ; float QDeclarativeNumberFormatter::number(void) const
@@ -2223,8 +2223,8 @@ EXPORTS
 	?restoreEntryValues@QDeclarativePropertyChanges@@QBE_NXZ @ 2222 NONAME ; bool QDeclarativePropertyChanges::restoreEntryValues(void) const
 	?result@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 2223 NONAME ; class QVariant QDeclarativeDebugExpressionQuery::result(void) const
 	?returnType@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 2224 NONAME ; class QByteArray QMetaMethodBuilder::returnType(void) const
-	?reverse@QDeclarativeAnchorChanges@@UAEXXZ @ 2225 NONAME ; void QDeclarativeAnchorChanges::reverse(void)
-	?reverse@QDeclarativeParentChange@@UAEXXZ @ 2226 NONAME ; void QDeclarativeParentChange::reverse(void)
+	?reverse@QDeclarativeAnchorChanges@@UAEXXZ @ 2225 NONAME ABSENT ; void QDeclarativeAnchorChanges::reverse(void)
+	?reverse@QDeclarativeParentChange@@UAEXXZ @ 2226 NONAME ABSENT ; void QDeclarativeParentChange::reverse(void)
 	?reversible@QDeclarativeTransition@@QBE_NXZ @ 2227 NONAME ; bool QDeclarativeTransition::reversible(void) const
 	?reversingMode@QDeclarativeEaseFollow@@QBE?AW4ReversingMode@1@XZ @ 2228 NONAME ABSENT ; enum QDeclarativeEaseFollow::ReversingMode QDeclarativeEaseFollow::reversingMode(void) const
 	?reversingModeChanged@QDeclarativeEaseFollow@@IAEXXZ @ 2229 NONAME ABSENT ; void QDeclarativeEaseFollow::reversingModeChanged(void)
@@ -2243,7 +2243,7 @@ EXPORTS
 	?rootContext@QDeclarativeDebugRootContextQuery@@QBE?AVQDeclarativeDebugContextReference@@XZ @ 2242 NONAME ; class QDeclarativeDebugContextReference QDeclarativeDebugRootContextQuery::rootContext(void) const
 	?rootContext@QDeclarativeEngine@@QAEPAVQDeclarativeContext@@XZ @ 2243 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void)
 	?rootContext@QDeclarativeView@@QAEPAVQDeclarativeContext@@XZ @ 2244 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void)
-	?rootIndex@QDeclarativeVisualDataModel@@QBE?AVQModelIndex@@XZ @ 2245 NONAME ; class QModelIndex QDeclarativeVisualDataModel::rootIndex(void) const
+	?rootIndex@QDeclarativeVisualDataModel@@QBE?AVQModelIndex@@XZ @ 2245 NONAME ABSENT ; class QModelIndex QDeclarativeVisualDataModel::rootIndex(void) const
 	?rootIndexChanged@QDeclarativeVisualDataModel@@IAEXXZ @ 2246 NONAME ; void QDeclarativeVisualDataModel::rootIndexChanged(void)
 	?rootObject@QDeclarativeDomDocument@@QBE?AVQDeclarativeDomObject@@XZ @ 2247 NONAME ; class QDeclarativeDomObject QDeclarativeDomDocument::rootObject(void) const
 	?rootObject@QDeclarativeView@@QBEPAVQGraphicsObject@@XZ @ 2248 NONAME ; class QGraphicsObject * QDeclarativeView::rootObject(void) const
@@ -2553,7 +2553,7 @@ EXPORTS
 	?setRight@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 2552 NONAME ABSENT ; void QDeclarativeAnchors::setRight(class QDeclarativeAnchorLine const &)
 	?setRight@QDeclarativeScaleGrid@@QAEXH@Z @ 2553 NONAME ; void QDeclarativeScaleGrid::setRight(int)
 	?setRightMargin@QDeclarativeAnchors@@QAEXM@Z @ 2554 NONAME ; void QDeclarativeAnchors::setRightMargin(float)
-	?setRootIndex@QDeclarativeVisualDataModel@@QAEXABVQModelIndex@@@Z @ 2555 NONAME ; void QDeclarativeVisualDataModel::setRootIndex(class QModelIndex const &)
+	?setRootIndex@QDeclarativeVisualDataModel@@QAEXABVQModelIndex@@@Z @ 2555 NONAME ABSENT ; void QDeclarativeVisualDataModel::setRootIndex(class QModelIndex const &)
 	?setRootObject@QDeclarativeView@@MAEXPAVQObject@@@Z @ 2556 NONAME ; void QDeclarativeView::setRootObject(class QObject *)
 	?setRotation@QDeclarativeParentChange@@QAEXM@Z @ 2557 NONAME ; void QDeclarativeParentChange::setRotation(float)
 	?setRows@QDeclarativeGrid@@QAEXH@Z @ 2558 NONAME ; void QDeclarativeGrid::setRows(int)
@@ -2653,8 +2653,8 @@ EXPORTS
 	?setWidth@QDeclarativeItem@@QAEXM@Z @ 2652 NONAME ; void QDeclarativeItem::setWidth(float)
 	?setWidth@QDeclarativeParentChange@@QAEXM@Z @ 2653 NONAME ; void QDeclarativeParentChange::setWidth(float)
 	?setWidth@QDeclarativePen@@QAEXH@Z @ 2654 NONAME ; void QDeclarativePen::setWidth(int)
-	?setWrap@QDeclarativeText@@QAEX_N@Z @ 2655 NONAME ; void QDeclarativeText::setWrap(bool)
-	?setWrap@QDeclarativeTextEdit@@QAEX_N@Z @ 2656 NONAME ; void QDeclarativeTextEdit::setWrap(bool)
+	?setWrap@QDeclarativeText@@QAEX_N@Z @ 2655 NONAME ABSENT ; void QDeclarativeText::setWrap(bool)
+	?setWrap@QDeclarativeTextEdit@@QAEX_N@Z @ 2656 NONAME ABSENT ; void QDeclarativeTextEdit::setWrap(bool)
 	?setWrapEnabled@QDeclarativeGridView@@QAEX_N@Z @ 2657 NONAME ; void QDeclarativeGridView::setWrapEnabled(bool)
 	?setWrapEnabled@QDeclarativeListView@@QAEX_N@Z @ 2658 NONAME ; void QDeclarativeListView::setWrapEnabled(bool)
 	?setWritable@QMetaPropertyBuilder@@QAEX_N@Z @ 2659 NONAME ; void QMetaPropertyBuilder::setWritable(bool)
@@ -2681,7 +2681,7 @@ EXPORTS
 	?signature@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 2680 NONAME ; class QByteArray QMetaMethodBuilder::signature(void) const
 	?size@QDeclarativePropertyMap@@QBEHXZ @ 2681 NONAME ; int QDeclarativePropertyMap::size(void) const
 	?sizeChange@QDeclarativeGridView@@AAEXXZ @ 2682 NONAME ABSENT ; void QDeclarativeGridView::sizeChange(void)
-	?sizeChanged@QDeclarativeView@@AAEXXZ @ 2683 NONAME ; void QDeclarativeView::sizeChanged(void)
+	?sizeChanged@QDeclarativeView@@AAEXXZ @ 2683 NONAME ABSENT ; void QDeclarativeView::sizeChanged(void)
 	?sizeFFromString@QDeclarativeStringConverters@@YA?AVQSizeF@@ABVQString@@PA_N@Z @ 2684 NONAME ; class QSizeF QDeclarativeStringConverters::sizeFFromString(class QString const &, bool *)
 	?sizeHint@QDeclarativeView@@UBE?AVQSize@@XZ @ 2685 NONAME ; class QSize QDeclarativeView::sizeHint(void) const
 	?smooth@QDeclarativeItem@@QBE_NXZ @ 2686 NONAME ; bool QDeclarativeItem::smooth(void) const
@@ -3235,7 +3235,7 @@ EXPORTS
 	?url@QDeclarativePixmapReply@@QBEABVQUrl@@XZ @ 3234 NONAME ; class QUrl const & QDeclarativePixmapReply::url(void) const
 	?url@QDeclarativeWebView@@QBE?AVQUrl@@XZ @ 3235 NONAME ABSENT ; class QUrl QDeclarativeWebView::url(void) const
 	?urlChanged@QDeclarativeWebView@@IAEXXZ @ 3236 NONAME ABSENT ; void QDeclarativeWebView::urlChanged(void)
-	?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4UsedAnchor@QDeclarativeAnchors@@@@XZ @ 3237 NONAME ; class QFlags<enum QDeclarativeAnchors::UsedAnchor> QDeclarativeAnchors::usedAnchors(void) const
+	?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4UsedAnchor@QDeclarativeAnchors@@@@XZ @ 3237 NONAME ABSENT ; class QFlags<enum QDeclarativeAnchors::UsedAnchor> QDeclarativeAnchors::usedAnchors(void) const
 	?vAlign@QDeclarativeText@@QBE?AW4VAlignment@1@XZ @ 3238 NONAME ; enum QDeclarativeText::VAlignment QDeclarativeText::vAlign(void) const
 	?vAlign@QDeclarativeTextEdit@@QBE?AW4VAlignment@1@XZ @ 3239 NONAME ; enum QDeclarativeTextEdit::VAlignment QDeclarativeTextEdit::vAlign(void) const
 	?vHeight@QDeclarativeFlickable@@IBEMXZ @ 3240 NONAME ; float QDeclarativeFlickable::vHeight(void) const
@@ -3245,7 +3245,7 @@ EXPORTS
 	?value@QDeclarativeBind@@QBE?AVQVariant@@XZ @ 3244 NONAME ; class QVariant QDeclarativeBind::value(void) const
 	?value@QDeclarativeDebugPropertyReference@@QBE?AVQVariant@@XZ @ 3245 NONAME ; class QVariant QDeclarativeDebugPropertyReference::value(void) const
 	?value@QDeclarativeDomProperty@@QBE?AVQDeclarativeDomValue@@XZ @ 3246 NONAME ; class QDeclarativeDomValue QDeclarativeDomProperty::value(void) const
-	?value@QDeclarativeExpression@@QAE?AVQVariant@@PA_N@Z @ 3247 NONAME ; class QVariant QDeclarativeExpression::value(bool *)
+	?value@QDeclarativeExpression@@QAE?AVQVariant@@PA_N@Z @ 3247 NONAME ABSENT ; class QVariant QDeclarativeExpression::value(bool *)
 	?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 3248 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(class QByteArray const &) const
 	?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@H@Z @ 3249 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(int) const
 	?value@QDeclarativePathAttribute@@QBEMXZ @ 3250 NONAME ; float QDeclarativePathAttribute::value(void) const
@@ -3291,7 +3291,7 @@ EXPORTS
 	?viewportMoved@QDeclarativeGridView@@MAEXXZ @ 3290 NONAME ; void QDeclarativeGridView::viewportMoved(void)
 	?viewportMoved@QDeclarativeListView@@MAEXXZ @ 3291 NONAME ; void QDeclarativeListView::viewportMoved(void)
 	?visibleArea@QDeclarativeFlickable@@IAEPAVQDeclarativeFlickableVisibleArea@@XZ @ 3292 NONAME ; class QDeclarativeFlickableVisibleArea * QDeclarativeFlickable::visibleArea(void)
-	?waitForClients@QDeclarativeDebugService@@SAXXZ @ 3293 NONAME ; void QDeclarativeDebugService::waitForClients(void)
+	?waitForClients@QDeclarativeDebugService@@SAXXZ @ 3293 NONAME ABSENT ; void QDeclarativeDebugService::waitForClients(void)
 	?wantsFocus@QDeclarativeItem@@QBE_NXZ @ 3294 NONAME ; bool QDeclarativeItem::wantsFocus(void) const
 	?wantsFocusChanged@QDeclarativeItem@@IAEXXZ @ 3295 NONAME ABSENT ; void QDeclarativeItem::wantsFocusChanged(void)
 	?wheelEvent@QDeclarativeFlickable@@MAEXPAVQGraphicsSceneWheelEvent@@@Z @ 3296 NONAME ; void QDeclarativeFlickable::wheelEvent(class QGraphicsSceneWheelEvent *)
@@ -3307,8 +3307,8 @@ EXPORTS
 	?window@QDeclarativeSystemPalette@@QBE?AVQColor@@XZ @ 3306 NONAME ; class QColor QDeclarativeSystemPalette::window(void) const
 	?windowObjectCleared@QDeclarativeWebView@@AAEXXZ @ 3307 NONAME ABSENT ; void QDeclarativeWebView::windowObjectCleared(void)
 	?windowText@QDeclarativeSystemPalette@@QBE?AVQColor@@XZ @ 3308 NONAME ; class QColor QDeclarativeSystemPalette::windowText(void) const
-	?wrap@QDeclarativeText@@QBE_NXZ @ 3309 NONAME ; bool QDeclarativeText::wrap(void) const
-	?wrap@QDeclarativeTextEdit@@QBE_NXZ @ 3310 NONAME ; bool QDeclarativeTextEdit::wrap(void) const
+	?wrap@QDeclarativeText@@QBE_NXZ @ 3309 NONAME ABSENT ; bool QDeclarativeText::wrap(void) const
+	?wrap@QDeclarativeTextEdit@@QBE_NXZ @ 3310 NONAME ABSENT ; bool QDeclarativeTextEdit::wrap(void) const
 	?wrapChanged@QDeclarativeText@@IAEX_N@Z @ 3311 NONAME ABSENT ; void QDeclarativeText::wrapChanged(bool)
 	?wrapChanged@QDeclarativeTextEdit@@IAEX_N@Z @ 3312 NONAME ABSENT ; void QDeclarativeTextEdit::wrapChanged(bool)
 	?write@QDeclarativeBehavior@@UAEXABVQVariant@@@Z @ 3313 NONAME ; void QDeclarativeBehavior::write(class QVariant const &)
@@ -3917,4 +3917,42 @@ EXPORTS
 	?setFill@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 3916 NONAME ; void QDeclarativeAnchors::setFill(class QGraphicsObject *)
 	?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 3917 NONAME ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *, int)
 	?setCenterIn@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 3918 NONAME ; void QDeclarativeAnchors::setCenterIn(class QGraphicsObject *)
+	?execute@QDeclarativeParentChange@@UAEXW4Reason@QDeclarativeActionEvent@@@Z @ 3919 NONAME ; void QDeclarativeParentChange::execute(enum QDeclarativeActionEvent::Reason)
+	?resetSourceComponent@QDeclarativeLoader@@QAEXXZ @ 3920 NONAME ; void QDeclarativeLoader::resetSourceComponent(void)
+	?rootIndex@QDeclarativeVisualDataModel@@QBE?AVQVariant@@XZ @ 3921 NONAME ; class QVariant QDeclarativeVisualDataModel::rootIndex(void) const
+	?createObject@QDeclarativeComponent@@IAE?AVQScriptValue@@XZ @ 3922 NONAME ; class QScriptValue QDeclarativeComponent::createObject(void)
+	?execute@QDeclarativeStateChangeScript@@UAEXW4Reason@QDeclarativeActionEvent@@@Z @ 3923 NONAME ; void QDeclarativeStateChangeScript::execute(enum QDeclarativeActionEvent::Reason)
+	?active@QDeclarativeDrag@@QBE_NXZ @ 3924 NONAME ; bool QDeclarativeDrag::active(void) const
+	?retransformBack@QDeclarativeFlipable@@AAEXXZ @ 3925 NONAME ; void QDeclarativeFlipable::retransformBack(void)
+	?noCreationReason@QDeclarativeType@@QBE?AVQString@@XZ @ 3926 NONAME ; class QString QDeclarativeType::noCreationReason(void) const
+	?forceFocus@QDeclarativeItem@@QAEXXZ @ 3927 NONAME ; void QDeclarativeItem::forceFocus(void)
+	?evaluate@QDeclarativeExpression@@QAE?AVQVariant@@PA_N@Z @ 3928 NONAME ; class QVariant QDeclarativeExpression::evaluate(bool *)
+	??AQDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 3929 NONAME ; class QVariant QDeclarativePropertyMap::operator[](class QString const &) const
+	?mousePositionChanged@QDeclarativeMouseArea@@IAEXPAVQDeclarativeMouseEvent@@@Z @ 3930 NONAME ; void QDeclarativeMouseArea::mousePositionChanged(class QDeclarativeMouseEvent *)
+	?reverse@QDeclarativeParentChange@@UAEXW4Reason@QDeclarativeActionEvent@@@Z @ 3931 NONAME ; void QDeclarativeParentChange::reverse(enum QDeclarativeActionEvent::Reason)
+	?boundsBehaviorChanged@QDeclarativeFlickable@@IAEXXZ @ 3932 NONAME ; void QDeclarativeFlickable::boundsBehaviorChanged(void)
+	??6QDeclarativeInfo@@QAEAAV0@ABVQUrl@@@Z @ 3933 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QUrl const &)
+	?hasDebuggingClient@QDeclarativeDebugService@@SA_NXZ @ 3934 NONAME ; bool QDeclarativeDebugService::hasDebuggingClient(void)
+	?animStopped@QDeclarativeGridView@@AAEXXZ @ 3935 NONAME ; void QDeclarativeGridView::animStopped(void)
+	?modelIndex@QDeclarativeVisualDataModel@@QBE?AVQVariant@@H@Z @ 3936 NONAME ; class QVariant QDeclarativeVisualDataModel::modelIndex(int) const
+	?transformChanged@QDeclarativeItemPrivate@@UAEXXZ @ 3937 NONAME ; void QDeclarativeItemPrivate::transformChanged(void)
+	?setRootIndex@QDeclarativeVisualDataModel@@QAEXABVQVariant@@@Z @ 3938 NONAME ; void QDeclarativeVisualDataModel::setRootIndex(class QVariant const &)
+	?boundsBehavior@QDeclarativeFlickable@@QBE?AW4BoundsBehavior@1@XZ @ 3939 NONAME ; enum QDeclarativeFlickable::BoundsBehavior QDeclarativeFlickable::boundsBehavior(void) const
+	?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABV?$QList@VQDeclarativeError@@@@@Z @ 3940 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QList<class QDeclarativeError> const &)
+	?setActive@QDeclarativeDrag@@QAEX_N@Z @ 3941 NONAME ; void QDeclarativeDrag::setActive(bool)
+	?setOutputWarningsToStandardError@QDeclarativeEngine@@QAEX_N@Z @ 3942 NONAME ; void QDeclarativeEngine::setOutputWarningsToStandardError(bool)
+	??0QDeclarativeInfo@@QAE@ABV0@@Z @ 3943 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfo const &)
+	?reverse@QDeclarativeAnchorChanges@@UAEXW4Reason@QDeclarativeActionEvent@@@Z @ 3944 NONAME ; void QDeclarativeAnchorChanges::reverse(enum QDeclarativeActionEvent::Reason)
+	?geometryChanged@QDeclarativeMouseArea@@MAEXABVQRectF@@0@Z @ 3945 NONAME ; void QDeclarativeMouseArea::geometryChanged(class QRectF const &, class QRectF const &)
+	?setBoundsBehavior@QDeclarativeFlickable@@QAEXW4BoundsBehavior@1@@Z @ 3946 NONAME ; void QDeclarativeFlickable::setBoundsBehavior(enum QDeclarativeFlickable::BoundsBehavior)
+	?outputWarningsToStandardError@QDeclarativeEngine@@QBE_NXZ @ 3947 NONAME ; bool QDeclarativeEngine::outputWarningsToStandardError(void) const
+	?execute@QDeclarativeAnchorChanges@@UAEXW4Reason@QDeclarativeActionEvent@@@Z @ 3948 NONAME ; void QDeclarativeAnchorChanges::execute(enum QDeclarativeActionEvent::Reason)
+	?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABVQDeclarativeError@@@Z @ 3949 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QDeclarativeError const &)
+	?error@QDeclarativeCustomParser@@IAEXABVQString@@@Z @ 3950 NONAME ; void QDeclarativeCustomParser::error(class QString const &)
+	?activeChanged@QDeclarativeDrag@@IAEXXZ @ 3951 NONAME ; void QDeclarativeDrag::activeChanged(void)
+	??0QDeclarativeInfo@@AAE@PAUQDeclarativeInfoPrivate@@@Z @ 3952 NONAME ; QDeclarativeInfo::QDeclarativeInfo(struct QDeclarativeInfoPrivate *)
+	?warnings@QDeclarativeEngine@@IAEXABV?$QList@VQDeclarativeError@@@@@Z @ 3953 NONAME ; void QDeclarativeEngine::warnings(class QList<class QDeclarativeError> const &)
+	?parentModelIndex@QDeclarativeVisualDataModel@@QBE?AVQVariant@@XZ @ 3954 NONAME ; class QVariant QDeclarativeVisualDataModel::parentModelIndex(void) const
+	?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4Anchor@QDeclarativeAnchors@@@@XZ @ 3955 NONAME ; class QFlags<enum QDeclarativeAnchors::Anchor> QDeclarativeAnchors::usedAnchors(void) const
+	?eventFilter@QDeclarativeView@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 3956 NONAME ; bool QDeclarativeView::eventFilter(class QObject *, class QEvent *)
 
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index b84585a..c3a3a08 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -12565,11 +12565,11 @@ EXPORTS
 	?setApi@QEglContext@@QAEXW4API@QEgl@@@Z @ 12564 NONAME ; void QEglContext::setApi(enum QEgl::API)
 	?makeCurrent@QEglContext@@QAE_NH@Z @ 12565 NONAME ; bool QEglContext::makeCurrent(int)
 	?createSurface@QEglContext@@QAEHPAVQPaintDevice@@PBVQEglProperties@@@Z @ 12566 NONAME ; int QEglContext::createSurface(class QPaintDevice *, class QEglProperties const *)
-	?dumpAllConfigs@QEglContext@@QAEXXZ @ 12567 NONAME ; void QEglContext::dumpAllConfigs(void)
+	?dumpAllConfigs@QEglContext@@QAEXXZ @ 12567 NONAME ABSENT ; void QEglContext::dumpAllConfigs(void)
 	?reduceConfiguration@QEglProperties@@QAE_NXZ @ 12568 NONAME ; bool QEglProperties::reduceConfiguration(void)
 	?removeValue@QEglProperties@@QAE_NH@Z @ 12569 NONAME ; bool QEglProperties::removeValue(int)
 	?toString@QEglProperties@@QBE?AVQString@@XZ @ 12570 NONAME ; class QString QEglProperties::toString(void) const
-	?dumpAllConfigs@QEglProperties@@SAXXZ @ 12571 NONAME ; void QEglProperties::dumpAllConfigs(void)
+	?dumpAllConfigs@QEglProperties@@SAXXZ @ 12571 NONAME ABSENT ; void QEglProperties::dumpAllConfigs(void)
 	?defaultDisplay@QEglContext@@SAHPAVQPaintDevice@@@Z @ 12572 NONAME ABSENT ; int QEglContext::defaultDisplay(class QPaintDevice *)
 	?configProperties@QEglContext@@QBE?AVQEglProperties@@H@Z @ 12573 NONAME ABSENT ; class QEglProperties QEglContext::configProperties(int) const
 	?properties@QEglProperties@@QBEPBHXZ @ 12574 NONAME ; int const * QEglProperties::properties(void) const
@@ -12597,10 +12597,10 @@ EXPORTS
 	?setConfig@QEglContext@@QAEXH@Z @ 12596 NONAME ; void QEglContext::setConfig(int)
 	?hasExtension@QEglContext@@SA_NPBD@Z @ 12597 NONAME ABSENT ; bool QEglContext::hasExtension(char const *)
 	?doneCurrent@QEglContext@@QAE_NXZ @ 12598 NONAME ; bool QEglContext::doneCurrent(void)
-	?display@QEglContext@@QBEHXZ @ 12599 NONAME ; int QEglContext::display(void) const
+	?display@QEglContext@@QBEHXZ @ 12599 NONAME ABSENT ; int QEglContext::display(void) const
 	?setPixelFormat@QEglProperties@@QAEXW4Format@QImage@@@Z @ 12600 NONAME ; void QEglProperties::setPixelFormat(enum QImage::Format)
 	?currentContext@QEglContext@@CAPAV1@W4API@QEgl@@@Z @ 12601 NONAME ; class QEglContext * QEglContext::currentContext(enum QEgl::API)
-	?errorString@QEglContext@@SA?AVQString@@H@Z @ 12602 NONAME ; class QString QEglContext::errorString(int)
+	?errorString@QEglContext@@SA?AVQString@@H@Z @ 12602 NONAME ABSENT ; class QString QEglContext::errorString(int)
 	?removeAllApplicationFonts@QFontDatabase@@SA_NXZ @ 12603 NONAME ; bool QFontDatabase::removeAllApplicationFonts()
 	??0FileInfo@QZipReader@@QAE@XZ @ 12604 NONAME ; QZipReader::FileInfo::FileInfo(void)
 	??0QAbstractScrollAreaPrivate@@QAE@XZ @ 12605 NONAME ; QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate(void)
@@ -12793,4 +12793,9 @@ EXPORTS
 	?setDeviceType@QEglProperties@@QAEXH@Z @ 12792 NONAME ; void QEglProperties::setDeviceType(int)
 	?glyphPadding@QTextureGlyphCache@@UBEHXZ @ 12793 NONAME ; int QTextureGlyphCache::glyphPadding(void) const
 	?createSurface@QEgl@@YAHPAVQPaintDevice@@HPBVQEglProperties@@@Z @ 12794 NONAME ; int QEgl::createSurface(class QPaintDevice *, int, class QEglProperties const *)
+	?setPartialUpdateSupport@QWindowSurface@@IAEX_N@Z @ 12795 NONAME ; void QWindowSurface::setPartialUpdateSupport(bool)
+	?transformChanged@QGraphicsItemPrivate@@UAEXXZ @ 12796 NONAME ; void QGraphicsItemPrivate::transformChanged(void)
+	?hasPartialUpdateSupport@QWindowSurface@@QBE_NXZ @ 12797 NONAME ; bool QWindowSurface::hasPartialUpdateSupport(void) const
+	?name@QIcon@@QBE?AVQString@@XZ @ 12798 NONAME ; class QString QIcon::name(void) const
+	?iconName@QIconEngineV2@@QAE?AVQString@@XZ @ 12799 NONAME ; class QString QIconEngineV2::iconName(void)
 
diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def
index b4db510..9391ad5 100644
--- a/src/s60installs/bwins/QtNetworku.def
+++ b/src/s60installs/bwins/QtNetworku.def
@@ -1137,9 +1137,10 @@ EXPORTS
 	?networkAccessibleChanged@QNetworkAccessManager@@IAEXW4NetworkAccessibility@1@@Z @ 1136 NONAME ; void QNetworkAccessManager::networkAccessibleChanged(enum QNetworkAccessManager::NetworkAccessibility)
 	?networkSessionConnected@QNetworkAccessManager@@IAEXXZ @ 1137 NONAME ; void QNetworkAccessManager::networkSessionConnected(void)
 	?pollEngines@QNetworkConfigurationManagerPrivate@@AAEXXZ @ 1138 NONAME ; void QNetworkConfigurationManagerPrivate::pollEngines(void)
-	?qt_qhostinfo_clear_cache@@YAXXZ @ 1139 NONAME ; void qt_qhostinfo_clear_cache(void)
+	?qt_qhostinfo_clear_cache@@YAXXZ @ 1139 NONAME ABSENT ; void qt_qhostinfo_clear_cache(void)
 	?qt_qhostinfo_lookup@@YA?AVQHostInfo@@ABVQString@@PAVQObject@@PBDPA_NPAH@Z @ 1140 NONAME ; class QHostInfo qt_qhostinfo_lookup(class QString const &, class QObject *, char const *, bool *, int *)
 	?requiresPolling@QBearerEngine@@UBE_NXZ @ 1141 NONAME ; bool QBearerEngine::requiresPolling(void) const
 	?setNetworkAccessible@QNetworkAccessManager@@QAEXW4NetworkAccessibility@1@@Z @ 1142 NONAME ; void QNetworkAccessManager::setNetworkAccessible(enum QNetworkAccessManager::NetworkAccessibility)
 	?startPolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1143 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void)
+	?capabilities@QNetworkConfigurationManagerPrivate@@QAE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1144 NONAME ; class QFlags<enum QNetworkConfigurationManager::Capability> QNetworkConfigurationManagerPrivate::capabilities(void)
 
diff --git a/src/s60installs/bwins/QtOpenVGu.def b/src/s60installs/bwins/QtOpenVGu.def
index b32406b..28b9e62 100644
--- a/src/s60installs/bwins/QtOpenVGu.def
+++ b/src/s60installs/bwins/QtOpenVGu.def
@@ -167,4 +167,8 @@ EXPORTS
 	?drawStaticTextItem@QVGPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 166 NONAME ; void QVGPaintEngine::drawStaticTextItem(class QStaticTextItem *)
 	?drawPixmapFragments@QVGPaintEngine@@UAEXPBVPixmapFragment@QPainter@@HABVQPixmap@@V?$QFlags@W4PixmapFragmentHint@QPainter@@@@@Z @ 167 NONAME ; void QVGPaintEngine::drawPixmapFragments(class QPainter::PixmapFragment const *, int, class QPixmap const &, class QFlags<enum QPainter::PixmapFragmentHint>)
 	?drawCachedGlyphs@QVGPaintEngine@@QAE_NHPBIABVQFont@@PAVQFontEngine@@ABVQPointF@@@Z @ 168 NONAME ; bool QVGPaintEngine::drawCachedGlyphs(int, unsigned int const *, class QFont const &, class QFontEngine *, class QPointF const &)
+	?supportsStaticContents@QVGEGLWindowSurfaceDirect@@UBE_NXZ @ 169 NONAME ; bool QVGEGLWindowSurfaceDirect::supportsStaticContents(void) const
+	?scroll@QVGEGLWindowSurfacePrivate@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 170 NONAME ; bool QVGEGLWindowSurfacePrivate::scroll(class QWidget *, class QRegion const &, int, int)
+	?scroll@QVGEGLWindowSurfaceDirect@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 171 NONAME ; bool QVGEGLWindowSurfaceDirect::scroll(class QWidget *, class QRegion const &, int, int)
+	?supportsStaticContents@QVGEGLWindowSurfacePrivate@@UBE_NXZ @ 172 NONAME ; bool QVGEGLWindowSurfacePrivate::supportsStaticContents(void) const
 
diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def
index caeac8d..daa9dc6 100644
--- a/src/s60installs/eabi/QtCoreu.def
+++ b/src/s60installs/eabi/QtCoreu.def
@@ -622,9 +622,9 @@ EXPORTS
 	_ZN14QObjectPrivate14deleteChildrenEv @ 621 NONAME
 	_ZN14QObjectPrivate14setDeleteWatchEPS_Pi @ 622 NONAME
 	_ZN14QObjectPrivate16resetDeleteWatchEPS_Pii @ 623 NONAME
-	_ZN14QObjectPrivate16setCurrentSenderEP7QObjectPNS_6SenderE @ 624 NONAME
+	_ZN14QObjectPrivate16setCurrentSenderEP7QObjectPNS_6SenderE @ 624 NONAME ABSENT
 	_ZN14QObjectPrivate16setParent_helperEP7QObject @ 625 NONAME
-	_ZN14QObjectPrivate18resetCurrentSenderEP7QObjectPNS_6SenderES3_ @ 626 NONAME
+	_ZN14QObjectPrivate18resetCurrentSenderEP7QObjectPNS_6SenderES3_ @ 626 NONAME ABSENT
 	_ZN14QObjectPrivate19_q_reregisterTimersEPv @ 627 NONAME
 	_ZN14QObjectPrivate19moveToThread_helperEv @ 628 NONAME
 	_ZN14QObjectPrivate20cleanConnectionListsEv @ 629 NONAME
diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def
index 7ad123d..953d0a1 100644
--- a/src/s60installs/eabi/QtDeclarativeu.def
+++ b/src/s60installs/eabi/QtDeclarativeu.def
@@ -99,8 +99,8 @@ EXPORTS
 	_ZN16QDeclarativeGrid7setRowsEi @ 98 NONAME
 	_ZN16QDeclarativeGridC1EP16QDeclarativeItem @ 99 NONAME
 	_ZN16QDeclarativeGridC2EP16QDeclarativeItem @ 100 NONAME
-	_ZN16QDeclarativeInfoC1EPK7QObject @ 101 NONAME
-	_ZN16QDeclarativeInfoC2EPK7QObject @ 102 NONAME
+	_ZN16QDeclarativeInfoC1EPK7QObject @ 101 NONAME ABSENT
+	_ZN16QDeclarativeInfoC2EPK7QObject @ 102 NONAME ABSENT
 	_ZN16QDeclarativeInfoD1Ev @ 103 NONAME
 	_ZN16QDeclarativeInfoD2Ev @ 104 NONAME
 	_ZN16QDeclarativeItem10classBeginEv @ 105 NONAME
@@ -200,7 +200,7 @@ EXPORTS
 	_ZN16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 199 NONAME
 	_ZN16QDeclarativeText7setFontERK5QFont @ 200 NONAME
 	_ZN16QDeclarativeText7setTextERK7QString @ 201 NONAME
-	_ZN16QDeclarativeText7setWrapEb @ 202 NONAME
+	_ZN16QDeclarativeText7setWrapEb @ 202 NONAME ABSENT
 	_ZN16QDeclarativeText8setColorERK6QColor @ 203 NONAME
 	_ZN16QDeclarativeText8setStyleENS_9TextStyleE @ 204 NONAME
 	_ZN16QDeclarativeText9setHAlignENS_10HAlignmentE @ 205 NONAME
@@ -222,7 +222,7 @@ EXPORTS
 	_ZN16QDeclarativeView11qt_metacastEPKc @ 221 NONAME
 	_ZN16QDeclarativeView11resizeEventEP12QResizeEvent @ 222 NONAME
 	_ZN16QDeclarativeView11rootContextEv @ 223 NONAME
-	_ZN16QDeclarativeView11sizeChangedEv @ 224 NONAME
+	_ZN16QDeclarativeView11sizeChangedEv @ 224 NONAME ABSENT
 	_ZN16QDeclarativeView12sceneResizedE5QSize @ 225 NONAME
 	_ZN16QDeclarativeView13setResizeModeENS_10ResizeModeE @ 226 NONAME
 	_ZN16QDeclarativeView13setRootObjectEP7QObject @ 227 NONAME
@@ -547,7 +547,7 @@ EXPORTS
 	_ZN20QDeclarativeBehaviorD1Ev @ 546 NONAME
 	_ZN20QDeclarativeBehaviorD2Ev @ 547 NONAME
 	_ZN20QDeclarativeCompiler11buildObjectEPN18QDeclarativeParser6ObjectERKNS_14BindingContextE @ 548 NONAME
-	_ZN20QDeclarativeCompiler11buildScriptEPN18QDeclarativeParser6ObjectES2_ @ 549 NONAME
+	_ZN20QDeclarativeCompiler11buildScriptEPN18QDeclarativeParser6ObjectES2_ @ 549 NONAME ABSENT
 	_ZN20QDeclarativeCompiler11buildSignalEPN18QDeclarativeParser8PropertyEPNS0_6ObjectERKNS_14BindingContextE @ 550 NONAME
 	_ZN20QDeclarativeCompiler11compileTreeEPN18QDeclarativeParser6ObjectE @ 551 NONAME
 	_ZN20QDeclarativeCompiler12buildBindingEPN18QDeclarativeParser5ValueEPNS0_8PropertyERKNS_14BindingContextE @ 552 NONAME
@@ -597,7 +597,7 @@ EXPORTS
 	_ZN20QDeclarativeCompiler5resetEP24QDeclarativeCompiledData @ 596 NONAME
 	_ZN20QDeclarativeCompiler7compileEP18QDeclarativeEngineP29QDeclarativeCompositeTypeDataP24QDeclarativeCompiledData @ 597 NONAME
 	_ZN20QDeclarativeCompiler9canCoerceEiPN18QDeclarativeParser6ObjectE @ 598 NONAME
-	_ZN20QDeclarativeCompiler9canCoerceEii @ 599 NONAME
+	_ZN20QDeclarativeCompiler9canCoerceEii @ 599 NONAME ABSENT
 	_ZN20QDeclarativeCompiler9dumpStatsEv @ 600 NONAME
 	_ZN20QDeclarativeCompiler9genObjectEPN18QDeclarativeParser6ObjectE @ 601 NONAME
 	_ZN20QDeclarativeCompiler9toQmlTypeEPN18QDeclarativeParser6ObjectE @ 602 NONAME
@@ -946,7 +946,7 @@ EXPORTS
 	_ZN20QDeclarativeTextEdit5eventEP6QEvent @ 945 NONAME
 	_ZN20QDeclarativeTextEdit7setFontERK5QFont @ 946 NONAME
 	_ZN20QDeclarativeTextEdit7setTextERK7QString @ 947 NONAME
-	_ZN20QDeclarativeTextEdit7setWrapEb @ 948 NONAME
+	_ZN20QDeclarativeTextEdit7setWrapEb @ 948 NONAME ABSENT
 	_ZN20QDeclarativeTextEdit8setColorERK6QColor @ 949 NONAME
 	_ZN20QDeclarativeTextEdit9selectAllEv @ 950 NONAME
 	_ZN20QDeclarativeTextEdit9setHAlignENS_10HAlignmentE @ 951 NONAME
@@ -1283,7 +1283,7 @@ EXPORTS
 	_ZN22QDeclarativeDebugWatchD0Ev @ 1282 NONAME
 	_ZN22QDeclarativeDebugWatchD1Ev @ 1283 NONAME
 	_ZN22QDeclarativeDebugWatchD2Ev @ 1284 NONAME
-	_ZN22QDeclarativeExpression10__q_notifyEv @ 1285 NONAME
+	_ZN22QDeclarativeExpression10__q_notifyEv @ 1285 NONAME ABSENT
 	_ZN22QDeclarativeExpression10clearErrorEv @ 1286 NONAME
 	_ZN22QDeclarativeExpression11qt_metacallEN11QMetaObject4CallEiPPv @ 1287 NONAME
 	_ZN22QDeclarativeExpression11qt_metacastEPKc @ 1288 NONAME
@@ -1293,7 +1293,7 @@ EXPORTS
 	_ZN22QDeclarativeExpression17setSourceLocationERK7QStringi @ 1292 NONAME
 	_ZN22QDeclarativeExpression19getStaticMetaObjectEv @ 1293 NONAME
 	_ZN22QDeclarativeExpression23setNotifyOnValueChangedEb @ 1294 NONAME
-	_ZN22QDeclarativeExpression5valueEPb @ 1295 NONAME
+	_ZN22QDeclarativeExpression5valueEPb @ 1295 NONAME ABSENT
 	_ZN22QDeclarativeExpressionC1EP19QDeclarativeContextRK7QStringP7QObject @ 1296 NONAME
 	_ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataPvP20QDeclarativeRefCountP7QObjectRK7QStringiR29QDeclarativeExpressionPrivate @ 1297 NONAME
 	_ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataRK7QStringP7QObject @ 1298 NONAME
@@ -1573,12 +1573,12 @@ EXPORTS
 	_ZN24QDeclarativeDebugService11sendMessageERK10QByteArray @ 1572 NONAME
 	_ZN24QDeclarativeDebugService14enabledChangedEb @ 1573 NONAME
 	_ZN24QDeclarativeDebugService14objectToStringEP7QObject @ 1574 NONAME
-	_ZN24QDeclarativeDebugService14waitForClientsEv @ 1575 NONAME
+	_ZN24QDeclarativeDebugService14waitForClientsEv @ 1575 NONAME ABSENT
 	_ZN24QDeclarativeDebugService15messageReceivedERK10QByteArray @ 1576 NONAME
 	_ZN24QDeclarativeDebugService16staticMetaObjectE @ 1577 NONAME DATA 16
 	_ZN24QDeclarativeDebugService18isDebuggingEnabledEv @ 1578 NONAME
 	_ZN24QDeclarativeDebugService19getStaticMetaObjectEv @ 1579 NONAME
-	_ZN24QDeclarativeDebugService19notifyOnServerStartEP7QObjectPKc @ 1580 NONAME
+	_ZN24QDeclarativeDebugService19notifyOnServerStartEP7QObjectPKc @ 1580 NONAME ABSENT
 	_ZN24QDeclarativeDebugServiceC1ERK7QStringP7QObject @ 1581 NONAME
 	_ZN24QDeclarativeDebugServiceC2ERK7QStringP7QObject @ 1582 NONAME
 	_ZN24QDeclarativeDomComponentC1ERKS_ @ 1583 NONAME
@@ -1611,8 +1611,8 @@ EXPORTS
 	_ZN24QDeclarativeParentChange4setYEf @ 1610 NONAME
 	_ZN24QDeclarativeParentChange6rewindEv @ 1611 NONAME
 	_ZN24QDeclarativeParentChange7actionsEv @ 1612 NONAME
-	_ZN24QDeclarativeParentChange7executeEv @ 1613 NONAME
-	_ZN24QDeclarativeParentChange7reverseEv @ 1614 NONAME
+	_ZN24QDeclarativeParentChange7executeEv @ 1613 NONAME ABSENT
+	_ZN24QDeclarativeParentChange7reverseEv @ 1614 NONAME ABSENT
 	_ZN24QDeclarativeParentChange8overrideEP23QDeclarativeActionEvent @ 1615 NONAME
 	_ZN24QDeclarativeParentChange8setScaleEf @ 1616 NONAME
 	_ZN24QDeclarativeParentChange8setWidthEf @ 1617 NONAME
@@ -1721,8 +1721,8 @@ EXPORTS
 	_ZN25QDeclarativeAnchorChanges6rewindEv @ 1720 NONAME
 	_ZN25QDeclarativeAnchorChanges7actionsEv @ 1721 NONAME
 	_ZN25QDeclarativeAnchorChanges7anchorsEv @ 1722 NONAME
-	_ZN25QDeclarativeAnchorChanges7executeEv @ 1723 NONAME
-	_ZN25QDeclarativeAnchorChanges7reverseEv @ 1724 NONAME
+	_ZN25QDeclarativeAnchorChanges7executeEv @ 1723 NONAME ABSENT
+	_ZN25QDeclarativeAnchorChanges7reverseEv @ 1724 NONAME ABSENT
 	_ZN25QDeclarativeAnchorChanges8overrideEP23QDeclarativeActionEvent @ 1725 NONAME
 	_ZN25QDeclarativeAnchorChanges9setObjectEP16QDeclarativeItem @ 1726 NONAME
 	_ZN25QDeclarativeAnchorChangesC1EP7QObject @ 1727 NONAME
@@ -1918,7 +1918,7 @@ EXPORTS
 	_ZN27QDeclarativeVisualDataModel11stringValueEiRK7QString @ 1917 NONAME
 	_ZN27QDeclarativeVisualDataModel12_q_rowsMovedERK11QModelIndexiiS2_i @ 1918 NONAME
 	_ZN27QDeclarativeVisualDataModel12completeItemEv @ 1919 NONAME
-	_ZN27QDeclarativeVisualDataModel12setRootIndexERK11QModelIndex @ 1920 NONAME
+	_ZN27QDeclarativeVisualDataModel12setRootIndexERK11QModelIndex @ 1920 NONAME ABSENT
 	_ZN27QDeclarativeVisualDataModel13_q_itemsMovedEiii @ 1921 NONAME
 	_ZN27QDeclarativeVisualDataModel13_q_modelResetEv @ 1922 NONAME
 	_ZN27QDeclarativeVisualDataModel14_q_dataChangedERK11QModelIndexS2_ @ 1923 NONAME
@@ -2034,7 +2034,7 @@ EXPORTS
 	_ZN29QDeclarativeStateChangeScript16staticMetaObjectE @ 2033 NONAME DATA 16
 	_ZN29QDeclarativeStateChangeScript19getStaticMetaObjectEv @ 2034 NONAME
 	_ZN29QDeclarativeStateChangeScript7actionsEv @ 2035 NONAME
-	_ZN29QDeclarativeStateChangeScript7executeEv @ 2036 NONAME
+	_ZN29QDeclarativeStateChangeScript7executeEv @ 2036 NONAME ABSENT
 	_ZN29QDeclarativeStateChangeScript7setNameERK7QString @ 2037 NONAME
 	_ZN29QDeclarativeStateChangeScript9setScriptERK24QDeclarativeScriptString @ 2038 NONAME
 	_ZN29QDeclarativeStateChangeScriptC1EP7QObject @ 2039 NONAME
@@ -2234,7 +2234,7 @@ EXPORTS
 	_ZNK16QDeclarativeText10textFormatEv @ 2233 NONAME
 	_ZNK16QDeclarativeText4fontEv @ 2234 NONAME
 	_ZNK16QDeclarativeText4textEv @ 2235 NONAME
-	_ZNK16QDeclarativeText4wrapEv @ 2236 NONAME
+	_ZNK16QDeclarativeText4wrapEv @ 2236 NONAME ABSENT
 	_ZNK16QDeclarativeText5colorEv @ 2237 NONAME
 	_ZNK16QDeclarativeText5styleEv @ 2238 NONAME
 	_ZNK16QDeclarativeText6hAlignEv @ 2239 NONAME
@@ -2515,7 +2515,7 @@ EXPORTS
 	_ZNK20QDeclarativeTextEdit20textInteractionFlagsEv @ 2514 NONAME
 	_ZNK20QDeclarativeTextEdit4fontEv @ 2515 NONAME
 	_ZNK20QDeclarativeTextEdit4textEv @ 2516 NONAME
-	_ZNK20QDeclarativeTextEdit4wrapEv @ 2517 NONAME
+	_ZNK20QDeclarativeTextEdit4wrapEv @ 2517 NONAME ABSENT
 	_ZNK20QDeclarativeTextEdit5colorEv @ 2518 NONAME
 	_ZNK20QDeclarativeTextEdit6hAlignEv @ 2519 NONAME
 	_ZNK20QDeclarativeTextEdit6vAlignEv @ 2520 NONAME
@@ -3310,8 +3310,8 @@ EXPORTS
 	_ZThn8_N24QDeclarativeParentChange13saveOriginalsEv @ 3309 NONAME
 	_ZThn8_N24QDeclarativeParentChange17saveCurrentValuesEv @ 3310 NONAME
 	_ZThn8_N24QDeclarativeParentChange6rewindEv @ 3311 NONAME
-	_ZThn8_N24QDeclarativeParentChange7executeEv @ 3312 NONAME
-	_ZThn8_N24QDeclarativeParentChange7reverseEv @ 3313 NONAME
+	_ZThn8_N24QDeclarativeParentChange7executeEv @ 3312 NONAME ABSENT
+	_ZThn8_N24QDeclarativeParentChange7reverseEv @ 3313 NONAME ABSENT
 	_ZThn8_N24QDeclarativeParentChange8overrideEP23QDeclarativeActionEvent @ 3314 NONAME
 	_ZThn8_N24QDeclarativeParentChangeD0Ev @ 3315 NONAME
 	_ZThn8_N24QDeclarativeParentChangeD1Ev @ 3316 NONAME
@@ -3333,8 +3333,8 @@ EXPORTS
 	_ZThn8_N25QDeclarativeAnchorChanges16saveTargetValuesEv @ 3332 NONAME
 	_ZThn8_N25QDeclarativeAnchorChanges17saveCurrentValuesEv @ 3333 NONAME
 	_ZThn8_N25QDeclarativeAnchorChanges6rewindEv @ 3334 NONAME
-	_ZThn8_N25QDeclarativeAnchorChanges7executeEv @ 3335 NONAME
-	_ZThn8_N25QDeclarativeAnchorChanges7reverseEv @ 3336 NONAME
+	_ZThn8_N25QDeclarativeAnchorChanges7executeEv @ 3335 NONAME ABSENT
+	_ZThn8_N25QDeclarativeAnchorChanges7reverseEv @ 3336 NONAME ABSENT
 	_ZThn8_N25QDeclarativeAnchorChanges8overrideEP23QDeclarativeActionEvent @ 3337 NONAME
 	_ZThn8_N25QDeclarativeAnchorChangesD0Ev @ 3338 NONAME
 	_ZThn8_N25QDeclarativeAnchorChangesD1Ev @ 3339 NONAME
@@ -3348,7 +3348,7 @@ EXPORTS
 	_ZThn8_N27QDeclarativeExtensionPluginD1Ev @ 3347 NONAME
 	_ZThn8_N29QDeclarativeSmoothedAnimationD0Ev @ 3348 NONAME
 	_ZThn8_N29QDeclarativeSmoothedAnimationD1Ev @ 3349 NONAME
-	_ZThn8_N29QDeclarativeStateChangeScript7executeEv @ 3350 NONAME
+	_ZThn8_N29QDeclarativeStateChangeScript7executeEv @ 3350 NONAME ABSENT
 	_ZThn8_N29QDeclarativeStateChangeScriptD0Ev @ 3351 NONAME
 	_ZThn8_N29QDeclarativeStateChangeScriptD1Ev @ 3352 NONAME
 	_ZThn8_N35QDeclarativeGraphicsObjectContainer10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 3353 NONAME ABSENT
@@ -3486,4 +3486,14 @@ EXPORTS
 	_ZNK16QDeclarativeText16resourcesLoadingEv @ 3485 NONAME
 	_ZNK19QDeclarativeContext7isValidEv @ 3486 NONAME
 	_ZNK23QDeclarativePixmapReply11errorStringEv @ 3487 NONAME
+	_ZTI26QDeclarativeAnimationGroup @ 3488 NONAME ABSENT
+	_ZTI26QDeclarativeTimeLineObject @ 3489 NONAME ABSENT
+	_ZTI29QDeclarativeAbstractAnimation @ 3490 NONAME ABSENT
+	_ZTI29QDeclarativePropertyAnimation @ 3491 NONAME ABSENT
+	_ZTI30QDeclarativeAbstractExpression @ 3492 NONAME ABSENT
+	_ZTIN14QDeclarativeJS3AST14ExpressionNodeE @ 3493 NONAME ABSENT
+	_ZTIN14QDeclarativeJS3AST14UiObjectMemberE @ 3494 NONAME ABSENT
+	_ZTIN14QDeclarativeJS3AST18FunctionExpressionE @ 3495 NONAME ABSENT
+	_ZTIN14QDeclarativeJS3AST4NodeE @ 3496 NONAME ABSENT
+	_ZTIN14QDeclarativeJS3AST9StatementE @ 3497 NONAME ABSENT
 
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index 569247a..b1166c5 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -11994,4 +11994,8 @@ EXPORTS
 	_ZNK11QEglContext12configAttribEi @ 11993 NONAME
 	_ZNK11QEglContext16configPropertiesEv @ 11994 NONAME ABSENT
 	_ZNK19QItemSelectionRange7isEmptyEv @ 11995 NONAME
+	_ZN13QIconEngineV28iconNameEv @ 11996 NONAME
+	_ZN14QWindowSurface23setPartialUpdateSupportEb @ 11997 NONAME
+	_ZNK14QWindowSurface23hasPartialUpdateSupportEv @ 11998 NONAME
+	_ZNK5QIcon4nameEv @ 11999 NONAME
 
diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def
index 926a000..2796778 100644
--- a/src/s60installs/eabi/QtNetworku.def
+++ b/src/s60installs/eabi/QtNetworku.def
@@ -1151,7 +1151,7 @@ EXPORTS
 	_ZThn8_N19QBearerEnginePluginD0Ev @ 1150 NONAME
 	_ZThn8_N19QBearerEnginePluginD1Ev @ 1151 NONAME
 	_Z19qt_qhostinfo_lookupRK7QStringP7QObjectPKcPbPi @ 1152 NONAME
-	_Z24qt_qhostinfo_clear_cachev @ 1153 NONAME
+	_Z24qt_qhostinfo_clear_cachev @ 1153 NONAME ABSENT
 	_ZN21QNetworkAccessManager20setNetworkAccessibleENS_20NetworkAccessibilityE @ 1154 NONAME
 	_ZN21QNetworkAccessManager23networkSessionConnectedEv @ 1155 NONAME
 	_ZN21QNetworkAccessManager24networkAccessibleChangedENS_20NetworkAccessibilityE @ 1156 NONAME
diff --git a/src/s60installs/eabi/QtOpenVGu.def b/src/s60installs/eabi/QtOpenVGu.def
index cffc891..5db9dce 100644
--- a/src/s60installs/eabi/QtOpenVGu.def
+++ b/src/s60installs/eabi/QtOpenVGu.def
@@ -199,4 +199,6 @@ EXPORTS
 	_ZN14QVGPaintEngine16drawCachedGlyphsEiPKjRK5QFontP11QFontEngineRK7QPointF @ 198 NONAME
 	_ZN14QVGPaintEngine18drawStaticTextItemEP15QStaticTextItem @ 199 NONAME
 	_ZN14QVGPaintEngine19drawPixmapFragmentsEPKN8QPainter14PixmapFragmentEiRK7QPixmap6QFlagsINS0_18PixmapFragmentHintEE @ 200 NONAME
+	_ZN25QVGEGLWindowSurfaceDirect6scrollEP7QWidgetRK7QRegionii @ 201 NONAME
+	_ZNK25QVGEGLWindowSurfaceDirect22supportsStaticContentsEv @ 202 NONAME
 
-- 
cgit v0.12


From 4f3a7b5992b5aed67cced46d5d8c8c2f052dfb66 Mon Sep 17 00:00:00 2001
From: Peter Yard <peter.yard@nokia.com>
Date: Tue, 27 Apr 2010 10:35:48 +1000
Subject: Docs Changes to start page. Minor change to Elements doc. See also
 added to some elements docs.

---
 doc/src/declarative/declarativeui.qdoc               | 17 +++++++++++++----
 doc/src/declarative/elements.qdoc                    |  2 +-
 examples/declarative/animations/easing.qml           |  4 ++--
 src/declarative/qml/qdeclarativecomponent.cpp        |  2 ++
 src/declarative/util/qdeclarativeanimation.cpp       |  2 ++
 src/declarative/util/qdeclarativebehavior.cpp        |  2 ++
 src/declarative/util/qdeclarativebind.cpp            |  2 ++
 src/declarative/util/qdeclarativeconnections.cpp     |  2 ++
 src/declarative/util/qdeclarativelistmodel.cpp       |  2 +-
 src/declarative/util/qdeclarativepackage.cpp         |  1 +
 src/declarative/util/qdeclarativepropertychanges.cpp |  2 +-
 src/declarative/util/qdeclarativestate.cpp           |  2 +-
 src/declarative/util/qdeclarativestategroup.cpp      |  2 +-
 src/declarative/util/qdeclarativetimer.cpp           |  2 ++
 src/declarative/util/qdeclarativetransition.cpp      |  2 +-
 src/declarative/util/qdeclarativexmllistmodel.cpp    |  4 ++++
 16 files changed, 38 insertions(+), 12 deletions(-)

diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc
index a2a5283..2d646b9 100644
--- a/doc/src/declarative/declarativeui.qdoc
+++ b/doc/src/declarative/declarativeui.qdoc
@@ -40,19 +40,28 @@
 ****************************************************************************/
 
 /*!
-\title Declarative UI (QML)
+\title Declarative UI Using QML
 \page declarativeui.html
 
 \brief The Qt Declarative module provides a declarative framework for building
 highly dynamic, custom user interfaces.
 
+\section1 \l{QML Elements}{Fast QML Elements Reference Page}
+
+\raw HTML
+<br>
+\endraw
+
+\section1 Preamble
+
 Qt Declarative UI provides a declarative framework for building highly dynamic, custom
 user interfaces.  Declarative UI helps programmers and designers collaborate to build
 the animation rich, fluid user interfaces that are becoming common in portable
 consumer devices, such as mobile phones, media players, set-top boxes and netbooks.
-The Qt Declarative module provides an engine for interpreting the declarative QML
-language, and a rich set of \l {QML Elements}{QML elements} that can be used
-from QML.
+
+The Qt Declarative module provides an engine for interpreting the declarative
+QML language, and a rich set of \bold { \l {QML Elements}{QML elements} }
+that can be used from QML.
 
 QML is an extension to \l {http://www.ecma-international.org/publications/standards/Ecma-262.htm}
 {JavaScript}, that provides a mechanism to declaratively build an object tree
diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc
index ce3a6e3..8318392 100644
--- a/doc/src/declarative/elements.qdoc
+++ b/doc/src/declarative/elements.qdoc
@@ -44,7 +44,7 @@
 \target elements
 \title QML Elements
 
-The following table lists the QML elements provided by the Qt Declarative module.
+The following table lists the QML elements provided by the \l {QtDeclarative}{Qt Declarative} module.
 
 \bold {Standard Qt Declarative Elements}
 
diff --git a/examples/declarative/animations/easing.qml b/examples/declarative/animations/easing.qml
index bed4b5f9..b0f9669 100644
--- a/examples/declarative/animations/easing.qml
+++ b/examples/declarative/animations/easing.qml
@@ -79,10 +79,10 @@ Rectangle {
                 }
 
                 transitions: Transition {
-                    ParallelAnimation {
+                    // ParallelAnimation {
                         NumberAnimation { properties: "x"; easing.type: type; duration: 1000 }
                         ColorAnimation { properties: "color"; easing.type: type; duration: 1000 }
-                    }
+                    // }
                 }
             }
         }
diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp
index 3e4651c..f41d867 100644
--- a/src/declarative/qml/qdeclarativecomponent.cpp
+++ b/src/declarative/qml/qdeclarativecomponent.cpp
@@ -140,6 +140,8 @@ Item {
         }
     }
     \endqml
+
+    \sa QtDeclarative
 */
 
 /*!
diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index 7e20428..f38f66c 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -834,6 +834,8 @@ QAbstractAnimation *QDeclarativeScriptAction::qtAnimation()
 
     The PropertyAction is immediate -
     the target property is not animated to the selected value in any way.
+    
+    \sa QtDeclarative
 */
 /*!
     \internal
diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp
index a6c578e..1089d31 100644
--- a/src/declarative/util/qdeclarativebehavior.cpp
+++ b/src/declarative/util/qdeclarativebehavior.cpp
@@ -90,6 +90,8 @@ public:
 
     Currently only a single Behavior may be specified for a property;
     this Behavior can be enabled and disabled via the \l{enabled} property.
+
+    \sa QtDeclarative
 */
 
 
diff --git a/src/declarative/util/qdeclarativebind.cpp b/src/declarative/util/qdeclarativebind.cpp
index b7bd4e8..5516628 100644
--- a/src/declarative/util/qdeclarativebind.cpp
+++ b/src/declarative/util/qdeclarativebind.cpp
@@ -92,6 +92,8 @@ public:
 
     If the binding target or binding property is changed, the bound value is
     immediately pushed onto the new target.
+
+    \sa QtDeclarative
     */
 /*!
     \internal
diff --git a/src/declarative/util/qdeclarativeconnections.cpp b/src/declarative/util/qdeclarativeconnections.cpp
index 596b306..c392c74 100644
--- a/src/declarative/util/qdeclarativeconnections.cpp
+++ b/src/declarative/util/qdeclarativeconnections.cpp
@@ -116,6 +116,8 @@ public:
         onClicked: foo(...)
     }
     \endqml
+
+    \sa QtDeclarative
 */
 
 /*!
diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp
index 2616ccf..0c2c2a4 100644
--- a/src/declarative/util/qdeclarativelistmodel.cpp
+++ b/src/declarative/util/qdeclarativelistmodel.cpp
@@ -244,7 +244,7 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM
 
     In addition, the WorkerScript cannot add any list data to the model.
 
-    \sa {qmlmodels}{Data Models}, WorkerScript
+    \sa {qmlmodels}{Data Models}, WorkerScript, QtDeclarative
 */
 
 
diff --git a/src/declarative/util/qdeclarativepackage.cpp b/src/declarative/util/qdeclarativepackage.cpp
index ac0788f..20e9907 100644
--- a/src/declarative/util/qdeclarativepackage.cpp
+++ b/src/declarative/util/qdeclarativepackage.cpp
@@ -70,6 +70,7 @@ QT_BEGIN_NAMESPACE
 
     \snippet examples/declarative/package/view.qml 0
 
+    \sa QtDeclarative
 */
 
 
diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp
index 9c3ee9f..81b83c3 100644
--- a/src/declarative/util/qdeclarativepropertychanges.cpp
+++ b/src/declarative/util/qdeclarativepropertychanges.cpp
@@ -128,7 +128,7 @@ QT_BEGIN_NAMESPACE
     Changes to an Item's parent or anchors should be done using the associated change elements
     (ParentChange and AnchorChanges, respectively) rather than PropertyChanges.
 
-    \sa {qmlstate}{States}
+    \sa {qmlstate}{States}, QtDeclarative
 */
 
 /*!
diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp
index 78813fa..d27fc51 100644
--- a/src/declarative/util/qdeclarativestate.cpp
+++ b/src/declarative/util/qdeclarativestate.cpp
@@ -141,7 +141,7 @@ QDeclarativeStateOperation::QDeclarativeStateOperation(QObjectPrivate &dd, QObje
     \note setting the state of an object from within another state of the same object is
     not allowed.
 
-    \sa {qmlstates}{States}, {state-transitions}{Transitions}
+    \sa {qmlstates}{States}, {state-transitions}{Transitions}, QtDeclarative
 */
 
 /*!
diff --git a/src/declarative/util/qdeclarativestategroup.cpp b/src/declarative/util/qdeclarativestategroup.cpp
index ff78c60..79bc677 100644
--- a/src/declarative/util/qdeclarativestategroup.cpp
+++ b/src/declarative/util/qdeclarativestategroup.cpp
@@ -109,7 +109,7 @@ public:
    }
    \endqml
 
-   \sa {qmlstate}{States} {state-transitions}{Transitions}
+   \sa {qmlstate}{States} {state-transitions}{Transitions}, {QtDeclarative}
 */
 
 QDeclarativeStateGroup::QDeclarativeStateGroup(QObject *parent)
diff --git a/src/declarative/util/qdeclarativetimer.cpp b/src/declarative/util/qdeclarativetimer.cpp
index 76e6d5e..53a9d83 100644
--- a/src/declarative/util/qdeclarativetimer.cpp
+++ b/src/declarative/util/qdeclarativetimer.cpp
@@ -98,6 +98,8 @@ public:
     1000ms has its \e repeat property changed 500ms after starting, the
     elapsed time will be reset to 0, and the Timer will be triggered
     1000ms later.
+
+    \sa {QtDeclarative}
 */
 
 QDeclarativeTimer::QDeclarativeTimer(QObject *parent)
diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp
index 815dc4c..f284156 100644
--- a/src/declarative/util/qdeclarativetransition.cpp
+++ b/src/declarative/util/qdeclarativetransition.cpp
@@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE
   \since 4.7
     \brief The Transition element defines animated transitions that occur on state changes.
 
-    \sa {qmlstates}{States}, {state-transitions}{Transitions}
+    \sa {qmlstates}{States}, {state-transitions}{Transitions}, {QtDeclarative}
 */
 
 /*!
diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp
index 7f8b962..c9f7fee 100644
--- a/src/declarative/util/qdeclarativexmllistmodel.cpp
+++ b/src/declarative/util/qdeclarativexmllistmodel.cpp
@@ -74,6 +74,8 @@ typedef QPair<int, int> QDeclarativeXmlListRange;
     \qmlclass XmlRole QDeclarativeXmlListModelRole
   \since 4.7
     \brief The XmlRole element allows you to specify a role for an XmlListModel.
+
+    \sa {QtDeclarative}
 */
 
 /*!
@@ -502,6 +504,8 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla
 
     This is useful to provide incremental updates and avoid repainting an
     entire model in a view.
+
+    \sa {QtDeclarative}
 */
 
 QDeclarativeXmlListModel::QDeclarativeXmlListModel(QObject *parent)
-- 
cgit v0.12


From 646b21ac2eb3b0c73826936bf4dba9eac97a34a0 Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
Date: Mon, 26 Apr 2010 12:45:48 +0200
Subject: Mac: improve mac native events autotest API

Make it possible to add a delay between two events
---
 tests/auto/macnativeevents/nativeeventlist.cpp | 5 -----
 tests/auto/macnativeevents/nativeeventlist.h   | 1 -
 2 files changed, 6 deletions(-)

diff --git a/tests/auto/macnativeevents/nativeeventlist.cpp b/tests/auto/macnativeevents/nativeeventlist.cpp
index d5d7b95..1a90ee0 100644
--- a/tests/auto/macnativeevents/nativeeventlist.cpp
+++ b/tests/auto/macnativeevents/nativeeventlist.cpp
@@ -88,11 +88,6 @@ void NativeEventList::append(int waitMs, QNativeEvent *event)
     eventList.append(QPair<int, QNativeEvent *>(waitMs, event));
 }
 
-void NativeEventList::append(int waitMs)
-{
-    eventList.append(QPair<int, QNativeEvent *>(waitMs, 0));
-}
-
 void NativeEventList::play(Playback playback)
 {
     waitNextEvent();
diff --git a/tests/auto/macnativeevents/nativeeventlist.h b/tests/auto/macnativeevents/nativeeventlist.h
index 688665d..efcca43 100644
--- a/tests/auto/macnativeevents/nativeeventlist.h
+++ b/tests/auto/macnativeevents/nativeeventlist.h
@@ -57,7 +57,6 @@ class NativeEventList : public QObject
 
     void append(QNativeEvent *event);
     void append(int waitMs, QNativeEvent *event = 0);
-    void append(int waitMs);
 
     void play(Playback playback = WaitUntilFinished);
     void stop();
-- 
cgit v0.12


From 09c6d182a70f25626e12a739a9b7c3db937f47ce Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
Date: Tue, 27 Apr 2010 09:01:36 +0200
Subject: Cocoa: Native QFileDialog has problems selecting name filter

The problem occured if you told the dialog to not show name filter
details, then tried to select a filter specifying those details.
The patch makes sure that we accept a filter as found in the
drop down list if it matches the specified filter with or
without details

Task-number: QTBUG-8439
Reviewed-by: msorvig
---
 src/gui/dialogs/qfiledialog_mac.mm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm
index 14a5f15..28acf24 100644
--- a/src/gui/dialogs/qfiledialog_mac.mm
+++ b/src/gui/dialogs/qfiledialog_mac.mm
@@ -493,7 +493,7 @@ QT_USE_NAMESPACE
         for (int i=0; i<mNameFilterDropDownList->size(); ++i) {
             QString filter = hideDetails ? [self removeExtensions:filters->at(i)] : filters->at(i);
             [mPopUpButton addItemWithTitle:QT_PREPEND_NAMESPACE(qt_mac_QStringToNSString)(filter)];
-            if (filters->at(i) == selectedFilter)
+            if (filters->at(i).startsWith(selectedFilter))
                 [mPopUpButton selectItemAtIndex:i];
         }
     }
-- 
cgit v0.12


From 530092bc0b1710504a7e98950eab8d545af42b50 Mon Sep 17 00:00:00 2001
From: Jarek Kobus <jkobus@trolltech.com>
Date: Mon, 26 Apr 2010 13:30:17 +0200
Subject: Update Polish translation

---
 translations/qt_pl.ts | 2496 +++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 2112 insertions(+), 384 deletions(-)

diff --git a/translations/qt_pl.ts b/translations/qt_pl.ts
index db7d2c5..dd8a160 100644
--- a/translations/qt_pl.ts
+++ b/translations/qt_pl.ts
@@ -2,6 +2,27 @@
 <!DOCTYPE TS>
 <TS version="2.0" language="pl">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2266"/>
+        <source>Close Tab</source>
+        <translation>Zamknij kartę</translation>
+    </message>
+</context>
+<context>
+    <name>FakeReply</name>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2217"/>
+        <source>Fake error !</source>
+        <translation>Fałszywy błąd!</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Invalid URL</source>
+        <translation>Niepoprawny URL</translation>
+    </message>
+</context>
+<context>
     <name>MAC_APPLICATION_MENU</name>
     <message>
         <location filename="../src/gui/kernel/qapplication.cpp" line="+2316"/>
@@ -40,27 +61,6 @@
     </message>
 </context>
 <context>
-    <name>CloseButton</name>
-    <message>
-        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2264"/>
-        <source>Close Tab</source>
-        <translation>Zamknij kartę</translation>
-    </message>
-</context>
-<context>
-    <name>FakeReply</name>
-    <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2199"/>
-        <source>Fake error !</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Invalid URL</source>
-        <translation>Niepoprawny URL</translation>
-    </message>
-</context>
-<context>
     <name>Phonon::</name>
     <message>
         <location filename="../src/3rdparty/phonon/phonon/phononnamespace.cpp" line="+55"/>
@@ -96,25 +96,32 @@
 <context>
     <name>Phonon::AudioOutput</name>
     <message>
-        <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+385"/>
+        <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+444"/>
+        <location line="+34"/>
         <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
         <translation>&lt;html&gt;Urządzenie dźwiękowe &lt;b&gt;%1&lt;/b&gt; nie działa.&lt;br/&gt;Przywracanie do &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location line="-21"/>
         <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
         <translation>&lt;html&gt;Przełączanie na urządzenie dźwiękowe &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;które właśnie stało się dostępne i ma wyższy priorytet.&lt;/html&gt;</translation>
     </message>
     <message>
         <location line="+3"/>
+        <location line="+14"/>
         <source>Revert back to device &apos;%1&apos;</source>
         <translation>Przywróć do urządzenia &apos;%1&apos;</translation>
     </message>
+    <message>
+        <location line="-3"/>
+        <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which has higher preference or is specifically configured for this stream.&lt;/html&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Phonon::Gstreamer::Backend</name>
     <message>
-        <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+182"/>
+        <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+188"/>
         <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
           Some video features have been disabled.</source>
         <translation>Ostrzeżenie: Wygląda na to, że pakiet gstreamer0.10-plugins-good nie jest zainstalowany w tym systemie.
@@ -131,7 +138,7 @@ Obsługa dźwięku i wideo została wyłączona</translation>
 <context>
     <name>Phonon::Gstreamer::MediaObject</name>
     <message>
-        <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/>
+        <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+93"/>
         <source>Cannot start playback. 
 
 Check your GStreamer installation and make sure you 
@@ -142,29 +149,39 @@ Sprawdź instalację Gstreamer i upewnij się że
 zainstalowałeś libgstreamer-plugins-base.</translation>
     </message>
     <message>
-        <location line="+113"/>
+        <location line="+129"/>
+        <source>Missing codec helper script assistant.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Plugin codec installation failed for codec: %0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
         <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
         <translation>Brak wymaganego kodeka. Aby odtworzyć zawartość musisz zainstalować poniższy kodek: %0</translation>
     </message>
     <message>
-        <location line="+702"/>
-        <location line="+8"/>
-        <location line="+15"/>
-        <location line="+26"/>
+        <location line="+730"/>
         <location line="+6"/>
-        <location line="+19"/>
-        <location line="+339"/>
+        <location line="+13"/>
+        <location line="+24"/>
+        <location line="+6"/>
+        <location line="+18"/>
+        <location line="+434"/>
         <location line="+24"/>
         <source>Could not open media source.</source>
         <translation>Nie można otworzyć źródła mediów.</translation>
     </message>
     <message>
-        <location line="-424"/>
+        <location line="-514"/>
         <source>Invalid source type.</source>
         <translation>Niepoprawny typ źródła.</translation>
     </message>
     <message>
-        <location line="+398"/>
+        <location line="+488"/>
         <source>Could not locate media source.</source>
         <translation>Nie można znaleźć źródła mediów.</translation>
     </message>
@@ -182,7 +199,7 @@ zainstalowałeś libgstreamer-plugins-base.</translation>
 <context>
     <name>Phonon::MMF</name>
     <message>
-        <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+98"/>
+        <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+103"/>
         <source>Audio Output</source>
         <translation>Wyjście dźwięku</translation>
     </message>
@@ -191,60 +208,341 @@ zainstalowałeś libgstreamer-plugins-base.</translation>
         <source>The audio output device</source>
         <translation>Wyjściowe urządzenie dźwiękowe</translation>
     </message>
-</context>
-<context>
-    <name>Phonon::MMF::AudioEqualizer</name>
     <message>
-        <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+75"/>
-        <source>Frequency band, %1 Hz</source>
-        <translation>Częstotliwość środkowa, %1 Hz</translation>
+        <location filename="../src/3rdparty/phonon/mmf/utils.cpp" line="+89"/>
+        <source>No error</source>
+        <translation>Brak błędu</translation>
     </message>
-</context>
-<context>
-    <name>Phonon::MMF::EffectFactory</name>
     <message>
-        <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+65"/>
-        <source>Audio Equalizer</source>
-        <translation>Korektor graficzny</translation>
+        <location line="+2"/>
+        <source>Not found</source>
+        <translation>Nie znaleziono</translation>
     </message>
     <message>
         <location line="+2"/>
-        <source>Bass Boost</source>
-        <translation>Wzmocnienie basów</translation>
+        <source>Out of memory</source>
+        <translation>Brak pamięci</translation>
     </message>
     <message>
         <location line="+2"/>
-        <source>Distance Attenuation</source>
-        <translation type="unfinished"></translation>
+        <source>Not supported</source>
+        <translation>Nieobsługiwane</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Overflow</source>
+        <translation>Przepełnienie</translation>
     </message>
     <message>
         <location line="+2"/>
+        <source>Underflow</source>
+        <translation>Niedopełnienie</translation>
+    </message>
+    <message>
         <location line="+2"/>
-        <source>Environmental Reverb</source>
-        <translation>Pogłos środowiskowy</translation>
+        <source>Already exists</source>
+        <translation>Już istnieje</translation>
     </message>
     <message>
         <location line="+2"/>
-        <source>Loudness</source>
-        <translation>Głośność</translation>
+        <source>Path not found</source>
+        <translation>Nie znaleziono ścieżki</translation>
     </message>
     <message>
         <location line="+2"/>
-        <source>Source Orientation</source>
-        <translation type="unfinished"></translation>
+        <source>In use</source>
+        <translation>W użyciu</translation>
     </message>
     <message>
         <location line="+2"/>
-        <source>Stereo Widening</source>
-        <translation type="unfinished"></translation>
+        <source>Not ready</source>
+        <translation>Brak gotowości</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Access denied</source>
+        <translation>Odmowa dostępu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Could not connect</source>
+        <translation>Nie można połączyć</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Disconnected</source>
+        <translation>Rozłączono</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Permission denied</source>
+        <translation>Brak uprawnień</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Insufficient bandwidth</source>
+        <translation>Niewystarczająca szerokość pasma</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Network unavailable</source>
+        <translation>Sieć niedostępna</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Network communication error</source>
+        <translation>Błąd komunikacji sieciowej</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Streaming not supported</source>
+        <translation>Transmisje strumieniowe nie są obsługiwane</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Server alert</source>
+        <translation>Ostrzeżenie serwera</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Invalid protocol</source>
+        <translation>Nieprawidłowy protokół</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Invalid URL</source>
+        <translation>Nieprawidłowy adres URL</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Multicast error</source>
+        <translation>Błąd multiemisji</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Proxy server error</source>
+        <translation>Błąd serwera pośredniczącego</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Proxy server not supported</source>
+        <translation>Nieobsługiwany serwer pośredniczący</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Audio output error</source>
+        <translation>Błąd wyjściowego sygnału dźwiękowego</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Video output error</source>
+        <translation>Błąd wyjściowego sygnału wideo</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Decoder error</source>
+        <translation>Błąd dekodera</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Audio or video components could not be played</source>
+        <translation>Nie można odtworzyć dźwięku lub wideo</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>DRM error</source>
+        <translation>Błąd DRM</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unknown error (%1)</source>
+        <translation>Nieznany błąd (%1)</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::AbstractMediaPlayer</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/abstractmediaplayer.cpp" line="+73"/>
+        <source>Not ready to play</source>
+        <translation>Brak gotowości odtwarzania</translation>
+    </message>
+    <message>
+        <location line="+161"/>
+        <location line="+10"/>
+        <source>Error opening file</source>
+        <translation>Błąd otwierania pliku</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Error opening URL</source>
+        <translation>Błąd otwierania adresu URL</translation>
+    </message>
+    <message>
+        <location line="+83"/>
+        <source>Setting volume failed</source>
+        <translation>Ustawienie głośności zakończone błędem</translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Loading clip failed</source>
+        <translation>Załadowanie klipu zakończone błędem</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Playback complete</source>
+        <translation>Zakończono odtwarzanie</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::AbstractVideoPlayer</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/abstractvideoplayer.cpp" line="+108"/>
+        <source>Pause failed</source>
+        <translation>Zatrzymanie zakończone błędem</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Seek failed</source>
+        <translation>Wyszukiwanie zakończone błędem</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Getting position failed</source>
+        <translation>Ustalanie pozycji zakończone błędem</translation>
+    </message>
+    <message>
+        <location line="+66"/>
+        <source>Opening clip failed</source>
+        <translation>Otwieranie klipu zakończone błędem</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::AudioEqualizer</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+92"/>
+        <source>%1 Hz</source>
+        <translation>%1 Hz</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::AudioPlayer</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/audioplayer.cpp" line="+173"/>
+        <source>Getting position failed</source>
+        <translation>Ustalanie pozycji zakończone błędem</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::DsaVideoPlayer</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/videoplayer_dsa.cpp" line="+238"/>
+        <location line="+15"/>
+        <location line="+8"/>
+        <location line="+22"/>
+        <location line="+22"/>
+        <source>Video display error</source>
+        <translation type="unfinished">Błąd wyświetlacza wideo</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::EffectFactory</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+181"/>
+        <source>Enabled</source>
+        <translation>Włączono</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::EnvironmentalReverb</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/environmentalreverb.cpp" line="+146"/>
+        <source>Decay HF ratio (%)</source>
+        <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment>
+        <translation>Współczynnik zanikania HF (%)</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Decay time (ms)</source>
+        <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment>
+        <translation>Czas zanikania (ms)</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Density (%)</source>
+        <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment>
+        <translation>Gęstość (%)</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Diffusion (%)</source>
+        <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment>
+        <translation>Rozpraszanie (%)</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Reflections delay (ms)</source>
+        <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment>
+        <translation>Opóźnienie odbić (ms)</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Reflections level (mB)</source>
+        <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment>
+        <translation>Poziom odbić (mB)</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Reverb delay (ms)</source>
+        <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment>
+        <translation>Opóźnienie pogłosu (ms)</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Reverb level (mB)</source>
+        <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment>
+        <translation>Poziom pogłosu (mB)</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Room HF level</source>
+        <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment>
+        <translation>Poziom HF pomieszczenia</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Room level (mB)</source>
+        <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment>
+        <translation>Poziom pomieszczenia (mB)</translation>
     </message>
 </context>
 <context>
     <name>Phonon::MMF::MediaObject</name>
     <message>
-        <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+291"/>
-        <source>Media type could not be determined</source>
-        <translation>Nie można określić typu mediów</translation>
+        <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+276"/>
+        <source>Error opening source: type not supported</source>
+        <translation>Błąd otwierania źródła: typ źródła nie jest obsługiwany</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Error opening source: media type could not be determined</source>
+        <translation>Błąd otwierania źródła: nie można określić typu multimediów</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::StereoWidening</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/stereowidening.cpp" line="+79"/>
+        <source>Level (%)</source>
+        <translation>Poziom (%)</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::SurfaceVideoPlayer</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/videoplayer_surface.cpp" line="+126"/>
+        <location line="+16"/>
+        <source>Video display error</source>
+        <translation type="unfinished">Błąd wyświetlacza wideo</translation>
     </message>
 </context>
 <context>
@@ -314,7 +612,7 @@ zainstalowałeś libgstreamer-plugins-base.</translation>
 <context>
     <name>Q3FileDialog</name>
     <message>
-        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+4493"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+4501"/>
         <source>%1
 File not found.
 Check path and filename.</source>
@@ -585,7 +883,7 @@ Sprawdź ścieżkę i nazwę pliku.</translation>
     <message>
         <location line="+2"/>
         <source>Symlink to Special</source>
-        <translation>Specjalny dowiązanie symboliczne</translation>
+        <translation>Dowiązanie symboliczne do pliku specjalnego</translation>
     </message>
     <message>
         <location line="+1551"/>
@@ -951,8 +1249,8 @@ na
 <context>
     <name>QAbstractSocket</name>
     <message>
-        <location filename="../src/network/socket/qabstractsocket.cpp" line="+949"/>
-        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+646"/>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="+966"/>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+632"/>
         <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+691"/>
         <source>Connection refused</source>
         <translation>Połączenie odrzucone</translation>
@@ -971,19 +1269,20 @@ na
         <translation>Przekroczony czas połączenia</translation>
     </message>
     <message>
-        <location line="-555"/>
-        <location line="+805"/>
-        <location line="+208"/>
+        <location line="-559"/>
+        <location line="+809"/>
+        <location line="+220"/>
         <source>Operation on socket is not supported</source>
-        <translation>Operacja na gnieździe nieobsługiwana</translation>
+        <translation>Operacja na gnieździe nie jest obsługiwana</translation>
     </message>
     <message>
-        <location line="+580"/>
+        <location line="+583"/>
         <source>Socket is not connected</source>
         <translation>Gniazdo nie jest podłączone</translation>
     </message>
     <message>
-        <location line="-380"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+614"/>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="-380"/>
         <source>Socket operation timed out</source>
         <translation>Przekroczony czas operacji gniazda</translation>
     </message>
@@ -996,7 +1295,7 @@ na
 <context>
     <name>QAbstractSpinBox</name>
     <message>
-        <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1219"/>
+        <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1265"/>
         <source>Step &amp;down</source>
         <translation>Krok w &amp;dół</translation>
     </message>
@@ -1042,7 +1341,7 @@ na
         <translation>Niekompatybilność biblioteki Qt</translation>
     </message>
     <message>
-        <location filename="../src/gui/kernel/qapplication.cpp" line="+2280"/>
+        <location filename="../src/gui/kernel/qapplication.cpp" line="-13"/>
         <source>QT_LAYOUT_DIRECTION</source>
         <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
         <translation>LTR</translation>
@@ -1092,12 +1391,12 @@ na
 <context>
     <name>QColorDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1638"/>
+        <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1670"/>
         <source>&amp;Add to Custom Colors</source>
         <translation>&amp;Dodaj do własnych kolorów</translation>
     </message>
     <message>
-        <location line="-283"/>
+        <location line="-286"/>
         <source>A&amp;lpha channel:</source>
         <translation>Kanał &amp;alfa:</translation>
     </message>
@@ -1107,22 +1406,22 @@ na
         <translation>Wybierz kolor</translation>
     </message>
     <message>
-        <location line="+180"/>
+        <location line="+183"/>
         <source>&amp;Basic colors</source>
         <translation>&amp;Kolory podstawowe</translation>
     </message>
     <message>
-        <location line="-282"/>
+        <location line="-285"/>
         <source>Bl&amp;ue:</source>
         <translation>Błęki&amp;t:</translation>
     </message>
     <message>
-        <location line="+283"/>
+        <location line="+286"/>
         <source>&amp;Custom colors</source>
         <translation>Wła&amp;sne kolory</translation>
     </message>
     <message>
-        <location line="-284"/>
+        <location line="-287"/>
         <source>&amp;Green:</source>
         <translation>&amp;Zieleń:</translation>
     </message>
@@ -1150,7 +1449,7 @@ na
 <context>
     <name>QComboBox</name>
     <message>
-        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1771"/>
+        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1772"/>
         <location line="+65"/>
         <source>Open</source>
         <translation>Otwórz</translation>
@@ -1186,114 +1485,1177 @@ na
         <translation>%1: nie istnieje</translation>
     </message>
     <message>
-        <location line="+5"/>
-        <source>%1: out of resources</source>
-        <comment>QSystemSemaphore</comment>
-        <translation>%1: zasoby wyczerpane</translation>
+        <location line="+5"/>
+        <source>%1: out of resources</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: zasoby wyczerpane</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1: unknown error %2</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: nieznany błąd %2</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/>
+        <source>%1: key is empty</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: klucz jest pusty</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>%1: unable to make key</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: nie można utworzyć klucza</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>%1: ftok failed</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: wystąpił błąd w funkcji ftok()</translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Driver</name>
+    <message>
+        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1253"/>
+        <source>Unable to connect</source>
+        <translation>Nie można nawiązać połączenia</translation>
+    </message>
+    <message>
+        <location line="+298"/>
+        <source>Unable to commit transaction</source>
+        <translation>Nie można dokonać transakcji</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Nie można wycofać transakcji</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unable to set autocommit</source>
+        <translation>Nie można ustawić trybu automatycznego dokonywania transakcji</translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Result</name>
+    <message>
+        <location line="-1030"/>
+        <location line="+240"/>
+        <source>Unable to execute statement</source>
+        <translation>Nie można wykonać polecenia</translation>
+    </message>
+    <message>
+        <location line="-203"/>
+        <source>Unable to prepare statement</source>
+        <translation>Nie można przygotować polecenia</translation>
+    </message>
+    <message>
+        <location line="+193"/>
+        <source>Unable to bind variable</source>
+        <translation>Nie można powiązać zmiennej</translation>
+    </message>
+    <message>
+        <location line="+89"/>
+        <source>Unable to fetch record %1</source>
+        <translation>Nie można pobrać rekordu %1</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Unable to fetch next</source>
+        <translation>Nie można pobrać kolejnego wiersza danych</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Unable to fetch first</source>
+        <translation>Nie można pobrać pierwszego wiersza danych</translation>
+    </message>
+</context>
+<context>
+    <name>QDateTimeEdit</name>
+    <message>
+        <location filename="../src/gui/widgets/qdatetimeedit.cpp" line="+2287"/>
+        <source>am</source>
+        <translation>am</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>AM</source>
+        <translation>AM</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>pm</source>
+        <translation>pm</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>PM</source>
+        <translation>PM</translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeAbstractAnimation</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+165"/>
+        <source>Cannot animate non-existent property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cannot animate read-only property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativeutilmodule.cpp" line="+122"/>
+        <source>Animation is an abstract class</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeAnchorAnimation</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+2540"/>
+        <source>Cannot set a duration of &lt; 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeAnchors</name>
+    <message>
+        <location filename="../src/declarative/graphicsitems/qdeclarativeanchors.cpp" line="+181"/>
+        <source>Possible anchor loop detected on fill.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>Possible anchor loop detected on centerIn.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+201"/>
+        <location line="+34"/>
+        <location line="+610"/>
+        <location line="+37"/>
+        <source>Cannot anchor to an item that isn&apos;t a parent or sibling.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-534"/>
+        <source>Possible anchor loop detected on vertical anchor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+59"/>
+        <source>Possible anchor loop detected on horizontal anchor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+422"/>
+        <source>Cannot specify left, right, and hcenter anchors.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+37"/>
+        <source>Cannot anchor to a null item.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-34"/>
+        <source>Cannot anchor a horizontal edge to a vertical edge.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+37"/>
+        <source>Cannot anchor item to self.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <source>Cannot specify top, bottom, and vcenter anchors.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Cannot anchor a vertical edge to a horizontal edge.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeAnimatedImage</name>
+    <message>
+        <location filename="../src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp" line="+86"/>
+        <source>Qt was built without support for QMovie</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeBehavior</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativebehavior.cpp" line="+122"/>
+        <source>Cannot change the animation assigned to a Behavior.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeBinding</name>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativebinding.cpp" line="+225"/>
+        <source>Binding loop detected for property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeCompiledBindings</name>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativecompiledbindings.cpp" line="+305"/>
+        <source>Binding loop detected for property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeCompiler</name>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativecompiler.cpp" line="+186"/>
+        <location line="+1561"/>
+        <location line="+187"/>
+        <location line="+82"/>
+        <location line="+75"/>
+        <location line="+488"/>
+        <source>Invalid property assignment: &quot;%1&quot; is a read-only property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-2384"/>
+        <source>Invalid property assignment: unknown enumeration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Invalid property assignment: string expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Invalid property assignment: url expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Invalid property assignment: unsigned int expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: int expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: float expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: double expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: color expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: date expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: time expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: datetime expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Invalid property assignment: point expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Invalid property assignment: size expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Invalid property assignment: rect expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Invalid property assignment: boolean expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid property assignment: 3D vector expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Invalid property assignment: unsupported type &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+271"/>
+        <source>Element is not creatable.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+592"/>
+        <source>Component elements may not contain properties other than id</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Invalid component id specification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+477"/>
+        <source>id is not unique</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-467"/>
+        <source>Invalid component body specification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Component objects cannot declare new properties.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Component objects cannot declare new signals.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Component objects cannot declare new functions.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Cannot create empty component specification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+89"/>
+        <source>Incorrectly specified signal assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Empty signal assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Empty property assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Attached properties cannot be used here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <location line="+104"/>
+        <source>Non-existent attached object</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-100"/>
+        <location line="+103"/>
+        <source>Invalid attached object assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-50"/>
+        <source>Cannot assign to non-existent default property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location line="+355"/>
+        <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-324"/>
+        <source>Invalid use of namespace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Not an attached property name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+183"/>
+        <source>Invalid use of id property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+89"/>
+        <location line="+2"/>
+        <source>Property has already been assigned a value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <location line="+8"/>
+        <source>Invalid grouped property access</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cannot assign a value directly to a grouped property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Invalid property use</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Property assignment expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Single property assignment expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Unexpected object assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
+        <source>Cannot assign object to list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Can only assign one binding to lists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Cannot assign primitives to lists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Cannot assign multiple values to a script property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Invalid property assignment: script expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+106"/>
+        <source>Cannot assign object to property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <source>&quot;%1&quot; cannot operate on &quot;%2&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+117"/>
+        <source>Duplicate default property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Duplicate property name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Property names cannot begin with an upper case letter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Duplicate signal name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Signal names cannot begin with an upper case letter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Duplicate method name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Method names cannot begin with an upper case letter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Property value set multiple times</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Invalid property nesting</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Cannot override FINAL property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Invalid property type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+159"/>
+        <source>Invalid empty ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>IDs cannot start with an uppercase letter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>IDs must start with a letter or underscore</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>IDs must contain only letters, numbers, and underscores</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>ID illegally masks global JavaScript property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <location line="+9"/>
+        <source>No property alias location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <location line="+25"/>
+        <source>Invalid alias location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-16"/>
+        <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt; or &lt;id&gt;.&lt;property&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeComponent</name>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativecomponent.cpp" line="+454"/>
+        <source>Invalid empty URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeCompositeTypeManager</name>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativecompositetypemanager.cpp" line="+482"/>
+        <location line="+268"/>
+        <source>Resource %1 unavailable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-119"/>
+        <source>Namespace %1 cannot be used as a type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>%1 is not a type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+46"/>
+        <source>Type %1 unavailable</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeConnections</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativeconnections.cpp" line="+178"/>
+        <location line="+54"/>
+        <location line="+7"/>
+        <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-51"/>
+        <source>Connections: nested objects not allowed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Connections: syntax error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Connections: script expected</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeEngine</name>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativeengine.cpp" line="+1633"/>
+        <source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>plugin cannot be loaded for module &quot;%1&quot;: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>module &quot;%1&quot; plugin &quot;%2&quot; not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+82"/>
+        <location line="+55"/>
+        <source>module &quot;%1&quot; version %2.%3 is not installed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-53"/>
+        <source>module &quot;%1&quot; is not installed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <location line="+19"/>
+        <source>&quot;%1&quot;: no such directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>import &quot;%1&quot; has no qmldir and no namespace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativesqldatabase.cpp" line="+204"/>
+        <source>executeSql called outside transaction()</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+58"/>
+        <source>Read-only Transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Version mismatch: expected %1, found %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>SQL transaction failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>transaction: missing callback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
+        <location line="+16"/>
+        <source>SQL: database version mismatch</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeFlipable</name>
+    <message>
+        <location filename="../src/declarative/graphicsitems/qdeclarativeflipable.cpp" line="+129"/>
+        <source>front is a write-once property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>back is a write-once property</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeKeyNavigationAttached</name>
+    <message>
+        <location filename="../src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp" line="+62"/>
+        <source>KeyNavigation is only available via attached properties</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeKeysAttached</name>
+    <message>
+        <location line="+1"/>
+        <source>Keys is only available via attached properties</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeListModel</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativelistmodel.cpp" line="+399"/>
+        <source>remove: index %1 out of range</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>insert: value is not an object</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>insert: index %1 out of range</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>move: out of range</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>append: value is not an object</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <source>get: index %1 out of range</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>set: value is not an object</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location line="+34"/>
+        <source>set: index %1 out of range</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <location line="+15"/>
+        <source>ListElement: cannot contain nested elements</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>ListElement: cannot use reserved &quot;id&quot; property</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+49"/>
+        <source>ListElement: cannot use script for property value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>ListModel: undefined property &apos;%1&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeLoader</name>
+    <message>
+        <location filename="../src/declarative/graphicsitems/qdeclarativeloader.cpp" line="+317"/>
+        <source>Loader does not support loading non-visual elements.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeParentAnimation</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-169"/>
+        <source>Unable to preserve appearance under complex transform</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+7"/>
+        <source>Unable to preserve appearance under non-uniform scale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Unable to preserve appearance under scale of 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeParentChange</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativestateoperations.cpp" line="+95"/>
+        <source>Unable to preserve appearance under complex transform</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+7"/>
+        <source>Unable to preserve appearance under non-uniform scale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Unable to preserve appearance under scale of 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativeParser</name>
+    <message>
+        <location filename="../src/declarative/qml/parser/qdeclarativejslexer.cpp" line="+542"/>
+        <location line="+123"/>
+        <location line="+54"/>
+        <source>Illegal unicode escape sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-140"/>
+        <source>Illegal character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Unclosed string at end of line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Illegal escape squence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+72"/>
+        <source>Unclosed comment at end of file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+102"/>
+        <source>Illegal syntax for exponential number</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Identifier cannot start with numeric literal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+338"/>
+        <source>Unterminated regular expression literal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Invalid regular expression flag &apos;%0&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <location line="+22"/>
+        <source>Unterminated regular expression backslash sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Unterminated regular expression class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/declarative/qml/parser/qdeclarativejsparser.cpp" line="+1828"/>
+        <location line="+67"/>
+        <source>Syntax error</source>
+        <translation>Błąd składni</translation>
+    </message>
+    <message>
+        <location line="-65"/>
+        <source>Unexpected token `%1&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <location line="+24"/>
+        <source>Expected token `%1&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/declarative/qml/qdeclarativescriptparser.cpp" line="+264"/>
+        <location line="+456"/>
+        <location line="+59"/>
+        <source>Property value set multiple times</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-504"/>
+        <source>Expected type name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+171"/>
+        <source>Invalid import qualifier ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Script import qualifiers must be unique.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Script import requires a qualifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Library import requires a version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+59"/>
+        <source>Expected parameter type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Invalid property type modifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Unexpected property type modifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Expected property type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Readonly not yet supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+213"/>
+        <source>JavaScript declaration outside Script element</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativePauseAnimation</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-1973"/>
+        <source>Cannot set a duration of &lt; 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDeclarativePixmapCache</name>
+    <message>
+        <location filename="../src/declarative/util/qdeclarativepixmapcache.cpp" line="+197"/>
+        <source>Error decoding: %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+70"/>
+        <source>Failed to get image from provider: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <location line="+342"/>
+        <source>Cannot open: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>Unknown Error loading %1</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>QDeclarativePropertyAnimation</name>
     <message>
-        <location line="+4"/>
-        <source>%1: unknown error %2</source>
-        <comment>QSystemSemaphore</comment>
-        <translation>%1: nieznany błąd %2</translation>
+        <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+1100"/>
+        <source>Cannot set a duration of &lt; 0</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>QDeclarativePropertyChanges</name>
     <message>
-        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/>
-        <source>%1: key is empty</source>
-        <comment>QSystemSemaphore</comment>
-        <translation>%1: klucz jest pusty</translation>
+        <location filename="../src/declarative/util/qdeclarativepropertychanges.cpp" line="+231"/>
+        <source>PropertyChanges does not support creating state-specific objects.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
-        <source>%1: unable to make key</source>
-        <comment>QSystemSemaphore</comment>
-        <translation>%1: nie można utworzyć klucza</translation>
+        <location line="+151"/>
+        <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+9"/>
-        <source>%1: ftok failed</source>
-        <comment>QSystemSemaphore</comment>
-        <translation>%1: wystąpił błąd w funkcji ftok()</translation>
+        <location line="+3"/>
+        <source>Cannot assign to read-only property &quot;%1&quot;</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>QDB2Driver</name>
+    <name>QDeclarativeTextInput</name>
     <message>
-        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1253"/>
-        <source>Unable to connect</source>
-        <translation>Nie można nawiązać połączenia</translation>
+        <location filename="../src/declarative/graphicsitems/qdeclarativetextinput.cpp" line="+783"/>
+        <location line="+8"/>
+        <source>Could not load cursor delegate</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+298"/>
-        <source>Unable to commit transaction</source>
-        <translation>Nie można dokonać transakcji</translation>
+        <location line="+11"/>
+        <source>Could not instantiate cursor delegate</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>QDeclarativeVME</name>
     <message>
-        <location line="+17"/>
-        <source>Unable to rollback transaction</source>
-        <translation>Nie można wycofać transakcji</translation>
+        <location filename="../src/declarative/qml/qdeclarativevme.cpp" line="+194"/>
+        <source>Unable to create object of type %1</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
-        <source>Unable to set autocommit</source>
-        <translation>Nie można ustawić trybu automatycznego dokonywania transakcji</translation>
+        <location line="+380"/>
+        <source>Cannot assign value %1 to property %2</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>QDB2Result</name>
     <message>
-        <location line="-1030"/>
-        <location line="+240"/>
-        <source>Unable to execute statement</source>
-        <translation>Nie można wykonać polecenia</translation>
+        <location line="+22"/>
+        <source>Cannot assign object type %1 with no default method</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-203"/>
-        <source>Unable to prepare statement</source>
-        <translation>Nie można przygotować polecenia</translation>
+        <location line="+3"/>
+        <source>Cannot connect mismatched signal/slot %1 %vs. %2</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+193"/>
-        <source>Unable to bind variable</source>
-        <translation>Nie można powiązać zmiennej</translation>
+        <location line="+5"/>
+        <source>Cannot assign an object to signal property %1</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+89"/>
-        <source>Unable to fetch record %1</source>
-        <translation>Nie można pobrać rekordu %1</translation>
+        <location line="+146"/>
+        <source>Cannot assign object to list</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+19"/>
-        <source>Unable to fetch next</source>
-        <translation>Nie można pobrać kolejnego wiersza danych</translation>
+        <location line="+41"/>
+        <source>Cannot assign object to interface property</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+21"/>
-        <source>Unable to fetch first</source>
-        <translation>Nie można pobrać pierwszego wiersza danych</translation>
+        <location line="+11"/>
+        <source>Unable to create attached object</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Cannot set properties on %1 as it is null</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>QDateTimeEdit</name>
+    <name>QDeclarativeVisualDataModel</name>
     <message>
-        <location filename="../src/gui/widgets/qdatetimeedit.cpp" line="+2287"/>
-        <source>am</source>
-        <translation>am</translation>
+        <location filename="../src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp" line="+1061"/>
+        <source>Delegate component must be Item type.</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>QDeclarativeXmlListModel</name>
     <message>
-        <location line="+0"/>
-        <source>AM</source>
-        <translation>AM</translation>
+        <location filename="../src/declarative/util/qdeclarativeutilmodule.cpp" line="-12"/>
+        <location line="+2"/>
+        <source>Qt was built without support for xmlpatterns</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>QDeclarativeXmlListModelRole</name>
     <message>
-        <location line="+2"/>
-        <source>pm</source>
-        <translation>pm</translation>
+        <location filename="../src/declarative/util/qdeclarativexmllistmodel_p.h" line="+168"/>
+        <source>An XmlRole query must not start with &apos;/&apos;</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>QDeclarativeXmlRoleList</name>
     <message>
-        <location line="+0"/>
-        <source>PM</source>
-        <translation>PM</translation>
+        <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="+638"/>
+        <source>An XmlListModel query must start with &apos;/&apos; or &quot;//&quot;</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -1317,12 +2679,12 @@ na
 <context>
     <name>QDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qdialog.cpp" line="+636"/>
+        <location filename="../src/gui/dialogs/qdialog.cpp" line="+647"/>
         <source>What&apos;s This?</source>
         <translation>Co to jest?</translation>
     </message>
     <message>
-        <location line="-135"/>
+        <location line="-122"/>
         <source>Done</source>
         <translation>Wykonano</translation>
     </message>
@@ -1330,7 +2692,7 @@ na
 <context>
     <name>QDialogButtonBox</name>
     <message>
-        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+669"/>
+        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+696"/>
         <source>Abort</source>
         <translation>Przerwij</translation>
     </message>
@@ -1400,7 +2762,7 @@ na
         <translation>Ni&amp;e dla wszystkich</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/>
+        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1920"/>
         <location line="+464"/>
         <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="-41"/>
         <source>OK</source>
@@ -1544,7 +2906,7 @@ na
 <context>
     <name>QFile</name>
     <message>
-        <location filename="../src/corelib/io/qfile.cpp" line="+697"/>
+        <location filename="../src/corelib/io/qfile.cpp" line="+703"/>
         <location line="+155"/>
         <source>Destination file exists</source>
         <translation>Plik wyjściowy już istnieje</translation>
@@ -1583,7 +2945,7 @@ na
 <context>
     <name>QFileDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+2049"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+2078"/>
         <source>%1 already exists.
 Do you want to replace it?</source>
         <translation>%1 już istnieje.
@@ -1637,7 +2999,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Nie można skasować katalogu.</translation>
     </message>
     <message>
-        <location line="-2106"/>
+        <location line="-2135"/>
         <source>&amp;Delete</source>
         <translation>&amp;Skasuj</translation>
     </message>
@@ -1648,18 +3010,18 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Szczegóły</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+662"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+682"/>
         <source>Directories</source>
         <translation>Katalogi</translation>
     </message>
     <message>
-        <location line="-655"/>
-        <location line="+659"/>
+        <location line="-675"/>
+        <location line="+679"/>
         <source>Directory:</source>
         <translation>Katalog:</translation>
     </message>
     <message>
-        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+461"/>
+        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+464"/>
         <source>Drive</source>
         <translation>Urządzenie</translation>
     </message>
@@ -1712,8 +3074,8 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     </message>
     <message>
         <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-7"/>
-        <location line="+50"/>
-        <location line="+1528"/>
+        <location line="+55"/>
+        <location line="+1532"/>
         <source>&amp;Open</source>
         <translation>&amp;Otwórz</translation>
     </message>
@@ -1724,18 +3086,18 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Katalog wyżej</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2238"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2267"/>
         <source>&amp;Rename</source>
         <translation>&amp;Zmień nazwę</translation>
     </message>
     <message>
-        <location line="+660"/>
-        <location line="+50"/>
+        <location line="+680"/>
+        <location line="+55"/>
         <source>&amp;Save</source>
         <translation>&amp;Zachowaj</translation>
     </message>
     <message>
-        <location line="-708"/>
+        <location line="-733"/>
         <source>Show &amp;hidden files</source>
         <translation>Pokaż &amp;ukryte pliki</translation>
     </message>
@@ -1760,7 +3122,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Znajdź katalog</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+174"/>
+        <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+148"/>
         <source>All Files (*.*)</source>
         <translation>Wszystkie pliki (*.*)</translation>
     </message>
@@ -1776,18 +3138,18 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Do przodu</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1963"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1992"/>
         <source>New Folder</source>
         <translation>Nowy katalog</translation>
     </message>
     <message>
-        <location line="-1956"/>
+        <location line="-1985"/>
         <source>&amp;New Folder</source>
         <translation>&amp;Nowy katalog</translation>
     </message>
     <message>
-        <location line="+667"/>
-        <location line="+38"/>
+        <location line="+687"/>
+        <location line="+43"/>
         <source>&amp;Choose</source>
         <translation>&amp;Wybierz</translation>
     </message>
@@ -1797,14 +3159,14 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Usuń</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-722"/>
-        <location line="+450"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-747"/>
+        <location line="+481"/>
         <source>All Files (*)</source>
         <translation>Wszystkie pliki (*)</translation>
     </message>
     <message>
-        <location line="-426"/>
-        <location line="+663"/>
+        <location line="-457"/>
+        <location line="+683"/>
         <source>File &amp;name:</source>
         <translation>Nazwa &amp;pliku:</translation>
     </message>
@@ -1820,12 +3182,42 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <source>Create New Folder</source>
         <translation>Utwórz nowy katalog</translation>
     </message>
+    <message>
+        <location/>
+        <source>Go back</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Go forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Go to the parent directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Create a New Folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Change to list view mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Change to detail view mode</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QFileSystemModel</name>
     <message>
-        <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+744"/>
-        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+476"/>
+        <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+740"/>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+482"/>
         <source>%1 TB</source>
         <translation>%1 TB</translation>
     </message>
@@ -1853,7 +3245,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>%1 bajtów</translation>
     </message>
     <message>
-        <location line="+77"/>
+        <location line="+89"/>
         <source>Invalid filename</source>
         <translation>Niepoprawna nazwa pliku</translation>
     </message>
@@ -1890,7 +3282,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Data modyfikacji</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+258"/>
+        <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+261"/>
         <source>My Computer</source>
         <translation>Mój komputer</translation>
     </message>
@@ -2132,7 +3524,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QFontDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+782"/>
+        <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+774"/>
         <source>Effects</source>
         <translation>Efekty</translation>
     </message>
@@ -2152,13 +3544,12 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Przykład</translation>
     </message>
     <message>
-        <location line="-608"/>
-        <location line="+257"/>
+        <location line="-595"/>
         <source>Select Font</source>
         <translation>Wybierz czcionkę</translation>
     </message>
     <message>
-        <location line="+343"/>
+        <location line="+587"/>
         <source>&amp;Size</source>
         <translation>&amp;Rozmiar</translation>
     </message>
@@ -2181,7 +3572,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QFtp</name>
     <message>
-        <location filename="../src/network/access/qftp.cpp" line="+2337"/>
+        <location filename="../src/network/access/qftp.cpp" line="+2343"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="+2024"/>
         <source>Changing directory failed:
 %1</source>
@@ -2194,14 +3585,14 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Podłączony do hosta</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qftp.cpp" line="-1329"/>
+        <location filename="../src/network/access/qftp.cpp" line="-1335"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-1458"/>
         <location line="+1451"/>
         <source>Connected to host %1</source>
         <translation>Podłączony do hosta %1</translation>
     </message>
     <message>
-        <location line="+1317"/>
+        <location line="+1323"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-290"/>
         <source>Connecting to host failed:
 %1</source>
@@ -2216,7 +3607,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Połączenie zamknięte</translation>
     </message>
     <message>
-        <location line="-1158"/>
+        <location line="-1164"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-1299"/>
         <source>Connection refused for data connection</source>
         <translation>Połączenie do przesyłu danych odrzucone</translation>
@@ -2233,7 +3624,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Połączenie do %1 zakończone</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qftp.cpp" line="+1453"/>
+        <location filename="../src/network/access/qftp.cpp" line="+1459"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-271"/>
         <source>Creating directory failed:
 %1</source>
@@ -2254,7 +3645,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Host %1 znaleziony</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qftp.cpp" line="-1445"/>
+        <location filename="../src/network/access/qftp.cpp" line="-1451"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-1555"/>
         <source>Host %1 not found</source>
         <translation>Host %1 nie znaleziony</translation>
@@ -2265,7 +3656,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Host znaleziony</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qftp.cpp" line="+1437"/>
+        <location filename="../src/network/access/qftp.cpp" line="+1443"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-289"/>
         <source>Listing directory failed:
 %1</source>
@@ -2277,11 +3668,11 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-3"/>
         <source>Login failed:
 %1</source>
-        <translation>Logowanie nie powiodło się:
+        <translation>Logowanie zakończone błędem:
 %1</translation>
     </message>
     <message>
-        <location line="-1501"/>
+        <location line="-1507"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-1335"/>
         <source>Not connected</source>
         <translation>Nie podłączony</translation>
@@ -2292,7 +3683,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Przekroczony czas połączenia do hosta %1</translation>
     </message>
     <message>
-        <location line="+1453"/>
+        <location line="+1459"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="+1356"/>
         <source>Removing directory failed:
 %1</source>
@@ -2308,7 +3699,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 %1</translation>
     </message>
     <message>
-        <location line="-944"/>
+        <location line="-950"/>
         <location line="+29"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="-823"/>
         <location line="+728"/>
@@ -2316,7 +3707,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Nieznany błąd</translation>
     </message>
     <message>
-        <location line="+911"/>
+        <location line="+917"/>
         <location filename="../src/qt3support/network/q3ftp.cpp" line="+92"/>
         <source>Uploading file failed:
 %1</source>
@@ -2325,19 +3716,33 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     </message>
 </context>
 <context>
+    <name>QGstreamerPlayerSession</name>
+    <message>
+        <location filename="../src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp" line="+423"/>
+        <location line="+16"/>
+        <source>Unable to play %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QHostInfo</name>
     <message>
-        <location filename="../src/network/kernel/qhostinfo_p.h" line="+185"/>
+        <location filename="../src/network/kernel/qhostinfo_p.h" line="+103"/>
         <source>Unknown error</source>
         <translation>Nieznany błąd</translation>
     </message>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo.cpp" line="+175"/>
+        <source>No host name given</source>
+        <translation>Nie podano nazwy hosta</translation>
+    </message>
 </context>
 <context>
     <name>QHostInfoAgent</name>
     <message>
-        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+257"/>
+        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+259"/>
         <location line="+32"/>
-        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+220"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+216"/>
         <location line="+27"/>
         <source>Host not found</source>
         <translation>Host nie znaleziony</translation>
@@ -2358,12 +3763,14 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Nieznany błąd</translation>
     </message>
     <message>
+        <location line="-98"/>
         <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-67"/>
         <source>No host name given</source>
         <translation>Nie podano nazwy hosta</translation>
     </message>
     <message>
-        <location line="+0"/>
+        <location line="+1"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+0"/>
         <source>Invalid hostname</source>
         <translation>Niepoprawna nazwa hosta</translation>
     </message>
@@ -2381,7 +3788,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Podłączony do hosta %1</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+581"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-3"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+17"/>
         <source>Connection closed</source>
         <translation>Połączenie zakończone</translation>
@@ -2416,8 +3823,6 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     </message>
     <message>
         <location filename="../src/network/access/qhttp.cpp" line="+20"/>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+10"/>
-        <location line="+19"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="-464"/>
         <source>HTTP request failed</source>
         <translation>Komenda HTTP zakończona błędem</translation>
@@ -2494,7 +3899,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Błąd zapisywania odpowiedzi do urządzenia</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-16"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+13"/>
         <source>Proxy requires authentication</source>
         <translation>Pośrednik wymaga autoryzacji</translation>
     </message>
@@ -2516,7 +3921,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location line="+3"/>
         <source>SSL handshake failed</source>
-        <translation>Nawiązanie sesji SSL nie powiodło się</translation>
+        <translation>Nawiązanie sesji SSL zakończone błędem</translation>
     </message>
     <message>
         <location filename="../src/network/access/qhttp.cpp" line="-328"/>
@@ -2688,7 +4093,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QIODevice</name>
     <message>
-        <location filename="../src/corelib/global/qglobal.cpp" line="+2081"/>
+        <location filename="../src/corelib/global/qglobal.cpp" line="+2108"/>
         <source>No space left on device</source>
         <translation>Brak wolnego miejsca na urządzeniu</translation>
     </message>
@@ -2700,7 +4105,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location line="-6"/>
         <source>Permission denied</source>
-        <translation>Brak dostępu</translation>
+        <translation>Brak uprawnień</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -2708,7 +4113,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Zbyt wiele otwartych plików</translation>
     </message>
     <message>
-        <location filename="../src/corelib/io/qiodevice.cpp" line="+1556"/>
+        <location filename="../src/corelib/io/qiodevice.cpp" line="+1596"/>
         <source>Unknown error</source>
         <translation>Nieznany błąd</translation>
     </message>
@@ -2716,7 +4121,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QInputContext</name>
     <message>
-        <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+291"/>
+        <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+336"/>
         <source>Mac OS X input method</source>
         <translation>Metoda wprowadzania Mac OS X</translation>
     </message>
@@ -2772,7 +4177,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Błąd podczas weryfikacji danych we wtyczce &apos;%1&apos;</translation>
     </message>
     <message>
-        <location line="+350"/>
+        <location line="+381"/>
         <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
         <translation>Wtyczka &apos;%1&apos; używa niepoprawnej wersji biblioteki QT. (%2.%3.%4) [%5]</translation>
     </message>
@@ -2787,7 +4192,8 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Nieznany błąd</translation>
     </message>
     <message>
-        <location line="-402"/>
+        <location line="-540"/>
+        <location line="+138"/>
         <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+343"/>
         <source>The shared library was not found.</source>
         <translation>Biblioteka współdzielona niedostępna.</translation>
@@ -2824,7 +4230,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QLineEdit</name>
     <message>
-        <location filename="../src/gui/widgets/qlineedit.cpp" line="+2033"/>
+        <location filename="../src/gui/widgets/qlineedit.cpp" line="+2089"/>
         <source>&amp;Copy</source>
         <translation>S&amp;kopiuj</translation>
     </message>
@@ -2870,7 +4276,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location filename="../src/network/socket/qlocalserver_unix.cpp" line="-8"/>
         <source>%1: Permission denied</source>
-        <translation>%1: Brak dostępu</translation>
+        <translation>%1: Brak uprawnień</translation>
     </message>
     <message>
         <location line="+12"/>
@@ -2900,8 +4306,8 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location line="+3"/>
         <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/>
-        <location line="+45"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+79"/>
+        <location line="+59"/>
         <source>%1: Invalid name</source>
         <translation>%1: Niepoprawna nazwa</translation>
     </message>
@@ -2932,7 +4338,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location line="+3"/>
         <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-50"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-64"/>
         <source>%1: Connection error</source>
         <translation>%1: Błąd połączenia</translation>
     </message>
@@ -2957,7 +4363,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QMYSQLDriver</name>
     <message>
-        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1431"/>
+        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1448"/>
         <source>Unable to begin transaction</source>
         <translation>Nie można rozpocząć transakcji</translation>
     </message>
@@ -3145,6 +4551,39 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     </message>
 </context>
 <context>
+    <name>QMediaPlayer</name>
+    <message>
+        <location filename="../src/multimedia/playback/qmediaplayer.cpp" line="+496"/>
+        <source>The QMediaPlayer object does not have a valid service</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMediaPlaylist</name>
+    <message>
+        <location filename="../src/multimedia/base/qmediaplaylist.cpp" line="+455"/>
+        <location line="+46"/>
+        <source>Could not add items to read only playlist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-27"/>
+        <location line="+46"/>
+        <source>Playlist format is not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>The file could not be accessed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>Playlist format is not supported.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QMenu</name>
     <message>
         <location filename="../src/plugins/accessible/widgets/qaccessiblemenu.cpp" line="+157"/>
@@ -3169,7 +4608,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QMenuBar</name>
     <message>
-        <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+410"/>
+        <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+452"/>
         <source>Actions</source>
         <translation>Akcje</translation>
     </message>
@@ -3187,12 +4626,12 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Pomoc</translation>
     </message>
     <message>
-        <location line="-1098"/>
+        <location line="-1129"/>
         <source>Hide Details...</source>
         <translation>Ukryj szczegóły...</translation>
     </message>
     <message>
-        <location line="+250"/>
+        <location line="+281"/>
         <location line="+847"/>
         <location filename="../src/gui/dialogs/qmessagebox.h" line="-52"/>
         <location line="+8"/>
@@ -3207,10 +4646,10 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location line="+5"/>
         <source>&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;&lt;p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">&lt;p&gt;Qt jest zestawem narzędzi programistycznych dedykowanym dla języka C++. Służy on do opracowywania aplikacji międzyplatformowych.&lt;/p&gt;&lt;p&gt;Qt umożliwia jednoźródłowe przenoszenie między systemami MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux i wszystkimi głównymi wersjami komercyjnymi systemu Unix. Środowisko Qt jest dostępne dla urządzeń wbudowanych opartych na systemie Linux ( Qt dla wbudowanego systemu Linux) oraz Windows CE.&lt;/p&gt;&lt;p&gt;Zestaw Qt jest dostępny w trzech różnych opcjach licencjonowania stworzonych w celu zadowolenia naszych różnych użytkowników.&lt;/p&gt;&lt;p&gt;Qt podlegający licencji zgodnie z naszą komercyjną umową licencyjną jest odpowiedni do opracowywania oprogramowań własnościowych/komercyjnych, dzięki czemu kod źródłowy nie jest udostępniany osobom trzecim. W przeciwnym razie zestaw Qt jest niezgodny z warunkami licencji GNU LGPL w wersji 2.1 lub GNU GPL w wersji 3.0.&lt;/p&gt;&lt;p&gt;Środowisko Qt objęte licencją GNU LGPL w wersji 2.1 nadaje się do tworzenia aplikacji Qt (własnościowych lub oprogramowań otwartych) tylko wtedy, gdy przestrzegane są warunki licencji GNU LGPL w wersji 2.1.&lt;/p&gt;&lt;p&gt;Qt objęty Powszechną Licencją Publiczną GNU w wersji 3.0 jest odpowiedni do opracowywania aplikacji QT, aby móc korzystać z aplikacji w połączeniu z oprogramowaniem podlegającym warunkom licencji GNU GPL w wersji 3.0 lub aby przestrzegać warunków licencji GNU GPL w wersji 3.0.&lt;/p&gt;&lt;p&gt;Więcej informacji na temat licencji Qt można znaleźć na stronie &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation i/lub oddziały firmy.&lt;/p&gt;&lt;p&gt;Qt jest produktem firmy Nokia. Dodatkowe informacje znajdują się na stronie &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; &lt;/p&gt;</translation>
     </message>
     <message>
-        <location line="-1580"/>
+        <location line="-1610"/>
         <source>Show Details...</source>
         <translation>Pokaż szczegóły...</translation>
     </message>
@@ -3239,7 +4678,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QNativeSocketEngine</name>
     <message>
-        <location filename="../src/network/socket/qnativesocketengine.cpp" line="+263"/>
+        <location filename="../src/network/socket/qnativesocketengine.cpp" line="+266"/>
         <source>Another socket is already listening on the same port</source>
         <translation>Inne gniazdo nasłuchuje już na tym porcie</translation>
     </message>
@@ -3301,7 +4740,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location line="+18"/>
         <source>Permission denied</source>
-        <translation>Brak dostępu</translation>
+        <translation>Brak uprawnień</translation>
     </message>
     <message>
         <location line="-12"/>
@@ -3378,23 +4817,46 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     </message>
 </context>
 <context>
+    <name>QNetworkAccessDataBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+76"/>
+        <source>Operation not supported on %1</source>
+        <translation type="unfinished">Operacja nieobsługiwana na %1</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Invalid URI: %1</source>
+        <translation type="unfinished">Niepoprawny URI: %1</translation>
+    </message>
+</context>
+<context>
     <name>QNetworkAccessDebugPipeBackend</name>
     <message>
         <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+195"/>
         <source>Write error writing to %1: %2</source>
         <translation>Błąd w trakcie zapisywania do %1: %2</translation>
     </message>
+    <message>
+        <location line="+60"/>
+        <source>Socket error on %1: %2</source>
+        <translation type="unfinished">Błąd gniazda na %1: %2</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Remote host closed the connection prematurely on %1</source>
+        <translation type="unfinished">Zdalny host przedwcześnie zakończył połączenie na %1</translation>
+    </message>
 </context>
 <context>
     <name>QNetworkAccessFileBackend</name>
     <message>
-        <location filename="../src/network/access/qfilenetworkreply.cpp" line="+83"/>
+        <location filename="../src/network/access/qfilenetworkreply.cpp" line="+85"/>
         <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/>
         <source>Request for opening non-local file %1</source>
         <translation>Żądanie otwarcia zdalnego pliku %1</translation>
     </message>
     <message>
-        <location line="+31"/>
+        <location line="+33"/>
         <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+45"/>
         <source>Error opening %1: %2</source>
         <translation>Błąd otwierania %1: %2</translation>
@@ -3405,7 +4867,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Błąd w trakcie zapisywania do %1: %2</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qfilenetworkreply.cpp" line="-11"/>
+        <location filename="../src/network/access/qfilenetworkreply.cpp" line="-13"/>
         <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+48"/>
         <source>Cannot open %1: Path is a directory</source>
         <translation>Nie można otworzyć %1: Ścieżka jest katalogiem</translation>
@@ -3447,37 +4909,111 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QNetworkAccessHttpBackend</name>
     <message>
-        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+585"/>
+        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+645"/>
         <source>No suitable proxy found</source>
         <translation>Nie odnaleziono odpowiedniego pośrednika</translation>
     </message>
 </context>
 <context>
+    <name>QNetworkAccessManager</name>
+    <message>
+        <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+910"/>
+        <source>Network access is disabled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QNetworkReply</name>
     <message>
-        <location line="+95"/>
+        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+101"/>
         <source>Error downloading %1 - server replied: %2</source>
         <translation>Błąd podczas pobierania %1 - odpowiedź serwera: %2</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+77"/>
+        <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="-828"/>
         <source>Protocol &quot;%1&quot; is unknown</source>
         <translation>Protokół &quot;%1&quot; nie jest znany</translation>
     </message>
+    <message>
+        <location line="+192"/>
+        <source>Network session error.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+329"/>
+        <source>Temporary network failure.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QNetworkReplyImpl</name>
     <message>
-        <location line="+519"/>
+        <location line="+111"/>
         <location line="+28"/>
         <source>Operation canceled</source>
         <translation>Operacja anulowana</translation>
     </message>
 </context>
 <context>
+    <name>QNetworkSession</name>
+    <message>
+        <location filename="../src/network/bearer/qnetworksession.cpp" line="+449"/>
+        <source>Invalid configuration.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkSessionPrivateImpl</name>
+    <message>
+        <location filename="../src/plugins/bearer/icd/qnetworksession_impl.cpp" line="+1005"/>
+        <source>Roaming error</source>
+        <translation>Błąd roamingu</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Session aborted by user or system</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Unidentified Error</source>
+        <translation>Niezidentyfikowany błąd</translation>
+    </message>
+    <message>
+        <location filename="../src/plugins/bearer/qnetworksession_impl.cpp" line="+272"/>
+        <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+227"/>
+        <source>Unknown session error.</source>
+        <translation>Nieznany błąd sesji.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/>
+        <source>The session was aborted by the user or system.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/>
+        <source>The requested operation is not supported by the system.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/>
+        <source>The specified configuration cannot be used.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/>
+        <source>Roaming was aborted or is not possible.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QOCIDriver</name>
     <message>
-        <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+1939"/>
+        <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+1944"/>
         <source>Unable to initialize</source>
         <comment>QOCIDriver</comment>
         <translation>Nie można dokonać inicjalizacji</translation>
@@ -3551,17 +5087,17 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QODBCDriver</name>
     <message>
-        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+2045"/>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+2174"/>
         <source>Unable to commit transaction</source>
         <translation>Nie można potwierdzić transakcji</translation>
     </message>
     <message>
-        <location line="-255"/>
+        <location line="-286"/>
         <source>Unable to connect</source>
         <translation>Nie można nawiązać połączenia</translation>
     </message>
     <message>
-        <location line="+238"/>
+        <location line="+269"/>
         <source>Unable to disable autocommit</source>
         <translation>Nie można wyłączyć trybu automatycznego dokonywania transakcji</translation>
     </message>
@@ -3576,7 +5112,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>Nie można wycofać transakcji</translation>
     </message>
     <message>
-        <location line="-266"/>
+        <location line="-297"/>
         <source>Unable to connect - Driver doesn&apos;t support all functionality required</source>
         <translation>Nie można nawiązać połączenia - sterownik nie obsługuje całej potrzebnej funkcjonalności</translation>
     </message>
@@ -3584,24 +5120,24 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QODBCResult</name>
     <message>
-        <location line="-932"/>
-        <location line="+346"/>
+        <location line="-941"/>
+        <location line="+351"/>
         <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
         <translation>QODBCResult::reset: Nie można ustawić &apos;SQL_CURSOR_STATIC&apos; jako atrybutu polecenia. Proszę sprawdzić konfiguracje sterownika ODBC</translation>
     </message>
     <message>
-        <location line="+286"/>
+        <location line="+285"/>
         <source>Unable to bind variable</source>
         <translation>Nie można powiązać zmiennej</translation>
     </message>
     <message>
-        <location line="-615"/>
-        <location line="+623"/>
+        <location line="-619"/>
+        <location line="+627"/>
         <source>Unable to execute statement</source>
         <translation>Nie można wykonać polecenia</translation>
     </message>
     <message>
-        <location line="-547"/>
+        <location line="-546"/>
         <source>Unable to fetch next</source>
         <translation>Nie można pobrać kolejnych danych</translation>
     </message>
@@ -3613,12 +5149,12 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
     <message>
         <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+189"/>
         <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-199"/>
-        <location line="+576"/>
+        <location line="+578"/>
         <source>Unable to fetch last</source>
         <translation>Nie można pobrać ostatnich danych</translation>
     </message>
     <message>
-        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-670"/>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-672"/>
         <source>Unable to fetch</source>
         <translation>Nie można pobrać</translation>
     </message>
@@ -3636,41 +5172,21 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="-97"/>
-        <source>Invalid hostname</source>
-        <translation>Niepoprawna nazwa hosta</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+74"/>
-        <source>Operation not supported on %1</source>
-        <translation>Operacja nieobsługiwana na %1</translation>
-    </message>
-    <message>
-        <location line="+57"/>
-        <source>Invalid URI: %1</source>
-        <translation>Niepoprawny URI: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+60"/>
-        <source>Socket error on %1: %2</source>
-        <translation>Błąd gniazda na %1: %2</translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Remote host closed the connection prematurely on %1</source>
-        <translation>Zdalny host przedwcześnie zakończył połączenie na %1</translation>
+        <location filename="../src/3rdparty/phonon/phonon/pulsesupport.cpp" line="+162"/>
+        <location line="+11"/>
+        <source>PulseAudio Sound Server</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/network/kernel/qhostinfo.cpp" line="+175"/>
-        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/>
-        <source>No host name given</source>
-        <translation>Nie podano nazwy hosta</translation>
+        <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="-194"/>
+        <source>&quot;%1&quot; duplicates a previous role name and will be disabled.</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>QPPDOptionsModel</name>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1238"/>
         <source>Name</source>
         <translation>Nazwa</translation>
     </message>
@@ -3845,7 +5361,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
 <context>
     <name>QPrintDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+329"/>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+333"/>
         <source>A0 (841 x 1189 mm)</source>
         <translation>A0 (841 x 1189 mm)</translation>
     </message>
@@ -3895,13 +5411,18 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>A9 (37 x 52 mm)</translation>
     </message>
     <message>
-        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+131"/>
+        <location line="+40"/>
+        <source>Print current page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+133"/>
         <location line="+225"/>
         <source>Aliases: %1</source>
         <translation>Aliasy: %1</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+1"/>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-39"/>
         <source>B0 (1000 x 1414 mm)</source>
         <translation>B0 (1000 x 1414 mm)</translation>
     </message>
@@ -3971,7 +5492,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>podłączony lokalnie</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+266"/>
+        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+272"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
@@ -4027,14 +5548,14 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
         <translation>US Common #10 Envelope (105 x 241 mm)</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+112"/>
+        <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+113"/>
         <location line="+13"/>
         <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="-2"/>
         <source>Print</source>
         <translation>Drukowanie</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-359"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-392"/>
         <source>Print To File ...</source>
         <translation>Drukuj do pliku ...</translation>
     </message>
@@ -4060,7 +5581,7 @@ Please choose a different file name.</source>
 Proszę wybrać inną nazwę pliku.</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-210"/>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-214"/>
         <source>File exists</source>
         <translation>Plik istnieje</translation>
     </message>
@@ -4070,7 +5591,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>&lt;qt&gt;Czy chcesz nadpisać?&lt;/qt&gt;</translation>
     </message>
     <message>
-        <location line="+227"/>
+        <location line="+231"/>
         <source>Print selection</source>
         <translation>Drukuj zaznaczone</translation>
     </message>
@@ -4230,7 +5751,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Niestandardowy</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-523"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-530"/>
         <location line="+68"/>
         <source>&amp;Options &gt;&gt;</source>
         <translation>&amp;Opcje &gt;&gt;</translation>
@@ -4246,7 +5767,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>&amp;Opcje &lt;&lt;</translation>
     </message>
     <message>
-        <location line="+253"/>
+        <location line="+260"/>
         <source>Print to File (PDF)</source>
         <translation>Drukuj do pliku (PDF)</translation>
     </message>
@@ -4274,12 +5795,12 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QPrintPreviewDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+246"/>
+        <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+249"/>
         <source>%1%</source>
         <translation>%1%</translation>
     </message>
     <message>
-        <location line="+68"/>
+        <location line="+84"/>
         <source>Print Preview</source>
         <translation>Podgląd wydruku</translation>
     </message>
@@ -4359,7 +5880,12 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Ustawienia strony</translation>
     </message>
     <message>
-        <location line="+150"/>
+        <location line="+6"/>
+        <source>Close</source>
+        <translation>Zamknij</translation>
+    </message>
+    <message>
+        <location line="+148"/>
         <source>Export to PDF</source>
         <translation>Wyeksportuj do PDF</translation>
     </message>
@@ -4490,6 +6016,11 @@ Proszę wybrać inną nazwę pliku.</translation>
         <source>Short side</source>
         <translation>Krótka strona</translation>
     </message>
+    <message>
+        <location/>
+        <source>Current Page</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QPrintWidget</name>
@@ -4572,7 +6103,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Przekroczony czas operacji procesu</translation>
     </message>
     <message>
-        <location filename="../src/corelib/io/qprocess.cpp" line="+855"/>
+        <location filename="../src/corelib/io/qprocess.cpp" line="+866"/>
         <location line="+52"/>
         <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/>
         <location line="+50"/>
@@ -4687,7 +6218,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QSQLite2Driver</name>
     <message>
-        <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+391"/>
+        <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+399"/>
         <source>Error opening database</source>
         <translation>Błąd otwierania bazy danych</translation>
     </message>
@@ -4715,7 +6246,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Nie można wykonać polecenia</translation>
     </message>
     <message>
-        <location line="-143"/>
+        <location line="-150"/>
         <source>Unable to fetch results</source>
         <translation>Nie można pobrać wyników</translation>
     </message>
@@ -4723,7 +6254,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QSQLiteDriver</name>
     <message>
-        <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+551"/>
+        <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+549"/>
         <source>Error closing database</source>
         <translation>Błąd zamykania bazy danych</translation>
     </message>
@@ -4751,7 +6282,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QSQLiteResult</name>
     <message>
-        <location line="-203"/>
+        <location line="-194"/>
         <source>Parameter count mismatch</source>
         <translation>Niezgodna liczba parametrów</translation>
     </message>
@@ -5009,7 +6540,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QScriptDebuggerLocalsModel</name>
     <message>
-        <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+872"/>
+        <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+897"/>
         <source>Name</source>
         <translation>Nazwa</translation>
     </message>
@@ -5229,7 +6760,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+81"/>
         <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/>
         <source>%1: permission denied</source>
-        <translation>%1: brak dostępu</translation>
+        <translation>%1: brak uprawnień</translation>
     </message>
     <message>
         <location line="-16"/>
@@ -5310,7 +6841,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+32"/>
         <source>%1: size query failed</source>
-        <translation>%1: zapytanie o rozmiar nie powiodło się</translation>
+        <translation>%1: zapytanie o rozmiar zakończone błędem</translation>
     </message>
     <message>
         <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="-271"/>
@@ -5321,7 +6852,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QShortcut</name>
     <message>
-        <location filename="../src/gui/kernel/qkeysequence.cpp" line="+1249"/>
+        <location filename="../src/gui/kernel/qkeysequence.cpp" line="+1312"/>
         <source>+</source>
         <translation>+</translation>
     </message>
@@ -5332,7 +6863,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Alt</translation>
     </message>
     <message>
-        <location line="-871"/>
+        <location line="-934"/>
         <source>Back</source>
         <translation>Back</translation>
     </message>
@@ -5389,27 +6920,27 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Keyboard Light On/Off</source>
-        <translation type="unfinished"></translation>
+        <translation>Włącz/wyłącz podświetlenie klawiatury</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Keyboard Brightness Up</source>
-        <translation type="unfinished"></translation>
+        <translation>Zwiększ jasność klawiatury</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Keyboard Brightness Down</source>
-        <translation type="unfinished"></translation>
+        <translation>Zmniejsz jasność klawiatury</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Power Off</source>
-        <translation type="unfinished"></translation>
+        <translation>Wyłącz zasilanie</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Wake Up</source>
-        <translation type="unfinished"></translation>
+        <translation>Przebudzenie</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5429,12 +6960,12 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Sleep</source>
-        <translation type="unfinished"></translation>
+        <translation>Uśpienie</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>LightBulb</source>
-        <translation type="unfinished"></translation>
+        <translation>Żarówka</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5454,17 +6985,17 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Hot Links</source>
-        <translation type="unfinished"></translation>
+        <translation>Popularne łącza</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Adjust Brightness</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustaw jasność</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Finance</source>
-        <translation type="unfinished"></translation>
+        <translation>Finanse</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5474,7 +7005,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Audio Rewind</source>
-        <translation type="unfinished"></translation>
+        <translation>Przewijanie do tyłu</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5534,7 +7065,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Display</source>
-        <translation type="unfinished"></translation>
+        <translation>Wyświetlacz</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5549,7 +7080,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Spreadsheet</source>
-        <translation type="unfinished"></translation>
+        <translation>Arkusz kalkulacyjny</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5559,7 +7090,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Gra</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5574,7 +7105,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Logoff</source>
-        <translation type="unfinished"></translation>
+        <translation>Wyloguj</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5589,12 +7120,12 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Keyboard Menu</source>
-        <translation type="unfinished"></translation>
+        <translation>Menu klawiatury</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Menu PB</source>
-        <translation type="unfinished"></translation>
+        <translation>Menu PB</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5609,7 +7140,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Home Office</source>
-        <translation type="unfinished"></translation>
+        <translation>Biuro domowe</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5644,12 +7175,12 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Rotation PB</source>
-        <translation type="unfinished"></translation>
+        <translation>Obrót PB</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Rotation KB</source>
-        <translation type="unfinished"></translation>
+        <translation>Obrót KB</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5664,7 +7195,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Spellchecker</source>
-        <translation type="unfinished"></translation>
+        <translation>Sprawdzanie pisowni</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5679,7 +7210,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Task Panel</source>
-        <translation type="unfinished"></translation>
+        <translation>Panel zadań</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5704,12 +7235,12 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Word Processor</source>
-        <translation type="unfinished"></translation>
+        <translation>Procesor tekstu</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>XFer</source>
-        <translation type="unfinished"></translation>
+        <translation>XFer</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5729,7 +7260,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Messenger</source>
-        <translation type="unfinished"></translation>
+        <translation>Komunikator</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5739,7 +7270,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Mail Forward</source>
-        <translation type="unfinished"></translation>
+        <translation>Przekazanie poczty</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5769,22 +7300,22 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Ultra Wide Band</source>
-        <translation type="unfinished"></translation>
+        <translation>Ultraszerokie pasmo</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Audio Forward</source>
-        <translation type="unfinished"></translation>
+        <translation>Przewijanie do przodu</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Audio Repeat</source>
-        <translation type="unfinished"></translation>
+        <translation>Powtarzanie</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Audio Random Play</source>
-        <translation type="unfinished"></translation>
+        <translation>Odtwarzanie losowe</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -5814,12 +7345,12 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+1"/>
         <source>Suspend</source>
-        <translation type="unfinished"></translation>
+        <translation>Wstrzymanie</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Hibernate</source>
-        <translation type="unfinished"></translation>
+        <translation>Hibernacja</translation>
     </message>
     <message>
         <location line="+24"/>
@@ -5842,13 +7373,163 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Kontekst4</translation>
     </message>
     <message>
-        <location line="+578"/>
+        <location line="+7"/>
+        <source>Kanji</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Muhenkan</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Henkan</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Romaji</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hiragana</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Katakana</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hiragana Katakana</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Zenkaku</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hankaku</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Zenkaku Hankaku</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Touroku</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Massyo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Kana Lock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Kana Shift</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Eisu Shift</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Eisu toggle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Code input</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Multiple Candidate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Previous Candidate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Hangul</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul End</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul Hanja</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul Jamo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul Romaja</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul Jeonja</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul Banja</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul PreHanja</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul PostHanja</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangul Special</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+602"/>
         <location line="+135"/>
         <source>Ctrl</source>
         <translation>Ctrl</translation>
     </message>
     <message>
-        <location line="-890"/>
+        <location line="-953"/>
         <source>Del</source>
         <translation>Del</translation>
     </message>
@@ -5883,12 +7564,12 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Escape</translation>
     </message>
     <message>
-        <location line="+746"/>
+        <location line="+809"/>
         <source>F%1</source>
         <translation>F%1</translation>
     </message>
     <message>
-        <location line="-870"/>
+        <location line="-933"/>
         <source>Favorites</source>
         <translation>Ulubione</translation>
     </message>
@@ -6058,13 +7739,13 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Menu</translation>
     </message>
     <message>
-        <location line="+743"/>
+        <location line="+806"/>
         <location line="+130"/>
         <source>Meta</source>
         <translation>Meta</translation>
     </message>
     <message>
-        <location line="-718"/>
+        <location line="-781"/>
         <source>No</source>
         <translation>Nie</translation>
     </message>
@@ -6160,13 +7841,13 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Wybierz</translation>
     </message>
     <message>
-        <location line="+588"/>
+        <location line="+651"/>
         <location line="+138"/>
         <source>Shift</source>
         <translation>Shift</translation>
     </message>
     <message>
-        <location line="-902"/>
+        <location line="-965"/>
         <source>Space</source>
         <translation>Spacja</translation>
     </message>
@@ -6335,7 +8016,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QSoftKeyManager</name>
     <message>
-        <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+79"/>
+        <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+63"/>
         <source>Ok</source>
         <translation>OK</translation>
     </message>
@@ -6360,7 +8041,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Anuluj</translation>
     </message>
     <message>
-        <location line="+176"/>
+        <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+319"/>
         <source>Exit</source>
         <translation>Wyjście</translation>
     </message>
@@ -6438,12 +8119,17 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QSslSocket</name>
     <message>
-        <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+546"/>
+        <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+550"/>
         <source>Unable to write data: %1</source>
-        <translation>Nie można zapisać danych: %1</translation>
+        <translation></translation>
     </message>
     <message>
-        <location line="+119"/>
+        <location line="+63"/>
+        <source>Unable to decrypt data: %1</source>
+        <translation>Nie można odszyfrować danych: %1</translation>
+    </message>
+    <message>
+        <location line="+76"/>
         <source>Error while reading: %1</source>
         <translation>Błąd podczas czytania: %1</translation>
     </message>
@@ -6453,7 +8139,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Błąd podczas nawiązania sesji SSL: %1</translation>
     </message>
     <message>
-        <location line="-501"/>
+        <location line="-524"/>
         <source>Error creating SSL context (%1)</source>
         <translation>Błąd tworzenia kontekstu (%1)</translation>
     </message>
@@ -6463,7 +8149,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Niepoprawna lub pusta lista szyfrów (%1)</translation>
     </message>
     <message>
-        <location line="+42"/>
+        <location line="+45"/>
         <source>Private key does not certify public key, %1</source>
         <translation>Prywatny klucz nie uwiarygodnia publicznego, %1</translation>
     </message>
@@ -6478,7 +8164,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Błąd tworzenia sesji SSL: %1</translation>
     </message>
     <message>
-        <location line="-61"/>
+        <location line="-64"/>
         <source>Cannot provide a certificate with no key, %1</source>
         <translation>Nie można dostarczyć certyfikatu bez klucza, %1</translation>
     </message>
@@ -6488,7 +8174,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Błąd ładowania lokalnego certyfikatu, %1</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+15"/>
         <source>Error loading private key, %1</source>
         <translation>Błąd ładowania prywatnego klucza, %1</translation>
     </message>
@@ -6540,67 +8226,67 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="+3"/>
         <source>The certificate is self-signed, and untrusted</source>
-        <translation type="unfinished"></translation>
+        <translation>Niewiarygodny certyfikat z podpisem własnym</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
-        <translation type="unfinished"></translation>
+        <translation>Główny certyfikat łańcucha zaufania ma własny podpis i jest niewiarygodny</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The issuer certificate of a locally looked up certificate could not be found</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie można odnaleźć certyfikatu wydawcy wyszukanego lokalnie certyfikatu</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>No certificates could be verified</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie można zweryfikować żadnych certyfikatów</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>One of the CA certificates is invalid</source>
-        <translation type="unfinished"></translation>
+        <translation>Jeden z certyfikatów urzędu certyfikacji jest nieprawidłowy</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The basicConstraints path length parameter has been exceeded</source>
-        <translation type="unfinished"></translation>
+        <translation>Długość ścieżki określona w podstawowych warunkach ograniczających została przekroczona</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The supplied certificate is unsuitable for this purpose</source>
-        <translation type="unfinished"></translation>
+        <translation>Dostarczony certyfikat jest nieodpowiedni dla tego przeznaczenia</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The root CA certificate is not trusted for this purpose</source>
-        <translation type="unfinished"></translation>
+        <translation>Główny certyfikat urzędu certyfikacji nie jest wiarygodny dla tego przeznaczenia</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The root CA certificate is marked to reject the specified purpose</source>
-        <translation type="unfinished"></translation>
+        <translation>Główny certyfikat urzędu certyfikacji jest wyznaczony do odrzucania podanego przeznaczenia</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
-        <translation type="unfinished"></translation>
+        <translation>Certyfikat wydawcy obecnego kandydata został odrzucony, ponieważ nazwa podmiotu nie odpowiadała nazwie wydawcy obecnego certyfikatu</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source>
-        <translation type="unfinished"></translation>
+        <translation>Certyfikat wydawcy obecnego kandydata został odrzucony, ponieważ nazwa wydawcy i przedstawiony numer seryjny nie odpowiadały identyfikatorowi klucza urzędu certyfikacji obecnego certyfikatu</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>The peer did not present any certificate</source>
-        <translation type="unfinished"></translation>
+        <translation>Element równorzędny nie przedstawił żadnego certyfikatu</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The host name did not match any of the valid hosts for this certificate</source>
-        <translation type="unfinished"></translation>
+        <translation>Nazwa hosta nie odpowiadała żadnemu z poprawnych hostów dla tego certyfikatu</translation>
     </message>
     <message>
         <location line="+6"/>
@@ -6613,17 +8299,17 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+1028"/>
         <source>Missing initial state in compound state &apos;%1&apos;</source>
-        <translation>Brak stanu początkowego w stanie złożonym &apos;%1&apos;</translation>
+        <translation>Brak stanu początkowego w stanie złożonym &quot;%1&quot;</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Missing default state in history state &apos;%1&apos;</source>
-        <translation>Brak domyślnego stanu w historycznym stanie &apos;%1&apos;</translation>
+        <translation>Brak domyślnego stanu w historycznym stanie &quot;%1&quot;</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>No common ancestor for targets and source of transition from state &apos;%1&apos;</source>
-        <translation>Brak wspólnego przodka dla stanów docelowych i stanu źródłowego w przejściu ze stanu &apos;%1&apos;</translation>
+        <translation>Brak wspólnego przodka dla stanów docelowych i stanu źródłowego w przejściu ze stanu &quot;%1&quot;</translation>
     </message>
     <message>
         <location line="+4"/>
@@ -6643,7 +8329,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <location line="-13"/>
         <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+4"/>
         <source>%1: permission denied</source>
-        <translation>%1: brak dostępu</translation>
+        <translation>%1: brak uprawnień</translation>
     </message>
     <message>
         <location line="+4"/>
@@ -6691,7 +8377,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QTcpServer</name>
     <message>
-        <location filename="../src/network/socket/qtcpserver.cpp" line="+282"/>
+        <location filename="../src/network/socket/qtcpserver.cpp" line="+292"/>
         <source>Operation on socket is not supported</source>
         <translation>Operacja na gnieździe nieobsługiwana</translation>
     </message>
@@ -6699,7 +8385,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QTextControl</name>
     <message>
-        <location filename="../src/gui/text/qtextcontrol.cpp" line="+2034"/>
+        <location filename="../src/gui/text/qtextcontrol.cpp" line="+2047"/>
         <source>&amp;Copy</source>
         <translation>S&amp;kopiuj</translation>
     </message>
@@ -6711,7 +8397,7 @@ Proszę wybrać inną nazwę pliku.</translation>
     <message>
         <location line="-12"/>
         <source>Cu&amp;t</source>
-        <translation>&amp;Wytnij</translation>
+        <translation>W&amp;ytnij</translation>
     </message>
     <message>
         <location line="+21"/>
@@ -6757,7 +8443,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QUdpSocket</name>
     <message>
-        <location filename="../src/network/socket/qudpsocket.cpp" line="+179"/>
+        <location filename="../src/network/socket/qudpsocket.cpp" line="+189"/>
         <source>This platform does not support IPv6</source>
         <translation>Ta platforma nie obsługuje IPv6</translation>
     </message>
@@ -6857,7 +8543,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QWebFrame</name>
     <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+712"/>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+753"/>
         <source>Request cancelled</source>
         <translation>Prośba anulowana</translation>
     </message>
@@ -6890,7 +8576,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QWebPage</name>
     <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+44"/>
         <source>Submit</source>
         <comment>default label for Submit buttons in forms on web pages</comment>
         <translation>Wyślij</translation>
@@ -7130,7 +8816,13 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Domyślny</translation>
     </message>
     <message>
-        <location line="+115"/>
+        <location line="+110"/>
+        <source>Missing Plug-in</source>
+        <comment>Label text to be used when a plug-in is missing</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
         <source>Loading...</source>
         <comment>Media controller status message when the media is loading</comment>
         <translation>Ładowanie...</translation>
@@ -7271,7 +8963,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <location line="+2"/>
         <source>Pause playback</source>
         <comment>Media controller element</comment>
-        <translation>Wstrzymaj odtwarzanie</translation>
+        <translation>Zatrzymaj odtwarzanie</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -7364,7 +9056,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>%1 sekund</translation>
     </message>
     <message>
-        <location line="-210"/>
+        <location line="-225"/>
         <source>Inspect</source>
         <comment>Inspect Element context menu item</comment>
         <translation>Zwiedzaj</translation>
@@ -7388,23 +9080,23 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Wyczyść ostatnie wyszukiwania</translation>
     </message>
     <message>
-        <location line="+75"/>
+        <location line="+90"/>
         <source>Unknown</source>
         <comment>Unknown filesize FTP directory listing item</comment>
         <translation>Nieznany</translation>
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+236"/>
         <source>Web Inspector - %2</source>
         <translation>Wizytator sieciowy - %2</translation>
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+416"/>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+456"/>
         <source>Bad HTTP request</source>
         <translation>Niepoprawna komenda HTTP</translation>
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-286"/>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-301"/>
         <source>This is a searchable index. Enter search keywords: </source>
         <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
         <translation>To jest indeks wyszukiwawczy. Podaj słowa do wyszukania:</translation>
@@ -7422,7 +9114,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Z prawej na lewą</translation>
     </message>
     <message>
-        <location line="+100"/>
+        <location line="+115"/>
         <source>%1 (%2x%3 pixels)</source>
         <comment>Title string for images</comment>
         <translation>%1 (%2x%3 piksli)</translation>
@@ -7503,22 +9195,22 @@ Proszę wybrać inną nazwę pliku.</translation>
         </translation>
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1827"/>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1959"/>
         <source>JavaScript Alert - %1</source>
         <translation>Ostrzeżenie JavaScript - %1</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location line="+17"/>
         <source>JavaScript Confirm - %1</source>
         <translation>Potwierdzenie JavaScript - %1</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location line="+20"/>
         <source>JavaScript Prompt - %1</source>
         <translation>Zachęta JavaScript - %1</translation>
     </message>
     <message>
-        <location line="+25"/>
+        <location line="+26"/>
         <source>JavaScript Problem - %1</source>
         <translation>Problem JavaScript - %1</translation>
     </message>
@@ -7528,7 +9220,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Skrypt na tej stronie nie działa poprawnie. Czy chcesz przerwać ten skrypt?</translation>
     </message>
     <message>
-        <location line="+381"/>
+        <location line="+374"/>
         <source>Move the cursor to the next character</source>
         <translation>Przesuń kursor do następnego znaku</translation>
     </message>
@@ -7749,7 +9441,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QWidget</name>
     <message>
-        <location filename="../src/gui/kernel/qwidget.cpp" line="+5723"/>
+        <location filename="../src/gui/kernel/qwidget.cpp" line="+5809"/>
         <source>*</source>
         <translation>*</translation>
     </message>
@@ -7757,7 +9449,7 @@ Proszę wybrać inną nazwę pliku.</translation>
 <context>
     <name>QWizard</name>
     <message>
-        <location filename="../src/gui/dialogs/qwizard.cpp" line="+649"/>
+        <location filename="../src/gui/dialogs/qwizard.cpp" line="+689"/>
         <source>Go Back</source>
         <translation>Wróć</translation>
     </message>
@@ -8001,6 +9693,34 @@ Proszę wybrać inną nazwę pliku.</translation>
     </message>
 </context>
 <context>
+    <name>QXmlPatternistCLI</name>
+    <message>
+        <location filename="../src/xmlpatterns/api/qcoloringmessagehandler.cpp" line="+87"/>
+        <source>Warning in %1, at line %2, column %3: %4</source>
+        <translation>Ostrzeżenie w %1, wiersz %2, kolumna %3: %4</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Warning in %1: %2</source>
+        <translation>Ostrzeżenie w %1: %2</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Unknown location</source>
+        <translation>Nieznane położenie</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Error %1 in %2, at line %3, column %4: %5</source>
+        <translation>Błąd %1 w %2, wiersz %3, kolumna %4: %5</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Error %1 in %2: %3</source>
+        <translation>Błąd %1 w %2: %3</translation>
+    </message>
+</context>
+<context>
     <name>QXmlStream</name>
     <message>
         <location filename="../src/corelib/xml/qxmlstream.cpp" line="+611"/>
@@ -9834,7 +11554,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Brak podelementu w tym zakresie, możliwymi podelementami są: %1.</translation>
     </message>
     <message>
-        <location line="+127"/>
+        <location line="+143"/>
         <source>Document is not a XML schema.</source>
         <translation>Dokument nie jest schematem XML.</translation>
     </message>
@@ -9860,7 +11580,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Docelowa przestrzeń nazw %1 zaimportowanego schematu jest różna od docelowej przestrzeni nazw %2 która jest zdefiniowana w schemacie importującym.</translation>
     </message>
     <message>
-        <location line="+237"/>
+        <location line="+243"/>
         <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source>
         <translation>Element %1 nie może zawierać tej samej wartości atrybutu %2 co docelowa przestrzeń nazw %3.</translation>
     </message>
@@ -9870,7 +11590,7 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Element %1 bez atrybutu %2 jest niedozwolony wewnątrz schematu bez docelowej przestrzeni nazw.</translation>
     </message>
     <message>
-        <location line="+833"/>
+        <location line="+851"/>
         <location line="+158"/>
         <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source>
         <translation>Element %1 jest niedozwolony wewnątrz elementu %2 jeśli jest obecny atrybut %3.</translation>
@@ -10555,4 +12275,12 @@ Proszę wybrać inną nazwę pliku.</translation>
         <translation>Atrybut &quot;%1&quot; zawiera niepoprawną zawartość QName: %2.</translation>
     </message>
 </context>
+<context>
+    <name>Widget</name>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui"/>
+        <source>about:blank</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 </TS>
-- 
cgit v0.12


From 13dff164d2ab13b1258d31693b67acebc8636890 Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@nokia.com>
Date: Tue, 27 Apr 2010 10:14:44 +0200
Subject: changes-4.7.0 updated

---
 dist/changes-4.7.0 | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0
index d5b4672..4fd7fdb 100644
--- a/dist/changes-4.7.0
+++ b/dist/changes-4.7.0
@@ -56,6 +56,10 @@ QtGui
       functions, and replaced them with setCopyCount(), copyCount() and
       supportsMultipleCopies().
 
+ - QCommonStyle
+    * Fixed a bug that led to missing text pixels in QTabBar when using
+      small font sizes. (QTBUG-7137)
+
 ****************************************************************************
 *                          Database Drivers                                *
 ****************************************************************************
@@ -72,6 +76,13 @@ Qt for Linux/X11
 Qt for Windows
 --------------
 
+ - QLocalSocket
+    * Pipe handle leak fixed, when closing a QLocalSocket that still has
+      unwritten data. (QTBUG-7815)
+    * Fixed closing state for local sockets with unwritten data. (QTBUG-9681)
+    * Detection of Windows mobile 6.5 fixed. (QTBUG-8418)
+    * Improved performance of writing to QLocalSocket.
+
 
 Qt for Mac OS X
 ---------------
@@ -84,6 +95,17 @@ Qt for Embedded Linux
 Qt for Windows CE
 -----------------
 
+ - Core changes
+    * Fixed menu handling on Windows mobile. (QTBUG-8754)
+    * Fixed a crash when receiving a certain type of WM_SETTINGSCHANGE
+      message. (QTBUG-7943)
+
+ - QWindowsMobileStyle
+    * Huge performance penalty for QTabWidget fixed for
+      Windows mobile 6.5. (QTBUG-8419)
+    * QTabBar scroll button size has been fixed. (QTBUG-8757)
+
+
 
 ****************************************************************************
 *                      Compiler Specific Changes                           *
@@ -96,6 +118,9 @@ Qt for Windows CE
 
 - Build System
 
+  - "configure -fast" on Windows now also works for other make tools than
+    nmake. (QTBUG-8562)
+
 - Assistant
 
 
-- 
cgit v0.12

