OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "content/renderer/media/rtc_video_decoder.h" | 5 #include "content/renderer/media/rtc_video_decoder.h" |
6 | 6 |
7 #include <deque> | 7 #include <deque> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 decoder_->Initialize(NULL, | 134 decoder_->Initialize(NULL, |
135 NewExpectedClosure(), NewStatisticsCallback()); | 135 NewExpectedClosure(), NewStatisticsCallback()); |
136 message_loop_.RunAllPending(); | 136 message_loop_.RunAllPending(); |
137 } | 137 } |
138 | 138 |
139 StatisticsCallback NewStatisticsCallback() { | 139 StatisticsCallback NewStatisticsCallback() { |
140 return base::Bind(&MockStatisticsCallback::OnStatistics, | 140 return base::Bind(&MockStatisticsCallback::OnStatistics, |
141 base::Unretained(&stats_callback_object_)); | 141 base::Unretained(&stats_callback_object_)); |
142 } | 142 } |
143 | 143 |
| 144 MOCK_METHOD1(FrameReady, void(scoped_refptr<media::VideoFrame>)); |
| 145 |
144 // Fixture members. | 146 // Fixture members. |
145 scoped_refptr<RTCVideoDecoder> decoder_; | 147 scoped_refptr<RTCVideoDecoder> decoder_; |
146 scoped_refptr<MockVideoRenderer> renderer_; | 148 scoped_refptr<MockVideoRenderer> renderer_; |
147 MockStatisticsCallback stats_callback_object_; | 149 MockStatisticsCallback stats_callback_object_; |
148 StrictMock<MockFilterHost> host_; | 150 StrictMock<MockFilterHost> host_; |
149 MessageLoop message_loop_; | 151 MessageLoop message_loop_; |
150 | 152 |
151 private: | 153 private: |
152 DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderTest); | 154 DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderTest); |
153 }; | 155 }; |
(...skipping 10 matching lines...) Expand all Loading... |
164 // matches the dimensions specified by RTC. | 166 // matches the dimensions specified by RTC. |
165 EXPECT_EQ(kWidth, decoder_->natural_size().width()); | 167 EXPECT_EQ(kWidth, decoder_->natural_size().width()); |
166 EXPECT_EQ(kHeight, decoder_->natural_size().height()); | 168 EXPECT_EQ(kHeight, decoder_->natural_size().height()); |
167 } | 169 } |
168 | 170 |
169 TEST_F(RTCVideoDecoderTest, DoSeek) { | 171 TEST_F(RTCVideoDecoderTest, DoSeek) { |
170 const base::TimeDelta kZero; | 172 const base::TimeDelta kZero; |
171 | 173 |
172 InitializeDecoderSuccessfully(); | 174 InitializeDecoderSuccessfully(); |
173 | 175 |
174 decoder_->set_consume_video_frame_callback( | 176 // Expect seek and verify the results. |
175 base::Bind(&MockVideoRenderer::ConsumeVideoFrame, | |
176 base::Unretained(renderer_.get()))); | |
177 | |
178 // Expect Seek and verify the results. | |
179 EXPECT_CALL(*renderer_.get(), ConsumeVideoFrame(_)) | |
180 .Times(Limits::kMaxVideoFrames); | |
181 decoder_->Seek(kZero, NewExpectedStatusCB(PIPELINE_OK)); | 177 decoder_->Seek(kZero, NewExpectedStatusCB(PIPELINE_OK)); |
182 | 178 |
183 message_loop_.RunAllPending(); | 179 message_loop_.RunAllPending(); |
184 EXPECT_EQ(RTCVideoDecoder::kNormal, decoder_->state_); | 180 EXPECT_EQ(RTCVideoDecoder::kNormal, decoder_->state_); |
185 } | 181 } |
186 | 182 |
187 TEST_F(RTCVideoDecoderTest, DoRenderFrame) { | 183 TEST_F(RTCVideoDecoderTest, DoRenderFrame) { |
188 const base::TimeDelta kZero; | 184 const base::TimeDelta kZero; |
189 EXPECT_CALL(host_, GetTime()).WillRepeatedly(Return(base::TimeDelta())); | 185 EXPECT_CALL(host_, GetTime()).WillRepeatedly(Return(base::TimeDelta())); |
190 | 186 |
191 InitializeDecoderSuccessfully(); | 187 InitializeDecoderSuccessfully(); |
192 | 188 |
193 // Pass the frame back to decoder | |
194 decoder_->set_consume_video_frame_callback( | |
195 base::Bind(&RTCVideoDecoder::ProduceVideoFrame, | |
196 base::Unretained(decoder_.get()))); | |
197 decoder_->Seek(kZero, NewExpectedStatusCB(PIPELINE_OK)); | |
198 | |
199 decoder_->set_consume_video_frame_callback( | |
200 base::Bind(&MockVideoRenderer::ConsumeVideoFrame, | |
201 base::Unretained(renderer_.get()))); | |
202 EXPECT_CALL(*renderer_.get(), ConsumeVideoFrame(_)) | |
203 .Times(Limits::kMaxVideoFrames); | |
204 | |
205 NullVideoFrame video_frame; | 189 NullVideoFrame video_frame; |
206 | 190 |
207 for (size_t i = 0; i < Limits::kMaxVideoFrames; ++i) { | 191 for (size_t i = 0; i < Limits::kMaxVideoFrames; ++i) { |
208 decoder_->RenderFrame(&video_frame); | 192 decoder_->RenderFrame(&video_frame); |
209 } | 193 } |
210 | 194 |
211 message_loop_.RunAllPending(); | 195 message_loop_.RunAllPending(); |
212 EXPECT_EQ(RTCVideoDecoder::kNormal, decoder_->state_); | 196 EXPECT_EQ(RTCVideoDecoder::kNormal, decoder_->state_); |
213 } | 197 } |
214 | 198 |
215 TEST_F(RTCVideoDecoderTest, DoSetSize) { | 199 TEST_F(RTCVideoDecoderTest, DoSetSize) { |
216 InitializeDecoderSuccessfully(); | 200 InitializeDecoderSuccessfully(); |
217 | 201 |
218 int new_width = kWidth * 2; | 202 int new_width = kWidth * 2; |
219 int new_height = kHeight * 2; | 203 int new_height = kHeight * 2; |
220 gfx::Size new_natural_size(new_width, new_height); | 204 gfx::Size new_natural_size(new_width, new_height); |
221 int new_reserved = 0; | 205 int new_reserved = 0; |
222 | 206 |
223 EXPECT_CALL(host_, | 207 EXPECT_CALL(host_, |
224 SetNaturalVideoSize(new_natural_size)).WillRepeatedly(Return()); | 208 SetNaturalVideoSize(new_natural_size)).WillRepeatedly(Return()); |
225 | 209 |
226 decoder_->SetSize(new_width, new_height, new_reserved); | 210 decoder_->SetSize(new_width, new_height, new_reserved); |
227 | 211 |
228 EXPECT_EQ(new_width, decoder_->natural_size().width()); | 212 EXPECT_EQ(new_width, decoder_->natural_size().width()); |
229 EXPECT_EQ(new_height, decoder_->natural_size().height()); | 213 EXPECT_EQ(new_height, decoder_->natural_size().height()); |
230 | 214 |
231 message_loop_.RunAllPending(); | 215 message_loop_.RunAllPending(); |
232 } | 216 } |
OLD | NEW |