Remove muting for extreme playbackRates.

Audio was muted below 0.5x and above 4x as the quality degraded
significantly under the crossfade algorithm. The quality is now much
better under the WSLOA algorithm (r220343).

BUG=289354
R=scherkus@chromium.org
R=dalecurtis@chromium.org

Review URL: https://codereview.chromium.org/205093002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258215 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/media/filters/audio_renderer_algorithm.cc b/media/filters/audio_renderer_algorithm.cc
index e73ce65..db65fe9 100644
--- a/media/filters/audio_renderer_algorithm.cc
+++ b/media/filters/audio_renderer_algorithm.cc
@@ -46,12 +46,6 @@
 //    |search_block_index_| = |search_block_center_offset_| -
 //        |search_block_center_offset_|.
 
-// Max/min supported playback rates for fast/slow audio. Audio outside of these
-// ranges are muted.
-// Audio at these speeds would sound better under a frequency domain algorithm.
-static const float kMinPlaybackRate = 0.5f;
-static const float kMaxPlaybackRate = 4.0f;
-
 // Overlap-and-add window size in milliseconds.
 static const int kOlaWindowSizeMs = 20;
 
@@ -76,8 +70,6 @@
     : channels_(0),
       samples_per_second_(0),
       playback_rate_(0),
-      muted_(false),
-      muted_partial_frame_(0),
       capacity_(kStartingBufferSizeInFrames),
       output_time_(0.0),
       search_block_center_offset_(0),
@@ -151,31 +143,6 @@
 
   DCHECK_EQ(channels_, dest->channels());
 
-  // Optimize the |muted_| case to issue a single clear instead of performing
-  // the full crossfade and clearing each crossfaded frame.
-  if (muted_) {
-    int frames_to_render =
-        std::min(static_cast<int>(audio_buffer_.frames() / playback_rate_),
-                 requested_frames);
-
-    // Compute accurate number of frames to actually skip in the source data.
-    // Includes the leftover partial frame from last request. However, we can
-    // only skip over complete frames, so a partial frame may remain for next
-    // time.
-    muted_partial_frame_ += frames_to_render * playback_rate_;
-    int seek_frames = static_cast<int>(muted_partial_frame_);
-    dest->ZeroFrames(frames_to_render);
-    audio_buffer_.SeekFrames(seek_frames);
-
-    // Determine the partial frame that remains to be skipped for next call. If
-    // the user switches back to playing, it may be off time by this partial
-    // frame, which would be undetectable. If they subsequently switch to
-    // another playback rate that mutes, the code will attempt to line up the
-    // frames again.
-    muted_partial_frame_ -= seek_frames;
-    return frames_to_render;
-  }
-
   int slower_step = ceil(ola_window_size_ * playback_rate_);
   int faster_step = ceil(ola_window_size_ / playback_rate_);
 
@@ -200,8 +167,6 @@
 void AudioRendererAlgorithm::SetPlaybackRate(float new_rate) {
   DCHECK_GE(new_rate, 0);
   playback_rate_ = new_rate;
-  muted_ =
-      playback_rate_ < kMinPlaybackRate || playback_rate_ > kMaxPlaybackRate;
 }
 
 void AudioRendererAlgorithm::FlushBuffers() {
diff --git a/media/filters/audio_renderer_algorithm.h b/media/filters/audio_renderer_algorithm.h
index 39e4db6..f251ff72 100644
--- a/media/filters/audio_renderer_algorithm.h
+++ b/media/filters/audio_renderer_algorithm.h
@@ -19,8 +19,6 @@
 // are preserved. See audio_renderer_algorith.cc for a more elaborate
 // description of the algorithm.
 //
-// Audio at very low or very high playback rates are muted to preserve quality.
-//
 
 #ifndef MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_H_
 #define MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_H_
@@ -84,9 +82,6 @@
   // Returns the samples per second for this audio stream.
   int samples_per_second() { return samples_per_second_; }
 
-  // Is the sound currently muted?
-  bool is_muted() { return muted_; }
-
  private:
   // Within |search_block_|, find the block of data that is most similar to
   // |target_block_|, and write it in |optimal_block_|. This method assumes that
@@ -140,12 +135,6 @@
   // Buffered audio data.
   AudioBufferQueue audio_buffer_;
 
-  // True if the audio should be muted.
-  bool muted_;
-
-  // If muted, keep track of partial frames that should have been skipped over.
-  double muted_partial_frame_;
-
   // How many frames to have in the queue before we report the queue is full.
   int capacity_;
 
diff --git a/media/filters/audio_renderer_algorithm_unittest.cc b/media/filters/audio_renderer_algorithm_unittest.cc
index 7e52004..bde07a23 100644
--- a/media/filters/audio_renderer_algorithm_unittest.cc
+++ b/media/filters/audio_renderer_algorithm_unittest.cc
@@ -148,7 +148,7 @@
       bool all_zero = true;
       for (int i = 0; i < frames_written && all_zero; ++i)
         all_zero = audio_data->channel(ch)[i] == 0.0f;
-      ASSERT_EQ(algorithm_.is_muted(), all_zero) << " for channel " << ch;
+      ASSERT_FALSE(all_zero) << " for channel " << ch;
     }
   }