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

Side by Side Diff: media/cast/video_sender/video_encoder_impl_unittest.cc

Issue 116623002: Cast: Adding support for GPU accelerated encode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed merge nits Created 6 years, 11 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_task_runner.h" 13 #include "media/cast/test/fake_task_runner.h"
14 #include "media/cast/test/video_utility.h" 14 #include "media/cast/test/video_utility.h"
15 #include "media/cast/video_sender/video_encoder.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> {
(...skipping 25 matching lines...) Expand all
51 private: 51 private:
52 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>; 52 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>;
53 53
54 bool expected_key_frame_; 54 bool expected_key_frame_;
55 uint8 expected_frame_id_; 55 uint8 expected_frame_id_;
56 uint8 expected_last_referenced_frame_id_; 56 uint8 expected_last_referenced_frame_id_;
57 base::TimeTicks expected_capture_time_; 57 base::TimeTicks expected_capture_time_;
58 }; 58 };
59 } // namespace 59 } // namespace
60 60
61 class VideoEncoderTest : public ::testing::Test { 61 class VideoEncoderImplTest : public ::testing::Test {
62 protected: 62 protected:
63 VideoEncoderTest() 63 VideoEncoderImplTest()
64 : test_video_encoder_callback_(new TestVideoEncoderCallback()) { 64 : test_video_encoder_callback_(new TestVideoEncoderCallback()) {
65 video_config_.sender_ssrc = 1; 65 video_config_.sender_ssrc = 1;
66 video_config_.incoming_feedback_ssrc = 2; 66 video_config_.incoming_feedback_ssrc = 2;
67 video_config_.rtp_payload_type = 127; 67 video_config_.rtp_payload_type = 127;
68 video_config_.use_external_encoder = false; 68 video_config_.use_external_encoder = false;
69 video_config_.width = 320; 69 video_config_.width = 320;
70 video_config_.height = 240; 70 video_config_.height = 240;
71 video_config_.max_bitrate = 5000000; 71 video_config_.max_bitrate = 5000000;
72 video_config_.min_bitrate = 1000000; 72 video_config_.min_bitrate = 1000000;
73 video_config_.start_bitrate = 2000000; 73 video_config_.start_bitrate = 2000000;
74 video_config_.max_qp = 56; 74 video_config_.max_qp = 56;
75 video_config_.min_qp = 0; 75 video_config_.min_qp = 0;
76 video_config_.max_frame_rate = 30; 76 video_config_.max_frame_rate = 30;
77 video_config_.max_number_of_video_buffers_used = 3; 77 video_config_.max_number_of_video_buffers_used = 3;
78 video_config_.codec = kVp8; 78 video_config_.codec = kVp8;
79 gfx::Size size(video_config_.width, video_config_.height); 79 gfx::Size size(video_config_.width, video_config_.height);
80 video_frame_ = media::VideoFrame::CreateFrame(VideoFrame::I420, 80 video_frame_ = media::VideoFrame::CreateFrame(VideoFrame::I420,
81 size, gfx::Rect(size), size, base::TimeDelta()); 81 size, gfx::Rect(size), size, base::TimeDelta());
82 PopulateVideoFrame(video_frame_, 123); 82 PopulateVideoFrame(video_frame_, 123);
83 } 83 }
84 84
85 virtual ~VideoEncoderTest() {} 85 virtual ~VideoEncoderImplTest() {}
86 86
87 virtual void SetUp() { 87 virtual void SetUp() {
88 task_runner_ = new test::FakeTaskRunner(&testing_clock_); 88 task_runner_ = new test::FakeTaskRunner(&testing_clock_);
89 cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_, 89 cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_,
90 task_runner_, task_runner_, task_runner_, task_runner_, 90 task_runner_, task_runner_, task_runner_, task_runner_,
91 GetDefaultCastLoggingConfig()); 91 GetDefaultCastLoggingConfig());
92 } 92 }
93 93
94 void Configure(uint8 max_unacked_frames) { 94 void Configure(uint8 max_unacked_frames) {
95 video_encoder_.reset(new VideoEncoder(cast_environment_, video_config_, 95 video_encoder_.reset(new VideoEncoderImpl(cast_environment_, video_config_,
96 max_unacked_frames)); 96 max_unacked_frames));
97 video_encoder_controller_ = video_encoder_.get();
98 } 97 }
99 98
100 base::SimpleTestTickClock testing_clock_; 99 base::SimpleTestTickClock testing_clock_;
101 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_; 100 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_;
102 VideoSenderConfig video_config_; 101 VideoSenderConfig video_config_;
103 scoped_refptr<test::FakeTaskRunner> task_runner_; 102 scoped_refptr<test::FakeTaskRunner> task_runner_;
104 scoped_ptr<VideoEncoder> video_encoder_; 103 scoped_ptr<VideoEncoder> video_encoder_;
105 VideoEncoderController* video_encoder_controller_;
106 scoped_refptr<media::VideoFrame> video_frame_; 104 scoped_refptr<media::VideoFrame> video_frame_;
107 105
108 scoped_refptr<CastEnvironment> cast_environment_; 106 scoped_refptr<CastEnvironment> cast_environment_;
109 }; 107 };
110 108
111 TEST_F(VideoEncoderTest, EncodePattern30fpsRunningOutOfAck) { 109 TEST_F(VideoEncoderImplTest, EncodePattern30fpsRunningOutOfAck) {
112 Configure(3); 110 Configure(3);
113 111
114 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 112 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
115 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 113 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
116 test_video_encoder_callback_.get()); 114 test_video_encoder_callback_.get());
117 115
118 base::TimeTicks capture_time; 116 base::TimeTicks capture_time;
119 capture_time += base::TimeDelta::FromMilliseconds(33); 117 capture_time += base::TimeDelta::FromMilliseconds(33);
120 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); 118 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time);
121 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 119 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
122 frame_encoded_callback)); 120 frame_encoded_callback));
123 task_runner_->RunTasks(); 121 task_runner_->RunTasks();
124 122
125 capture_time += base::TimeDelta::FromMilliseconds(33); 123 capture_time += base::TimeDelta::FromMilliseconds(33);
126 video_encoder_controller_->LatestFrameIdToReference(0); 124 video_encoder_->LatestFrameIdToReference(0);
127 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); 125 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time);
128 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 126 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
129 frame_encoded_callback)); 127 frame_encoded_callback));
130 task_runner_->RunTasks(); 128 task_runner_->RunTasks();
131 129
132 capture_time += base::TimeDelta::FromMilliseconds(33); 130 capture_time += base::TimeDelta::FromMilliseconds(33);
133 video_encoder_controller_->LatestFrameIdToReference(1); 131 video_encoder_->LatestFrameIdToReference(1);
134 test_video_encoder_callback_->SetExpectedResult(false, 2, 1, capture_time); 132 test_video_encoder_callback_->SetExpectedResult(false, 2, 1, capture_time);
135 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 133 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
136 frame_encoded_callback)); 134 frame_encoded_callback));
137 task_runner_->RunTasks(); 135 task_runner_->RunTasks();
138 136
139 video_encoder_controller_->LatestFrameIdToReference(2); 137 video_encoder_->LatestFrameIdToReference(2);
140 138
141 for (int i = 3; i < 6; ++i) { 139 for (int i = 3; i < 6; ++i) {
142 capture_time += base::TimeDelta::FromMilliseconds(33); 140 capture_time += base::TimeDelta::FromMilliseconds(33);
143 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time); 141 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time);
144 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 142 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
145 frame_encoded_callback)); 143 frame_encoded_callback));
146 task_runner_->RunTasks(); 144 task_runner_->RunTasks();
147 } 145 }
148 } 146 }
149 147
150 // TODO(pwestin): Re-enabled after redesign the encoder to control number of 148 // TODO(pwestin): Re-enabled after redesign the encoder to control number of
151 // frames in flight. 149 // frames in flight.
152 TEST_F(VideoEncoderTest,DISABLED_EncodePattern60fpsRunningOutOfAck) { 150 TEST_F(VideoEncoderImplTest,DISABLED_EncodePattern60fpsRunningOutOfAck) {
153 video_config_.max_number_of_video_buffers_used = 1; 151 video_config_.max_number_of_video_buffers_used = 1;
154 Configure(6); 152 Configure(6);
155 153
156 base::TimeTicks capture_time; 154 base::TimeTicks capture_time;
157 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 155 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
158 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 156 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
159 test_video_encoder_callback_.get()); 157 test_video_encoder_callback_.get());
160 158
161 capture_time += base::TimeDelta::FromMilliseconds(33); 159 capture_time += base::TimeDelta::FromMilliseconds(33);
162 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); 160 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time);
163 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 161 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
164 frame_encoded_callback)); 162 frame_encoded_callback));
165 task_runner_->RunTasks(); 163 task_runner_->RunTasks();
166 164
167 video_encoder_controller_->LatestFrameIdToReference(0); 165 video_encoder_->LatestFrameIdToReference(0);
168 capture_time += base::TimeDelta::FromMilliseconds(33); 166 capture_time += base::TimeDelta::FromMilliseconds(33);
169 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); 167 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time);
170 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 168 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
171 frame_encoded_callback)); 169 frame_encoded_callback));
172 task_runner_->RunTasks(); 170 task_runner_->RunTasks();
173 171
174 video_encoder_controller_->LatestFrameIdToReference(1); 172 video_encoder_->LatestFrameIdToReference(1);
175 capture_time += base::TimeDelta::FromMilliseconds(33); 173 capture_time += base::TimeDelta::FromMilliseconds(33);
176 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time); 174 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time);
177 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 175 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
178 frame_encoded_callback)); 176 frame_encoded_callback));
179 task_runner_->RunTasks(); 177 task_runner_->RunTasks();
180 178
181 video_encoder_controller_->LatestFrameIdToReference(2); 179 video_encoder_->LatestFrameIdToReference(2);
182 180
183 for (int i = 3; i < 9; ++i) { 181 for (int i = 3; i < 9; ++i) {
184 capture_time += base::TimeDelta::FromMilliseconds(33); 182 capture_time += base::TimeDelta::FromMilliseconds(33);
185 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time); 183 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time);
186 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 184 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
187 frame_encoded_callback)); 185 frame_encoded_callback));
188 task_runner_->RunTasks(); 186 task_runner_->RunTasks();
189 } 187 }
190 } 188 }
191 189
192 // TODO(pwestin): Re-enabled after redesign the encoder to control number of 190 // TODO(pwestin): Re-enabled after redesign the encoder to control number of
193 // frames in flight. 191 // frames in flight.
194 TEST_F(VideoEncoderTest, DISABLED_EncodePattern60fps200msDelayRunningOutOfAck) { 192 TEST_F(VideoEncoderImplTest,
193 DISABLED_EncodePattern60fps200msDelayRunningOutOfAck) {
195 Configure(12); 194 Configure(12);
196 195
197 base::TimeTicks capture_time; 196 base::TimeTicks capture_time;
198 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 197 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
199 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 198 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
200 test_video_encoder_callback_.get()); 199 test_video_encoder_callback_.get());
201 200
202 capture_time += base::TimeDelta::FromMilliseconds(33); 201 capture_time += base::TimeDelta::FromMilliseconds(33);
203 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); 202 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time);
204 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 203 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
205 frame_encoded_callback)); 204 frame_encoded_callback));
206 task_runner_->RunTasks(); 205 task_runner_->RunTasks();
207 206
208 video_encoder_controller_->LatestFrameIdToReference(0); 207 video_encoder_->LatestFrameIdToReference(0);
209 capture_time += base::TimeDelta::FromMilliseconds(33); 208 capture_time += base::TimeDelta::FromMilliseconds(33);
210 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); 209 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time);
211 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 210 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
212 frame_encoded_callback)); 211 frame_encoded_callback));
213 task_runner_->RunTasks(); 212 task_runner_->RunTasks();
214 213
215 video_encoder_controller_->LatestFrameIdToReference(1); 214 video_encoder_->LatestFrameIdToReference(1);
216 capture_time += base::TimeDelta::FromMilliseconds(33); 215 capture_time += base::TimeDelta::FromMilliseconds(33);
217 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time); 216 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time);
218 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 217 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
219 frame_encoded_callback)); 218 frame_encoded_callback));
220 task_runner_->RunTasks(); 219 task_runner_->RunTasks();
221 220
222 video_encoder_controller_->LatestFrameIdToReference(2); 221 video_encoder_->LatestFrameIdToReference(2);
223 capture_time += base::TimeDelta::FromMilliseconds(33); 222 capture_time += base::TimeDelta::FromMilliseconds(33);
224 test_video_encoder_callback_->SetExpectedResult(false, 3, 0, capture_time); 223 test_video_encoder_callback_->SetExpectedResult(false, 3, 0, capture_time);
225 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 224 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
226 frame_encoded_callback)); 225 frame_encoded_callback));
227 task_runner_->RunTasks(); 226 task_runner_->RunTasks();
228 227
229 video_encoder_controller_->LatestFrameIdToReference(3); 228 video_encoder_->LatestFrameIdToReference(3);
230 capture_time += base::TimeDelta::FromMilliseconds(33); 229 capture_time += base::TimeDelta::FromMilliseconds(33);
231 test_video_encoder_callback_->SetExpectedResult(false, 4, 0, capture_time); 230 test_video_encoder_callback_->SetExpectedResult(false, 4, 0, capture_time);
232 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 231 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
233 frame_encoded_callback)); 232 frame_encoded_callback));
234 task_runner_->RunTasks(); 233 task_runner_->RunTasks();
235 234
236 video_encoder_controller_->LatestFrameIdToReference(4); 235 video_encoder_->LatestFrameIdToReference(4);
237 236
238 for (int i = 5; i < 17; ++i) { 237 for (int i = 5; i < 17; ++i) {
239 test_video_encoder_callback_->SetExpectedResult(false, i, 4, capture_time); 238 test_video_encoder_callback_->SetExpectedResult(false, i, 4, capture_time);
240 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time, 239 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(video_frame_, capture_time,
241 frame_encoded_callback)); 240 frame_encoded_callback));
242 task_runner_->RunTasks(); 241 task_runner_->RunTasks();
243 } 242 }
244 } 243 }
245 244
246 } // namespace cast 245 } // namespace cast
247 } // namespace media 246 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/video_sender/video_encoder_impl.cc ('k') | media/cast/video_sender/video_encoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698