Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(587)

Side by Side Diff: media/filters/audio_clock.cc

Issue 389613005: Update media::AudioClock API to take time since writing into account. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/filters/audio_clock.h" 5 #include "media/filters/audio_clock.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "media/base/buffers.h" 8 #include "media/base/buffers.h"
9 9
10 namespace media { 10 namespace media {
(...skipping 27 matching lines...) Expand all
38 DCHECK_GE(frames, 0); 38 DCHECK_GE(frames, 0);
39 DCHECK_GE(delay_frames, 0); 39 DCHECK_GE(delay_frames, 0);
40 40
41 if (last_endpoint_timestamp_ == kNoTimestamp()) 41 if (last_endpoint_timestamp_ == kNoTimestamp())
42 PushBufferedAudio(delay_frames, 0, kNoTimestamp()); 42 PushBufferedAudio(delay_frames, 0, kNoTimestamp());
43 43
44 TrimBufferedAudioToMatchDelay(delay_frames); 44 TrimBufferedAudioToMatchDelay(delay_frames);
45 PushBufferedAudio(frames, 0, kNoTimestamp()); 45 PushBufferedAudio(frames, 0, kNoTimestamp());
46 } 46 }
47 47
48 base::TimeDelta AudioClock::CurrentMediaTimestamp() const { 48 base::TimeDelta AudioClock::CurrentMediaTimestamp(
49 base::TimeDelta time_since_writing) const {
50 int frames_to_skip =
51 static_cast<int>(time_since_writing.InSecondsF() * sample_rate_);
49 int silence_frames = 0; 52 int silence_frames = 0;
50 for (size_t i = 0; i < buffered_audio_.size(); ++i) { 53 for (size_t i = 0; i < buffered_audio_.size(); ++i) {
54 int frames = buffered_audio_[i].frames;
55 if (frames_to_skip > 0) {
56 if (frames <= frames_to_skip) {
57 frames_to_skip -= frames;
58 continue;
59 }
60 frames -= frames_to_skip;
61 frames_to_skip = 0;
62 }
63
51 // Account for silence ahead of the buffer closest to being played. 64 // Account for silence ahead of the buffer closest to being played.
52 if (buffered_audio_[i].playback_rate == 0) { 65 if (buffered_audio_[i].playback_rate == 0) {
53 silence_frames += buffered_audio_[i].frames; 66 silence_frames += frames;
54 continue; 67 continue;
55 } 68 }
56 69
57 // Multiply by playback rate as frames represent time-scaled audio. 70 // Multiply by playback rate as frames represent time-scaled audio.
58 return buffered_audio_[i].endpoint_timestamp - 71 return buffered_audio_[i].endpoint_timestamp -
59 base::TimeDelta::FromMicroseconds( 72 base::TimeDelta::FromMicroseconds(
60 ((buffered_audio_[i].frames * buffered_audio_[i].playback_rate) + 73 ((frames * buffered_audio_[i].playback_rate) + silence_frames) /
61 silence_frames) /
62 sample_rate_ * base::Time::kMicrosecondsPerSecond); 74 sample_rate_ * base::Time::kMicrosecondsPerSecond);
63 } 75 }
64 76
65 // Either: 77 // Either:
66 // 1) AudioClock is uninitialziated and we'll return kNoTimestamp() 78 // 1) AudioClock is uninitialziated and we'll return kNoTimestamp()
67 // 2) All previously buffered audio has been replaced by silence, 79 // 2) All previously buffered audio has been replaced by silence,
68 // meaning media time is now at the last endpoint 80 // meaning media time is now at the last endpoint
69 return last_endpoint_timestamp_; 81 return last_endpoint_timestamp_;
70 } 82 }
71 83
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 138
127 AudioClock::BufferedAudio::BufferedAudio(int frames, 139 AudioClock::BufferedAudio::BufferedAudio(int frames,
128 float playback_rate, 140 float playback_rate,
129 base::TimeDelta endpoint_timestamp) 141 base::TimeDelta endpoint_timestamp)
130 : frames(frames), 142 : frames(frames),
131 playback_rate(playback_rate), 143 playback_rate(playback_rate),
132 endpoint_timestamp(endpoint_timestamp) { 144 endpoint_timestamp(endpoint_timestamp) {
133 } 145 }
134 146
135 } // namespace media 147 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698