OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 1161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1172 ASSERT_TRUE(Seek(seek_time)); | 1172 ASSERT_TRUE(Seek(seek_time)); |
1173 Play(); | 1173 Play(); |
1174 ASSERT_TRUE(WaitUntilOnEnded()); | 1174 ASSERT_TRUE(WaitUntilOnEnded()); |
1175 EXPECT_HASH_EQ(kOpusEndTrimmingHash_3, GetAudioHash()); | 1175 EXPECT_HASH_EQ(kOpusEndTrimmingHash_3, GetAudioHash()); |
1176 } | 1176 } |
1177 | 1177 |
1178 TEST_F(PipelineIntegrationTest, | 1178 TEST_F(PipelineIntegrationTest, |
1179 MAYBE_CLOCKLESS(BasicPlaybackOpusPrerollExceedsCodecDelay)) { | 1179 MAYBE_CLOCKLESS(BasicPlaybackOpusPrerollExceedsCodecDelay)) { |
1180 ASSERT_EQ(PIPELINE_OK, Start("bear-opus.webm", kHashed | kClockless)); | 1180 ASSERT_EQ(PIPELINE_OK, Start("bear-opus.webm", kHashed | kClockless)); |
1181 | 1181 |
1182 AudioDecoderConfig config = | 1182 EXPECT_EQ(1u, demuxer_->GetStreams().size()); |
1183 demuxer_->GetStream(DemuxerStream::AUDIO)->audio_decoder_config(); | 1183 AudioDecoderConfig config = demuxer_->GetStreams()[0]->audio_decoder_config(); |
1184 | 1184 |
1185 // Verify that this file's preroll is not eclipsed by the codec delay so we | 1185 // Verify that this file's preroll is not eclipsed by the codec delay so we |
1186 // can detect when preroll is not properly performed. | 1186 // can detect when preroll is not properly performed. |
1187 base::TimeDelta codec_delay = base::TimeDelta::FromSecondsD( | 1187 base::TimeDelta codec_delay = base::TimeDelta::FromSecondsD( |
1188 static_cast<double>(config.codec_delay()) / config.samples_per_second()); | 1188 static_cast<double>(config.codec_delay()) / config.samples_per_second()); |
1189 ASSERT_GT(config.seek_preroll(), codec_delay); | 1189 ASSERT_GT(config.seek_preroll(), codec_delay); |
1190 | 1190 |
1191 Play(); | 1191 Play(); |
1192 ASSERT_TRUE(WaitUntilOnEnded()); | 1192 ASSERT_TRUE(WaitUntilOnEnded()); |
1193 EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_1, GetAudioHash()); | 1193 EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_1, GetAudioHash()); |
1194 | 1194 |
1195 // Seek halfway through the file to invoke seek preroll. | 1195 // Seek halfway through the file to invoke seek preroll. |
1196 ASSERT_TRUE(Seek(base::TimeDelta::FromSecondsD(1.414))); | 1196 ASSERT_TRUE(Seek(base::TimeDelta::FromSecondsD(1.414))); |
1197 Play(); | 1197 Play(); |
1198 ASSERT_TRUE(WaitUntilOnEnded()); | 1198 ASSERT_TRUE(WaitUntilOnEnded()); |
1199 EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_2, GetAudioHash()); | 1199 EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_2, GetAudioHash()); |
1200 } | 1200 } |
1201 | 1201 |
1202 TEST_F(PipelineIntegrationTest, | 1202 TEST_F(PipelineIntegrationTest, |
1203 MAYBE_CLOCKLESS(BasicPlaybackOpusPrerollExceedsCodecDelay_MediaSource)) { | 1203 MAYBE_CLOCKLESS(BasicPlaybackOpusPrerollExceedsCodecDelay_MediaSource)) { |
1204 MockMediaSource source("bear-opus.webm", kOpusAudioOnlyWebM, | 1204 MockMediaSource source("bear-opus.webm", kOpusAudioOnlyWebM, |
1205 kAppendWholeFile); | 1205 kAppendWholeFile); |
1206 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource( | 1206 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource( |
1207 &source, kClockless | kHashed, nullptr)); | 1207 &source, kClockless | kHashed, nullptr)); |
1208 source.EndOfStream(); | 1208 source.EndOfStream(); |
1209 | 1209 |
1210 AudioDecoderConfig config = | 1210 EXPECT_EQ(1u, demuxer_->GetStreams().size()); |
1211 demuxer_->GetStream(DemuxerStream::AUDIO)->audio_decoder_config(); | 1211 AudioDecoderConfig config = demuxer_->GetStreams()[0]->audio_decoder_config(); |
1212 | 1212 |
1213 // Verify that this file's preroll is not eclipsed by the codec delay so we | 1213 // Verify that this file's preroll is not eclipsed by the codec delay so we |
1214 // can detect when preroll is not properly performed. | 1214 // can detect when preroll is not properly performed. |
1215 base::TimeDelta codec_delay = base::TimeDelta::FromSecondsD( | 1215 base::TimeDelta codec_delay = base::TimeDelta::FromSecondsD( |
1216 static_cast<double>(config.codec_delay()) / config.samples_per_second()); | 1216 static_cast<double>(config.codec_delay()) / config.samples_per_second()); |
1217 ASSERT_GT(config.seek_preroll(), codec_delay); | 1217 ASSERT_GT(config.seek_preroll(), codec_delay); |
1218 | 1218 |
1219 Play(); | 1219 Play(); |
1220 ASSERT_TRUE(WaitUntilOnEnded()); | 1220 ASSERT_TRUE(WaitUntilOnEnded()); |
1221 EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_1, GetAudioHash()); | 1221 EXPECT_HASH_EQ(kOpusSmallCodecDelayHash_1, GetAudioHash()); |
(...skipping 1294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2516 Play(); | 2516 Play(); |
2517 ASSERT_TRUE(WaitUntilOnEnded()); | 2517 ASSERT_TRUE(WaitUntilOnEnded()); |
2518 } | 2518 } |
2519 | 2519 |
2520 // Verify that OPUS audio in a webm which reports a 44.1kHz sample rate plays | 2520 // Verify that OPUS audio in a webm which reports a 44.1kHz sample rate plays |
2521 // correctly at 48kHz | 2521 // correctly at 48kHz |
2522 TEST_F(PipelineIntegrationTest, BasicPlayback_Opus441kHz) { | 2522 TEST_F(PipelineIntegrationTest, BasicPlayback_Opus441kHz) { |
2523 ASSERT_EQ(PIPELINE_OK, Start("sfx-opus-441.webm")); | 2523 ASSERT_EQ(PIPELINE_OK, Start("sfx-opus-441.webm")); |
2524 Play(); | 2524 Play(); |
2525 ASSERT_TRUE(WaitUntilOnEnded()); | 2525 ASSERT_TRUE(WaitUntilOnEnded()); |
2526 EXPECT_EQ(48000, demuxer_->GetStream(DemuxerStream::AUDIO) | 2526 |
2527 ->audio_decoder_config() | 2527 EXPECT_EQ(1u, demuxer_->GetStreams().size()); |
2528 .samples_per_second()); | 2528 EXPECT_EQ( |
| 2529 48000, |
| 2530 demuxer_->GetStreams()[0]->audio_decoder_config().samples_per_second()); |
2529 } | 2531 } |
2530 | 2532 |
2531 // Same as above but using MediaSource. | 2533 // Same as above but using MediaSource. |
2532 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource_Opus441kHz) { | 2534 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource_Opus441kHz) { |
2533 MockMediaSource source("sfx-opus-441.webm", kOpusAudioOnlyWebM, | 2535 MockMediaSource source("sfx-opus-441.webm", kOpusAudioOnlyWebM, |
2534 kAppendWholeFile); | 2536 kAppendWholeFile); |
2535 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); | 2537 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); |
2536 source.EndOfStream(); | 2538 source.EndOfStream(); |
2537 Play(); | 2539 Play(); |
2538 ASSERT_TRUE(WaitUntilOnEnded()); | 2540 ASSERT_TRUE(WaitUntilOnEnded()); |
2539 source.Shutdown(); | 2541 source.Shutdown(); |
2540 Stop(); | 2542 Stop(); |
2541 EXPECT_EQ(48000, demuxer_->GetStream(DemuxerStream::AUDIO) | 2543 EXPECT_EQ(1u, demuxer_->GetStreams().size()); |
2542 ->audio_decoder_config() | 2544 EXPECT_EQ( |
2543 .samples_per_second()); | 2545 48000, |
| 2546 demuxer_->GetStreams()[0]->audio_decoder_config().samples_per_second()); |
2544 } | 2547 } |
2545 | 2548 |
2546 // Ensures audio-only playback with missing or negative timestamps works. Tests | 2549 // Ensures audio-only playback with missing or negative timestamps works. Tests |
2547 // the common live-streaming case for chained ogg. See http://crbug.com/396864. | 2550 // the common live-streaming case for chained ogg. See http://crbug.com/396864. |
2548 TEST_F(PipelineIntegrationTest, BasicPlaybackChainedOgg) { | 2551 TEST_F(PipelineIntegrationTest, BasicPlaybackChainedOgg) { |
2549 ASSERT_EQ(PIPELINE_OK, Start("double-sfx.ogg")); | 2552 ASSERT_EQ(PIPELINE_OK, Start("double-sfx.ogg")); |
2550 Play(); | 2553 Play(); |
2551 ASSERT_TRUE(WaitUntilOnEnded()); | 2554 ASSERT_TRUE(WaitUntilOnEnded()); |
2552 ASSERT_EQ(base::TimeDelta(), demuxer_->GetStartTime()); | 2555 ASSERT_EQ(base::TimeDelta(), demuxer_->GetStartTime()); |
2553 } | 2556 } |
(...skipping 29 matching lines...) Expand all Loading... |
2583 | 2586 |
2584 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 2587 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
2585 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 2588 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
2586 Play(); | 2589 Play(); |
2587 ASSERT_TRUE(WaitUntilOnEnded()); | 2590 ASSERT_TRUE(WaitUntilOnEnded()); |
2588 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 2591 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
2589 demuxer_->GetStartTime()); | 2592 demuxer_->GetStartTime()); |
2590 } | 2593 } |
2591 | 2594 |
2592 } // namespace media | 2595 } // namespace media |
OLD | NEW |