summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/media
diff options
context:
space:
mode:
authorralphl@chromium.org <ralphl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-21 17:04:07 +0000
committerralphl@chromium.org <ralphl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-21 17:04:07 +0000
commitbef59426532a5823b90fcaaade7e7504708e23f2 (patch)
tree0376c7a3bef746ee8a29e1f36da9f83162e4b026 /chrome/renderer/media
parent5457d6cfa40b74e08e6bf73a23c06049e06bf439 (diff)
downloadchromium_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.cc24
-rw-r--r--chrome/renderer/media/audio_renderer_impl.h1
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);