Index: media/filters/buffered_audio_tracker.h |
diff --git a/media/filters/buffered_audio_tracker.h b/media/filters/buffered_audio_tracker.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..230b81b1b591e1cb3c28daf2d37ea985c73c3a85 |
--- /dev/null |
+++ b/media/filters/buffered_audio_tracker.h |
@@ -0,0 +1,54 @@ |
+// Copyright 2014 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_FILTERS_BUFFERED_AUDIO_TRACKER_H_ |
+#define MEDIA_FILTERS_BUFFERED_AUDIO_TRACKER_H_ |
+ |
+#include <deque> |
+ |
+#include "base/time/time.h" |
+#include "media/base/media_export.h" |
+ |
+namespace media { |
+ |
+// Models a queue of buffered audio in a playback pipeline for use with |
+// estimating the amount of delay in wall clock time. Takes changes in playback |
+// rate into account to handle scenarios where multiple rates may be present in |
+// a playback pipelines with large delay. |
+class MEDIA_EXPORT BufferedAudioTracker { |
+ public: |
+ explicit BufferedAudioTracker(int sample_rate); |
+ ~BufferedAudioTracker(); |
+ |
+ // Called each time an audio callback is fired. Excess buffered frames will be |
+ // trimmed until the amount buffered is <= |delay_frames|. |
+ void AudioCallbackFired(int delay_frames); |
+ |
+ // |frames| amount of audio data at |playback_rate| was written. |
+ void WroteAudio(int frames, float playback_rate); |
scherkus (not reviewing)
2014/04/29 17:22:06
I need to think about it some more ... but an alte
DaleCurtis
2014/04/29 17:55:54
I like the idea of a single function API. Can't y
scherkus (not reviewing)
2014/04/29 18:19:03
yeah I played around with that .. the key thing is
DaleCurtis
2014/04/29 18:31:01
Ah, that's a bit awkward then. Merging the Wrote(
|
+ |
+ // |frames| amount of silence was written. |
+ void WroteSilence(int frames); |
+ |
+ // Returns the amount of wall time currently buffered. |
+ base::TimeDelta BufferedTime() const; |
+ |
+ private: |
+ int sample_rate_; |
+ |
+ struct BufferedAudio { |
+ BufferedAudio(int frames, float playback_rate); |
+ |
+ int frames; |
+ float playback_rate; |
+ }; |
+ |
+ std::deque<BufferedAudio> buffered_audio_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BufferedAudioTracker); |
+}; |
+ |
+} // namespace media |
+ |
+#endif // MEDIA_FILTERS_BUFFERED_AUDIO_TRACKER_H_ |