diff options
author | kylep@chromium.org <kylep@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-16 20:27:59 +0000 |
---|---|---|
committer | kylep@chromium.org <kylep@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-16 20:27:59 +0000 |
commit | 621124d547543b997e7c4adaa38d851a168e68c0 (patch) | |
tree | f6a2ff0c8d2c5fd801b0f571f97aec2d70215ef2 | |
parent | 6fb25f8f070434d09783c154eca477ed80e708d4 (diff) | |
download | chromium_src-621124d547543b997e7c4adaa38d851a168e68c0.zip chromium_src-621124d547543b997e7c4adaa38d851a168e68c0.tar.gz chromium_src-621124d547543b997e7c4adaa38d851a168e68c0.tar.bz2 |
Modify ARAB to use simpler data types in FillBuffer() calls.
BUG=16011
TEST=none
Review URL: http://codereview.chromium.org/155615
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20892 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | media/filters/audio_renderer_algorithm_base.h | 9 | ||||
-rw-r--r-- | media/filters/audio_renderer_algorithm_default.cc | 14 | ||||
-rw-r--r-- | media/filters/audio_renderer_algorithm_default.h | 4 | ||||
-rw-r--r-- | media/filters/audio_renderer_algorithm_ola.cc | 16 | ||||
-rw-r--r-- | media/filters/audio_renderer_algorithm_ola.h | 4 | ||||
-rw-r--r-- | media/tools/wav_ola_test.cc | 10 |
6 files changed, 24 insertions, 33 deletions
diff --git a/media/filters/audio_renderer_algorithm_base.h b/media/filters/audio_renderer_algorithm_base.h index 9449c25..ae680d6c7 100644 --- a/media/filters/audio_renderer_algorithm_base.h +++ b/media/filters/audio_renderer_algorithm_base.h @@ -33,7 +33,6 @@ namespace media { class Buffer; -class DataBuffer; class AudioRendererAlgorithmBase { public: @@ -50,10 +49,10 @@ class AudioRendererAlgorithmBase { float initial_playback_rate, RequestReadCallback* callback); - // Implement this strategy method in derived classes. Fills |buffer_out| with - // possibly scaled data from our |queue_|. |buffer_out| must be initialized - // and have a datasize. Returns the number of bytes copied into |buffer_out|. - virtual size_t FillBuffer(DataBuffer* buffer_out) = 0; + // Implement this strategy method in derived classes. Tries to fill |length| + // bytes of |dest| with possibly scaled data from our |queue_|. Returns the + // number of bytes copied into |dest|. + virtual size_t FillBuffer(uint8* dest, size_t length) = 0; // Clears |queue_|. virtual void FlushBuffers(); diff --git a/media/filters/audio_renderer_algorithm_default.cc b/media/filters/audio_renderer_algorithm_default.cc index 7a437d2..b0ada26 100644 --- a/media/filters/audio_renderer_algorithm_default.cc +++ b/media/filters/audio_renderer_algorithm_default.cc @@ -5,7 +5,6 @@ #include "media/filters/audio_renderer_algorithm_default.h" #include "media/base/buffers.h" -#include "media/base/data_buffer.h" namespace media { @@ -15,7 +14,7 @@ AudioRendererAlgorithmDefault::AudioRendererAlgorithmDefault() { AudioRendererAlgorithmDefault::~AudioRendererAlgorithmDefault() { } -size_t AudioRendererAlgorithmDefault::FillBuffer(DataBuffer* buffer_out) { +size_t AudioRendererAlgorithmDefault::FillBuffer(uint8* dest, size_t length) { if (playback_rate() == 0.0f) { return 0; } @@ -23,20 +22,17 @@ size_t AudioRendererAlgorithmDefault::FillBuffer(DataBuffer* buffer_out) { size_t dest_written = 0; if (playback_rate() == 1.0f) { - size_t dest_length = buffer_out->GetDataSize(); - uint8* dest = buffer_out->GetWritableData(); - // If we don't have enough data, copy what we have. - if (QueueSize() < dest_length) + if (QueueSize() < length) dest_written = CopyFromInput(dest, QueueSize()); else - dest_written = CopyFromInput(dest, dest_length); + dest_written = CopyFromInput(dest, length); AdvanceInputPosition(dest_written); } else { // Mute (we will write to the whole buffer, so set |dest_written| to the // requested size). - dest_written = buffer_out->GetDataSize(); - memset(buffer_out->GetWritableData(), 0, dest_written); + dest_written = length; + memset(dest, 0, dest_written); // Calculate the number of bytes we "used". size_t scaled_dest_length = diff --git a/media/filters/audio_renderer_algorithm_default.h b/media/filters/audio_renderer_algorithm_default.h index b2a964d..a796ba7 100644 --- a/media/filters/audio_renderer_algorithm_default.h +++ b/media/filters/audio_renderer_algorithm_default.h @@ -14,15 +14,13 @@ namespace media { -class DataBuffer; - class AudioRendererAlgorithmDefault : public AudioRendererAlgorithmBase { public: AudioRendererAlgorithmDefault(); virtual ~AudioRendererAlgorithmDefault(); // AudioRendererAlgorithmBase implementation - virtual size_t FillBuffer(DataBuffer* buffer_out); + virtual size_t FillBuffer(uint8* dest, size_t length); private: DISALLOW_COPY_AND_ASSIGN(AudioRendererAlgorithmDefault); diff --git a/media/filters/audio_renderer_algorithm_ola.cc b/media/filters/audio_renderer_algorithm_ola.cc index 0081068..7d959a1 100644 --- a/media/filters/audio_renderer_algorithm_ola.cc +++ b/media/filters/audio_renderer_algorithm_ola.cc @@ -7,7 +7,6 @@ #include <cmath> #include "media/base/buffers.h" -#include "media/base/data_buffer.h" namespace media { @@ -24,21 +23,20 @@ AudioRendererAlgorithmOLA::AudioRendererAlgorithmOLA() AudioRendererAlgorithmOLA::~AudioRendererAlgorithmOLA() { } -size_t AudioRendererAlgorithmOLA::FillBuffer(DataBuffer* buffer_out) { +size_t AudioRendererAlgorithmOLA::FillBuffer(uint8* dest, size_t length) { if (IsQueueEmpty()) return 0; if (playback_rate() == 0.0f) return 0; - // Grab info from |buffer_out| and handle the simple case of normal playback. - size_t dest_remaining = buffer_out->GetDataSize(); - uint8* dest = buffer_out->GetWritableData(); size_t dest_written = 0; + + // Handle the simple case of normal playback. if (playback_rate() == 1.0f) { - if (QueueSize() < dest_remaining) + if (QueueSize() < length) dest_written = CopyFromInput(dest, QueueSize()); else - dest_written = CopyFromInput(dest, dest_remaining); + dest_written = CopyFromInput(dest, length); AdvanceInputPosition(dest_written); return dest_written; } @@ -46,7 +44,7 @@ size_t AudioRendererAlgorithmOLA::FillBuffer(DataBuffer* buffer_out) { // For other playback rates, OLA with crossfade! // TODO(kylep): Limit the rates to reasonable values. We may want to do this // on the UI side or in set_playback_rate(). - while (dest_remaining >= output_step_ + crossfade_size_) { + while (length >= output_step_ + crossfade_size_) { // If we don't have enough data to completely finish this loop, quit. if (QueueSize() < window_size_) break; @@ -56,7 +54,7 @@ size_t AudioRendererAlgorithmOLA::FillBuffer(DataBuffer* buffer_out) { // our tally of remaing requested. size_t copied = CopyFromInput(dest, output_step_ + crossfade_size_); dest_written += copied; - dest_remaining -= copied; + length -= copied; // Advance pointers for crossfade. dest += output_step_; diff --git a/media/filters/audio_renderer_algorithm_ola.h b/media/filters/audio_renderer_algorithm_ola.h index da5cbe4..c38374bf 100644 --- a/media/filters/audio_renderer_algorithm_ola.h +++ b/media/filters/audio_renderer_algorithm_ola.h @@ -16,15 +16,13 @@ namespace media { -class DataBuffer; - class AudioRendererAlgorithmOLA : public AudioRendererAlgorithmBase { public: AudioRendererAlgorithmOLA(); virtual ~AudioRendererAlgorithmOLA(); // AudioRendererAlgorithmBase implementation - virtual size_t FillBuffer(DataBuffer* buffer_out); + virtual size_t FillBuffer(uint8* dest, size_t length); virtual void set_playback_rate(float new_rate); diff --git a/media/tools/wav_ola_test.cc b/media/tools/wav_ola_test.cc index 64a8672..c578cd5 100644 --- a/media/tools/wav_ola_test.cc +++ b/media/tools/wav_ola_test.cc @@ -50,6 +50,7 @@ class Dummy { void ReadDataForAlg() { scoped_refptr<DataBuffer> buffer(new DataBuffer(window_size_)); + buffer->SetDataSize(window_size_); uint8* buf = buffer->GetWritableData(); if (fread(buf, 1, window_size_, input_) > 0) { ola_->EnqueueBuffer(buffer.get()); @@ -136,14 +137,15 @@ int main(int argc, const char** argv) { } // Create buffer to be filled by |ola|. - scoped_refptr<DataBuffer> buffer(new DataBuffer(window_size)); - const uint8* buf = buffer->GetData(); + scoped_array<uint8> buf(new uint8[window_size]); + + CHECK(buf.get()); // Keep track of bytes written to disk and bytes copied to |b|. size_t bytes_written = 0; size_t bytes; - while ((bytes = ola.FillBuffer(buffer.get())) > 0) { - if (fwrite(buf, 1, bytes, output.get()) != bytes) { + while ((bytes = ola.FillBuffer(buf.get(), window_size)) > 0) { + if (fwrite(buf.get(), 1, bytes, output.get()) != bytes) { LOG(ERROR) << "could not write data after " << bytes_written; } else { bytes_written += bytes; |