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

Side by Side Diff: media/cast/video_sender/video_sender_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
« no previous file with comments | « media/cast/video_sender/video_sender.gypi ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "media/base/video_frame.h" 10 #include "media/base/video_frame.h"
11 #include "media/cast/cast_environment.h" 11 #include "media/cast/cast_environment.h"
12 #include "media/cast/test/fake_gpu_video_accelerator_factories.h"
12 #include "media/cast/test/fake_task_runner.h" 13 #include "media/cast/test/fake_task_runner.h"
13 #include "media/cast/test/video_utility.h" 14 #include "media/cast/test/video_utility.h"
14 #include "media/cast/transport/pacing/mock_paced_packet_sender.h" 15 #include "media/cast/transport/pacing/mock_paced_packet_sender.h"
15 #include "media/cast/transport/pacing/paced_sender.h" 16 #include "media/cast/transport/pacing/paced_sender.h"
16 #include "media/cast/video_sender/mock_video_encoder_controller.h"
17 #include "media/cast/video_sender/video_sender.h" 17 #include "media/cast/video_sender/video_sender.h"
18 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 20
21 namespace media { 21 namespace media {
22 namespace cast { 22 namespace cast {
23 23
24 namespace { 24 namespace {
25 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); 25 static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
26 static const uint8 kPixelValue = 123; 26 static const uint8 kPixelValue = 123;
27 static const int kWidth = 320; 27 static const int kWidth = 320;
28 static const int kHeight = 240; 28 static const int kHeight = 240;
29 } 29 }
30 30
31 using testing::_; 31 using testing::_;
32 using testing::AtLeast; 32 using testing::AtLeast;
33 33
34 namespace { 34 namespace {
35 class PeerVideoSender : public VideoSender { 35 class PeerVideoSender : public VideoSender {
36 public: 36 public:
37 PeerVideoSender(scoped_refptr<CastEnvironment> cast_environment, 37 PeerVideoSender(
38 const VideoSenderConfig& video_config, 38 scoped_refptr<CastEnvironment> cast_environment,
39 VideoEncoderController* const video_encoder_controller, 39 const VideoSenderConfig& video_config,
40 transport::PacedPacketSender* const paced_packet_sender) 40 const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories,
41 : VideoSender(cast_environment, video_config, 41 transport::PacedPacketSender* const paced_packet_sender)
42 video_encoder_controller, paced_packet_sender) { 42 : VideoSender(cast_environment, video_config, gpu_factories,
43 paced_packet_sender) {
43 } 44 }
44 using VideoSender::OnReceivedCastFeedback; 45 using VideoSender::OnReceivedCastFeedback;
45 }; 46 };
46 } // namespace 47 } // namespace
47 48
48 class VideoSenderTest : public ::testing::Test { 49 class VideoSenderTest : public ::testing::Test {
49 protected: 50 protected:
50 VideoSenderTest() { 51 VideoSenderTest() {
51 testing_clock_.Advance( 52 testing_clock_.Advance(
52 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 53 base::TimeDelta::FromMilliseconds(kStartMillisecond));
(...skipping 13 matching lines...) Expand all
66 video_config.min_bitrate = 1000000; 67 video_config.min_bitrate = 1000000;
67 video_config.start_bitrate = 1000000; 68 video_config.start_bitrate = 1000000;
68 video_config.max_qp = 56; 69 video_config.max_qp = 56;
69 video_config.min_qp = 0; 70 video_config.min_qp = 0;
70 video_config.max_frame_rate = 30; 71 video_config.max_frame_rate = 30;
71 video_config.max_number_of_video_buffers_used = 1; 72 video_config.max_number_of_video_buffers_used = 1;
72 video_config.codec = kVp8; 73 video_config.codec = kVp8;
73 74
74 if (external) { 75 if (external) {
75 video_sender_.reset(new PeerVideoSender(cast_environment_, 76 video_sender_.reset(new PeerVideoSender(cast_environment_,
76 video_config, &mock_video_encoder_controller_, &mock_transport_)); 77 video_config,
78 new test::FakeGpuVideoAcceleratorFactories(task_runner_),
79 &mock_transport_));
77 } else { 80 } else {
78 video_sender_.reset(new PeerVideoSender(cast_environment_, video_config, 81 video_sender_.reset(new PeerVideoSender(cast_environment_, video_config,
79 NULL, &mock_transport_)); 82 NULL, &mock_transport_));
80 } 83 }
81 } 84 }
82 85
83 virtual void SetUp() { 86 virtual void SetUp() {
84 task_runner_ = new test::FakeTaskRunner(&testing_clock_); 87 task_runner_ = new test::FakeTaskRunner(&testing_clock_);
85 cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_, 88 cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_,
86 task_runner_, task_runner_, task_runner_, task_runner_, 89 task_runner_, task_runner_, task_runner_, task_runner_,
87 GetDefaultCastLoggingConfig()); 90 GetDefaultCastLoggingConfig());
88 } 91 }
89 92
90 scoped_refptr<media::VideoFrame> GetNewVideoFrame() { 93 scoped_refptr<media::VideoFrame> GetNewVideoFrame() {
91 gfx::Size size(kWidth, kHeight); 94 gfx::Size size(kWidth, kHeight);
92 scoped_refptr<media::VideoFrame> video_frame = 95 scoped_refptr<media::VideoFrame> video_frame =
93 media::VideoFrame::CreateFrame(VideoFrame::I420, size, gfx::Rect(size), 96 media::VideoFrame::CreateFrame(VideoFrame::I420, size, gfx::Rect(size),
94 size, base::TimeDelta()); 97 size, base::TimeDelta());
95 PopulateVideoFrame(video_frame, kPixelValue); 98 PopulateVideoFrame(video_frame, kPixelValue);
96 return video_frame; 99 return video_frame;
97 } 100 }
98 101
99 MockVideoEncoderController mock_video_encoder_controller_;
100 base::SimpleTestTickClock testing_clock_; 102 base::SimpleTestTickClock testing_clock_;
101 transport::MockPacedPacketSender mock_transport_; 103 transport::MockPacedPacketSender mock_transport_;
102 scoped_refptr<test::FakeTaskRunner> task_runner_; 104 scoped_refptr<test::FakeTaskRunner> task_runner_;
103 scoped_ptr<PeerVideoSender> video_sender_; 105 scoped_ptr<PeerVideoSender> video_sender_;
104 scoped_refptr<CastEnvironment> cast_environment_; 106 scoped_refptr<CastEnvironment> cast_environment_;
105 }; 107 };
106 108
107 TEST_F(VideoSenderTest, BuiltInEncoder) { 109 TEST_F(VideoSenderTest, BuiltInEncoder) {
108 EXPECT_CALL(mock_transport_, SendPackets(_)).Times(1); 110 EXPECT_CALL(mock_transport_, SendPackets(_)).Times(1);
109 111
110 InitEncoder(false); 112 InitEncoder(false);
111 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 113 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
112 114
113 base::TimeTicks capture_time; 115 base::TimeTicks capture_time;
114 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 116 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
115 117
116 task_runner_->RunTasks(); 118 task_runner_->RunTasks();
117 } 119 }
118 120
119 TEST_F(VideoSenderTest, ExternalEncoder) { 121 TEST_F(VideoSenderTest, ExternalEncoder) {
120 EXPECT_CALL(mock_transport_, SendPackets(_)).Times(1); 122 EXPECT_CALL(mock_transport_, SendPackets(_)).Times(1);
121 EXPECT_CALL(mock_video_encoder_controller_, SkipNextFrame(false)).Times(1);
122 InitEncoder(true); 123 InitEncoder(true);
124 task_runner_->RunTasks();
123 125
124 EncodedVideoFrame video_frame; 126 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
127
125 base::TimeTicks capture_time; 128 base::TimeTicks capture_time;
129 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
126 130
127 video_frame.codec = kVp8; 131 task_runner_->RunTasks();
128 video_frame.key_frame = true;
129 video_frame.frame_id = 0;
130 video_frame.last_referenced_frame_id = 0;
131 video_frame.data.insert(video_frame.data.begin(), 1000, kPixelValue);
132
133 video_sender_->InsertCodedVideoFrame(&video_frame, capture_time,
134 base::Bind(base::DoNothing));
135 } 132 }
136 133
137 TEST_F(VideoSenderTest, RtcpTimer) { 134 TEST_F(VideoSenderTest, RtcpTimer) {
138 EXPECT_CALL(mock_transport_, SendPackets(_)).Times(AtLeast(1)); 135 EXPECT_CALL(mock_transport_, SendPackets(_)).Times(AtLeast(1));
139 EXPECT_CALL(mock_transport_, SendRtcpPacket(_)).Times(1); 136 EXPECT_CALL(mock_transport_, SendRtcpPacket(_)).Times(1);
140 EXPECT_CALL(mock_video_encoder_controller_, 137 InitEncoder(false);
141 SkipNextFrame(false)).Times(AtLeast(1));
142 InitEncoder(true);
143 138
144 EncodedVideoFrame video_frame; 139 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
140
145 base::TimeTicks capture_time; 141 base::TimeTicks capture_time;
146 142 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
147 video_frame.codec = kVp8; 143 task_runner_->RunTasks();
148 video_frame.key_frame = true;
149 video_frame.frame_id = 0;
150 video_frame.last_referenced_frame_id = 0;
151 video_frame.data.insert(video_frame.data.begin(), 1000, kPixelValue);
152
153 video_sender_->InsertCodedVideoFrame(&video_frame, capture_time,
154 base::Bind(base::DoNothing));
155 144
156 // Make sure that we send at least one RTCP packet. 145 // Make sure that we send at least one RTCP packet.
157 base::TimeDelta max_rtcp_timeout = 146 base::TimeDelta max_rtcp_timeout =
158 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2); 147 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2);
159 148
160 testing_clock_.Advance(max_rtcp_timeout); 149 testing_clock_.Advance(max_rtcp_timeout);
161 task_runner_->RunTasks(); 150 task_runner_->RunTasks();
162 } 151 }
163 152
164 TEST_F(VideoSenderTest, ResendTimer) { 153 TEST_F(VideoSenderTest, ResendTimer) {
(...skipping 24 matching lines...) Expand all
189 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs); 178 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs);
190 179
191 // Make sure that we do a re-send. 180 // Make sure that we do a re-send.
192 testing_clock_.Advance(max_resend_timeout); 181 testing_clock_.Advance(max_resend_timeout);
193 task_runner_->RunTasks(); 182 task_runner_->RunTasks();
194 } 183 }
195 184
196 } // namespace cast 185 } // namespace cast
197 } // namespace media 186 } // namespace media
198 187
OLDNEW
« no previous file with comments | « media/cast/video_sender/video_sender.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698