From 17a700292ad9289e8de199dc50b3e222ede42e1d Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Wed, 14 Aug 2013 16:42:44 +0200 Subject: [PATCH] AVFoundation: Enable use of QMediaPlayer for audio on iOS 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 --- src/multimedia/multimedia.pro | 3 -- src/plugins/avfoundation/avfoundation.pro | 5 ++- .../mediaplayer/avfmediaplayerservice.mm | 19 ++++++---- .../mediaplayer/avfmediaplayersession.mm | 8 +++- .../avfoundation/mediaplayer/mediaplayer.pro | 43 +++++++++++++--------- src/plugins/plugins.pro | 7 ++-- 6 files changed, 48 insertions(+), 37 deletions(-) diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro index 2657285..f1f4b38 100644 --- a/src/multimedia/multimedia.pro +++ b/src/multimedia/multimedia.pro @@ -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 diff --git a/src/plugins/avfoundation/avfoundation.pro b/src/plugins/avfoundation/avfoundation.pro index 7f2ddb2..48ad0a5 100644 --- a/src/plugins/avfoundation/avfoundation.pro +++ b/src/plugins/avfoundation/avfoundation.pro @@ -1,4 +1,5 @@ TEMPLATE = subdirs -SUBDIRS += camera \ - mediaplayer +!ios: SUBDIRS += camera + +SUBDIRS += mediaplayer diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm index b916f47..668a26e 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm @@ -43,11 +43,13 @@ #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(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(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(m_videoOutput); if (renderControl) @@ -118,4 +120,5 @@ void AVFMediaPlayerService::releaseControl(QMediaControl *control) m_session->setVideoOutput(0); delete control; } +#endif } diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm index 7af6f43..bb2bc75 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm @@ -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); } diff --git a/src/plugins/avfoundation/mediaplayer/mediaplayer.pro b/src/plugins/avfoundation/mediaplayer/mediaplayer.pro index a61c62d..21edf89 100644 --- a/src/plugins/avfoundation/mediaplayer/mediaplayer.pro +++ b/src/plugins/avfoundation/mediaplayer/mediaplayer.pro @@ -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 += \ diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index ba8a388..b035663 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -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 { -- 2.7.4