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 <deque> | 5 #include <deque> |
6 | 6 |
7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
10 #include "media/base/filters.h" | 10 #include "media/base/filters.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); | 65 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); |
66 EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber()); | 66 EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber()); |
67 EXPECT_CALL(host_, SetCurrentReadPosition(_)) | 67 EXPECT_CALL(host_, SetCurrentReadPosition(_)) |
68 .WillRepeatedly(SaveArg<0>(¤t_read_position_)); | 68 .WillRepeatedly(SaveArg<0>(¤t_read_position_)); |
69 | 69 |
70 CreateDataSource(name, disable_file_size); | 70 CreateDataSource(name, disable_file_size); |
71 | 71 |
72 // Create an FFmpegDemuxer with local data source. | 72 // Create an FFmpegDemuxer with local data source. |
73 demuxer_ = new FFmpegDemuxer(&message_loop_, data_source_, true); | 73 demuxer_ = new FFmpegDemuxer(&message_loop_, data_source_, true); |
74 demuxer_->disable_first_seek_hack_for_testing(); | 74 demuxer_->disable_first_seek_hack_for_testing(); |
75 | |
76 // Inject a filter host and message loop and prepare a data source. | |
77 demuxer_->set_host(&host_); | |
78 } | 75 } |
79 | 76 |
80 MOCK_METHOD1(CheckPoint, void(int v)); | 77 MOCK_METHOD1(CheckPoint, void(int v)); |
81 | 78 |
82 void InitializeDemuxer() { | 79 void InitializeDemuxer() { |
83 EXPECT_CALL(host_, SetDuration(_)); | 80 EXPECT_CALL(host_, SetDuration(_)); |
84 demuxer_->Initialize(NewExpectedStatusCB(PIPELINE_OK)); | 81 demuxer_->Initialize(&host_, NewExpectedStatusCB(PIPELINE_OK)); |
85 message_loop_.RunAllPending(); | 82 message_loop_.RunAllPending(); |
86 } | 83 } |
87 | 84 |
88 // Verifies that |buffer| has a specific |size| and |timestamp|. | 85 // Verifies that |buffer| has a specific |size| and |timestamp|. |
89 // |location| simply indicates where the call to this function was made. | 86 // |location| simply indicates where the call to this function was made. |
90 // This makes it easier to track down where test failures occur. | 87 // This makes it easier to track down where test failures occur. |
91 void ValidateBuffer(const tracked_objects::Location& location, | 88 void ValidateBuffer(const tracked_objects::Location& location, |
92 const scoped_refptr<Buffer>& buffer, | 89 const scoped_refptr<Buffer>& buffer, |
93 int size, int64 timestampInMicroseconds) { | 90 int size, int64 timestampInMicroseconds) { |
94 std::string location_str; | 91 std::string location_str; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 EXPECT_EQ(PIPELINE_OK, data_source_->Initialize(file_path.MaybeAsASCII())); | 139 EXPECT_EQ(PIPELINE_OK, data_source_->Initialize(file_path.MaybeAsASCII())); |
143 } | 140 } |
144 | 141 |
145 DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest); | 142 DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest); |
146 }; | 143 }; |
147 | 144 |
148 TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) { | 145 TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) { |
149 // Simulate avformat_open_input() failing. | 146 // Simulate avformat_open_input() failing. |
150 CreateDemuxer("ten_byte_file"), | 147 CreateDemuxer("ten_byte_file"), |
151 EXPECT_CALL(host_, SetCurrentReadPosition(_)); | 148 EXPECT_CALL(host_, SetCurrentReadPosition(_)); |
152 demuxer_->Initialize(NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); | 149 demuxer_->Initialize( |
150 &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); | |
153 | 151 |
154 message_loop_.RunAllPending(); | 152 message_loop_.RunAllPending(); |
155 } | 153 } |
156 | 154 |
157 // TODO(acolwell): Uncomment this test when we discover a file that passes | 155 // TODO(acolwell): Uncomment this test when we discover a file that passes |
158 // avformat_open_input(), but has avformat_find_stream_info() fail. | 156 // avformat_open_input(), but has avformat_find_stream_info() fail. |
159 // | 157 // |
160 //TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) { | 158 //TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) { |
161 // CreateDemuxer("find_stream_info_fail.webm"); | 159 // CreateDemuxer("find_stream_info_fail.webm"); |
162 // demuxer_->Initialize( | 160 // demuxer_->Initialize( |
163 // NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_PARSE)); | 161 // &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_PARSE)); |
164 // message_loop_.RunAllPending(); | 162 // message_loop_.RunAllPending(); |
165 //} | 163 //} |
166 | 164 |
167 TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) { | 165 TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) { |
168 // Open a file with no streams whatsoever. | 166 // Open a file with no streams whatsoever. |
169 CreateDemuxer("no_streams.webm"); | 167 CreateDemuxer("no_streams.webm"); |
170 EXPECT_CALL(host_, SetCurrentReadPosition(_)); | 168 EXPECT_CALL(host_, SetCurrentReadPosition(_)); |
171 demuxer_->Initialize( | 169 demuxer_->Initialize( |
172 NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS)); | 170 &host_, NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS)); |
173 message_loop_.RunAllPending(); | 171 message_loop_.RunAllPending(); |
174 } | 172 } |
175 | 173 |
176 TEST_F(FFmpegDemuxerTest, Initialize_NoAudioVideo) { | 174 TEST_F(FFmpegDemuxerTest, Initialize_NoAudioVideo) { |
177 // Open a file containing streams but none of which are audio/video streams. | 175 // Open a file containing streams but none of which are audio/video streams. |
178 CreateDemuxer("no_audio_video.webm"); | 176 CreateDemuxer("no_audio_video.webm"); |
179 demuxer_->Initialize( | 177 demuxer_->Initialize( |
180 NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS)); | 178 &host_, NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS)); |
181 message_loop_.RunAllPending(); | 179 message_loop_.RunAllPending(); |
182 } | 180 } |
183 | 181 |
184 TEST_F(FFmpegDemuxerTest, Initialize_Successful) { | 182 TEST_F(FFmpegDemuxerTest, Initialize_Successful) { |
185 CreateDemuxer("bear-320x240.webm"); | 183 CreateDemuxer("bear-320x240.webm"); |
186 InitializeDemuxer(); | 184 InitializeDemuxer(); |
187 | 185 |
188 // Video stream should be present. | 186 // Video stream should be present. |
189 scoped_refptr<DemuxerStream> stream = | 187 scoped_refptr<DemuxerStream> stream = |
190 demuxer_->GetStream(DemuxerStream::VIDEO); | 188 demuxer_->GetStream(DemuxerStream::VIDEO); |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
579 callback.Run(size); | 577 callback.Run(size); |
580 } | 578 } |
581 | 579 |
582 TEST_F(FFmpegDemuxerTest, ProtocolRead) { | 580 TEST_F(FFmpegDemuxerTest, ProtocolRead) { |
583 scoped_refptr<StrictMock<MockDataSource> > data_source = | 581 scoped_refptr<StrictMock<MockDataSource> > data_source = |
584 new StrictMock<MockDataSource>(); | 582 new StrictMock<MockDataSource>(); |
585 | 583 |
586 EXPECT_CALL(*data_source, Stop(_)) | 584 EXPECT_CALL(*data_source, Stop(_)) |
587 .WillRepeatedly(Invoke(&RunStopFilterCallback)); | 585 .WillRepeatedly(Invoke(&RunStopFilterCallback)); |
588 | 586 |
589 // Creates a demuxer. | 587 // Create a demuxer. |
590 scoped_refptr<MockFFmpegDemuxer> demuxer( | 588 scoped_refptr<MockFFmpegDemuxer> demuxer( |
591 new MockFFmpegDemuxer(&message_loop_, data_source)); | 589 new MockFFmpegDemuxer(&message_loop_, data_source)); |
592 demuxer->set_host(&host_); | 590 demuxer->Initialize(&host_, NewExpectedStatusCB(PIPELINE_OK)); |
acolwell GONE FROM CHROMIUM
2012/04/04 16:01:00
what?! Initialize() wasn't necessary before? Seems
scherkus (not reviewing)
2012/04/05 01:54:53
DCHECK(host_) added and rewrote these tests
| |
591 message_loop_.RunAllPending(); | |
593 | 592 |
594 uint8 kBuffer[1]; | 593 uint8 kBuffer[1]; |
595 InSequence s; | 594 InSequence s; |
596 // Actions taken in the first read. | 595 // Actions taken in the first read. |
597 EXPECT_CALL(*data_source, GetSize(_)) | 596 EXPECT_CALL(*data_source, GetSize(_)) |
598 .WillOnce(DoAll(SetArgPointee<0>(1024), Return(true))); | 597 .WillOnce(DoAll(SetArgPointee<0>(1024), Return(true))); |
599 EXPECT_CALL(*data_source, Read(0, 512, kBuffer, _)) | 598 EXPECT_CALL(*data_source, Read(0, 512, kBuffer, _)) |
600 .WillOnce(WithArgs<1, 3>(Invoke(&RunCallback))); | 599 .WillOnce(WithArgs<1, 3>(Invoke(&RunCallback))); |
601 EXPECT_CALL(*demuxer, SignalReadCompleted(512)); | 600 EXPECT_CALL(*demuxer, SignalReadCompleted(512)); |
602 EXPECT_CALL(*demuxer, WaitForRead()) | 601 EXPECT_CALL(*demuxer, WaitForRead()) |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
749 message_loop_.RunAllPending(); | 748 message_loop_.RunAllPending(); |
750 EXPECT_TRUE(reader->called()); | 749 EXPECT_TRUE(reader->called()); |
751 ValidateBuffer(FROM_HERE, reader->buffer(), 1740, 2436000); | 750 ValidateBuffer(FROM_HERE, reader->buffer(), 1740, 2436000); |
752 | 751 |
753 // Manually release the last reference to the buffer and verify it was freed. | 752 // Manually release the last reference to the buffer and verify it was freed. |
754 reader->Reset(); | 753 reader->Reset(); |
755 message_loop_.RunAllPending(); | 754 message_loop_.RunAllPending(); |
756 } | 755 } |
757 | 756 |
758 } // namespace media | 757 } // namespace media |
OLD | NEW |