Index: media/filters/audio_renderer_algorithm_ola.h |
=================================================================== |
--- media/filters/audio_renderer_algorithm_ola.h (revision 0) |
+++ media/filters/audio_renderer_algorithm_ola.h (revision 0) |
@@ -0,0 +1,75 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// AudioRendererAlgorithmOLA [ARAO] is the pitch-preservation implementation of |
+// AudioRendererAlgorithmBase [ARAB]. For speeds greater than 1.0f, FillBuffer() |
+// consumes more input data than output data requested and crossfades |
+// samples to fill |buffer_out|. For speeds less than 1.0f, FillBuffer() |
+// consumers less input data than output data requested and draws overlapping |
+// samples from the input data to fill |buffer_out|. As ARAB is thread-unsafe, |
+// so is ARAO. |
+ |
+#ifndef MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_OLA_H_ |
+#define MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_OLA_H_ |
+ |
+#include "media/filters/audio_renderer_algorithm_base.h" |
+ |
+namespace media { |
+ |
+class DataBuffer; |
+ |
+class AudioRendererAlgorithmOLA : public AudioRendererAlgorithmBase { |
+ public: |
+ AudioRendererAlgorithmOLA(); |
+ virtual ~AudioRendererAlgorithmOLA(); |
+ |
+ // AudioRendererAlgorithmBase implementation |
+ virtual size_t FillBuffer(DataBuffer* buffer_out); |
+ |
+ virtual void FlushBuffers(); |
+ |
+ virtual void set_playback_rate(float new_rate); |
+ |
+ private: |
+ // Advances our input position by |bytes| bytes. |
+ void AdvanceInput(size_t bytes); |
+ |
+ // Aligns |value| to a channel and sample boundary. |
+ void AlignToSampleBoundary(size_t* value); |
+ |
+ // Copies |length| bytes from our buffers to |dest|. Returns how many bytes |
+ // of data were copied. |
+ size_t CopyInput(uint8* dest, size_t length); |
+ |
+ // Crossfades |samples| samples of |dest| with the data in |src|. Assumes |
+ // there is room in |dest| and enough data in |src|. Type is the datatype |
+ // of a data point in the waveform (i.e. uint8, int16, int32, etc). Also, |
+ // sizeof(one sample) == sizeof(Type) * channels. |
+ template <class Type> |
+ void Crossfade(int samples, const Type* src, Type* dest); |
+ |
+ // Returns true if |saved_buf_| is NULL and the queue is empty. |
+ bool IsInputFinished(); |
+ |
+ // Stores the front element of the queue so we can peek at the second one. |
+ scoped_refptr<Buffer> saved_buf_; |
+ |
+ // Remembers the amount of remaining audio data for our |saved_buf_|. |
+ size_t data_offset_; |
+ |
+ // Members for ease of calculation in FillBuffer(). These members are |
+ // based on |playback_rate_|, but are stored seperately so they don't |
+ // have to be recalculated on every call to FillBuffer(). |
+ size_t input_step_; |
+ size_t output_step_; |
+ |
+ // Length for crossfade in bytes. |
+ size_t crossfade_size_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AudioRendererAlgorithmOLA); |
+}; |
+ |
+} // namespace media |
+ |
+#endif // MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_OLA_H_ |
Property changes on: media\filters\audio_renderer_algorithm_ola.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |