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

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

Issue 2815303006: Convert MediaLog from being ref counted to owned by WebMediaPlayer. (Closed)
Patch Set: Rebase. Created 3 years, 8 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 | « media/filters/audio_timestamp_validator.cc ('k') | media/filters/chunk_demuxer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_timestamp_validator.h" 5 #include "media/filters/audio_timestamp_validator.h"
6 6
7 #include <tuple> 7 #include <tuple>
8 8
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "media/base/audio_decoder_config.h" 10 #include "media/base/audio_decoder_config.h"
(...skipping 23 matching lines...) Expand all
34 // Params are: 34 // Params are:
35 // 1. Output delay: number of encoded buffers before first decoded output 35 // 1. Output delay: number of encoded buffers before first decoded output
36 // 2. Codec delay: number of frames of codec delay in decoder config 36 // 2. Codec delay: number of frames of codec delay in decoder config
37 // 3. Front discard: front discard for the first buffer 37 // 3. Front discard: front discard for the first buffer
38 using ValidatorTestParams = testing::tuple<int, int, base::TimeDelta>; 38 using ValidatorTestParams = testing::tuple<int, int, base::TimeDelta>;
39 39
40 class AudioTimestampValidatorTest 40 class AudioTimestampValidatorTest
41 : public testing::Test, 41 : public testing::Test,
42 public ::testing::WithParamInterface<ValidatorTestParams> { 42 public ::testing::WithParamInterface<ValidatorTestParams> {
43 public: 43 public:
44 AudioTimestampValidatorTest() 44 AudioTimestampValidatorTest() {}
45 : media_log_(new testing::StrictMock<MockMediaLog>()) {}
46 45
47 protected: 46 protected:
48 void SetUp() override { 47 void SetUp() override {
49 output_delay_ = testing::get<0>(GetParam()); 48 output_delay_ = testing::get<0>(GetParam());
50 codec_delay_ = testing::get<1>(GetParam()); 49 codec_delay_ = testing::get<1>(GetParam());
51 front_discard_ = testing::get<2>(GetParam()); 50 front_discard_ = testing::get<2>(GetParam());
52 } 51 }
53 52
54 int output_delay_; 53 int output_delay_;
55 54
56 int codec_delay_; 55 int codec_delay_;
57 56
58 base::TimeDelta front_discard_; 57 base::TimeDelta front_discard_;
59 58
60 scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_; 59 testing::StrictMock<MockMediaLog> media_log_;
61 }; 60 };
62 61
63 TEST_P(AudioTimestampValidatorTest, WarnForEraticTimes) { 62 TEST_P(AudioTimestampValidatorTest, WarnForEraticTimes) {
64 AudioDecoderConfig decoder_config; 63 AudioDecoderConfig decoder_config;
65 decoder_config.Initialize(kCodec, kSampleFormat, kChannelLayout, 64 decoder_config.Initialize(kCodec, kSampleFormat, kChannelLayout,
66 kSamplesPerSecond, EmptyExtraData(), Unencrypted(), 65 kSamplesPerSecond, EmptyExtraData(), Unencrypted(),
67 kSeekPreroll, codec_delay_); 66 kSeekPreroll, codec_delay_);
68 67
69 // Validator should fail to stabilize pattern for timestamp expectations. 68 // Validator should fail to stabilize pattern for timestamp expectations.
70 EXPECT_MEDIA_LOG( 69 EXPECT_MEDIA_LOG(
71 HasSubstr("Failed to reconcile encoded audio times " 70 HasSubstr("Failed to reconcile encoded audio times "
72 "with decoded output.")); 71 "with decoded output."));
73 72
74 // No gap warnings should be emitted because the timestamps expectations never 73 // No gap warnings should be emitted because the timestamps expectations never
75 // stabilized. 74 // stabilized.
76 EXPECT_MEDIA_LOG(HasSubstr("timestamp gap detected")).Times(0); 75 EXPECT_MEDIA_LOG(HasSubstr("timestamp gap detected")).Times(0);
77 76
78 AudioTimestampValidator validator(decoder_config, media_log_); 77 AudioTimestampValidator validator(decoder_config, &media_log_);
79 78
80 const base::TimeDelta kRandomOffsets[] = { 79 const base::TimeDelta kRandomOffsets[] = {
81 base::TimeDelta::FromMilliseconds(100), 80 base::TimeDelta::FromMilliseconds(100),
82 base::TimeDelta::FromMilliseconds(350)}; 81 base::TimeDelta::FromMilliseconds(350)};
83 82
84 for (int i = 0; i < 100; ++i) { 83 for (int i = 0; i < 100; ++i) {
85 // Each buffer's timestamp is kBufferDuration from the previous buffer. 84 // Each buffer's timestamp is kBufferDuration from the previous buffer.
86 scoped_refptr<DecoderBuffer> encoded_buffer = new DecoderBuffer(0); 85 scoped_refptr<DecoderBuffer> encoded_buffer = new DecoderBuffer(0);
87 86
88 // Ping-pong between two random offsets to prevent validator from 87 // Ping-pong between two random offsets to prevent validator from
(...skipping 27 matching lines...) Expand all
116 kSeekPreroll, codec_delay_); 115 kSeekPreroll, codec_delay_);
117 116
118 // Validator should quickly stabilize pattern for timestamp expectations. 117 // Validator should quickly stabilize pattern for timestamp expectations.
119 EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times " 118 EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times "
120 "with decoded output.")) 119 "with decoded output."))
121 .Times(0); 120 .Times(0);
122 121
123 // Expect no gap warnings for series of buffers with valid timestamps. 122 // Expect no gap warnings for series of buffers with valid timestamps.
124 EXPECT_MEDIA_LOG(HasSubstr("timestamp gap detected")).Times(0); 123 EXPECT_MEDIA_LOG(HasSubstr("timestamp gap detected")).Times(0);
125 124
126 AudioTimestampValidator validator(decoder_config, media_log_); 125 AudioTimestampValidator validator(decoder_config, &media_log_);
127 126
128 for (int i = 0; i < 100; ++i) { 127 for (int i = 0; i < 100; ++i) {
129 // Each buffer's timestamp is kBufferDuration from the previous buffer. 128 // Each buffer's timestamp is kBufferDuration from the previous buffer.
130 scoped_refptr<DecoderBuffer> encoded_buffer = new DecoderBuffer(0); 129 scoped_refptr<DecoderBuffer> encoded_buffer = new DecoderBuffer(0);
131 encoded_buffer->set_timestamp(i * kBufferDuration); 130 encoded_buffer->set_timestamp(i * kBufferDuration);
132 131
133 if (i == 0) { 132 if (i == 0) {
134 encoded_buffer->set_discard_padding( 133 encoded_buffer->set_discard_padding(
135 std::make_pair(front_discard_, base::TimeDelta())); 134 std::make_pair(front_discard_, base::TimeDelta()));
136 } 135 }
(...skipping 10 matching lines...) Expand all
147 } 146 }
148 } 147 }
149 } 148 }
150 149
151 TEST_P(AudioTimestampValidatorTest, SingleWarnForSingleLargeGap) { 150 TEST_P(AudioTimestampValidatorTest, SingleWarnForSingleLargeGap) {
152 AudioDecoderConfig decoder_config; 151 AudioDecoderConfig decoder_config;
153 decoder_config.Initialize(kCodec, kSampleFormat, kChannelLayout, 152 decoder_config.Initialize(kCodec, kSampleFormat, kChannelLayout,
154 kSamplesPerSecond, EmptyExtraData(), Unencrypted(), 153 kSamplesPerSecond, EmptyExtraData(), Unencrypted(),
155 kSeekPreroll, codec_delay_); 154 kSeekPreroll, codec_delay_);
156 155
157 AudioTimestampValidator validator(decoder_config, media_log_); 156 AudioTimestampValidator validator(decoder_config, &media_log_);
158 157
159 // Validator should quickly stabilize pattern for timestamp expectations. 158 // Validator should quickly stabilize pattern for timestamp expectations.
160 EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times " 159 EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times "
161 "with decoded output.")) 160 "with decoded output."))
162 .Times(0); 161 .Times(0);
163 162
164 for (int i = 0; i < 100; ++i) { 163 for (int i = 0; i < 100; ++i) {
165 // Halfway through the stream, introduce sudden gap of 50 milliseconds. 164 // Halfway through the stream, introduce sudden gap of 50 milliseconds.
166 base::TimeDelta offset; 165 base::TimeDelta offset;
167 if (i >= 50) 166 if (i >= 50)
(...skipping 24 matching lines...) Expand all
192 } 191 }
193 } 192 }
194 } 193 }
195 194
196 TEST_P(AudioTimestampValidatorTest, RepeatedWarnForSlowAccumulatingDrift) { 195 TEST_P(AudioTimestampValidatorTest, RepeatedWarnForSlowAccumulatingDrift) {
197 AudioDecoderConfig decoder_config; 196 AudioDecoderConfig decoder_config;
198 decoder_config.Initialize(kCodec, kSampleFormat, kChannelLayout, 197 decoder_config.Initialize(kCodec, kSampleFormat, kChannelLayout,
199 kSamplesPerSecond, EmptyExtraData(), Unencrypted(), 198 kSamplesPerSecond, EmptyExtraData(), Unencrypted(),
200 kSeekPreroll, codec_delay_); 199 kSeekPreroll, codec_delay_);
201 200
202 AudioTimestampValidator validator(decoder_config, media_log_); 201 AudioTimestampValidator validator(decoder_config, &media_log_);
203 202
204 EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times " 203 EXPECT_MEDIA_LOG(HasSubstr("Failed to reconcile encoded audio times "
205 "with decoded output.")) 204 "with decoded output."))
206 .Times(0); 205 .Times(0);
207 206
208 for (int i = 0; i < 100; ++i) { 207 for (int i = 0; i < 100; ++i) {
209 // Wait for delayed output to begin plus an additional two iterations to 208 // Wait for delayed output to begin plus an additional two iterations to
210 // start using drift offset. The the two iterations without offset will 209 // start using drift offset. The the two iterations without offset will
211 // allow the validator to stabilize the pattern of timestamps and begin 210 // allow the validator to stabilize the pattern of timestamps and begin
212 // checking for gaps. Once stable, increase offset by 1 millisecond for each 211 // checking for gaps. Once stable, increase offset by 1 millisecond for each
(...skipping 30 matching lines...) Expand all
243 INSTANTIATE_TEST_CASE_P( 242 INSTANTIATE_TEST_CASE_P(
244 , 243 ,
245 AudioTimestampValidatorTest, 244 AudioTimestampValidatorTest,
246 ::testing::Combine( 245 ::testing::Combine(
247 ::testing::Values(0, 10), // output delay 246 ::testing::Values(0, 10), // output delay
248 ::testing::Values(0, 512), // codec delay 247 ::testing::Values(0, 512), // codec delay
249 ::testing::Values(base::TimeDelta(), // front discard 248 ::testing::Values(base::TimeDelta(), // front discard
250 base::TimeDelta::FromMilliseconds(65)))); 249 base::TimeDelta::FromMilliseconds(65))));
251 250
252 } // namespace media 251 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/audio_timestamp_validator.cc ('k') | media/filters/chunk_demuxer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698