Skip to content
Browse files

Improve resilience of volume change.

Building on the previous fix for the audio volume jumps experienced
when switching tracks, this adds a double check that the underlying audio
layer has actually set the volume to the new value. This may fail because
the COMXAudio object it not yet initialised.

If there is a failure, then the volume change is retried in the next
iteration of COMXPlayer::Process().
  • Loading branch information...
1 parent bc7b563 commit c8d50211bf9aeb4c9c02d97ec1f718f2615e4aa0 Stewart Gebbie committed
4 xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -1332,8 +1332,8 @@ void COMXPlayer::Process()
if(m_change_volume && m_CurrentAudio.started)
- m_omxPlayerAudio.SetCurrentVolume(m_current_mute ? VOLUME_MINIMUM : m_current_volume);
- m_change_volume = false;
+ if(m_player_audio.SetCurrentVolume(m_current_mute ? VOLUME_MINIMUM : m_current_volume))
+ m_change_volume = false;
// process the packet
4 xbmc/cores/omxplayer/OMXPlayerAudio.cpp
@@ -717,9 +717,9 @@ void OMXPlayerAudio::UnRegisterAudioCallback()
-void OMXPlayerAudio::SetCurrentVolume(float fVolume)
+bool OMXPlayerAudio::SetCurrentVolume(float fVolume)
- m_omxAudio.SetCurrentVolume(fVolume);
+ return m_omxAudio.SetCurrentVolume(fVolume);
void OMXPlayerAudio::SetSpeed(int speed)
2 xbmc/cores/omxplayer/OMXPlayerAudio.h
@@ -109,7 +109,7 @@ class OMXPlayerAudio : public CThread
void SubmitEOS();
void RegisterAudioCallback(IAudioCallback* pCallback);
void UnRegisterAudioCallback();
- void SetCurrentVolume(float fVolume);
+ bool SetCurrentVolume(float fVolume);
void SetSpeed(int iSpeed);
int GetAudioBitrate();
std::string GetPlayerInfo();

0 comments on commit c8d5021

Please sign in to comment.
Something went wrong with that request. Please try again.