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 <richard.gustavsen@digia.com>
This commit is contained in:
Andy Nichols
2013-08-14 16:42:44 +02:00
committed by The Qt Project
parent d3531cb0cc
commit 17a700292a
6 changed files with 47 additions and 36 deletions

View 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

View File

@@ -1,4 +1,5 @@
TEMPLATE = subdirs
SUBDIRS += camera \
mediaplayer
!ios: SUBDIRS += camera
SUBDIRS += mediaplayer

View File

@@ -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<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
}

View 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);
}

View 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
avfmediaplayersession.mm
qtHaveModule(widgets) {
QT += multimediawidgets-private opengl
!ios {
HEADERS += \
avfvideowidgetcontrol.h \
avfvideowidget.h
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 += \

View 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 {