AVFoundation: Enable use of QMediaPlayer for audio on iOS
authorAndy Nichols <andy.nichols@digia.com>
Wed, 14 Aug 2013 14:42:44 +0000 (16:42 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 27 Aug 2013 12:15:54 +0000 (14:15 +0200)
This commit disables the video components of the AVFoundation
mediaplayer backend when building for iOS and enables the use of
QMediaPlayer with audio assets.

Change-Id: Iadd6f9c61ed1e656301326e90a22cbca6428b654
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
src/multimedia/multimedia.pro
src/plugins/avfoundation/avfoundation.pro
src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
src/plugins/avfoundation/mediaplayer/mediaplayer.pro
src/plugins/plugins.pro

index 2657285..f1f4b38 100644 (file)
@@ -63,9 +63,6 @@ ANDROID_BUNDLED_FILES += \
 MODULE_PLUGIN_TYPES = \
     mediaservice
 
-mac {
-   LIBS += -framework AppKit -framework QuartzCore -framework QTKit
-}
 win32:LIBS += -luuid
 
 HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
index 7f2ddb2..48ad0a5 100644 (file)
@@ -1,4 +1,5 @@
 TEMPLATE = subdirs
 
-SUBDIRS += camera \
-           mediaplayer
+!ios: SUBDIRS += camera
+
+SUBDIRS += mediaplayer
index b916f47..668a26e 100644 (file)
 #include "avfmediaplayersession.h"
 #include "avfmediaplayercontrol.h"
 #include "avfmediaplayermetadatacontrol.h"
-#include "avfvideooutput.h"
-#include "avfvideorenderercontrol.h"
+#if defined(Q_OS_OSX)
+# include "avfvideooutput.h"
+# include "avfvideorenderercontrol.h"
 
-#ifndef QT_NO_WIDGETS
-#include "avfvideowidgetcontrol.h"
+# ifndef QT_NO_WIDGETS
+#  include "avfvideowidgetcontrol.h"
+# endif
 #endif
 
 QT_USE_NAMESPACE
@@ -83,7 +85,7 @@ QMediaControl *AVFMediaPlayerService::requestControl(const char *name)
 
     if (qstrcmp(name, QMetaDataReaderControl_iid) == 0)
         return m_playerMetaDataControl;
-
+#if defined(Q_OS_OSX)
     if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
         if (!m_videoOutput)
             m_videoOutput = new AVFVideoRendererControl(this);
@@ -91,7 +93,7 @@ QMediaControl *AVFMediaPlayerService::requestControl(const char *name)
         m_session->setVideoOutput(qobject_cast<AVFVideoOutput*>(m_videoOutput));
         return m_videoOutput;
     }
-#ifndef QT_NO_WIDGETS
+# ifndef QT_NO_WIDGETS
     if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
         if (!m_videoOutput)
             m_videoOutput = new AVFVideoWidgetControl(this);
@@ -99,8 +101,8 @@ QMediaControl *AVFMediaPlayerService::requestControl(const char *name)
         m_session->setVideoOutput(qobject_cast<AVFVideoOutput*>(m_videoOutput));
         return m_videoOutput;
     }
+# endif
 #endif
-
     return 0;
 }
 
@@ -109,7 +111,7 @@ void AVFMediaPlayerService::releaseControl(QMediaControl *control)
 #ifdef QT_DEBUG_AVF
     qDebug() << Q_FUNC_INFO << control;
 #endif
-
+#if defined(Q_OS_OSX)
     if (m_videoOutput == control) {
         AVFVideoRendererControl *renderControl = qobject_cast<AVFVideoRendererControl*>(m_videoOutput);
         if (renderControl)
@@ -118,4 +120,5 @@ void AVFMediaPlayerService::releaseControl(QMediaControl *control)
         m_session->setVideoOutput(0);
         delete control;
     }
+#endif
 }
index 7af6f43..bb2bc75 100644 (file)
@@ -240,9 +240,11 @@ static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMe
     m_player = [AVPlayer playerWithPlayerItem:m_playerItem];
     [m_player retain];
 
+#if defined(Q_OS_OSX)
     //Set the initial volume on new player object
     if (self.session)
         m_player.volume = m_session->volume() / 100.0f;
+#endif
 
     //Create a new player layer if we don't have one already
     if (!m_playerLayer)
@@ -735,10 +737,12 @@ void AVFMediaPlayerSession::setVolume(int volume)
 
     m_volume = volume;
 
+#if defined(Q_OS_OSX)
     AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
     if (player) {
         [[(AVFMediaPlayerSessionObserver*)m_observer player] setVolume:m_volume / 100.0f];
     }
+#endif
 
     Q_EMIT volumeChanged(m_volume);
 }
@@ -752,9 +756,9 @@ void AVFMediaPlayerSession::setMuted(bool muted)
         return;
 
     m_muted = muted;
-
+#if defined(Q_OS_OSX)
     [[(AVFMediaPlayerSessionObserver*)m_observer player] setMuted:m_muted];
-
+#endif
     Q_EMIT mutedChanged(muted);
 }
 
index a61c62d..21edf89 100644 (file)
@@ -20,32 +20,39 @@ HEADERS += \
     avfmediaplayermetadatacontrol.h \
     avfmediaplayerservice.h \
     avfmediaplayersession.h \
-    avfmediaplayerserviceplugin.h \
-    avfvideorenderercontrol.h \
-    avfdisplaylink.h \
-    avfvideoframerenderer.h \
-    avfvideooutput.h
+    avfmediaplayerserviceplugin.h
 
 OBJECTIVE_SOURCES += \
     avfmediaplayercontrol.mm \
     avfmediaplayermetadatacontrol.mm \
     avfmediaplayerservice.mm \
     avfmediaplayerserviceplugin.mm \
-    avfmediaplayersession.mm \
-    avfvideorenderercontrol.mm \
-    avfdisplaylink.mm \
-    avfvideoframerenderer.mm \
-    avfvideooutput.mm
-
-qtHaveModule(widgets) {
-    QT += multimediawidgets-private opengl
-    HEADERS += \
-        avfvideowidgetcontrol.h \
-        avfvideowidget.h
+    avfmediaplayersession.mm
 
+!ios {
+    HEADERS += \
+        avfvideorenderercontrol.h \
+        avfdisplaylink.h \
+        avfvideoframerenderer.h \
+        avfvideooutput.h
     OBJECTIVE_SOURCES += \
-        avfvideowidgetcontrol.mm \
-        avfvideowidget.mm
+        avfvideorenderercontrol.mm \
+        avfdisplaylink.mm \
+        avfvideoframerenderer.mm \
+        avfvideooutput.mm
+
+    LIBS += -framework QuartzCore -framework AppKit
+
+    qtHaveModule(widgets) {
+        QT += multimediawidgets-private opengl
+        HEADERS += \
+            avfvideowidgetcontrol.h \
+            avfvideowidget.h
+
+        OBJECTIVE_SOURCES += \
+            avfvideowidgetcontrol.mm \
+            avfvideowidget.mm
+    }
 }
 
 OTHER_FILES += \
index ba8a388..b035663 100644 (file)
@@ -47,10 +47,9 @@ unix:!mac {
 mac:!simulator {
     SUBDIRS += audiocapture
 
-    !ios {
-        SUBDIRS += qt7
-        config_avfoundation: SUBDIRS += avfoundation
-    }
+    config_avfoundation: SUBDIRS += avfoundation
+
+    !ios: SUBDIRS += qt7
 }
 
 config_opensles {