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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "media/base/audio_decoder_config.h" | 9 #include "media/base/audio_decoder_config.h" |
10 #include "media/base/decoder_buffer.h" | 10 #include "media/base/decoder_buffer.h" |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 | 145 |
146 ChunkDemuxerTest() { | 146 ChunkDemuxerTest() { |
147 CreateNewDemuxer(); | 147 CreateNewDemuxer(); |
148 } | 148 } |
149 | 149 |
150 void CreateNewDemuxer() { | 150 void CreateNewDemuxer() { |
151 base::Closure open_cb = | 151 base::Closure open_cb = |
152 base::Bind(&ChunkDemuxerTest::DemuxerOpened, base::Unretained(this)); | 152 base::Bind(&ChunkDemuxerTest::DemuxerOpened, base::Unretained(this)); |
153 ChunkDemuxer::NeedKeyCB need_key_cb = | 153 ChunkDemuxer::NeedKeyCB need_key_cb = |
154 base::Bind(&ChunkDemuxerTest::DemuxerNeedKey, base::Unretained(this)); | 154 base::Bind(&ChunkDemuxerTest::DemuxerNeedKey, base::Unretained(this)); |
155 demuxer_ = new ChunkDemuxer(open_cb, need_key_cb, LogCB()); | 155 demuxer_.reset(new ChunkDemuxer(open_cb, need_key_cb, LogCB())); |
156 } | 156 } |
157 | 157 |
158 virtual ~ChunkDemuxerTest() { | 158 virtual ~ChunkDemuxerTest() { |
159 ShutdownDemuxer(); | 159 ShutdownDemuxer(); |
160 } | 160 } |
161 | 161 |
162 void CreateInitSegment(bool has_audio, bool has_video, | 162 void CreateInitSegment(bool has_audio, bool has_video, |
163 bool is_audio_encrypted, bool is_video_encrypted, | 163 bool is_audio_encrypted, bool is_video_encrypted, |
164 scoped_ptr<uint8[]>* buffer, | 164 scoped_ptr<uint8[]>* buffer, |
165 int* size) { | 165 int* size) { |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 AddVideoBlockGroup(&cb, track_number, timecode, block_duration, | 555 AddVideoBlockGroup(&cb, track_number, timecode, block_duration, |
556 kWebMFlagKeyframe); | 556 kWebMFlagKeyframe); |
557 } else { | 557 } else { |
558 cb.AddBlockGroup(track_number, timecode, block_duration, | 558 cb.AddBlockGroup(track_number, timecode, block_duration, |
559 kWebMFlagKeyframe, data.get(), size); | 559 kWebMFlagKeyframe, data.get(), size); |
560 } | 560 } |
561 return cb.Finish(); | 561 return cb.Finish(); |
562 } | 562 } |
563 | 563 |
564 void Read(DemuxerStream::Type type, const DemuxerStream::ReadCB& read_cb) { | 564 void Read(DemuxerStream::Type type, const DemuxerStream::ReadCB& read_cb) { |
565 scoped_refptr<DemuxerStream> stream = demuxer_->GetStream(type); | 565 demuxer_->GetStream(type)->Read(read_cb); |
566 stream->Read(read_cb); | |
567 message_loop_.RunUntilIdle(); | 566 message_loop_.RunUntilIdle(); |
568 } | 567 } |
569 | 568 |
570 void ReadAudio(const DemuxerStream::ReadCB& read_cb) { | 569 void ReadAudio(const DemuxerStream::ReadCB& read_cb) { |
571 Read(DemuxerStream::AUDIO, read_cb); | 570 Read(DemuxerStream::AUDIO, read_cb); |
572 } | 571 } |
573 | 572 |
574 void ReadVideo(const DemuxerStream::ReadCB& read_cb) { | 573 void ReadVideo(const DemuxerStream::ReadCB& read_cb) { |
575 Read(DemuxerStream::VIDEO, read_cb); | 574 Read(DemuxerStream::VIDEO, read_cb); |
576 } | 575 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 do { | 671 do { |
673 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer, | 672 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer, |
674 base::Unretained(this), status, &buffer)); | 673 base::Unretained(this), status, &buffer)); |
675 MessageLoop::current()->RunUntilIdle(); | 674 MessageLoop::current()->RunUntilIdle(); |
676 if (*status == DemuxerStream::kOk && !buffer->IsEndOfStream()) | 675 if (*status == DemuxerStream::kOk && !buffer->IsEndOfStream()) |
677 *last_timestamp = buffer->GetTimestamp(); | 676 *last_timestamp = buffer->GetTimestamp(); |
678 } while (*status == DemuxerStream::kOk && !buffer->IsEndOfStream()); | 677 } while (*status == DemuxerStream::kOk && !buffer->IsEndOfStream()); |
679 } | 678 } |
680 | 679 |
681 void ExpectEndOfStream(DemuxerStream::Type type) { | 680 void ExpectEndOfStream(DemuxerStream::Type type) { |
682 scoped_refptr<DemuxerStream> stream = demuxer_->GetStream(type); | |
683 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, IsEndOfStream())); | 681 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, IsEndOfStream())); |
684 stream->Read(base::Bind(&ChunkDemuxerTest::ReadDone, | 682 demuxer_->GetStream(type)->Read(base::Bind( |
685 base::Unretained(this))); | 683 &ChunkDemuxerTest::ReadDone, base::Unretained(this))); |
686 message_loop_.RunUntilIdle(); | 684 message_loop_.RunUntilIdle(); |
687 } | 685 } |
688 | 686 |
689 void ExpectRead(DemuxerStream::Type type, int64 timestamp_in_ms) { | 687 void ExpectRead(DemuxerStream::Type type, int64 timestamp_in_ms) { |
690 scoped_refptr<DemuxerStream> stream = demuxer_->GetStream(type); | |
691 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, | 688 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, |
692 HasTimestamp(timestamp_in_ms))); | 689 HasTimestamp(timestamp_in_ms))); |
693 stream->Read(base::Bind(&ChunkDemuxerTest::ReadDone, | 690 demuxer_->GetStream(type)->Read(base::Bind( |
694 base::Unretained(this))); | 691 &ChunkDemuxerTest::ReadDone, base::Unretained(this))); |
695 message_loop_.RunUntilIdle(); | 692 message_loop_.RunUntilIdle(); |
696 } | 693 } |
697 | 694 |
698 void ExpectConfigChanged(DemuxerStream::Type type) { | 695 void ExpectConfigChanged(DemuxerStream::Type type) { |
699 scoped_refptr<DemuxerStream> stream = demuxer_->GetStream(type); | |
700 EXPECT_CALL(*this, ReadDone(DemuxerStream::kConfigChanged, _)); | 696 EXPECT_CALL(*this, ReadDone(DemuxerStream::kConfigChanged, _)); |
701 stream->Read(base::Bind(&ChunkDemuxerTest::ReadDone, | 697 demuxer_->GetStream(type)->Read(base::Bind( |
702 base::Unretained(this))); | 698 &ChunkDemuxerTest::ReadDone, base::Unretained(this))); |
703 message_loop_.RunUntilIdle(); | 699 message_loop_.RunUntilIdle(); |
704 } | 700 } |
705 | 701 |
706 MOCK_METHOD1(Checkpoint, void(int id)); | 702 MOCK_METHOD1(Checkpoint, void(int id)); |
707 | 703 |
708 struct BufferTimestamps { | 704 struct BufferTimestamps { |
709 int video_time_ms; | 705 int video_time_ms; |
710 int audio_time_ms; | 706 int audio_time_ms; |
711 }; | 707 }; |
712 static const int kSkip = -1; | 708 static const int kSkip = -1; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 MOCK_METHOD3(NeedKeyMock, void(const std::string& type, | 771 MOCK_METHOD3(NeedKeyMock, void(const std::string& type, |
776 const uint8* init_data, int init_data_size)); | 772 const uint8* init_data, int init_data_size)); |
777 void DemuxerNeedKey(const std::string& type, | 773 void DemuxerNeedKey(const std::string& type, |
778 scoped_ptr<uint8[]> init_data, int init_data_size) { | 774 scoped_ptr<uint8[]> init_data, int init_data_size) { |
779 NeedKeyMock(type, init_data.get(), init_data_size); | 775 NeedKeyMock(type, init_data.get(), init_data_size); |
780 } | 776 } |
781 | 777 |
782 MessageLoop message_loop_; | 778 MessageLoop message_loop_; |
783 MockDemuxerHost host_; | 779 MockDemuxerHost host_; |
784 | 780 |
785 scoped_refptr<ChunkDemuxer> demuxer_; | 781 scoped_ptr<ChunkDemuxer> demuxer_; |
786 | 782 |
787 private: | 783 private: |
788 DISALLOW_COPY_AND_ASSIGN(ChunkDemuxerTest); | 784 DISALLOW_COPY_AND_ASSIGN(ChunkDemuxerTest); |
789 }; | 785 }; |
790 | 786 |
791 TEST_F(ChunkDemuxerTest, TestInit) { | 787 TEST_F(ChunkDemuxerTest, TestInit) { |
792 // Test no streams, audio-only, video-only, and audio & video scenarios. | 788 // Test no streams, audio-only, video-only, and audio & video scenarios. |
793 // Audio and video streams can be encrypted or not encrypted. | 789 // Audio and video streams can be encrypted or not encrypted. |
794 for (int i = 0; i < 16; i++) { | 790 for (int i = 0; i < 16; i++) { |
795 bool has_audio = (i & 0x1) != 0; | 791 bool has_audio = (i & 0x1) != 0; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 demuxer_->GetStream(DemuxerStream::VIDEO); | 835 demuxer_->GetStream(DemuxerStream::VIDEO); |
840 if (has_video) { | 836 if (has_video) { |
841 EXPECT_TRUE(video_stream); | 837 EXPECT_TRUE(video_stream); |
842 EXPECT_EQ(is_video_encrypted, | 838 EXPECT_EQ(is_video_encrypted, |
843 video_stream->video_decoder_config().is_encrypted()); | 839 video_stream->video_decoder_config().is_encrypted()); |
844 } else { | 840 } else { |
845 EXPECT_FALSE(video_stream); | 841 EXPECT_FALSE(video_stream); |
846 } | 842 } |
847 | 843 |
848 ShutdownDemuxer(); | 844 ShutdownDemuxer(); |
849 demuxer_ = NULL; | 845 demuxer_.reset(); |
850 } | 846 } |
851 } | 847 } |
852 | 848 |
853 // Make sure that the demuxer reports an error if Shutdown() | 849 // Make sure that the demuxer reports an error if Shutdown() |
854 // is called before all the initialization segments are appended. | 850 // is called before all the initialization segments are appended. |
855 TEST_F(ChunkDemuxerTest, TestShutdownBeforeAllInitSegmentsAppended) { | 851 TEST_F(ChunkDemuxerTest, TestShutdownBeforeAllInitSegmentsAppended) { |
856 EXPECT_CALL(*this, DemuxerOpened()); | 852 EXPECT_CALL(*this, DemuxerOpened()); |
857 demuxer_->Initialize( | 853 demuxer_->Initialize( |
858 &host_, CreateInitDoneCB( | 854 &host_, CreateInitDoneCB( |
859 kDefaultDuration(), DEMUXER_ERROR_COULD_NOT_OPEN)); | 855 kDefaultDuration(), DEMUXER_ERROR_COULD_NOT_OPEN)); |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1083 demuxer_->Initialize( | 1079 demuxer_->Initialize( |
1084 &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); | 1080 &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); |
1085 | 1081 |
1086 ASSERT_EQ(AddId(), ChunkDemuxer::kOk); | 1082 ASSERT_EQ(AddId(), ChunkDemuxer::kOk); |
1087 | 1083 |
1088 CheckExpectedRanges("{ }"); | 1084 CheckExpectedRanges("{ }"); |
1089 demuxer_->EndOfStream(PIPELINE_OK); | 1085 demuxer_->EndOfStream(PIPELINE_OK); |
1090 ShutdownDemuxer(); | 1086 ShutdownDemuxer(); |
1091 CheckExpectedRanges("{ }"); | 1087 CheckExpectedRanges("{ }"); |
1092 demuxer_->RemoveId(kSourceId); | 1088 demuxer_->RemoveId(kSourceId); |
1093 demuxer_ = NULL; | 1089 demuxer_.reset(); |
1094 } | 1090 } |
1095 | 1091 |
1096 TEST_F(ChunkDemuxerTest, TestEndOfStreamWithNoMediaAppend) { | 1092 TEST_F(ChunkDemuxerTest, TestEndOfStreamWithNoMediaAppend) { |
1097 ASSERT_TRUE(InitDemuxer(true, true)); | 1093 ASSERT_TRUE(InitDemuxer(true, true)); |
1098 | 1094 |
1099 CheckExpectedRanges("{ }"); | 1095 CheckExpectedRanges("{ }"); |
1100 demuxer_->EndOfStream(PIPELINE_OK); | 1096 demuxer_->EndOfStream(PIPELINE_OK); |
1101 CheckExpectedRanges("{ }"); | 1097 CheckExpectedRanges("{ }"); |
1102 } | 1098 } |
1103 | 1099 |
(...skipping 17 matching lines...) Expand all Loading... |
1121 CheckExpectedRanges(kDefaultFirstClusterRange); | 1117 CheckExpectedRanges(kDefaultFirstClusterRange); |
1122 | 1118 |
1123 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_NETWORK)); | 1119 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_NETWORK)); |
1124 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); | 1120 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); |
1125 } | 1121 } |
1126 | 1122 |
1127 // Helper class to reduce duplicate code when testing end of stream | 1123 // Helper class to reduce duplicate code when testing end of stream |
1128 // Read() behavior. | 1124 // Read() behavior. |
1129 class EndOfStreamHelper { | 1125 class EndOfStreamHelper { |
1130 public: | 1126 public: |
1131 explicit EndOfStreamHelper(const scoped_refptr<Demuxer> demuxer) | 1127 explicit EndOfStreamHelper(Demuxer* demuxer) |
1132 : demuxer_(demuxer), | 1128 : demuxer_(demuxer), |
1133 audio_read_done_(false), | 1129 audio_read_done_(false), |
1134 video_read_done_(false) { | 1130 video_read_done_(false) { |
1135 } | 1131 } |
1136 | 1132 |
1137 // Request a read on the audio and video streams. | 1133 // Request a read on the audio and video streams. |
1138 void RequestReads() { | 1134 void RequestReads() { |
1139 EXPECT_FALSE(audio_read_done_); | 1135 EXPECT_FALSE(audio_read_done_); |
1140 EXPECT_FALSE(video_read_done_); | 1136 EXPECT_FALSE(video_read_done_); |
1141 | 1137 |
(...skipping 17 matching lines...) Expand all Loading... |
1159 private: | 1155 private: |
1160 static void OnEndOfStreamReadDone( | 1156 static void OnEndOfStreamReadDone( |
1161 bool* called, | 1157 bool* called, |
1162 DemuxerStream::Status status, | 1158 DemuxerStream::Status status, |
1163 const scoped_refptr<DecoderBuffer>& buffer) { | 1159 const scoped_refptr<DecoderBuffer>& buffer) { |
1164 EXPECT_EQ(status, DemuxerStream::kOk); | 1160 EXPECT_EQ(status, DemuxerStream::kOk); |
1165 EXPECT_TRUE(buffer->IsEndOfStream()); | 1161 EXPECT_TRUE(buffer->IsEndOfStream()); |
1166 *called = true; | 1162 *called = true; |
1167 } | 1163 } |
1168 | 1164 |
1169 scoped_refptr<Demuxer> demuxer_; | 1165 Demuxer* demuxer_; |
1170 bool audio_read_done_; | 1166 bool audio_read_done_; |
1171 bool video_read_done_; | 1167 bool video_read_done_; |
1172 | 1168 |
1173 DISALLOW_COPY_AND_ASSIGN(EndOfStreamHelper); | 1169 DISALLOW_COPY_AND_ASSIGN(EndOfStreamHelper); |
1174 }; | 1170 }; |
1175 | 1171 |
1176 // Make sure that all pending reads that we don't have media data for get an | 1172 // Make sure that all pending reads that we don't have media data for get an |
1177 // "end of stream" buffer when EndOfStream() is called. | 1173 // "end of stream" buffer when EndOfStream() is called. |
1178 TEST_F(ChunkDemuxerTest, TestEndOfStreamWithPendingReads) { | 1174 TEST_F(ChunkDemuxerTest, TestEndOfStreamWithPendingReads) { |
1179 ASSERT_TRUE(InitDemuxer(true, true)); | 1175 ASSERT_TRUE(InitDemuxer(true, true)); |
1180 | 1176 |
1181 scoped_ptr<Cluster> cluster(GenerateCluster(0, 2)); | 1177 scoped_ptr<Cluster> cluster(GenerateCluster(0, 2)); |
1182 AppendData(cluster->data(), cluster->size()); | 1178 AppendData(cluster->data(), cluster->size()); |
1183 | 1179 |
1184 bool audio_read_done_1 = false; | 1180 bool audio_read_done_1 = false; |
1185 bool video_read_done_1 = false; | 1181 bool video_read_done_1 = false; |
1186 EndOfStreamHelper end_of_stream_helper_1(demuxer_); | 1182 EndOfStreamHelper end_of_stream_helper_1(demuxer_.get()); |
1187 EndOfStreamHelper end_of_stream_helper_2(demuxer_); | 1183 EndOfStreamHelper end_of_stream_helper_2(demuxer_.get()); |
1188 | 1184 |
1189 ReadAudio(base::Bind(&OnReadDone, | 1185 ReadAudio(base::Bind(&OnReadDone, |
1190 base::TimeDelta::FromMilliseconds(0), | 1186 base::TimeDelta::FromMilliseconds(0), |
1191 &audio_read_done_1)); | 1187 &audio_read_done_1)); |
1192 ReadVideo(base::Bind(&OnReadDone, | 1188 ReadVideo(base::Bind(&OnReadDone, |
1193 base::TimeDelta::FromMilliseconds(0), | 1189 base::TimeDelta::FromMilliseconds(0), |
1194 &video_read_done_1)); | 1190 &video_read_done_1)); |
1195 | 1191 |
1196 end_of_stream_helper_1.RequestReads(); | 1192 end_of_stream_helper_1.RequestReads(); |
1197 end_of_stream_helper_2.RequestReads(); | 1193 end_of_stream_helper_2.RequestReads(); |
(...skipping 14 matching lines...) Expand all Loading... |
1212 // Make sure that all Read() calls after we get an EndOfStream() | 1208 // Make sure that all Read() calls after we get an EndOfStream() |
1213 // call return an "end of stream" buffer. | 1209 // call return an "end of stream" buffer. |
1214 TEST_F(ChunkDemuxerTest, TestReadsAfterEndOfStream) { | 1210 TEST_F(ChunkDemuxerTest, TestReadsAfterEndOfStream) { |
1215 ASSERT_TRUE(InitDemuxer(true, true)); | 1211 ASSERT_TRUE(InitDemuxer(true, true)); |
1216 | 1212 |
1217 scoped_ptr<Cluster> cluster(GenerateCluster(0, 2)); | 1213 scoped_ptr<Cluster> cluster(GenerateCluster(0, 2)); |
1218 AppendData(cluster->data(), cluster->size()); | 1214 AppendData(cluster->data(), cluster->size()); |
1219 | 1215 |
1220 bool audio_read_done_1 = false; | 1216 bool audio_read_done_1 = false; |
1221 bool video_read_done_1 = false; | 1217 bool video_read_done_1 = false; |
1222 EndOfStreamHelper end_of_stream_helper_1(demuxer_); | 1218 EndOfStreamHelper end_of_stream_helper_1(demuxer_.get()); |
1223 EndOfStreamHelper end_of_stream_helper_2(demuxer_); | 1219 EndOfStreamHelper end_of_stream_helper_2(demuxer_.get()); |
1224 EndOfStreamHelper end_of_stream_helper_3(demuxer_); | 1220 EndOfStreamHelper end_of_stream_helper_3(demuxer_.get()); |
1225 | 1221 |
1226 ReadAudio(base::Bind(&OnReadDone, | 1222 ReadAudio(base::Bind(&OnReadDone, |
1227 base::TimeDelta::FromMilliseconds(0), | 1223 base::TimeDelta::FromMilliseconds(0), |
1228 &audio_read_done_1)); | 1224 &audio_read_done_1)); |
1229 ReadVideo(base::Bind(&OnReadDone, | 1225 ReadVideo(base::Bind(&OnReadDone, |
1230 base::TimeDelta::FromMilliseconds(0), | 1226 base::TimeDelta::FromMilliseconds(0), |
1231 &video_read_done_1)); | 1227 &video_read_done_1)); |
1232 | 1228 |
1233 end_of_stream_helper_1.RequestReads(); | 1229 end_of_stream_helper_1.RequestReads(); |
1234 | 1230 |
(...skipping 882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2117 EXPECT_CALL(host_, SetDuration( | 2113 EXPECT_CALL(host_, SetDuration( |
2118 base::TimeDelta::FromMilliseconds(kDefaultSecondClusterEndTimestamp))); | 2114 base::TimeDelta::FromMilliseconds(kDefaultSecondClusterEndTimestamp))); |
2119 demuxer_->EndOfStream(PIPELINE_OK); | 2115 demuxer_->EndOfStream(PIPELINE_OK); |
2120 | 2116 |
2121 demuxer_->Seek(base::TimeDelta::FromSeconds(0), | 2117 demuxer_->Seek(base::TimeDelta::FromSeconds(0), |
2122 NewExpectedStatusCB(PIPELINE_OK)); | 2118 NewExpectedStatusCB(PIPELINE_OK)); |
2123 | 2119 |
2124 GenerateExpectedReads(0, 4); | 2120 GenerateExpectedReads(0, 4); |
2125 GenerateExpectedReads(46, 66, 5); | 2121 GenerateExpectedReads(46, 66, 5); |
2126 | 2122 |
2127 EndOfStreamHelper end_of_stream_helper(demuxer_); | 2123 EndOfStreamHelper end_of_stream_helper(demuxer_.get()); |
2128 end_of_stream_helper.RequestReads(); | 2124 end_of_stream_helper.RequestReads(); |
2129 end_of_stream_helper.CheckIfReadDonesWereCalled(true); | 2125 end_of_stream_helper.CheckIfReadDonesWereCalled(true); |
2130 } | 2126 } |
2131 | 2127 |
2132 TEST_F(ChunkDemuxerTest, TestConfigChange_Video) { | 2128 TEST_F(ChunkDemuxerTest, TestConfigChange_Video) { |
2133 InSequence s; | 2129 InSequence s; |
2134 | 2130 |
2135 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); | 2131 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); |
2136 | 2132 |
2137 DemuxerStream::Status status; | 2133 DemuxerStream::Status status; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2178 } | 2174 } |
2179 | 2175 |
2180 TEST_F(ChunkDemuxerTest, TestConfigChange_Audio) { | 2176 TEST_F(ChunkDemuxerTest, TestConfigChange_Audio) { |
2181 InSequence s; | 2177 InSequence s; |
2182 | 2178 |
2183 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); | 2179 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); |
2184 | 2180 |
2185 DemuxerStream::Status status; | 2181 DemuxerStream::Status status; |
2186 base::TimeDelta last_timestamp; | 2182 base::TimeDelta last_timestamp; |
2187 | 2183 |
2188 scoped_refptr<DemuxerStream> audio = | 2184 scoped_refptr<DemuxerStream> audio = |
2189 demuxer_->GetStream(DemuxerStream::AUDIO); | 2185 demuxer_->GetStream(DemuxerStream::AUDIO); |
2190 | 2186 |
2191 // Fetch initial audio config and verify it matches what we expect. | 2187 // Fetch initial audio config and verify it matches what we expect. |
2192 const AudioDecoderConfig& audio_config_1 = audio->audio_decoder_config(); | 2188 const AudioDecoderConfig& audio_config_1 = audio->audio_decoder_config(); |
2193 ASSERT_TRUE(audio_config_1.IsValidConfig()); | 2189 ASSERT_TRUE(audio_config_1.IsValidConfig()); |
2194 EXPECT_EQ(audio_config_1.samples_per_second(), 44100); | 2190 EXPECT_EQ(audio_config_1.samples_per_second(), 44100); |
2195 EXPECT_EQ(audio_config_1.extra_data_size(), 3863u); | 2191 EXPECT_EQ(audio_config_1.extra_data_size(), 3863u); |
2196 | 2192 |
2197 ExpectRead(DemuxerStream::AUDIO, 0); | 2193 ExpectRead(DemuxerStream::AUDIO, 0); |
2198 | 2194 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2449 // call. This can happen if video element gets destroyed before | 2445 // call. This can happen if video element gets destroyed before |
2450 // the pipeline has a chance to initialize the demuxer. | 2446 // the pipeline has a chance to initialize the demuxer. |
2451 TEST_F(ChunkDemuxerTest, TestShutdownBeforeInitialize) { | 2447 TEST_F(ChunkDemuxerTest, TestShutdownBeforeInitialize) { |
2452 demuxer_->Shutdown(); | 2448 demuxer_->Shutdown(); |
2453 demuxer_->Initialize( | 2449 demuxer_->Initialize( |
2454 &host_, CreateInitDoneCB(DEMUXER_ERROR_COULD_NOT_OPEN)); | 2450 &host_, CreateInitDoneCB(DEMUXER_ERROR_COULD_NOT_OPEN)); |
2455 message_loop_.RunUntilIdle(); | 2451 message_loop_.RunUntilIdle(); |
2456 } | 2452 } |
2457 | 2453 |
2458 } // namespace media | 2454 } // namespace media |
OLD | NEW |