Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: media/filters/chunk_demuxer_unittest.cc

Issue 13813016: Remove reference counting from media::Demuxer and friends. (Closed) Base URL: http://git.chromium.org/chromium/src.git@vd_scoped
Patch Set: fix tools Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698