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

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

Issue 1230583010: Add stronger DCHECK for front and back timestamp calculations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "media/base/buffers.h" 10 #include "media/base/buffers.h"
(...skipping 24 matching lines...) Expand all
35 35
36 // First write: initialize buffer with silence. 36 // First write: initialize buffer with silence.
37 if (start_timestamp_ == front_timestamp_ && buffered_.empty()) 37 if (start_timestamp_ == front_timestamp_ && buffered_.empty())
38 PushBufferedAudioData(delay_frames, 0.0); 38 PushBufferedAudioData(delay_frames, 0.0);
39 39
40 // Move frames from |buffered_| into the computed timestamp based on 40 // Move frames from |buffered_| into the computed timestamp based on
41 // |delay_frames|. 41 // |delay_frames|.
42 // 42 //
43 // The ordering of compute -> push -> pop eliminates unnecessary memory 43 // The ordering of compute -> push -> pop eliminates unnecessary memory
44 // reallocations in cases where |buffered_| gets emptied. 44 // reallocations in cases where |buffered_| gets emptied.
45 const int64_t original_buffered_frames = total_buffered_frames_;
jrummell 2015/07/10 00:32:57 Since this is only used in the DCHECK, will a rele
DaleCurtis 2015/07/10 00:34:22 Nope, the DCHECK still counts as usage.
45 int64_t frames_played = 46 int64_t frames_played =
46 std::max(INT64_C(0), total_buffered_frames_ - delay_frames); 47 std::max(INT64_C(0), total_buffered_frames_ - delay_frames);
47 front_timestamp_ += ComputeBufferedMediaTime(frames_played); 48 front_timestamp_ += ComputeBufferedMediaTime(frames_played);
48 PushBufferedAudioData(frames_written, playback_rate); 49 PushBufferedAudioData(frames_written, playback_rate);
49 PushBufferedAudioData(frames_requested - frames_written, 0.0); 50 PushBufferedAudioData(frames_requested - frames_written, 0.0);
50 PopBufferedAudioData(frames_played); 51 PopBufferedAudioData(frames_played);
51 52
52 back_timestamp_ += base::TimeDelta::FromMicroseconds( 53 back_timestamp_ += base::TimeDelta::FromMicroseconds(
53 frames_written * playback_rate * microseconds_per_frame_); 54 frames_written * playback_rate * microseconds_per_frame_);
54 55
56 // Ensure something crazy hasn't happened to desync the front and back values.
57 DCHECK_LE(front_timestamp_.InMicroseconds(), back_timestamp_.InMicroseconds())
58 << "frames_written=" << frames_written
59 << ", frames_requested=" << frames_requested
60 << ", delay_frames=" << delay_frames
61 << ", playback_rate=" << playback_rate
62 << ", frames_played=" << frames_played
63 << ", original_buffered_frames=" << original_buffered_frames
64 << ", total_buffered_frames_=" << total_buffered_frames_;
65
55 // Update cached values. 66 // Update cached values.
56 double scaled_frames = 0; 67 double scaled_frames = 0;
57 double scaled_frames_at_same_rate = 0; 68 double scaled_frames_at_same_rate = 0;
58 bool found_silence = false; 69 bool found_silence = false;
59 for (size_t i = 0; i < buffered_.size(); ++i) { 70 for (size_t i = 0; i < buffered_.size(); ++i) {
60 if (buffered_[i].playback_rate == 0) { 71 if (buffered_[i].playback_rate == 0) {
61 found_silence = true; 72 found_silence = true;
62 continue; 73 continue;
63 } 74 }
64 75
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 int64_t min_frames = std::min(buffered_[i].frames, frames); 186 int64_t min_frames = std::min(buffered_[i].frames, frames);
176 scaled_frames += min_frames * buffered_[i].playback_rate; 187 scaled_frames += min_frames * buffered_[i].playback_rate;
177 frames -= min_frames; 188 frames -= min_frames;
178 } 189 }
179 190
180 return base::TimeDelta::FromMicroseconds(scaled_frames * 191 return base::TimeDelta::FromMicroseconds(scaled_frames *
181 microseconds_per_frame_); 192 microseconds_per_frame_);
182 } 193 }
183 194
184 } // namespace media 195 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698