diff options
author | ralphl@chromium.org <ralphl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-21 17:04:07 +0000 |
---|---|---|
committer | ralphl@chromium.org <ralphl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-21 17:04:07 +0000 |
commit | bef59426532a5823b90fcaaade7e7504708e23f2 (patch) | |
tree | 0376c7a3bef746ee8a29e1f36da9f83162e4b026 /chrome/renderer/media | |
parent | 5457d6cfa40b74e08e6bf73a23c06049e06bf439 (diff) | |
download | chromium_src-bef59426532a5823b90fcaaade7e7504708e23f2.zip chromium_src-bef59426532a5823b90fcaaade7e7504708e23f2.tar.gz chromium_src-bef59426532a5823b90fcaaade7e7504708e23f2.tar.bz2 |
Video and audio now pauses by playing NULL (0) PCM audio when the playback rate is != 1.0.
This is a non-optimal, but easy to implement interem solution. Correct fix is to actually stop audio
playback, but that requires refactoring of components.
Addede TODO's() where refactor needs to occur.
Review URL: http://codereview.chromium.org/88014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14112 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/media')
-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); |