// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_BASE_AUDIO_SHIFTER_H_ #define MEDIA_BASE_AUDIO_SHIFTER_H_ #include <stddef.h> #include <memory> #include "base/containers/circular_deque.h" #include "base/time/time.h" #include "media/base/media_export.h" #include "media/base/multi_channel_resampler.h" namespace media { class AudioBus; class ClockSmoother; // This class works like a buffer between a push based audio source // and a pull-based audio sink. The source and sink should operate // at nominally the same rate, but since they may run on different // hardware clocks, the rate may differ a little. If left unchecked, // this difference will first cause lip sync issues between audio // and video and eventually it will cause buffer overruns/underruns. // This class solves all that by dynamically resampling the audio // so that both input and output sources are happy. // // A note about TimeTicks. The playout_time specified in Push and // Pull calls must come from the same timeline. That timeline can // be anything you choose as it is never compared to any real-world // clocks, but they must come from the same clock. Specifically, // specifying samples / rate as the playout time in Push() or Pull() // will NOT work. // class MEDIA_EXPORT AudioShifter { … }; } // namespace media #endif // MEDIA_BASE_AUDIO_SHIFTER_H_