From ce755dd9c59dd16783bc9e94a4475a283c3e6996 Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Thu, 31 Mar 2011 07:04:44 +0000 Subject: Only set volume on SYS_VOLUME_CHANGED the first time. Workaround for FS#12034. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29663 a1c6a512-1295-4272-9138-f99709370657 --- android/src/org/rockbox/RockboxPCM.java | 16 +++++++++++++--- apps/misc.c | 11 ++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/android/src/org/rockbox/RockboxPCM.java b/android/src/org/rockbox/RockboxPCM.java index 7d01da6150..47bc42f976 100644 --- a/android/src/org/rockbox/RockboxPCM.java +++ b/android/src/org/rockbox/RockboxPCM.java @@ -85,9 +85,19 @@ public class RockboxPCM extends AudioTrack pcmrange = getMaxVolume() - minpcmvolume; setupVolumeHandler(); + postVolume(audiomanager.getStreamVolume(streamtype)); } private native void postVolumeChangedEvent(int volume); + + private void postVolume(int volume) + { + int rbvolume = ((maxstreamvolume - volume) * -99) / + maxstreamvolume; + LOG("java:postVolumeChangedEvent, avol "+volume+" rbvol "+rbvolume); + postVolumeChangedEvent(rbvolume); + } + private void setupVolumeHandler() { BroadcastReceiver broadcastReceiver = new BroadcastReceiver() @@ -105,9 +115,7 @@ public class RockboxPCM extends AudioTrack volume != setstreamvolume && rbservice.isRockboxRunning()) { - int rbvolume = ((maxstreamvolume - volume) * -99) / - maxstreamvolume; - postVolumeChangedEvent(rbvolume); + postVolume(volume); } } }; @@ -190,6 +198,7 @@ public class RockboxPCM extends AudioTrack private void set_volume(int volume) { + LOG("java:set_volume("+volume+")"); /* Rockbox 'volume' is 0..-990 deci-dB attenuation. Android streams have rather low resolution volume control, typically 8 or 15 steps. @@ -209,6 +218,7 @@ public class RockboxPCM extends AudioTrack int oldstreamvolume = audiomanager.getStreamVolume(streamtype); if (streamvolume != oldstreamvolume) { + LOG("java:setStreamVolume("+streamvolume+")"); setstreamvolume = streamvolume; audiomanager.setStreamVolume(streamtype, streamvolume, 0); } diff --git a/apps/misc.c b/apps/misc.c index 0d25e2aa96..e4a5c42d0d 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -58,6 +58,8 @@ #include "yesno.h" #include "viewport.h" +#include "debug.h" + #if CONFIG_TUNER #include "radio.h" #endif @@ -632,9 +634,16 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame #if (CONFIG_PLATFORM & PLATFORM_HOSTED) && defined(PLATFORM_HAS_VOLUME_CHANGE) case SYS_VOLUME_CHANGED: { + static bool firstvolume = true; int volume = hosted_get_volume(); - if (global_settings.volume != volume) + DEBUGF("SYS_VOLUME_CHANGED: %d\n", volume); + if (global_settings.volume != volume) { global_settings.volume = volume; + if (firstvolume) { + setvol(); + firstvolume = false; + } + } return 0; } #endif -- cgit v1.2.3