Index: chromecast/media/cma/backend/alsa/slew_volume.cc |
diff --git a/chromecast/media/cma/backend/alsa/slew_volume.cc b/chromecast/media/cma/backend/alsa/slew_volume.cc |
index baaeda09038d2daf289aeeeabebe2a9e25b8aa48..edff6e740afd38e560f19db6fd02dbbe1da095e2 100644 |
--- a/chromecast/media/cma/backend/alsa/slew_volume.cc |
+++ b/chromecast/media/cma/backend/alsa/slew_volume.cc |
@@ -38,6 +38,9 @@ void SlewVolume::SetSampleRate(int sample_rate) { |
// Slew rate should be volume_to_slew / slew_time / sample_rate |
void SlewVolume::SetVolume(double volume_scale) { |
volume_scale_ = volume_scale; |
+ if (interrupted_) { |
+ current_volume_ = volume_scale_; |
+ } |
if (volume_scale_ > current_volume_) { |
max_slew_up_ = (volume_scale_ - current_volume_) * 1000.0 / |
(max_slew_time_up_ms_ * sample_rate_); |
@@ -47,6 +50,11 @@ void SlewVolume::SetVolume(double volume_scale) { |
} |
} |
+void SlewVolume::Interrupted() { |
+ interrupted_ = true; |
+ current_volume_ = volume_scale_; |
+} |
+ |
void SlewVolume::ProcessFMAC(bool repeat_transition, |
const float* src, |
int frames, |
@@ -63,6 +71,7 @@ void SlewVolume::ProcessFMAC(bool repeat_transition, |
return; |
} |
+ interrupted_ = false; |
if (repeat_transition) { |
current_volume_ = last_starting_volume_; |
} else { |
@@ -112,6 +121,7 @@ bool SlewVolume::ProcessInterleaved(int32_t* data, int frames) { |
return true; |
} |
+ interrupted_ = false; |
if (current_volume_ == volume_scale_) { |
if (current_volume_ == 1.0) { |
return true; |