OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "media/base/video_frame.h" | 10 #include "media/base/video_frame.h" |
11 #include "media/cast/cast_defines.h" | 11 #include "media/cast/cast_defines.h" |
12 #include "media/cast/cast_environment.h" | 12 #include "media/cast/cast_environment.h" |
13 #include "media/cast/test/fake_single_thread_task_runner.h" | 13 #include "media/cast/test/fake_single_thread_task_runner.h" |
14 #include "media/cast/test/utility/video_utility.h" | 14 #include "media/cast/test/utility/video_utility.h" |
15 #include "media/cast/video_sender/video_encoder_impl.h" | 15 #include "media/cast/video_sender/video_encoder_impl.h" |
16 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
17 | 17 |
18 namespace media { | 18 namespace media { |
19 namespace cast { | 19 namespace cast { |
20 | 20 |
21 using testing::_; | 21 using testing::_; |
22 | 22 |
23 namespace { | 23 namespace { |
24 class TestVideoEncoderCallback | 24 class TestVideoEncoderCallback |
25 : public base::RefCountedThreadSafe<TestVideoEncoderCallback> { | 25 : public base::RefCountedThreadSafe<TestVideoEncoderCallback> { |
26 public: | 26 public: |
27 TestVideoEncoderCallback() {} | 27 TestVideoEncoderCallback() {} |
28 | 28 |
29 void SetExpectedResult(bool expected_key_frame, | 29 void SetExpectedResult(uint32 expected_frame_id, |
30 uint8 expected_frame_id, | 30 uint32 expected_last_referenced_frame_id, |
31 uint8 expected_last_referenced_frame_id, | |
32 const base::TimeTicks& expected_capture_time) { | 31 const base::TimeTicks& expected_capture_time) { |
33 expected_key_frame_ = expected_key_frame; | |
34 expected_frame_id_ = expected_frame_id; | 32 expected_frame_id_ = expected_frame_id; |
35 expected_last_referenced_frame_id_ = expected_last_referenced_frame_id; | 33 expected_last_referenced_frame_id_ = expected_last_referenced_frame_id; |
36 expected_capture_time_ = expected_capture_time; | 34 expected_capture_time_ = expected_capture_time; |
37 } | 35 } |
38 | 36 |
39 void DeliverEncodedVideoFrame( | 37 void DeliverEncodedVideoFrame( |
40 scoped_ptr<transport::EncodedVideoFrame> encoded_frame, | 38 scoped_ptr<transport::EncodedFrame> encoded_frame) { |
41 const base::TimeTicks& capture_time) { | 39 if (expected_frame_id_ == expected_last_referenced_frame_id_) { |
42 EXPECT_EQ(expected_key_frame_, encoded_frame->key_frame); | 40 EXPECT_EQ(transport::EncodedFrame::KEY, encoded_frame->dependency); |
| 41 } else { |
| 42 EXPECT_EQ(transport::EncodedFrame::DEPENDENT, |
| 43 encoded_frame->dependency); |
| 44 } |
43 EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id); | 45 EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id); |
44 EXPECT_EQ(expected_last_referenced_frame_id_, | 46 EXPECT_EQ(expected_last_referenced_frame_id_, |
45 encoded_frame->last_referenced_frame_id); | 47 encoded_frame->referenced_frame_id); |
46 EXPECT_EQ(expected_capture_time_, capture_time); | 48 EXPECT_EQ(expected_capture_time_, encoded_frame->reference_time); |
47 } | 49 } |
48 | 50 |
49 protected: | 51 protected: |
50 virtual ~TestVideoEncoderCallback() {} | 52 virtual ~TestVideoEncoderCallback() {} |
51 | 53 |
52 private: | 54 private: |
53 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>; | 55 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>; |
54 | 56 |
55 bool expected_key_frame_; | 57 uint32 expected_frame_id_; |
56 uint8 expected_frame_id_; | 58 uint32 expected_last_referenced_frame_id_; |
57 uint8 expected_last_referenced_frame_id_; | |
58 base::TimeTicks expected_capture_time_; | 59 base::TimeTicks expected_capture_time_; |
59 | 60 |
60 DISALLOW_COPY_AND_ASSIGN(TestVideoEncoderCallback); | 61 DISALLOW_COPY_AND_ASSIGN(TestVideoEncoderCallback); |
61 }; | 62 }; |
62 } // namespace | 63 } // namespace |
63 | 64 |
64 class VideoEncoderImplTest : public ::testing::Test { | 65 class VideoEncoderImplTest : public ::testing::Test { |
65 protected: | 66 protected: |
66 VideoEncoderImplTest() | 67 VideoEncoderImplTest() |
67 : test_video_encoder_callback_(new TestVideoEncoderCallback()) { | 68 : test_video_encoder_callback_(new TestVideoEncoderCallback()) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 122 |
122 TEST_F(VideoEncoderImplTest, EncodePattern30fpsRunningOutOfAck) { | 123 TEST_F(VideoEncoderImplTest, EncodePattern30fpsRunningOutOfAck) { |
123 Configure(3); | 124 Configure(3); |
124 | 125 |
125 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 126 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
126 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 127 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
127 test_video_encoder_callback_.get()); | 128 test_video_encoder_callback_.get()); |
128 | 129 |
129 base::TimeTicks capture_time; | 130 base::TimeTicks capture_time; |
130 capture_time += base::TimeDelta::FromMilliseconds(33); | 131 capture_time += base::TimeDelta::FromMilliseconds(33); |
131 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 132 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
132 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 133 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
133 video_frame_, capture_time, frame_encoded_callback)); | 134 video_frame_, capture_time, frame_encoded_callback)); |
134 task_runner_->RunTasks(); | 135 task_runner_->RunTasks(); |
135 | 136 |
136 capture_time += base::TimeDelta::FromMilliseconds(33); | 137 capture_time += base::TimeDelta::FromMilliseconds(33); |
137 video_encoder_->LatestFrameIdToReference(0); | 138 video_encoder_->LatestFrameIdToReference(0); |
138 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); | 139 test_video_encoder_callback_->SetExpectedResult(1, 0, capture_time); |
139 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 140 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
140 video_frame_, capture_time, frame_encoded_callback)); | 141 video_frame_, capture_time, frame_encoded_callback)); |
141 task_runner_->RunTasks(); | 142 task_runner_->RunTasks(); |
142 | 143 |
143 capture_time += base::TimeDelta::FromMilliseconds(33); | 144 capture_time += base::TimeDelta::FromMilliseconds(33); |
144 video_encoder_->LatestFrameIdToReference(1); | 145 video_encoder_->LatestFrameIdToReference(1); |
145 test_video_encoder_callback_->SetExpectedResult(false, 2, 1, capture_time); | 146 test_video_encoder_callback_->SetExpectedResult(2, 1, capture_time); |
146 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 147 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
147 video_frame_, capture_time, frame_encoded_callback)); | 148 video_frame_, capture_time, frame_encoded_callback)); |
148 task_runner_->RunTasks(); | 149 task_runner_->RunTasks(); |
149 | 150 |
150 video_encoder_->LatestFrameIdToReference(2); | 151 video_encoder_->LatestFrameIdToReference(2); |
151 | 152 |
152 for (int i = 3; i < 6; ++i) { | 153 for (int i = 3; i < 6; ++i) { |
153 capture_time += base::TimeDelta::FromMilliseconds(33); | 154 capture_time += base::TimeDelta::FromMilliseconds(33); |
154 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time); | 155 test_video_encoder_callback_->SetExpectedResult(i, 2, capture_time); |
155 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 156 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
156 video_frame_, capture_time, frame_encoded_callback)); | 157 video_frame_, capture_time, frame_encoded_callback)); |
157 task_runner_->RunTasks(); | 158 task_runner_->RunTasks(); |
158 } | 159 } |
159 } | 160 } |
160 | 161 |
161 // TODO(pwestin): Re-enabled after redesign the encoder to control number of | 162 // TODO(pwestin): Re-enabled after redesign the encoder to control number of |
162 // frames in flight. | 163 // frames in flight. |
163 TEST_F(VideoEncoderImplTest, DISABLED_EncodePattern60fpsRunningOutOfAck) { | 164 TEST_F(VideoEncoderImplTest, DISABLED_EncodePattern60fpsRunningOutOfAck) { |
164 video_config_.max_number_of_video_buffers_used = 1; | 165 video_config_.max_number_of_video_buffers_used = 1; |
165 Configure(6); | 166 Configure(6); |
166 | 167 |
167 base::TimeTicks capture_time; | 168 base::TimeTicks capture_time; |
168 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 169 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
169 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 170 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
170 test_video_encoder_callback_.get()); | 171 test_video_encoder_callback_.get()); |
171 | 172 |
172 capture_time += base::TimeDelta::FromMilliseconds(33); | 173 capture_time += base::TimeDelta::FromMilliseconds(33); |
173 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 174 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
174 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 175 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
175 video_frame_, capture_time, frame_encoded_callback)); | 176 video_frame_, capture_time, frame_encoded_callback)); |
176 task_runner_->RunTasks(); | 177 task_runner_->RunTasks(); |
177 | 178 |
178 video_encoder_->LatestFrameIdToReference(0); | 179 video_encoder_->LatestFrameIdToReference(0); |
179 capture_time += base::TimeDelta::FromMilliseconds(33); | 180 capture_time += base::TimeDelta::FromMilliseconds(33); |
180 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); | 181 test_video_encoder_callback_->SetExpectedResult(1, 0, capture_time); |
181 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 182 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
182 video_frame_, capture_time, frame_encoded_callback)); | 183 video_frame_, capture_time, frame_encoded_callback)); |
183 task_runner_->RunTasks(); | 184 task_runner_->RunTasks(); |
184 | 185 |
185 video_encoder_->LatestFrameIdToReference(1); | 186 video_encoder_->LatestFrameIdToReference(1); |
186 capture_time += base::TimeDelta::FromMilliseconds(33); | 187 capture_time += base::TimeDelta::FromMilliseconds(33); |
187 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time); | 188 test_video_encoder_callback_->SetExpectedResult(2, 0, capture_time); |
188 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 189 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
189 video_frame_, capture_time, frame_encoded_callback)); | 190 video_frame_, capture_time, frame_encoded_callback)); |
190 task_runner_->RunTasks(); | 191 task_runner_->RunTasks(); |
191 | 192 |
192 video_encoder_->LatestFrameIdToReference(2); | 193 video_encoder_->LatestFrameIdToReference(2); |
193 | 194 |
194 for (int i = 3; i < 9; ++i) { | 195 for (int i = 3; i < 9; ++i) { |
195 capture_time += base::TimeDelta::FromMilliseconds(33); | 196 capture_time += base::TimeDelta::FromMilliseconds(33); |
196 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time); | 197 test_video_encoder_callback_->SetExpectedResult(i, 2, capture_time); |
197 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 198 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
198 video_frame_, capture_time, frame_encoded_callback)); | 199 video_frame_, capture_time, frame_encoded_callback)); |
199 task_runner_->RunTasks(); | 200 task_runner_->RunTasks(); |
200 } | 201 } |
201 } | 202 } |
202 | 203 |
203 // TODO(pwestin): Re-enabled after redesign the encoder to control number of | 204 // TODO(pwestin): Re-enabled after redesign the encoder to control number of |
204 // frames in flight. | 205 // frames in flight. |
205 TEST_F(VideoEncoderImplTest, | 206 TEST_F(VideoEncoderImplTest, |
206 DISABLED_EncodePattern60fps200msDelayRunningOutOfAck) { | 207 DISABLED_EncodePattern60fps200msDelayRunningOutOfAck) { |
207 Configure(12); | 208 Configure(12); |
208 | 209 |
209 base::TimeTicks capture_time; | 210 base::TimeTicks capture_time; |
210 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 211 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
211 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 212 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
212 test_video_encoder_callback_.get()); | 213 test_video_encoder_callback_.get()); |
213 | 214 |
214 capture_time += base::TimeDelta::FromMilliseconds(33); | 215 capture_time += base::TimeDelta::FromMilliseconds(33); |
215 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 216 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
216 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 217 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
217 video_frame_, capture_time, frame_encoded_callback)); | 218 video_frame_, capture_time, frame_encoded_callback)); |
218 task_runner_->RunTasks(); | 219 task_runner_->RunTasks(); |
219 | 220 |
220 video_encoder_->LatestFrameIdToReference(0); | 221 video_encoder_->LatestFrameIdToReference(0); |
221 capture_time += base::TimeDelta::FromMilliseconds(33); | 222 capture_time += base::TimeDelta::FromMilliseconds(33); |
222 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); | 223 test_video_encoder_callback_->SetExpectedResult(1, 0, capture_time); |
223 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 224 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
224 video_frame_, capture_time, frame_encoded_callback)); | 225 video_frame_, capture_time, frame_encoded_callback)); |
225 task_runner_->RunTasks(); | 226 task_runner_->RunTasks(); |
226 | 227 |
227 video_encoder_->LatestFrameIdToReference(1); | 228 video_encoder_->LatestFrameIdToReference(1); |
228 capture_time += base::TimeDelta::FromMilliseconds(33); | 229 capture_time += base::TimeDelta::FromMilliseconds(33); |
229 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time); | 230 test_video_encoder_callback_->SetExpectedResult(2, 0, capture_time); |
230 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 231 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
231 video_frame_, capture_time, frame_encoded_callback)); | 232 video_frame_, capture_time, frame_encoded_callback)); |
232 task_runner_->RunTasks(); | 233 task_runner_->RunTasks(); |
233 | 234 |
234 video_encoder_->LatestFrameIdToReference(2); | 235 video_encoder_->LatestFrameIdToReference(2); |
235 capture_time += base::TimeDelta::FromMilliseconds(33); | 236 capture_time += base::TimeDelta::FromMilliseconds(33); |
236 test_video_encoder_callback_->SetExpectedResult(false, 3, 0, capture_time); | 237 test_video_encoder_callback_->SetExpectedResult(3, 0, capture_time); |
237 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 238 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
238 video_frame_, capture_time, frame_encoded_callback)); | 239 video_frame_, capture_time, frame_encoded_callback)); |
239 task_runner_->RunTasks(); | 240 task_runner_->RunTasks(); |
240 | 241 |
241 video_encoder_->LatestFrameIdToReference(3); | 242 video_encoder_->LatestFrameIdToReference(3); |
242 capture_time += base::TimeDelta::FromMilliseconds(33); | 243 capture_time += base::TimeDelta::FromMilliseconds(33); |
243 test_video_encoder_callback_->SetExpectedResult(false, 4, 0, capture_time); | 244 test_video_encoder_callback_->SetExpectedResult(4, 0, capture_time); |
244 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 245 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
245 video_frame_, capture_time, frame_encoded_callback)); | 246 video_frame_, capture_time, frame_encoded_callback)); |
246 task_runner_->RunTasks(); | 247 task_runner_->RunTasks(); |
247 | 248 |
248 video_encoder_->LatestFrameIdToReference(4); | 249 video_encoder_->LatestFrameIdToReference(4); |
249 | 250 |
250 for (int i = 5; i < 17; ++i) { | 251 for (int i = 5; i < 17; ++i) { |
251 test_video_encoder_callback_->SetExpectedResult(false, i, 4, capture_time); | 252 test_video_encoder_callback_->SetExpectedResult(i, 4, capture_time); |
252 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 253 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
253 video_frame_, capture_time, frame_encoded_callback)); | 254 video_frame_, capture_time, frame_encoded_callback)); |
254 task_runner_->RunTasks(); | 255 task_runner_->RunTasks(); |
255 } | 256 } |
256 } | 257 } |
257 | 258 |
258 } // namespace cast | 259 } // namespace cast |
259 } // namespace media | 260 } // namespace media |
OLD | NEW |