Skip to content


Subversion checkout URL

You can clone with
Download ZIP
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.