diff options
-rw-r--r-- | chrome/renderer/media/audio_renderer_impl.cc | 24 | ||||
-rw-r--r-- | chrome/renderer/media/audio_renderer_impl.h | 1 |
2 files changed, 15 insertions, 10 deletions
diff --git a/chrome/renderer/media/audio_renderer_impl.cc b/chrome/renderer/media/audio_renderer_impl.cc index 46907ee..2b7c2e7 100644 --- a/chrome/renderer/media/audio_renderer_impl.cc +++ b/chrome/renderer/media/audio_renderer_impl.cc @@ -21,6 +21,7 @@ AudioRendererImpl::AudioRendererImpl(AudioMessageFilter* filter) shared_memory_size_(0), io_loop_(filter->message_loop()), stopped_(false), + playback_rate_(0.0f), packet_request_event_(true, false) { DCHECK(io_loop_); } @@ -76,13 +77,10 @@ void AudioRendererImpl::OnReadComplete(media::Buffer* buffer_in) { } void AudioRendererImpl::SetPlaybackRate(float rate) { - // TODO(hclam): handle playback rates not equal to 1.0. - if (rate == 1.0f) { - // TODO(hclam): what should I do here? OnCreated has fired StartAudioStream - // in the browser process, it seems there's nothing to do here. - } else { - NOTIMPLEMENTED(); - } + // TODO(hclam): This is silly. We should use a playback rate of != 1.0 to + // stop the audio stream. This does not work right now, so we just check + // for this in OnNotifyPacketReady(). + playback_rate_ = rate; } void AudioRendererImpl::SetVolume(float volume) { @@ -192,10 +190,16 @@ void AudioRendererImpl::OnNotifyPacketReady() { if (stopped_) return; if (packet_request_event_.IsSignaled()) { + size_t filled = 0; DCHECK(shared_memory_.get()); - // Fill into the shared memory. - size_t filled = FillBuffer(static_cast<uint8*>(shared_memory_->memory()), - shared_memory_size_); + // TODO(hclam): This is a hack. The stream should be stopped. + if (playback_rate_ == 1.0f) { + filled = FillBuffer(static_cast<uint8*>(shared_memory_->memory()), + shared_memory_size_); + } else { + memset(shared_memory_->memory(), 0, shared_memory_size_); + filled = shared_memory_size_; + } if (filled > 0) { packet_request_event_.Reset(); // Then tell browser process we are done filling into the buffer. diff --git a/chrome/renderer/media/audio_renderer_impl.h b/chrome/renderer/media/audio_renderer_impl.h index 1181b87..453c992 100644 --- a/chrome/renderer/media/audio_renderer_impl.h +++ b/chrome/renderer/media/audio_renderer_impl.h @@ -168,6 +168,7 @@ class AudioRendererImpl : public media::AudioRendererBase, Lock lock_; bool stopped_; + float playback_rate_; base::WaitableEvent packet_request_event_; DISALLOW_COPY_AND_ASSIGN(AudioRendererImpl); |