AVFoundation: fix initial volume.
The volume level set before loading a media was never actually set on
AVPlayer.
Regression introduced by 4e07ff99 on OSX.
Task-number: QTBUG-48154
Change-Id: I599e3d55b35d7196aebc4753a367a29049f99d33
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
This commit is contained in:
@@ -80,6 +80,8 @@ public:
|
||||
|
||||
qreal playbackRate() const;
|
||||
|
||||
inline bool isVolumeSupported() const { return m_volumeSupported; }
|
||||
|
||||
public Q_SLOTS:
|
||||
void setPlaybackRate(qreal rate);
|
||||
|
||||
@@ -159,6 +161,7 @@ private:
|
||||
QMediaContent m_resources;
|
||||
ResourceHandler m_resourceHandler;
|
||||
|
||||
const bool m_volumeSupported;
|
||||
bool m_muted;
|
||||
bool m_tryingAsync;
|
||||
int m_volume;
|
||||
|
||||
@@ -222,11 +222,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
|
||||
if (self.session && self.session->isVolumeSupported()) {
|
||||
[m_player setVolume:m_session->volume() / 100.0f];
|
||||
[m_player setMuted:m_session->isMuted()];
|
||||
}
|
||||
|
||||
//Create a new player layer if we don't have one already
|
||||
if (!m_playerLayer)
|
||||
@@ -382,6 +382,11 @@ AVFMediaPlayerSession::AVFMediaPlayerSession(AVFMediaPlayerService *service, QOb
|
||||
, m_state(QMediaPlayer::StoppedState)
|
||||
, m_mediaStatus(QMediaPlayer::NoMedia)
|
||||
, m_mediaStream(0)
|
||||
#ifdef Q_OS_IOS
|
||||
, m_volumeSupported(QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_7_0)
|
||||
#else
|
||||
, m_volumeSupported(true)
|
||||
#endif
|
||||
, m_muted(false)
|
||||
, m_tryingAsync(false)
|
||||
, m_volume(100)
|
||||
@@ -718,21 +723,20 @@ void AVFMediaPlayerSession::setVolume(int volume)
|
||||
qDebug() << Q_FUNC_INFO << volume;
|
||||
#endif
|
||||
|
||||
if (m_volume == volume)
|
||||
return;
|
||||
|
||||
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
if (![player respondsToSelector:@selector(setVolume:)]) {
|
||||
if (!m_volumeSupported) {
|
||||
qWarning("%s not implemented, requires iOS 7 or later", Q_FUNC_INFO);
|
||||
return;
|
||||
}
|
||||
|
||||
[player setVolume:volume / 100.0f];
|
||||
if (m_volume == volume)
|
||||
return;
|
||||
|
||||
m_volume = volume;
|
||||
|
||||
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
||||
if (player)
|
||||
[player setVolume:volume / 100.0f];
|
||||
|
||||
Q_EMIT volumeChanged(m_volume);
|
||||
}
|
||||
|
||||
@@ -741,22 +745,21 @@ void AVFMediaPlayerSession::setMuted(bool muted)
|
||||
#ifdef QT_DEBUG_AVF
|
||||
qDebug() << Q_FUNC_INFO << muted;
|
||||
#endif
|
||||
if (m_muted == muted)
|
||||
return;
|
||||
|
||||
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
// iOS: setMuted exists since iOS 7.0, thus check if it exists
|
||||
if (![player respondsToSelector:@selector(setMuted:)]) {
|
||||
if (!m_volumeSupported) {
|
||||
qWarning("%s not implemented, requires iOS 7 or later", Q_FUNC_INFO);
|
||||
return;
|
||||
}
|
||||
|
||||
[player setMuted:muted];
|
||||
if (m_muted == muted)
|
||||
return;
|
||||
|
||||
m_muted = muted;
|
||||
|
||||
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
||||
if (player)
|
||||
[player setMuted:muted];
|
||||
|
||||
Q_EMIT mutedChanged(muted);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user