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

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

Issue 760963003: Adds fake hardware video encoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/test/simple_test_tick_clock.h" 11 #include "base/test/simple_test_tick_clock.h"
12 #include "media/base/video_frame.h" 12 #include "media/base/video_frame.h"
13 #include "media/cast/cast_environment.h" 13 #include "media/cast/cast_environment.h"
14 #include "media/cast/logging/simple_event_subscriber.h" 14 #include "media/cast/logging/simple_event_subscriber.h"
15 #include "media/cast/net/cast_transport_config.h" 15 #include "media/cast/net/cast_transport_config.h"
16 #include "media/cast/net/cast_transport_sender_impl.h" 16 #include "media/cast/net/cast_transport_sender_impl.h"
17 #include "media/cast/net/pacing/paced_sender.h" 17 #include "media/cast/net/pacing/paced_sender.h"
18 #include "media/cast/sender/video_frame_factory.h" 18 #include "media/cast/sender/video_frame_factory.h"
19 #include "media/cast/sender/video_sender.h" 19 #include "media/cast/sender/video_sender.h"
20 #include "media/cast/test/fake_single_thread_task_runner.h" 20 #include "media/cast/test/fake_single_thread_task_runner.h"
21 #include "media/cast/test/fake_video_encode_accelerator.h"
22 #include "media/cast/test/utility/default_config.h" 21 #include "media/cast/test/utility/default_config.h"
23 #include "media/cast/test/utility/video_utility.h" 22 #include "media/cast/test/utility/video_utility.h"
23 #include "media/video/fake_video_encode_accelerator.h"
24 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
25 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
26 26
27 namespace media { 27 namespace media {
28 namespace cast { 28 namespace cast {
29 29
30 namespace { 30 namespace {
31 static const uint8 kPixelValue = 123; 31 static const uint8 kPixelValue = 123;
32 static const int kWidth = 320; 32 static const int kWidth = 320;
33 static const int kHeight = 240; 33 static const int kHeight = 240;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 create_vea_cb, 126 create_vea_cb,
127 create_video_encode_mem_cb, 127 create_video_encode_mem_cb,
128 transport_sender, 128 transport_sender,
129 base::Bind(&IgnorePlayoutDelayChanges)) {} 129 base::Bind(&IgnorePlayoutDelayChanges)) {}
130 using VideoSender::OnReceivedCastFeedback; 130 using VideoSender::OnReceivedCastFeedback;
131 }; 131 };
132 } // namespace 132 } // namespace
133 133
134 class VideoSenderTest : public ::testing::Test { 134 class VideoSenderTest : public ::testing::Test {
135 protected: 135 protected:
136 VideoSenderTest() { 136 VideoSenderTest()
137 : stored_bitrates_(NULL) {
137 testing_clock_ = new base::SimpleTestTickClock(); 138 testing_clock_ = new base::SimpleTestTickClock();
138 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); 139 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
139 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_); 140 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_);
140 cast_environment_ = 141 cast_environment_ =
141 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(), 142 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(),
142 task_runner_, 143 task_runner_,
143 task_runner_, 144 task_runner_,
144 task_runner_); 145 task_runner_);
145 last_pixel_value_ = kPixelValue; 146 last_pixel_value_ = kPixelValue;
146 net::IPEndPoint dummy_endpoint; 147 net::IPEndPoint dummy_endpoint;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 video_config.min_bitrate = 1000000; 183 video_config.min_bitrate = 1000000;
183 video_config.start_bitrate = 1000000; 184 video_config.start_bitrate = 1000000;
184 video_config.max_qp = 56; 185 video_config.max_qp = 56;
185 video_config.min_qp = 0; 186 video_config.min_qp = 0;
186 video_config.max_frame_rate = 30; 187 video_config.max_frame_rate = 30;
187 video_config.max_number_of_video_buffers_used = 1; 188 video_config.max_number_of_video_buffers_used = 1;
188 video_config.codec = CODEC_VIDEO_VP8; 189 video_config.codec = CODEC_VIDEO_VP8;
189 CastInitializationStatus status = STATUS_VIDEO_UNINITIALIZED; 190 CastInitializationStatus status = STATUS_VIDEO_UNINITIALIZED;
190 191
191 if (external) { 192 if (external) {
192 test::FakeVideoEncodeAccelerator* fake_vea = 193 media::FakeVideoEncodeAccelerator* fake_vea =
193 new test::FakeVideoEncodeAccelerator( 194 new media::FakeVideoEncodeAccelerator(
194 task_runner_, &stored_bitrates_); 195 task_runner_, std::vector<uint32>());
196 stored_bitrates_ = &fake_vea->stored_bitrates();
195 fake_vea->SetWillInitializationSucceed(expect_init_success); 197 fake_vea->SetWillInitializationSucceed(expect_init_success);
196 scoped_ptr<VideoEncodeAccelerator> fake_vea_owner(fake_vea); 198 scoped_ptr<VideoEncodeAccelerator> fake_vea_owner(fake_vea);
197 video_sender_.reset( 199 video_sender_.reset(
198 new PeerVideoSender(cast_environment_, 200 new PeerVideoSender(cast_environment_,
199 video_config, 201 video_config,
200 base::Bind(&SaveInitializationStatus, 202 base::Bind(&SaveInitializationStatus,
201 &status), 203 &status),
202 base::Bind(&CreateVideoEncodeAccelerator, 204 base::Bind(&CreateVideoEncodeAccelerator,
203 task_runner_, 205 task_runner_,
204 base::Passed(&fake_vea_owner)), 206 base::Passed(&fake_vea_owner)),
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 246
245 void RunTasks(int during_ms) { 247 void RunTasks(int during_ms) {
246 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(during_ms)); 248 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(during_ms));
247 } 249 }
248 250
249 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 251 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
250 TestPacketSender transport_; 252 TestPacketSender transport_;
251 scoped_ptr<CastTransportSenderImpl> transport_sender_; 253 scoped_ptr<CastTransportSenderImpl> transport_sender_;
252 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 254 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
253 scoped_ptr<PeerVideoSender> video_sender_; 255 scoped_ptr<PeerVideoSender> video_sender_;
254 std::vector<uint32> stored_bitrates_; 256 const std::vector<uint32>* stored_bitrates_;
wuchengli 2014/12/09 14:29:25 This is not very good because it is a part of Peer
hellner1 2014/12/10 22:38:59 Agree. No action then as changing this would bloat
255 scoped_refptr<CastEnvironment> cast_environment_; 257 scoped_refptr<CastEnvironment> cast_environment_;
256 int last_pixel_value_; 258 int last_pixel_value_;
257 base::TimeTicks first_frame_timestamp_; 259 base::TimeTicks first_frame_timestamp_;
258 260
259 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest); 261 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest);
260 }; 262 };
261 263
262 TEST_F(VideoSenderTest, BuiltInEncoder) { 264 TEST_F(VideoSenderTest, BuiltInEncoder) {
263 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 265 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
264 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 266 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
(...skipping 14 matching lines...) Expand all
279 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 281 const base::TimeTicks reference_time = testing_clock_->NowTicks();
280 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 282 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
281 task_runner_->RunTasks(); 283 task_runner_->RunTasks();
282 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 284 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
283 task_runner_->RunTasks(); 285 task_runner_->RunTasks();
284 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 286 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
285 task_runner_->RunTasks(); 287 task_runner_->RunTasks();
286 288
287 // Fixed bitrate is used for external encoder. Bitrate is only once 289 // Fixed bitrate is used for external encoder. Bitrate is only once
288 // to the encoder. 290 // to the encoder.
289 EXPECT_EQ(1u, stored_bitrates_.size()); 291 EXPECT_EQ(1u, stored_bitrates_->size());
290 video_sender_.reset(NULL); 292 video_sender_.reset(NULL);
291 task_runner_->RunTasks(); 293 task_runner_->RunTasks();
292 } 294 }
293 295
294 TEST_F(VideoSenderTest, ExternalEncoderInitFails) { 296 TEST_F(VideoSenderTest, ExternalEncoderInitFails) {
295 EXPECT_EQ(STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED, 297 EXPECT_EQ(STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED,
296 InitEncoder(true, false)); 298 InitEncoder(true, false));
297 video_sender_.reset(NULL); 299 video_sender_.reset(NULL);
298 task_runner_->RunTasks(); 300 task_runner_->RunTasks();
299 } 301 }
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 EXPECT_EQ(0, transport_.number_of_rtp_packets()); 539 EXPECT_EQ(0, transport_.number_of_rtp_packets());
538 } 540 }
539 541
540 TEST_F(VideoSenderTest, CheckVideoFrameFactoryIsNull) { 542 TEST_F(VideoSenderTest, CheckVideoFrameFactoryIsNull) {
541 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true)); 543 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, InitEncoder(false, true));
542 EXPECT_EQ(nullptr, video_sender_->CreateVideoFrameFactory().get()); 544 EXPECT_EQ(nullptr, video_sender_->CreateVideoFrameFactory().get());
543 } 545 }
544 546
545 } // namespace cast 547 } // namespace cast
546 } // namespace media 548 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698