Index: media/filters/audio_renderer_algorithm_base.h |
diff --git a/media/filters/audio_renderer_algorithm_base.h b/media/filters/audio_renderer_algorithm_base.h |
deleted file mode 100644 |
index 0e5083e65af32d690081365338a6c163fcd9e355..0000000000000000000000000000000000000000 |
--- a/media/filters/audio_renderer_algorithm_base.h |
+++ /dev/null |
@@ -1,203 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-// AudioRendererAlgorithmBase buffers and transforms audio data. The owner of |
-// this object provides audio data to the object through EnqueueBuffer() and |
-// requests data from the buffer via FillBuffer(). The owner also sets the |
-// playback rate, and the AudioRendererAlgorithm will stretch or compress the |
-// buffered audio as necessary to match the playback rate when fulfilling |
-// FillBuffer() requests. AudioRendererAlgorithm can request more data to be |
-// buffered via a read callback passed in during initialization. |
-// |
-// This class is *not* thread-safe. Calls to enqueue and retrieve data must be |
-// locked if called from multiple threads. |
-// |
-// AudioRendererAlgorithmBase uses a simple pitch-preservation algorithm to |
-// stretch and compress audio data to meet playback speeds less than and |
-// greater than the natural playback of the audio stream. |
-// |
-// Audio at very low or very high playback rates are muted to preserve quality. |
- |
-#ifndef MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_BASE_H_ |
-#define MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_BASE_H_ |
- |
-#include "base/callback.h" |
-#include "base/gtest_prod_util.h" |
-#include "media/base/seekable_buffer.h" |
- |
-namespace media { |
- |
-class Buffer; |
- |
-class MEDIA_EXPORT AudioRendererAlgorithmBase { |
- public: |
- AudioRendererAlgorithmBase(); |
- ~AudioRendererAlgorithmBase(); |
- |
- // Call prior to Initialize() to validate configuration. Returns false if the |
- // configuration is invalid. Detailed error information will be DVLOG'd. |
- static bool ValidateConfig(int channels, |
- int samples_per_second, |
- int bits_per_channel); |
- |
- // Initializes this object with information about the audio stream. |
- // |samples_per_second| is in Hz. |read_request_callback| is called to |
- // request more data from the client, requests that are fulfilled through |
- // calls to EnqueueBuffer(). |
- void Initialize(int channels, |
- int samples_per_second, |
- int bits_per_channel, |
- float initial_playback_rate, |
- const base::Closure& request_read_cb); |
- |
- // Tries to fill |requested_frames| frames into |dest| with possibly scaled |
- // data from our |audio_buffer_|. Data is scaled based on the playback rate, |
- // using a variation of the Overlap-Add method to combine sample windows. |
- // |
- // Data from |audio_buffer_| is consumed in proportion to the playback rate. |
- // |
- // Returns the number of frames copied into |dest|. |
- // May request more reads via |request_read_cb_| before returning. |
- int FillBuffer(uint8* dest, int requested_frames); |
- |
- // Clears |audio_buffer_|. |
- void FlushBuffers(); |
- |
- // Returns the time of the next byte in our data or kNoTimestamp() if current |
- // time is unknown. |
- base::TimeDelta GetTime(); |
- |
- // Enqueues a buffer. It is called from the owner of the algorithm after a |
- // read completes. |
- void EnqueueBuffer(Buffer* buffer_in); |
- |
- float playback_rate() const { return playback_rate_; } |
- void SetPlaybackRate(float new_rate); |
- |
- // Returns whether the algorithm needs more data to continue filling buffers. |
- bool NeedsMoreData(); |
- |
- // Returns true if |audio_buffer_| is at or exceeds capacity. |
- bool IsQueueFull(); |
- |
- // Returns the capacity of |audio_buffer_|. |
- int QueueCapacity(); |
- |
- // Increase the capacity of |audio_buffer_| if possible. |
- void IncreaseQueueCapacity(); |
- |
- // Returns the number of bytes left in |audio_buffer_|, which may be larger |
- // than QueueCapacity() in the event that a read callback delivered more data |
- // than |audio_buffer_| was intending to hold. |
- int bytes_buffered() { return audio_buffer_.forward_bytes(); } |
- |
- int bytes_per_frame() { return bytes_per_frame_; } |
- |
- int bytes_per_channel() { return bytes_per_channel_; } |
- |
- bool is_muted() { return muted_; } |
- |
- private: |
- // Returns true if |audio_buffer_| is empty. |
- bool IsQueueEmpty(); |
- |
- // Fills |dest| with one frame of audio data at normal speed. Returns true if |
- // a frame was rendered, false otherwise. |
- bool OutputNormalPlayback(uint8* dest); |
- |
- // Fills |dest| with one frame of audio data at faster than normal speed. |
- // Returns true if a frame was rendered, false otherwise. |
- // |
- // When the audio playback is > 1.0, we use a variant of Overlap-Add to squish |
- // audio output while preserving pitch. Essentially, we play a bit of audio |
- // data at normal speed, then we "fast forward" by dropping the next bit of |
- // audio data, and then we stich the pieces together by crossfading from one |
- // audio chunk to the next. |
- bool OutputFasterPlayback(uint8* dest); |
- |
- // Fills |dest| with one frame of audio data at slower than normal speed. |
- // Returns true if a frame was rendered, false otherwise. |
- // |
- // When the audio playback is < 1.0, we use a variant of Overlap-Add to |
- // stretch audio output while preserving pitch. This works by outputting a |
- // segment of audio data at normal speed. The next audio segment then starts |
- // by repeating some of the audio data from the previous audio segment. |
- // Segments are stiched together by crossfading from one audio chunk to the |
- // next. |
- bool OutputSlowerPlayback(uint8* dest); |
- |
- // Resets the window state to the start of a new window. |
- void ResetWindow(); |
- |
- // Copies a raw frame from |audio_buffer_| into |dest| without progressing |
- // |audio_buffer_|'s internal "current" cursor. Optionally peeks at a forward |
- // byte |offset|. |
- void CopyWithoutAdvance(uint8* dest); |
- void CopyWithoutAdvance(uint8* dest, int offset); |
- |
- // Copies a raw frame from |audio_buffer_| into |dest| and progresses the |
- // |audio_buffer_| forward. |
- void CopyWithAdvance(uint8* dest); |
- |
- // Moves the |audio_buffer_| forward by one frame. |
- void DropFrame(); |
- |
- // Does a linear crossfade from |intro| into |outtro| for one frame. |
- // Assumes pointers are valid and are at least size of |bytes_per_frame_|. |
- void OutputCrossfadedFrame(uint8* outtro, const uint8* intro); |
- template <class Type> |
- void CrossfadeFrame(uint8* outtro, const uint8* intro); |
- |
- // Rounds |*value| down to the nearest frame boundary. |
- void AlignToFrameBoundary(int* value); |
- |
- // Number of channels in audio stream. |
- int channels_; |
- |
- // Sample rate of audio stream. |
- int samples_per_second_; |
- |
- // Byte depth of audio. |
- int bytes_per_channel_; |
- |
- // Used by algorithm to scale output. |
- float playback_rate_; |
- |
- // Used to request more data. |
- base::Closure request_read_cb_; |
- |
- // Buffered audio data. |
- SeekableBuffer audio_buffer_; |
- |
- // Length for crossfade in bytes. |
- int bytes_in_crossfade_; |
- |
- // Length of frame in bytes. |
- int bytes_per_frame_; |
- |
- // The current location in the audio window, between 0 and |window_size_|. |
- // When |index_into_window_| reaches |window_size_|, the window resets. |
- // Indexed by byte. |
- int index_into_window_; |
- |
- // The frame number in the crossfade. |
- int crossfade_frame_number_; |
- |
- // True if the audio should be muted. |
- bool muted_; |
- |
- bool needs_more_data_; |
- |
- // Temporary buffer to hold crossfade data. |
- scoped_array<uint8> crossfade_buffer_; |
- |
- // Window size, in bytes (calculated from audio properties). |
- int window_size_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AudioRendererAlgorithmBase); |
-}; |
- |
-} // namespace media |
- |
-#endif // MEDIA_FILTERS_AUDIO_RENDERER_ALGORITHM_BASE_H_ |