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

Side by Side Diff: media/cast/sender/external_video_encoder_unittest.cc

Issue 760963003: Adds fake hardware video encoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updates according to comments Created 5 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 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/sender/external_video_encoder.h" 13 #include "media/cast/sender/external_video_encoder.h"
14 #include "media/cast/test/fake_single_thread_task_runner.h" 14 #include "media/cast/test/fake_single_thread_task_runner.h"
15 #include "media/cast/test/fake_video_encode_accelerator.h"
16 #include "media/cast/test/utility/video_utility.h" 15 #include "media/cast/test/utility/video_utility.h"
16 #include "media/video/fake_video_encode_accelerator.h"
17 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
18 18
19 namespace media { 19 namespace media {
20 namespace cast { 20 namespace cast {
21 21
22 using testing::_; 22 using testing::_;
23 23
24 namespace { 24 namespace {
25 25
26 void IgnoreInitializationStatus(CastInitializationStatus status) {} 26 void IgnoreInitializationStatus(CastInitializationStatus status) {}
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 testing_clock_ = new base::SimpleTestTickClock(); 128 testing_clock_ = new base::SimpleTestTickClock();
129 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); 129 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
130 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_); 130 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_);
131 cast_environment_ = 131 cast_environment_ =
132 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(), 132 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(),
133 task_runner_, 133 task_runner_,
134 task_runner_, 134 task_runner_,
135 task_runner_); 135 task_runner_);
136 136
137 fake_vea_ = new test::FakeVideoEncodeAccelerator(task_runner_, 137 fake_vea_ = new media::FakeVideoEncodeAccelerator(task_runner_);
138 &stored_bitrates_);
139 scoped_ptr<VideoEncodeAccelerator> fake_vea(fake_vea_); 138 scoped_ptr<VideoEncodeAccelerator> fake_vea(fake_vea_);
140 VEAFactory vea_factory(task_runner_, fake_vea.Pass()); 139 VEAFactory vea_factory(task_runner_, fake_vea.Pass());
141 video_encoder_.reset(new ExternalVideoEncoder( 140 video_encoder_.reset(new ExternalVideoEncoder(
142 cast_environment_, 141 cast_environment_,
143 video_config_, 142 video_config_,
144 base::Bind(&IgnoreInitializationStatus), 143 base::Bind(&IgnoreInitializationStatus),
145 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator, 144 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator,
146 base::Unretained(&vea_factory)), 145 base::Unretained(&vea_factory)),
147 base::Bind(&CreateSharedMemory))); 146 base::Bind(&CreateSharedMemory)));
148 vea_factory.FinishCreatingVideoEncodeAccelerator(); 147 vea_factory.FinishCreatingVideoEncodeAccelerator();
149 } 148 }
150 149
151 ~ExternalVideoEncoderTest() override {} 150 ~ExternalVideoEncoderTest() override {}
152 151
153 void AdvanceClockAndVideoFrameTimestamp() { 152 void AdvanceClockAndVideoFrameTimestamp() {
154 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(33)); 153 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(33));
155 video_frame_->set_timestamp( 154 video_frame_->set_timestamp(
156 video_frame_->timestamp() + base::TimeDelta::FromMilliseconds(33)); 155 video_frame_->timestamp() + base::TimeDelta::FromMilliseconds(33));
157 } 156 }
158 157
159 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 158 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
160 test::FakeVideoEncodeAccelerator* fake_vea_; // Owned by video_encoder_. 159 media::FakeVideoEncodeAccelerator* fake_vea_; // Owned by video_encoder_.
161 std::vector<uint32> stored_bitrates_;
162 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_; 160 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_;
163 VideoSenderConfig video_config_; 161 VideoSenderConfig video_config_;
164 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 162 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
165 scoped_ptr<VideoEncoder> video_encoder_; 163 scoped_ptr<VideoEncoder> video_encoder_;
166 scoped_refptr<media::VideoFrame> video_frame_; 164 scoped_refptr<media::VideoFrame> video_frame_;
167 scoped_refptr<CastEnvironment> cast_environment_; 165 scoped_refptr<CastEnvironment> cast_environment_;
168 166
169 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest); 167 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest);
170 }; 168 };
171 169
(...skipping 20 matching lines...) Expand all
192 TimeDeltaToRtpDelta(video_frame_->timestamp(), kVideoFrequency), 190 TimeDeltaToRtpDelta(video_frame_->timestamp(), kVideoFrequency),
193 testing_clock_->NowTicks()); 191 testing_clock_->NowTicks());
194 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( 192 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(
195 video_frame_, testing_clock_->NowTicks(), frame_encoded_callback)); 193 video_frame_, testing_clock_->NowTicks(), frame_encoded_callback));
196 task_runner_->RunTasks(); 194 task_runner_->RunTasks();
197 } 195 }
198 // We need to run the task to cleanup the GPU instance. 196 // We need to run the task to cleanup the GPU instance.
199 video_encoder_.reset(NULL); 197 video_encoder_.reset(NULL);
200 task_runner_->RunTasks(); 198 task_runner_->RunTasks();
201 199
202 ASSERT_EQ(1u, stored_bitrates_.size()); 200 ASSERT_EQ(1u, fake_vea_->stored_bitrates().size());
203 EXPECT_EQ(2000u, stored_bitrates_[0]); 201 EXPECT_EQ(2000u, fake_vea_->stored_bitrates()[0]);
204 } 202 }
205 203
206 TEST_F(ExternalVideoEncoderTest, StreamHeader) { 204 TEST_F(ExternalVideoEncoderTest, StreamHeader) {
207 task_runner_->RunTasks(); // Run the initializer on the correct thread. 205 task_runner_->RunTasks(); // Run the initializer on the correct thread.
208 206
209 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 207 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
210 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 208 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
211 test_video_encoder_callback_.get()); 209 test_video_encoder_callback_.get());
212 210
213 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first. 211 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first.
(...skipping 18 matching lines...) Expand all
232 VideoSenderConfig video_config; 230 VideoSenderConfig video_config;
233 base::SimpleTestTickClock* testing_clock = new base::SimpleTestTickClock(); 231 base::SimpleTestTickClock* testing_clock = new base::SimpleTestTickClock();
234 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner( 232 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner(
235 new test::FakeSingleThreadTaskRunner(testing_clock)); 233 new test::FakeSingleThreadTaskRunner(testing_clock));
236 scoped_refptr<CastEnvironment> cast_environment( 234 scoped_refptr<CastEnvironment> cast_environment(
237 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock).Pass(), 235 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock).Pass(),
238 task_runner, 236 task_runner,
239 task_runner, 237 task_runner,
240 task_runner)); 238 task_runner));
241 239
242 std::vector<uint32> stored_bitrates;
243 scoped_ptr<VideoEncodeAccelerator> fake_vea( 240 scoped_ptr<VideoEncodeAccelerator> fake_vea(
244 new test::FakeVideoEncodeAccelerator(task_runner, &stored_bitrates)); 241 new media::FakeVideoEncodeAccelerator(task_runner));
245 VEAFactory vea_factory(task_runner, fake_vea.Pass()); 242 VEAFactory vea_factory(task_runner, fake_vea.Pass());
246 243
247 scoped_ptr<ExternalVideoEncoder> video_encoder(new ExternalVideoEncoder( 244 scoped_ptr<ExternalVideoEncoder> video_encoder(new ExternalVideoEncoder(
248 cast_environment, 245 cast_environment,
249 video_config, 246 video_config,
250 base::Bind(&IgnoreInitializationStatus), 247 base::Bind(&IgnoreInitializationStatus),
251 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator, 248 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator,
252 base::Unretained(&vea_factory)), 249 base::Unretained(&vea_factory)),
253 base::Bind(&CreateSharedMemory))); 250 base::Bind(&CreateSharedMemory)));
254 251
255 video_encoder.reset(); 252 video_encoder.reset();
256 vea_factory.FinishCreatingVideoEncodeAccelerator(); 253 vea_factory.FinishCreatingVideoEncodeAccelerator();
257 task_runner->RunTasks(); 254 task_runner->RunTasks();
258 } 255 }
259 256
260 } // namespace cast 257 } // namespace cast
261 } // namespace media 258 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698