Chromium Code Reviews| Index: media/audio/simple_sources.cc |
| diff --git a/media/audio/simple_sources.cc b/media/audio/simple_sources.cc |
| index 1edd2b240188af827967464e0eb5545683f8403c..4b2ce298555234e2af24acf73ff12f9ebc7390a4 100644 |
| --- a/media/audio/simple_sources.cc |
| +++ b/media/audio/simple_sources.cc |
| @@ -9,7 +9,9 @@ |
| #include "base/basictypes.h" |
| #include "base/logging.h" |
| +#include "base/ref_counted.h" |
| #include "media/audio/audio_output.h" |
| +#include "media/base/data_buffer.h" |
| ////////////////////////////////////////////////////////////////////////////// |
| // SineWaveAudioSource implementation. |
| @@ -51,39 +53,15 @@ void SineWaveAudioSource::OnError(AudioOutputStream* stream, int code) { |
| // PushSource implementation. |
| PushSource::PushSource() |
| - : buffered_bytes_(0), |
| - front_buffer_consumed_(0) { |
| + : buffer_(0, 0) { |
| } |
| -PushSource::~PushSource() { |
| - CleanUp(); |
| -} |
| +PushSource::~PushSource() { } |
| uint32 PushSource::OnMoreData(AudioOutputStream* stream, void* dest, |
| uint32 max_size, uint32 pending_bytes) { |
| - uint32 copied = 0; |
| - while (copied < max_size) { |
| - AutoLock auto_lock(lock_); |
| - |
| - // Under lock processing in this scope. |
| - if (!packets_.size()) |
| - break; |
| - Packet packet = packets_.front(); |
| - uint32 size = std::min(max_size - copied, |
| - packet.size - front_buffer_consumed_); |
| - memcpy(static_cast<char*>(dest) + copied, |
| - packet.buffer + front_buffer_consumed_, |
| - size); |
| - front_buffer_consumed_ += size; |
| - buffered_bytes_ -= size; |
| - copied += size; |
| - if (front_buffer_consumed_ == packet.size) { |
| - delete [] packet.buffer; |
| - packets_.pop_front(); |
| - front_buffer_consumed_ = 0; |
| - } |
| - } |
| - return copied; |
| + AutoLock auto_lock(buffer_lock_); |
|
awong
2010/05/26 20:54:41
PushSource really just becomes a small interface a
scherkus (not reviewing)
2010/05/27 02:36:06
Agreed. SeekableBuffer is now a sort of swiss arm
|
| + return buffer_.Read(static_cast<uint8*>(dest), max_size); |
| } |
| void PushSource::OnClose(AudioOutputStream* stream) { |
| @@ -100,18 +78,14 @@ bool PushSource::Write(const void *data, uint32 len) { |
| NOTREACHED(); |
| return false; |
| } |
| - Packet packet = { new char[len], len }; |
| - memcpy(packet.buffer, data, packet.size); |
| - // Under lock processing here. |
| - AutoLock auto_lock(lock_); |
| - packets_.push_back(packet); |
| - buffered_bytes_ += len; |
| + AutoLock auto_lock(buffer_lock_); |
| + buffer_.Append(static_cast<const uint8*>(data), len); |
| return true; |
| } |
| uint32 PushSource::UnProcessedBytes() { |
| - AutoLock auto_lock(lock_); |
| - return buffered_bytes_; |
| + AutoLock auto_lock(buffer_lock_); |
| + return buffer_.forward_bytes(); |
| } |
| void PushSource::ClearAll() { |
| @@ -120,12 +94,6 @@ void PushSource::ClearAll() { |
| } |
| void PushSource::CleanUp() { |
| - AutoLock auto_lock(lock_); |
| - PacketList::const_iterator it; |
| - for (it = packets_.begin(); it != packets_.end(); ++it) { |
| - delete [] it->buffer; |
| - } |
| - packets_.clear(); |
| - buffered_bytes_ = 0; |
| - front_buffer_consumed_ = 0; |
| + AutoLock auto_lock(buffer_lock_); |
| + buffer_.Clear(); |
| } |