| 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/run_loop.h" |
| 16 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 17 #include "base/strings/string_split.h" | 17 #include "base/strings/string_split.h" |
| 18 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
| 19 #include "base/synchronization/waitable_event.h" |
| 19 #include "media/base/audio_decoder_config.h" | 20 #include "media/base/audio_decoder_config.h" |
| 20 #include "media/base/decoder_buffer.h" | 21 #include "media/base/decoder_buffer.h" |
| 21 #include "media/base/decrypt_config.h" | 22 #include "media/base/decrypt_config.h" |
| 22 #include "media/base/media.h" | 23 #include "media/base/media.h" |
| 23 #include "media/base/media_tracks.h" | 24 #include "media/base/media_tracks.h" |
| 24 #include "media/base/mock_demuxer_host.h" | 25 #include "media/base/mock_demuxer_host.h" |
| 25 #include "media/base/mock_media_log.h" | 26 #include "media/base/mock_media_log.h" |
| 26 #include "media/base/test_data_util.h" | 27 #include "media/base/test_data_util.h" |
| 27 #include "media/base/test_helpers.h" | 28 #include "media/base/test_helpers.h" |
| 28 #include "media/base/timestamp_constants.h" | 29 #include "media/base/timestamp_constants.h" |
| (...skipping 4670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4699 ASSERT_TRUE(AppendData(kSourceId, cluster->data() + video_start, | 4700 ASSERT_TRUE(AppendData(kSourceId, cluster->data() + video_start, |
| 4700 cluster->size() - video_start)); | 4701 cluster->size() - video_start)); |
| 4701 | 4702 |
| 4702 CheckExpectedRanges(DemuxerStream::AUDIO, "{ [30,90) }"); | 4703 CheckExpectedRanges(DemuxerStream::AUDIO, "{ [30,90) }"); |
| 4703 CheckExpectedRanges(DemuxerStream::VIDEO, "{ [0,91) }"); | 4704 CheckExpectedRanges(DemuxerStream::VIDEO, "{ [0,91) }"); |
| 4704 CheckExpectedRanges("{ [30,90) }"); | 4705 CheckExpectedRanges("{ [30,90) }"); |
| 4705 CheckExpectedBuffers(audio_stream, "30K 40K 50K 60K 70K 80K"); | 4706 CheckExpectedBuffers(audio_stream, "30K 40K 50K 60K 70K 80K"); |
| 4706 CheckExpectedBuffers(video_stream, "71K 81"); | 4707 CheckExpectedBuffers(video_stream, "71K 81"); |
| 4707 } | 4708 } |
| 4708 | 4709 |
| 4710 void OnStreamStatusChanged(base::WaitableEvent* event, |
| 4711 DemuxerStream* expected_stream, |
| 4712 DemuxerStream* actual_stream, |
| 4713 bool enabled, |
| 4714 base::TimeDelta) { |
| 4715 EXPECT_EQ(expected_stream, actual_stream); |
| 4716 EXPECT_EQ(enabled, actual_stream->enabled()); |
| 4717 event->Signal(); |
| 4718 } |
| 4719 |
| 4720 void CheckStreamStatusNotifications(DemuxerStream* stream) { |
| 4721 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 4722 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 4723 |
| 4724 ASSERT_TRUE(stream->enabled()); |
| 4725 stream->SetStreamStatusChangeCB(base::Bind(&OnStreamStatusChanged, |
| 4726 base::Unretained(&event), |
| 4727 base::Unretained(stream))); |
| 4728 |
| 4729 stream->set_enabled(false, base::TimeDelta()); |
| 4730 base::RunLoop().RunUntilIdle(); |
| 4731 ASSERT_TRUE(event.IsSignaled()); |
| 4732 |
| 4733 event.Reset(); |
| 4734 stream->set_enabled(true, base::TimeDelta()); |
| 4735 base::RunLoop().RunUntilIdle(); |
| 4736 ASSERT_TRUE(event.IsSignaled()); |
| 4737 } |
| 4738 |
| 4739 TEST_F(ChunkDemuxerTest, StreamStatusNotifications) { |
| 4740 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 4741 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
| 4742 EXPECT_NE(nullptr, audio_stream); |
| 4743 CheckStreamStatusNotifications(audio_stream); |
| 4744 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
| 4745 EXPECT_NE(nullptr, video_stream); |
| 4746 CheckStreamStatusNotifications(video_stream); |
| 4747 } |
| 4748 |
| 4709 } // namespace media | 4749 } // namespace media |
| OLD | NEW |