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

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: Fixed broken unittest 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
« no previous file with comments | « media/cast/cast_testing.gypi ('k') | media/cast/sender/video_sender_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 126
127 testing_clock_ = new base::SimpleTestTickClock(); 127 testing_clock_ = new base::SimpleTestTickClock();
128 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); 128 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
129 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_); 129 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_);
130 cast_environment_ = 130 cast_environment_ =
131 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(), 131 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(),
132 task_runner_, 132 task_runner_,
133 task_runner_, 133 task_runner_,
134 task_runner_); 134 task_runner_);
135 135
136 fake_vea_ = new test::FakeVideoEncodeAccelerator(task_runner_, 136 fake_vea_ = new media::FakeVideoEncodeAccelerator(task_runner_);
137 &stored_bitrates_);
138 scoped_ptr<VideoEncodeAccelerator> fake_vea(fake_vea_); 137 scoped_ptr<VideoEncodeAccelerator> fake_vea(fake_vea_);
139 VEAFactory vea_factory(task_runner_, fake_vea.Pass()); 138 VEAFactory vea_factory(task_runner_, fake_vea.Pass());
140 video_encoder_.reset(new ExternalVideoEncoder( 139 video_encoder_.reset(new ExternalVideoEncoder(
141 cast_environment_, 140 cast_environment_,
142 video_config_, 141 video_config_,
143 base::Bind(&IgnoreInitializationStatus), 142 base::Bind(&IgnoreInitializationStatus),
144 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator, 143 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator,
145 base::Unretained(&vea_factory)), 144 base::Unretained(&vea_factory)),
146 base::Bind(&CreateSharedMemory))); 145 base::Bind(&CreateSharedMemory)));
147 vea_factory.FinishCreatingVideoEncodeAccelerator(); 146 vea_factory.FinishCreatingVideoEncodeAccelerator();
148 } 147 }
149 148
150 ~ExternalVideoEncoderTest() override {} 149 ~ExternalVideoEncoderTest() override {}
151 150
152 void AdvanceClockAndVideoFrameTimestamp() { 151 void AdvanceClockAndVideoFrameTimestamp() {
153 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(33)); 152 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(33));
154 video_frame_->set_timestamp( 153 video_frame_->set_timestamp(
155 video_frame_->timestamp() + base::TimeDelta::FromMilliseconds(33)); 154 video_frame_->timestamp() + base::TimeDelta::FromMilliseconds(33));
156 } 155 }
157 156
158 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 157 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
159 test::FakeVideoEncodeAccelerator* fake_vea_; // Owned by video_encoder_. 158 media::FakeVideoEncodeAccelerator* fake_vea_; // Owned by video_encoder_.
160 std::vector<uint32> stored_bitrates_;
161 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_; 159 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_;
162 VideoSenderConfig video_config_; 160 VideoSenderConfig video_config_;
163 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 161 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
164 scoped_ptr<VideoEncoder> video_encoder_; 162 scoped_ptr<VideoEncoder> video_encoder_;
165 scoped_refptr<media::VideoFrame> video_frame_; 163 scoped_refptr<media::VideoFrame> video_frame_;
166 scoped_refptr<CastEnvironment> cast_environment_; 164 scoped_refptr<CastEnvironment> cast_environment_;
167 165
168 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest); 166 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest);
169 }; 167 };
170 168
(...skipping 16 matching lines...) Expand all
187 AdvanceClockAndVideoFrameTimestamp(); 185 AdvanceClockAndVideoFrameTimestamp();
188 test_video_encoder_callback_->SetExpectedResult( 186 test_video_encoder_callback_->SetExpectedResult(
189 i + 1, 187 i + 1,
190 i, 188 i,
191 TimeDeltaToRtpDelta(video_frame_->timestamp(), kVideoFrequency), 189 TimeDeltaToRtpDelta(video_frame_->timestamp(), kVideoFrequency),
192 testing_clock_->NowTicks()); 190 testing_clock_->NowTicks());
193 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( 191 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(
194 video_frame_, testing_clock_->NowTicks(), frame_encoded_callback)); 192 video_frame_, testing_clock_->NowTicks(), frame_encoded_callback));
195 task_runner_->RunTasks(); 193 task_runner_->RunTasks();
196 } 194 }
195 ASSERT_EQ(1u, fake_vea_->stored_bitrates().size());
196 EXPECT_EQ(2000u, fake_vea_->stored_bitrates()[0]);
197
197 // We need to run the task to cleanup the GPU instance. 198 // We need to run the task to cleanup the GPU instance.
198 video_encoder_.reset(NULL); 199 video_encoder_.reset(NULL);
199 task_runner_->RunTasks(); 200 task_runner_->RunTasks();
200
201 ASSERT_EQ(1u, stored_bitrates_.size());
202 EXPECT_EQ(2000u, stored_bitrates_[0]);
203 } 201 }
204 202
205 TEST_F(ExternalVideoEncoderTest, StreamHeader) { 203 TEST_F(ExternalVideoEncoderTest, StreamHeader) {
206 task_runner_->RunTasks(); // Run the initializer on the correct thread. 204 task_runner_->RunTasks(); // Run the initializer on the correct thread.
207 205
208 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 206 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
209 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 207 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
210 test_video_encoder_callback_.get()); 208 test_video_encoder_callback_.get());
211 209
212 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first. 210 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first.
(...skipping 18 matching lines...) Expand all
231 VideoSenderConfig video_config; 229 VideoSenderConfig video_config;
232 base::SimpleTestTickClock* testing_clock = new base::SimpleTestTickClock(); 230 base::SimpleTestTickClock* testing_clock = new base::SimpleTestTickClock();
233 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner( 231 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner(
234 new test::FakeSingleThreadTaskRunner(testing_clock)); 232 new test::FakeSingleThreadTaskRunner(testing_clock));
235 scoped_refptr<CastEnvironment> cast_environment( 233 scoped_refptr<CastEnvironment> cast_environment(
236 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock).Pass(), 234 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock).Pass(),
237 task_runner, 235 task_runner,
238 task_runner, 236 task_runner,
239 task_runner)); 237 task_runner));
240 238
241 std::vector<uint32> stored_bitrates;
242 scoped_ptr<VideoEncodeAccelerator> fake_vea( 239 scoped_ptr<VideoEncodeAccelerator> fake_vea(
243 new test::FakeVideoEncodeAccelerator(task_runner, &stored_bitrates)); 240 new media::FakeVideoEncodeAccelerator(task_runner));
244 VEAFactory vea_factory(task_runner, fake_vea.Pass()); 241 VEAFactory vea_factory(task_runner, fake_vea.Pass());
245 242
246 scoped_ptr<ExternalVideoEncoder> video_encoder(new ExternalVideoEncoder( 243 scoped_ptr<ExternalVideoEncoder> video_encoder(new ExternalVideoEncoder(
247 cast_environment, 244 cast_environment,
248 video_config, 245 video_config,
249 base::Bind(&IgnoreInitializationStatus), 246 base::Bind(&IgnoreInitializationStatus),
250 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator, 247 base::Bind(&VEAFactory::CreateVideoEncodeAccelerator,
251 base::Unretained(&vea_factory)), 248 base::Unretained(&vea_factory)),
252 base::Bind(&CreateSharedMemory))); 249 base::Bind(&CreateSharedMemory)));
253 250
254 video_encoder.reset(); 251 video_encoder.reset();
255 vea_factory.FinishCreatingVideoEncodeAccelerator(); 252 vea_factory.FinishCreatingVideoEncodeAccelerator();
256 task_runner->RunTasks(); 253 task_runner->RunTasks();
257 } 254 }
258 255
259 } // namespace cast 256 } // namespace cast
260 } // namespace media 257 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/cast_testing.gypi ('k') | media/cast/sender/video_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698