Index: chromecast/media/cma/backend/multizone_backend_unittest.cc |
diff --git a/chromecast/media/cma/backend/multizone_backend_unittest.cc b/chromecast/media/cma/backend/multizone_backend_unittest.cc |
index c6248c408ae368dbc9a154d84bd5f95dba7a73d0..c7400bf80786eacb45946998aa275091ee16c19c 100644 |
--- a/chromecast/media/cma/backend/multizone_backend_unittest.cc |
+++ b/chromecast/media/cma/backend/multizone_backend_unittest.cc |
@@ -5,6 +5,7 @@ |
#include <stdint.h> |
#include <stdlib.h> |
+#include <algorithm> |
#include <limits> |
#include <memory> |
#include <vector> |
@@ -42,7 +43,7 @@ const int64_t kPushTimeUs = 2 * kMicrosecondsPerSecond; |
const int64_t kStartPts = 0; |
const int64_t kRenderingDelayGracePeriodUs = 250 * 1000; |
const int64_t kMaxRenderingDelayErrorUs = 200; |
-const int kNumEffectsStreams = 3; |
+const int kNumEffectsStreams = 1; |
void IgnoreEos() {} |
@@ -57,6 +58,22 @@ class BufferFeeder : public MediaPipelineBackend::Decoder::Delegate { |
void Start(); |
void Stop(); |
+ int64_t max_rendering_delay_error_us() { |
+ return max_rendering_delay_error_us_; |
+ } |
+ |
+ int64_t max_positive_rendering_delay_error_us() { |
+ return max_positive_rendering_delay_error_us_; |
+ } |
+ |
+ int64_t max_negative_rendering_delay_error_us() { |
+ return max_negative_rendering_delay_error_us_; |
+ } |
+ |
+ int64_t average_rendering_delay_error_us() { |
+ return total_rendering_delay_error_us_ / sample_count_; |
+ } |
+ |
private: |
void FeedBuffer(); |
@@ -84,6 +101,11 @@ class BufferFeeder : public MediaPipelineBackend::Decoder::Delegate { |
const AudioConfig config_; |
const bool effects_only_; |
const base::Closure eos_cb_; |
+ int64_t max_rendering_delay_error_us_; |
+ int64_t max_positive_rendering_delay_error_us_; |
+ int64_t max_negative_rendering_delay_error_us_; |
+ int64_t total_rendering_delay_error_us_; |
+ size_t sample_count_; |
bool feeding_completed_; |
std::unique_ptr<TaskRunnerImpl> task_runner_; |
std::unique_ptr<MediaPipelineBackend> backend_; |
@@ -138,6 +160,11 @@ BufferFeeder::BufferFeeder(const AudioConfig& config, |
: config_(config), |
effects_only_(effects_only), |
eos_cb_(eos_cb), |
+ max_rendering_delay_error_us_(0), |
+ max_positive_rendering_delay_error_us_(0), |
+ max_negative_rendering_delay_error_us_(0), |
+ total_rendering_delay_error_us_(0), |
+ sample_count_(0), |
feeding_completed_(false), |
task_runner_(new TaskRunnerImpl()), |
decoder_(nullptr), |
@@ -228,8 +255,17 @@ void BufferFeeder::OnPushBufferComplete(BufferStatus status) { |
if (pushed_us_ > kRenderingDelayGracePeriodUs) { |
int64_t error = |
next_push_playback_timestamp_ - expected_next_push_playback_timestamp; |
- EXPECT_LT(std::abs(error), kMaxRenderingDelayErrorUs) |
- << "Bad rendering delay after " << pushed_us_ << " us"; |
+ max_rendering_delay_error_us_ = |
+ std::max(max_rendering_delay_error_us_, std::abs(error)); |
+ total_rendering_delay_error_us_ += std::abs(error); |
+ if (error >= 0) { |
+ max_positive_rendering_delay_error_us_ = |
+ std::max(max_positive_rendering_delay_error_us_, error); |
+ } else { |
+ max_negative_rendering_delay_error_us_ = |
+ std::min(max_negative_rendering_delay_error_us_, error); |
+ } |
+ sample_count_++; |
} |
} |
pushed_us_ += last_push_length_us_; |
@@ -250,7 +286,7 @@ MultizoneBackendTest::~MultizoneBackendTest() {} |
void MultizoneBackendTest::Initialize(int sample_rate) { |
AudioConfig config; |
config.codec = kCodecPCM; |
- config.sample_format = kSampleFormatPlanarF32; |
+ config.sample_format = kSampleFormatS32; |
config.channel_number = 2; |
config.bytes_per_channel = 4; |
config.samples_per_second = sample_rate; |
@@ -291,6 +327,15 @@ void MultizoneBackendTest::OnEndOfStream() { |
feeder->Stop(); |
base::MessageLoop::current()->QuitWhenIdle(); |
+ |
+ EXPECT_LT(audio_feeder_->max_rendering_delay_error_us(), |
+ kMaxRenderingDelayErrorUs) |
+ << "Max positive rendering delay error: " |
+ << audio_feeder_->max_positive_rendering_delay_error_us() |
+ << "\nMax negative rendering delay error: " |
+ << audio_feeder_->max_negative_rendering_delay_error_us() |
+ << "\nAverage rendering delay error: " |
+ << audio_feeder_->average_rendering_delay_error_us(); |
} |
TEST_P(MultizoneBackendTest, RenderingDelay) { |