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

Unified Diff: media/filters/audio_clock_unittest.cc

Issue 1711473002: Use double microseconds for tracking back/front timestamp in AudioClock. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes for feedback && rebase. Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/audio_clock.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/audio_clock_unittest.cc
diff --git a/media/filters/audio_clock_unittest.cc b/media/filters/audio_clock_unittest.cc
index 303e8e34573bfe8eec4043de6fa804bcef542c7f..312ba61d73ddd651511ad6f4fcd3958f75936e37 100644
--- a/media/filters/audio_clock_unittest.cc
+++ b/media/filters/audio_clock_unittest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
#include "media/base/audio_timestamp_helper.h"
#include "media/filters/audio_clock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -11,8 +12,7 @@ namespace media {
class AudioClockTest : public testing::Test {
public:
- AudioClockTest()
- : sample_rate_(10), clock_(base::TimeDelta(), sample_rate_) {}
+ AudioClockTest() { SetupClock(base::TimeDelta(), 10); }
~AudioClockTest() override {}
@@ -20,45 +20,51 @@ class AudioClockTest : public testing::Test {
int frames_requested,
int delay_frames,
double playback_rate) {
- clock_.WroteAudio(
- frames_written, frames_requested, delay_frames, playback_rate);
+ clock_->WroteAudio(frames_written, frames_requested, delay_frames,
+ playback_rate);
}
- int FrontTimestampInDays() { return clock_.front_timestamp().InDays(); }
+ void SetupClock(base::TimeDelta start_time, int sample_rate) {
+ sample_rate_ = sample_rate;
+ clock_.reset(new AudioClock(start_time, sample_rate_));
+ }
+
+ int FrontTimestampInDays() { return clock_->front_timestamp().InDays(); }
int FrontTimestampInMilliseconds() {
- return clock_.front_timestamp().InMilliseconds();
+ return clock_->front_timestamp().InMilliseconds();
}
int BackTimestampInMilliseconds() {
- return clock_.back_timestamp().InMilliseconds();
+ return clock_->back_timestamp().InMilliseconds();
}
int TimeUntilPlaybackInMilliseconds(int timestamp_ms) {
- return clock_.TimeUntilPlayback(base::TimeDelta::FromMilliseconds(
- timestamp_ms)).InMilliseconds();
+ return clock_
+ ->TimeUntilPlayback(base::TimeDelta::FromMilliseconds(timestamp_ms))
+ .InMilliseconds();
}
int ContiguousAudioDataBufferedInDays() {
base::TimeDelta total, same_rate_total;
- clock_.ContiguousAudioDataBufferedForTesting(&total, &same_rate_total);
+ clock_->ContiguousAudioDataBufferedForTesting(&total, &same_rate_total);
return total.InDays();
}
int ContiguousAudioDataBufferedInMilliseconds() {
base::TimeDelta total, same_rate_total;
- clock_.ContiguousAudioDataBufferedForTesting(&total, &same_rate_total);
+ clock_->ContiguousAudioDataBufferedForTesting(&total, &same_rate_total);
return total.InMilliseconds();
}
int ContiguousAudioDataBufferedAtSameRateInMilliseconds() {
base::TimeDelta total, same_rate_total;
- clock_.ContiguousAudioDataBufferedForTesting(&total, &same_rate_total);
+ clock_->ContiguousAudioDataBufferedForTesting(&total, &same_rate_total);
return same_rate_total.InMilliseconds();
}
- const int sample_rate_;
- AudioClock clock_;
+ int sample_rate_;
+ scoped_ptr<AudioClock> clock_;
private:
DISALLOW_COPY_AND_ASSIGN(AudioClockTest);
@@ -337,8 +343,8 @@ TEST_F(AudioClockTest, CompensateForSuspendedWrites) {
// Elapsing frames less than we have buffered should do nothing.
const int kDelayFrames = 2;
for (int i = 1000; i <= kBaseTimeMs; i += 1000) {
- clock_.CompensateForSuspendedWrites(base::TimeDelta::FromMilliseconds(i),
- kDelayFrames);
+ clock_->CompensateForSuspendedWrites(base::TimeDelta::FromMilliseconds(i),
+ kDelayFrames);
EXPECT_EQ(kBaseTimeMs - (i - 1000), TimeUntilPlaybackInMilliseconds(0));
// Write silence to simulate maintaining a 7s output buffer.
@@ -347,9 +353,26 @@ TEST_F(AudioClockTest, CompensateForSuspendedWrites) {
// Exhausting all frames should advance timestamps and prime the buffer with
// our delay frames value.
- clock_.CompensateForSuspendedWrites(base::TimeDelta::FromMilliseconds(7000),
- kDelayFrames);
+ clock_->CompensateForSuspendedWrites(base::TimeDelta::FromMilliseconds(7000),
+ kDelayFrames);
EXPECT_EQ(kDelayFrames * 100, TimeUntilPlaybackInMilliseconds(1000));
}
+TEST_F(AudioClockTest, FramesToTimePrecision) {
+ SetupClock(base::TimeDelta(), 48000);
+ double micros_per_frame = base::Time::kMicrosecondsPerSecond / 48000.0;
+ int frames_written = 0;
+
+ // Write ~2 hours of data to clock to give any error a significant chance to
+ // accumulate.
+ while (clock_->back_timestamp() <= base::TimeDelta::FromHours(2)) {
+ frames_written += 1024;
+ WroteAudio(1024, 1024, 0, 1);
+ }
+
+ // Verify no error accumulated.
+ EXPECT_EQ(std::round(frames_written * micros_per_frame),
+ clock_->back_timestamp().InMicroseconds());
+}
+
} // namespace media
« no previous file with comments | « media/filters/audio_clock.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698