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;
|
qreal playbackRate() const;
|
||||||
|
|
||||||
|
inline bool isVolumeSupported() const { return m_volumeSupported; }
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void setPlaybackRate(qreal rate);
|
void setPlaybackRate(qreal rate);
|
||||||
|
|
||||||
@@ -159,6 +161,7 @@ private:
|
|||||||
QMediaContent m_resources;
|
QMediaContent m_resources;
|
||||||
ResourceHandler m_resourceHandler;
|
ResourceHandler m_resourceHandler;
|
||||||
|
|
||||||
|
const bool m_volumeSupported;
|
||||||
bool m_muted;
|
bool m_muted;
|
||||||
bool m_tryingAsync;
|
bool m_tryingAsync;
|
||||||
int m_volume;
|
int m_volume;
|
||||||
|
|||||||
@@ -222,11 +222,11 @@ static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMe
|
|||||||
m_player = [AVPlayer playerWithPlayerItem:m_playerItem];
|
m_player = [AVPlayer playerWithPlayerItem:m_playerItem];
|
||||||
[m_player retain];
|
[m_player retain];
|
||||||
|
|
||||||
#if defined(Q_OS_OSX)
|
|
||||||
//Set the initial volume on new player object
|
//Set the initial volume on new player object
|
||||||
if (self.session)
|
if (self.session && self.session->isVolumeSupported()) {
|
||||||
m_player.volume = m_session->volume() / 100.0f;
|
[m_player setVolume:m_session->volume() / 100.0f];
|
||||||
#endif
|
[m_player setMuted:m_session->isMuted()];
|
||||||
|
}
|
||||||
|
|
||||||
//Create a new player layer if we don't have one already
|
//Create a new player layer if we don't have one already
|
||||||
if (!m_playerLayer)
|
if (!m_playerLayer)
|
||||||
@@ -382,6 +382,11 @@ AVFMediaPlayerSession::AVFMediaPlayerSession(AVFMediaPlayerService *service, QOb
|
|||||||
, m_state(QMediaPlayer::StoppedState)
|
, m_state(QMediaPlayer::StoppedState)
|
||||||
, m_mediaStatus(QMediaPlayer::NoMedia)
|
, m_mediaStatus(QMediaPlayer::NoMedia)
|
||||||
, m_mediaStream(0)
|
, 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_muted(false)
|
||||||
, m_tryingAsync(false)
|
, m_tryingAsync(false)
|
||||||
, m_volume(100)
|
, m_volume(100)
|
||||||
@@ -718,21 +723,20 @@ void AVFMediaPlayerSession::setVolume(int volume)
|
|||||||
qDebug() << Q_FUNC_INFO << volume;
|
qDebug() << Q_FUNC_INFO << volume;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (m_volume == volume)
|
if (!m_volumeSupported) {
|
||||||
return;
|
|
||||||
|
|
||||||
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
|
||||||
if (!player)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (![player respondsToSelector:@selector(setVolume:)]) {
|
|
||||||
qWarning("%s not implemented, requires iOS 7 or later", Q_FUNC_INFO);
|
qWarning("%s not implemented, requires iOS 7 or later", Q_FUNC_INFO);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[player setVolume:volume / 100.0f];
|
if (m_volume == volume)
|
||||||
|
return;
|
||||||
|
|
||||||
m_volume = volume;
|
m_volume = volume;
|
||||||
|
|
||||||
|
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
||||||
|
if (player)
|
||||||
|
[player setVolume:volume / 100.0f];
|
||||||
|
|
||||||
Q_EMIT volumeChanged(m_volume);
|
Q_EMIT volumeChanged(m_volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -741,22 +745,21 @@ void AVFMediaPlayerSession::setMuted(bool muted)
|
|||||||
#ifdef QT_DEBUG_AVF
|
#ifdef QT_DEBUG_AVF
|
||||||
qDebug() << Q_FUNC_INFO << muted;
|
qDebug() << Q_FUNC_INFO << muted;
|
||||||
#endif
|
#endif
|
||||||
if (m_muted == muted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
if (!m_volumeSupported) {
|
||||||
if (!player)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// iOS: setMuted exists since iOS 7.0, thus check if it exists
|
|
||||||
if (![player respondsToSelector:@selector(setMuted:)]) {
|
|
||||||
qWarning("%s not implemented, requires iOS 7 or later", Q_FUNC_INFO);
|
qWarning("%s not implemented, requires iOS 7 or later", Q_FUNC_INFO);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[player setMuted:muted];
|
if (m_muted == muted)
|
||||||
|
return;
|
||||||
|
|
||||||
m_muted = muted;
|
m_muted = muted;
|
||||||
|
|
||||||
|
AVPlayer *player = [(AVFMediaPlayerSessionObserver*)m_observer player];
|
||||||
|
if (player)
|
||||||
|
[player setMuted:muted];
|
||||||
|
|
||||||
Q_EMIT mutedChanged(muted);
|
Q_EMIT mutedChanged(muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user