| Index: media/base/audio_splicer.h
|
| diff --git a/media/base/audio_splicer.h b/media/base/audio_splicer.h
|
| deleted file mode 100644
|
| index 04e18b6d671fce3ac883e8f1f884a1494507b1bd..0000000000000000000000000000000000000000
|
| --- a/media/base/audio_splicer.h
|
| +++ /dev/null
|
| @@ -1,128 +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.
|
| -
|
| -#ifndef MEDIA_BASE_AUDIO_SPLICER_H_
|
| -#define MEDIA_BASE_AUDIO_SPLICER_H_
|
| -
|
| -#include <memory>
|
| -
|
| -#include "base/macros.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/time/time.h"
|
| -#include "media/base/audio_parameters.h"
|
| -#include "media/base/media_export.h"
|
| -#include "media/base/timestamp_constants.h"
|
| -
|
| -namespace media {
|
| -
|
| -class AudioBuffer;
|
| -class AudioBus;
|
| -class AudioStreamSanitizer;
|
| -class MediaLog;
|
| -
|
| -// Helper class that handles filling gaps and resolving overlaps.
|
| -class MEDIA_EXPORT AudioSplicer {
|
| - public:
|
| - AudioSplicer(int samples_per_second,
|
| - const scoped_refptr<MediaLog>& media_log);
|
| - ~AudioSplicer();
|
| -
|
| - enum {
|
| - // The number of ms to crossfade before trimming when buffers overlap.
|
| - kCrossfadeDurationInMilliseconds = 5,
|
| -
|
| - // Largest gap or overlap allowed between buffers. Anything larger than
|
| - // this will trigger an error. This is an arbitrary value, but the initial
|
| - // selection of 50ms roughly represents the duration of 2 compressed AAC or
|
| - // MP3 frames.
|
| - kMaxTimeDeltaInMilliseconds = 50,
|
| - };
|
| -
|
| - // Resets the splicer state by clearing the output buffers queue and resetting
|
| - // the timestamp helper.
|
| - void Reset();
|
| -
|
| - // Adds a new buffer full of samples or end of stream buffer to the splicer.
|
| - // Returns true if the buffer was accepted. False is returned if an error
|
| - // occurred.
|
| - bool AddInput(const scoped_refptr<AudioBuffer>& input);
|
| -
|
| - // Returns true if the splicer has a buffer to return.
|
| - bool HasNextBuffer() const;
|
| -
|
| - // Removes the next buffer from the output buffer queue and returns it; this
|
| - // should only be called if HasNextBuffer() returns true.
|
| - scoped_refptr<AudioBuffer> GetNextBuffer();
|
| -
|
| - // Indicates an upcoming splice point. All buffers overlapping or after the
|
| - // |splice_timestamp| will be considered as "before the splice." Clients must
|
| - // then call SetSpliceTimestamp(kNoTimestamp) to signal that future buffers
|
| - // should be considered as "after the splice."
|
| - //
|
| - // Once |kCrossfadeDurationInMilliseconds| of buffers "after the splice" or
|
| - // end of stream has been received, the "after" buffers will be crossfaded
|
| - // with all "before" buffers which overlap them. "before" buffers outside
|
| - // of the overlap range will be discarded.
|
| - void SetSpliceTimestamp(base::TimeDelta splice_timestamp);
|
| -
|
| - private:
|
| - friend class AudioSplicerTest;
|
| -
|
| - // Extracts frames to be crossfaded from |pre_splice_sanitizer_|. Transfers
|
| - // all frames before |splice_timestamp_| into |output_sanitizer_| and drops
|
| - // frames outside of the crossfade duration.
|
| - //
|
| - // The size of the returned AudioBus is the crossfade duration in frames.
|
| - // Crossfade duration is calculated based on the number of frames available
|
| - // after |splice_timestamp_| in each sanitizer and capped by
|
| - // |max_crossfade_duration_|.
|
| - //
|
| - // |pre_splice_sanitizer_| will be empty after this operation.
|
| - std::unique_ptr<AudioBus> ExtractCrossfadeFromPreSplice(
|
| - scoped_refptr<AudioBuffer>* crossfade_buffer);
|
| -
|
| - // Crossfades |pre_splice_bus->frames()| frames from
|
| - // |post_splice_sanitizer_|
|
| - // with those from |pre_splice_bus|. Adds the crossfaded buffer to
|
| - // |output_sanitizer_| along with all buffers in |post_splice_sanitizer_|.
|
| - //
|
| - // |post_splice_sanitizer_| will be empty after this operation.
|
| - void CrossfadePostSplice(std::unique_ptr<AudioBus> pre_splice_bus,
|
| - const scoped_refptr<AudioBuffer>& crossfade_buffer);
|
| -
|
| - // Reset the splice and splice end timestamps.
|
| - void reset_splice_timestamps() {
|
| - splice_timestamp_ = max_splice_end_timestamp_ = kNoTimestamp;
|
| - }
|
| -
|
| - const base::TimeDelta max_crossfade_duration_;
|
| - base::TimeDelta splice_timestamp_;
|
| - base::TimeDelta max_splice_end_timestamp_;
|
| -
|
| - // The various sanitizers for each stage of the crossfade process. Buffers in
|
| - // |output_sanitizer_| are immediately available for consumption by external
|
| - // callers.
|
| - //
|
| - // Overlapped buffers go into the |pre_splice_sanitizer_| while overlapping
|
| - // buffers go into the |post_splice_sanitizer_|. Once enough buffers for
|
| - // crossfading are received the pre and post sanitizers are drained into
|
| - // |output_sanitizer_| by the two ExtractCrossfadeFromXXX methods above.
|
| - //
|
| - // |pre_splice_sanitizer_| is not constructed until the first splice frame is
|
| - // encountered. At which point it is constructed based on the timestamp state
|
| - // of |output_sanitizer_|. It is destructed once the splice is finished.
|
| - std::unique_ptr<AudioStreamSanitizer> output_sanitizer_;
|
| - std::unique_ptr<AudioStreamSanitizer> pre_splice_sanitizer_;
|
| - std::unique_ptr<AudioStreamSanitizer> post_splice_sanitizer_;
|
| -
|
| - // Whether all buffers which should go into |pre_splice_sanitizer_| have been
|
| - // received. If true, buffers should now be put in |post_splice_sanitizer_|.
|
| - bool have_all_pre_splice_buffers_;
|
| -
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(AudioSplicer);
|
| -};
|
| -
|
| -} // namespace media
|
| -
|
| -#endif // MEDIA_BASE_AUDIO_SPLICER_H_
|
|
|