| 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 |