summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkylep@chromium.org <kylep@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-16 20:27:59 +0000
committerkylep@chromium.org <kylep@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-16 20:27:59 +0000
commit621124d547543b997e7c4adaa38d851a168e68c0 (patch)
treef6a2ff0c8d2c5fd801b0f571f97aec2d70215ef2
parent6fb25f8f070434d09783c154eca477ed80e708d4 (diff)
downloadchromium_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.h9
-rw-r--r--media/filters/audio_renderer_algorithm_default.cc14
-rw-r--r--media/filters/audio_renderer_algorithm_default.h4
-rw-r--r--media/filters/audio_renderer_algorithm_ola.cc16
-rw-r--r--media/filters/audio_renderer_algorithm_ola.h4
-rw-r--r--media/tools/wav_ola_test.cc10
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;