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 "media/filters/chunk_demuxer.h" | 5 #include "media/filters/chunk_demuxer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 15 #include "base/run_loop.h" |
15 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
16 #include "base/strings/string_split.h" | 17 #include "base/strings/string_split.h" |
17 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
18 #include "media/base/audio_decoder_config.h" | 19 #include "media/base/audio_decoder_config.h" |
19 #include "media/base/decoder_buffer.h" | 20 #include "media/base/decoder_buffer.h" |
20 #include "media/base/decrypt_config.h" | 21 #include "media/base/decrypt_config.h" |
21 #include "media/base/media.h" | 22 #include "media/base/media.h" |
22 #include "media/base/media_tracks.h" | 23 #include "media/base/media_tracks.h" |
23 #include "media/base/mock_demuxer_host.h" | 24 #include "media/base/mock_demuxer_host.h" |
24 #include "media/base/mock_media_log.h" | 25 #include "media/base/mock_media_log.h" |
(...skipping 1198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1223 void ReadUntilNotOkOrEndOfStream(DemuxerStream::Type type, | 1224 void ReadUntilNotOkOrEndOfStream(DemuxerStream::Type type, |
1224 DemuxerStream::Status* status, | 1225 DemuxerStream::Status* status, |
1225 base::TimeDelta* last_timestamp) { | 1226 base::TimeDelta* last_timestamp) { |
1226 DemuxerStream* stream = demuxer_->GetStream(type); | 1227 DemuxerStream* stream = demuxer_->GetStream(type); |
1227 scoped_refptr<DecoderBuffer> buffer; | 1228 scoped_refptr<DecoderBuffer> buffer; |
1228 | 1229 |
1229 *last_timestamp = kNoTimestamp(); | 1230 *last_timestamp = kNoTimestamp(); |
1230 do { | 1231 do { |
1231 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer, | 1232 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer, |
1232 base::Unretained(this), status, &buffer)); | 1233 base::Unretained(this), status, &buffer)); |
1233 base::MessageLoop::current()->RunUntilIdle(); | 1234 base::RunLoop().RunUntilIdle(); |
1234 if (*status == DemuxerStream::kOk && !buffer->end_of_stream()) | 1235 if (*status == DemuxerStream::kOk && !buffer->end_of_stream()) |
1235 *last_timestamp = buffer->timestamp(); | 1236 *last_timestamp = buffer->timestamp(); |
1236 } while (*status == DemuxerStream::kOk && !buffer->end_of_stream()); | 1237 } while (*status == DemuxerStream::kOk && !buffer->end_of_stream()); |
1237 } | 1238 } |
1238 | 1239 |
1239 void ExpectEndOfStream(DemuxerStream::Type type) { | 1240 void ExpectEndOfStream(DemuxerStream::Type type) { |
1240 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, IsEndOfStream())); | 1241 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, IsEndOfStream())); |
1241 demuxer_->GetStream(type)->Read(base::Bind( | 1242 demuxer_->GetStream(type)->Read(base::Bind( |
1242 &ChunkDemuxerTest::ReadDone, base::Unretained(this))); | 1243 &ChunkDemuxerTest::ReadDone, base::Unretained(this))); |
1243 message_loop_.RunUntilIdle(); | 1244 message_loop_.RunUntilIdle(); |
(...skipping 20 matching lines...) Expand all Loading... |
1264 expected, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 1265 expected, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
1265 std::stringstream ss; | 1266 std::stringstream ss; |
1266 for (size_t i = 0; i < timestamps.size(); ++i) { | 1267 for (size_t i = 0; i < timestamps.size(); ++i) { |
1267 // Initialize status to kAborted since it's possible for Read() to return | 1268 // Initialize status to kAborted since it's possible for Read() to return |
1268 // without calling StoreStatusAndBuffer() if it doesn't have any buffers | 1269 // without calling StoreStatusAndBuffer() if it doesn't have any buffers |
1269 // left to return. | 1270 // left to return. |
1270 DemuxerStream::Status status = DemuxerStream::kAborted; | 1271 DemuxerStream::Status status = DemuxerStream::kAborted; |
1271 scoped_refptr<DecoderBuffer> buffer; | 1272 scoped_refptr<DecoderBuffer> buffer; |
1272 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer, | 1273 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer, |
1273 base::Unretained(this), &status, &buffer)); | 1274 base::Unretained(this), &status, &buffer)); |
1274 base::MessageLoop::current()->RunUntilIdle(); | 1275 base::RunLoop().RunUntilIdle(); |
1275 if (status != DemuxerStream::kOk || buffer->end_of_stream()) | 1276 if (status != DemuxerStream::kOk || buffer->end_of_stream()) |
1276 break; | 1277 break; |
1277 | 1278 |
1278 if (i > 0) | 1279 if (i > 0) |
1279 ss << " "; | 1280 ss << " "; |
1280 ss << buffer->timestamp().InMilliseconds(); | 1281 ss << buffer->timestamp().InMilliseconds(); |
1281 | 1282 |
1282 if (buffer->is_key_frame()) | 1283 if (buffer->is_key_frame()) |
1283 ss << "K"; | 1284 ss << "K"; |
1284 | 1285 |
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1995 // Request a read on the audio and video streams. | 1996 // Request a read on the audio and video streams. |
1996 void RequestReads() { | 1997 void RequestReads() { |
1997 EXPECT_FALSE(audio_read_done_); | 1998 EXPECT_FALSE(audio_read_done_); |
1998 EXPECT_FALSE(video_read_done_); | 1999 EXPECT_FALSE(video_read_done_); |
1999 | 2000 |
2000 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); | 2001 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); |
2001 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); | 2002 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); |
2002 | 2003 |
2003 audio->Read(base::Bind(&OnEndOfStreamReadDone, &audio_read_done_)); | 2004 audio->Read(base::Bind(&OnEndOfStreamReadDone, &audio_read_done_)); |
2004 video->Read(base::Bind(&OnEndOfStreamReadDone, &video_read_done_)); | 2005 video->Read(base::Bind(&OnEndOfStreamReadDone, &video_read_done_)); |
2005 base::MessageLoop::current()->RunUntilIdle(); | 2006 base::RunLoop().RunUntilIdle(); |
2006 } | 2007 } |
2007 | 2008 |
2008 // Check to see if |audio_read_done_| and |video_read_done_| variables | 2009 // Check to see if |audio_read_done_| and |video_read_done_| variables |
2009 // match |expected|. | 2010 // match |expected|. |
2010 void CheckIfReadDonesWereCalled(bool expected) { | 2011 void CheckIfReadDonesWereCalled(bool expected) { |
2011 base::MessageLoop::current()->RunUntilIdle(); | 2012 base::RunLoop().RunUntilIdle(); |
2012 EXPECT_EQ(expected, audio_read_done_); | 2013 EXPECT_EQ(expected, audio_read_done_); |
2013 EXPECT_EQ(expected, video_read_done_); | 2014 EXPECT_EQ(expected, video_read_done_); |
2014 } | 2015 } |
2015 | 2016 |
2016 private: | 2017 private: |
2017 static void OnEndOfStreamReadDone( | 2018 static void OnEndOfStreamReadDone( |
2018 bool* called, | 2019 bool* called, |
2019 DemuxerStream::Status status, | 2020 DemuxerStream::Status status, |
2020 const scoped_refptr<DecoderBuffer>& buffer) { | 2021 const scoped_refptr<DecoderBuffer>& buffer) { |
2021 EXPECT_EQ(status, DemuxerStream::kOk); | 2022 EXPECT_EQ(status, DemuxerStream::kOk); |
(...skipping 2657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4679 cluster->size() - video_start); | 4680 cluster->size() - video_start); |
4680 | 4681 |
4681 CheckExpectedRanges(DemuxerStream::AUDIO, "{ [30,90) }"); | 4682 CheckExpectedRanges(DemuxerStream::AUDIO, "{ [30,90) }"); |
4682 CheckExpectedRanges(DemuxerStream::VIDEO, "{ [0,91) }"); | 4683 CheckExpectedRanges(DemuxerStream::VIDEO, "{ [0,91) }"); |
4683 CheckExpectedRanges("{ [30,90) }"); | 4684 CheckExpectedRanges("{ [30,90) }"); |
4684 CheckExpectedBuffers(audio_stream, "30K 40K 50K 60K 70K 80K"); | 4685 CheckExpectedBuffers(audio_stream, "30K 40K 50K 60K 70K 80K"); |
4685 CheckExpectedBuffers(video_stream, "71K 81"); | 4686 CheckExpectedBuffers(video_stream, "71K 81"); |
4686 } | 4687 } |
4687 | 4688 |
4688 } // namespace media | 4689 } // namespace media |
OLD | NEW |