Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1048)

Unified Diff: media/filters/audio_renderer_algorithm_default.cc

Issue 155255: Refactor audio renderer algorithms to use BufferQueue. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/audio_renderer_algorithm_default.h ('k') | media/filters/audio_renderer_algorithm_ola.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/audio_renderer_algorithm_default.cc
===================================================================
--- media/filters/audio_renderer_algorithm_default.cc (revision 20165)
+++ media/filters/audio_renderer_algorithm_default.cc (working copy)
@@ -9,69 +9,45 @@
namespace media {
-AudioRendererAlgorithmDefault::AudioRendererAlgorithmDefault()
- : data_offset_(0) {
+AudioRendererAlgorithmDefault::AudioRendererAlgorithmDefault() {
}
AudioRendererAlgorithmDefault::~AudioRendererAlgorithmDefault() {
}
size_t AudioRendererAlgorithmDefault::FillBuffer(DataBuffer* buffer_out) {
- size_t dest_written = 0;
if (playback_rate() == 0.0f) {
return 0;
}
+
+ size_t dest_written = 0;
+
if (playback_rate() == 1.0f) {
size_t dest_length = buffer_out->GetDataSize();
uint8* dest = buffer_out->GetWritableData(dest_length);
- while (dest_length > 0 && !IsQueueEmpty()) {
- scoped_refptr<Buffer> buffer = FrontQueue();
- size_t data_length = buffer->GetDataSize() - data_offset_;
- // Prevent writing past end of the buffer.
- if (data_length > dest_length)
- data_length = dest_length;
- memcpy(dest, buffer->GetData() + data_offset_, data_length);
- dest += data_length;
- dest_length -= data_length;
- dest_written += data_length;
-
- data_offset_ += data_length;
-
- // We should not have run over the end of the buffer.
- DCHECK_GE(buffer->GetDataSize(), data_offset_);
- // but if we've reached the end, dequeue it.
- if (buffer->GetDataSize() - data_offset_ == 0) {
- PopFrontQueue();
- data_offset_ = 0;
- }
- }
+ // If we don't have enough data, copy what we have.
+ if (QueueSize() < dest_length)
+ dest_written = CopyFromInput(dest, QueueSize());
+ else
+ dest_written = CopyFromInput(dest, dest_length);
+ AdvanceInputPosition(dest_written);
} else {
- // Mute (we will write to the whole buffer, so set |dest_written|
- // to the requested size).
+ // 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(dest_written), 0, dest_written);
- // Discard any buffers that should be "used".
- size_t scaled_dest_length_remaining =
+ // Calculate the number of bytes we "used".
+ size_t scaled_dest_length =
static_cast<size_t>(dest_written * playback_rate());
- while (scaled_dest_length_remaining > 0 && !IsQueueEmpty()) {
- size_t data_length = FrontQueue()->GetDataSize() - data_offset_;
- // Last buffer we need.
- if (data_length > scaled_dest_length_remaining) {
- data_offset_ += scaled_dest_length_remaining;
- } else {
- scaled_dest_length_remaining -= data_length;
- PopFrontQueue();
- data_offset_ = 0;
- }
+ // If this is more than we have, report the correct amount consumed.
+ if (QueueSize() < scaled_dest_length) {
+ scaled_dest_length = QueueSize();
+ dest_written = static_cast<size_t>(scaled_dest_length / playback_rate());
}
- // If we ran out, don't report we used more than we did.
- if (IsQueueEmpty()) {
- dest_written -=
- static_cast<size_t>(scaled_dest_length_remaining / playback_rate());
- }
+ AdvanceInputPosition(scaled_dest_length);
}
return dest_written;
}
« no previous file with comments | « media/filters/audio_renderer_algorithm_default.h ('k') | media/filters/audio_renderer_algorithm_ola.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698