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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "content/renderer/media/capture_video_decoder.h" | 6 #include "content/renderer/media/capture_video_decoder.h" |
7 #include "content/renderer/media/video_capture_impl.h" | 7 #include "content/renderer/media/video_capture_impl.h" |
8 #include "content/renderer/media/video_capture_impl_manager.h" | 8 #include "content/renderer/media/video_capture_impl_manager.h" |
9 #include "media/base/filters.h" | 9 #include "media/base/filters.h" |
10 #include "media/base/limits.h" | 10 #include "media/base/limits.h" |
11 #include "media/base/mock_callback.h" | 11 #include "media/base/mock_callback.h" |
12 #include "media/base/mock_filter_host.h" | |
13 #include "media/base/mock_filters.h" | 12 #include "media/base/mock_filters.h" |
14 #include "media/base/pipeline_status.h" | 13 #include "media/base/pipeline_status.h" |
15 #include "media/video/capture/video_capture_types.h" | 14 #include "media/video/capture/video_capture_types.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
17 | 16 |
18 using ::testing::_; | 17 using ::testing::_; |
19 using ::testing::AnyNumber; | 18 using ::testing::AnyNumber; |
20 using ::testing::Return; | 19 using ::testing::Return; |
21 using ::testing::StrictMock; | 20 using ::testing::StrictMock; |
22 | 21 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 media::VideoCaptureCapability capability; | 90 media::VideoCaptureCapability capability; |
92 capability.width = kWidth; | 91 capability.width = kWidth; |
93 capability.height = kHeight; | 92 capability.height = kHeight; |
94 capability.frame_rate = kFPS; | 93 capability.frame_rate = kFPS; |
95 capability.expected_capture_delay = 0; | 94 capability.expected_capture_delay = 0; |
96 capability.color = media::VideoFrame::I420; | 95 capability.color = media::VideoFrame::I420; |
97 capability.interlaced = false; | 96 capability.interlaced = false; |
98 | 97 |
99 decoder_ = new CaptureVideoDecoder(message_loop_proxy_, | 98 decoder_ = new CaptureVideoDecoder(message_loop_proxy_, |
100 kVideoStreamId, vc_manager_, capability); | 99 kVideoStreamId, vc_manager_, capability); |
101 decoder_->set_host(&host_); | |
102 EXPECT_CALL(statistics_cb_object_, OnStatistics(_)) | 100 EXPECT_CALL(statistics_cb_object_, OnStatistics(_)) |
103 .Times(AnyNumber()); | 101 .Times(AnyNumber()); |
104 | 102 |
105 read_cb_ = base::Bind(&CaptureVideoDecoderTest::FrameReady, | 103 read_cb_ = base::Bind(&CaptureVideoDecoderTest::FrameReady, |
106 base::Unretained(this)); | 104 base::Unretained(this)); |
107 | 105 |
108 vc_impl_.reset(new MockVideoCaptureImpl( | 106 vc_impl_.reset(new MockVideoCaptureImpl( |
109 kVideoStreamId, message_loop_proxy_, new VideoCaptureMessageFilter())); | 107 kVideoStreamId, message_loop_proxy_, new VideoCaptureMessageFilter())); |
110 } | 108 } |
111 | 109 |
112 virtual ~CaptureVideoDecoderTest() { | 110 virtual ~CaptureVideoDecoderTest() { |
113 message_loop_->RunAllPending(); | 111 message_loop_->RunAllPending(); |
114 } | 112 } |
115 | 113 |
116 media::StatisticsCB NewStatisticsCB() { | 114 media::StatisticsCB NewStatisticsCB() { |
117 return base::Bind(&media::MockStatisticsCB::OnStatistics, | 115 return base::Bind(&media::MockStatisticsCB::OnStatistics, |
118 base::Unretained(&statistics_cb_object_)); | 116 base::Unretained(&statistics_cb_object_)); |
119 } | 117 } |
120 | 118 |
121 void Initialize() { | 119 void Initialize() { |
122 // Issue a read. | 120 // Issue a read. |
123 EXPECT_CALL(*this, FrameReady(_)); | 121 EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk, _)); |
124 decoder_->Read(read_cb_); | 122 decoder_->Read(read_cb_); |
125 | 123 |
126 EXPECT_CALL(*vc_manager_, AddDevice(_, _)) | 124 EXPECT_CALL(*vc_manager_, AddDevice(_, _)) |
127 .WillOnce(Return(vc_impl_.get())); | 125 .WillOnce(Return(vc_impl_.get())); |
128 int buffer_count = 1; | 126 int buffer_count = 1; |
129 EXPECT_CALL(*vc_impl_, StartCapture(capture_client(), _)) | 127 EXPECT_CALL(*vc_impl_, StartCapture(capture_client(), _)) |
130 .Times(1) | 128 .Times(1) |
131 .WillOnce(CreateDataBufferFromCapture(capture_client(), | 129 .WillOnce(CreateDataBufferFromCapture(capture_client(), |
132 vc_impl_.get(), | 130 vc_impl_.get(), |
133 buffer_count)); | 131 buffer_count)); |
134 EXPECT_CALL(*vc_impl_, FeedBuffer(_)) | 132 EXPECT_CALL(*vc_impl_, FeedBuffer(_)) |
135 .Times(buffer_count) | 133 .Times(buffer_count) |
136 .WillRepeatedly(DeleteDataBuffer()); | 134 .WillRepeatedly(DeleteDataBuffer()); |
137 | 135 |
138 decoder_->Initialize(NULL, | 136 decoder_->Initialize(NULL, |
139 media::NewExpectedStatusCB(media::PIPELINE_OK), | 137 media::NewExpectedStatusCB(media::PIPELINE_OK), |
140 NewStatisticsCB()); | 138 NewStatisticsCB()); |
141 message_loop_->RunAllPending(); | 139 message_loop_->RunAllPending(); |
142 } | 140 } |
143 | 141 |
144 void Play() { | 142 void Play() { |
145 decoder_->Play(media::NewExpectedClosure()); | 143 decoder_->Play(media::NewExpectedClosure()); |
146 message_loop_->RunAllPending(); | 144 message_loop_->RunAllPending(); |
147 } | 145 } |
148 | 146 |
149 void Flush() { | 147 void Flush() { |
150 // Issue a read. | 148 // Issue a read. |
151 EXPECT_CALL(*this, FrameReady(_)); | 149 EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk, _)); |
152 decoder_->Read(read_cb_); | 150 decoder_->Read(read_cb_); |
153 | 151 |
154 decoder_->Pause(media::NewExpectedClosure()); | 152 decoder_->Pause(media::NewExpectedClosure()); |
155 decoder_->Flush(media::NewExpectedClosure()); | 153 decoder_->Flush(media::NewExpectedClosure()); |
156 message_loop_->RunAllPending(); | 154 message_loop_->RunAllPending(); |
157 } | 155 } |
158 | 156 |
159 void Stop() { | 157 void Stop() { |
160 EXPECT_CALL(*vc_impl_, StopCapture(capture_client())) | 158 EXPECT_CALL(*vc_impl_, StopCapture(capture_client())) |
161 .Times(1) | 159 .Times(1) |
162 .WillOnce(CaptureStopped(capture_client(), vc_impl_.get())); | 160 .WillOnce(CaptureStopped(capture_client(), vc_impl_.get())); |
163 EXPECT_CALL(*vc_manager_, RemoveDevice(_, _)) | 161 EXPECT_CALL(*vc_manager_, RemoveDevice(_, _)) |
164 .WillOnce(Return()); | 162 .WillOnce(Return()); |
165 decoder_->Stop(media::NewExpectedClosure()); | 163 decoder_->Stop(media::NewExpectedClosure()); |
166 message_loop_->RunAllPending(); | 164 message_loop_->RunAllPending(); |
167 } | 165 } |
168 | 166 |
169 media::VideoCapture::EventHandler* capture_client() { | 167 media::VideoCapture::EventHandler* capture_client() { |
170 return static_cast<media::VideoCapture::EventHandler*>(decoder_); | 168 return static_cast<media::VideoCapture::EventHandler*>(decoder_); |
171 } | 169 } |
172 | 170 |
173 MOCK_METHOD1(FrameReady, void(scoped_refptr<media::VideoFrame>)); | 171 MOCK_METHOD2(FrameReady, void(media::VideoDecoder::DecoderStatus status, |
| 172 scoped_refptr<media::VideoFrame>)); |
174 | 173 |
175 // Fixture members. | 174 // Fixture members. |
176 scoped_refptr<CaptureVideoDecoder> decoder_; | 175 scoped_refptr<CaptureVideoDecoder> decoder_; |
177 scoped_refptr<MockVideoCaptureImplManager> vc_manager_; | 176 scoped_refptr<MockVideoCaptureImplManager> vc_manager_; |
178 scoped_ptr<MockVideoCaptureImpl> vc_impl_; | 177 scoped_ptr<MockVideoCaptureImpl> vc_impl_; |
179 media::MockStatisticsCB statistics_cb_object_; | 178 media::MockStatisticsCB statistics_cb_object_; |
180 StrictMock<media::MockFilterHost> host_; | |
181 scoped_ptr<MessageLoop> message_loop_; | 179 scoped_ptr<MessageLoop> message_loop_; |
182 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; | 180 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; |
183 media::VideoDecoder::ReadCB read_cb_; | 181 media::VideoDecoder::ReadCB read_cb_; |
184 | 182 |
185 private: | 183 private: |
186 DISALLOW_COPY_AND_ASSIGN(CaptureVideoDecoderTest); | 184 DISALLOW_COPY_AND_ASSIGN(CaptureVideoDecoderTest); |
187 }; | 185 }; |
188 | 186 |
189 TEST_F(CaptureVideoDecoderTest, Play) { | 187 TEST_F(CaptureVideoDecoderTest, Play) { |
190 // Test basic initialize, play, and teardown sequence. | 188 // Test basic initialize, play, and teardown sequence. |
(...skipping 19 matching lines...) Expand all Loading... |
210 params.session_id = kVideoStreamId; | 208 params.session_id = kVideoStreamId; |
211 | 209 |
212 decoder_->OnDeviceInfoReceived(vc_impl_.get(), params); | 210 decoder_->OnDeviceInfoReceived(vc_impl_.get(), params); |
213 message_loop_->RunAllPending(); | 211 message_loop_->RunAllPending(); |
214 | 212 |
215 EXPECT_EQ(expected_size.width(), decoder_->natural_size().width()); | 213 EXPECT_EQ(expected_size.width(), decoder_->natural_size().width()); |
216 EXPECT_EQ(expected_size.height(), decoder_->natural_size().height()); | 214 EXPECT_EQ(expected_size.height(), decoder_->natural_size().height()); |
217 | 215 |
218 Stop(); | 216 Stop(); |
219 } | 217 } |
OLD | NEW |