OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 #include "webrtc/test/call_test.h" | 10 #include "webrtc/test/call_test.h" |
11 #include "webrtc/test/encoder_settings.h" | 11 #include "webrtc/test/encoder_settings.h" |
12 | 12 |
13 namespace webrtc { | 13 namespace webrtc { |
14 namespace test { | 14 namespace test { |
15 | 15 |
16 namespace { | 16 namespace { |
17 const int kVideoRotationRtpExtensionId = 4; | 17 const int kVideoRotationRtpExtensionId = 4; |
18 } | 18 } |
19 | 19 |
20 CallTest::CallTest() | 20 CallTest::CallTest() |
21 : clock_(Clock::GetRealTimeClock()), | 21 : clock_(Clock::GetRealTimeClock()), |
22 send_config_(nullptr), | 22 video_send_config_(nullptr), |
23 send_stream_(NULL), | 23 video_send_stream_(NULL), |
24 fake_encoder_(clock_) { | 24 fake_encoder_(clock_) {} |
25 } | |
26 | 25 |
27 CallTest::~CallTest() { | 26 CallTest::~CallTest() { |
28 } | 27 } |
29 | 28 |
30 void CallTest::RunBaseTest(BaseTest* test, | 29 void CallTest::RunBaseTest(BaseTest* test, |
31 const FakeNetworkPipe::Config& config) { | 30 const FakeNetworkPipe::Config& config) { |
32 CreateSenderCall(test->GetSenderCallConfig()); | 31 CreateSenderCall(test->GetSenderCallConfig()); |
33 if (test->ShouldCreateReceivers()) | 32 if (test->ShouldCreateReceivers()) |
34 CreateReceiverCall(test->GetReceiverCallConfig()); | 33 CreateReceiverCall(test->GetReceiverCallConfig()); |
35 send_transport_.reset(new PacketTransport( | 34 send_transport_.reset(new PacketTransport( |
36 sender_call_.get(), test, test::PacketTransport::kSender, config)); | 35 sender_call_.get(), test, test::PacketTransport::kSender, config)); |
37 receive_transport_.reset(new PacketTransport( | 36 receive_transport_.reset(new PacketTransport( |
38 nullptr, test, test::PacketTransport::kReceiver, config)); | 37 nullptr, test, test::PacketTransport::kReceiver, config)); |
39 test->OnTransportsCreated(send_transport_.get(), receive_transport_.get()); | 38 test->OnTransportsCreated(send_transport_.get(), receive_transport_.get()); |
40 test->OnCallsCreated(sender_call_.get(), receiver_call_.get()); | 39 test->OnCallsCreated(sender_call_.get(), receiver_call_.get()); |
41 | 40 |
42 if (test->ShouldCreateReceivers()) { | 41 if (test->ShouldCreateReceivers()) { |
43 send_transport_->SetReceiver(receiver_call_->Receiver()); | 42 send_transport_->SetReceiver(receiver_call_->Receiver()); |
44 receive_transport_->SetReceiver(sender_call_->Receiver()); | 43 receive_transport_->SetReceiver(sender_call_->Receiver()); |
45 } else { | 44 } else { |
46 // Sender-only call delivers to itself. | 45 // Sender-only call delivers to itself. |
47 send_transport_->SetReceiver(sender_call_->Receiver()); | 46 send_transport_->SetReceiver(sender_call_->Receiver()); |
48 receive_transport_->SetReceiver(nullptr); | 47 receive_transport_->SetReceiver(nullptr); |
49 } | 48 } |
50 | 49 |
51 CreateSendConfig(test->GetNumStreams(), send_transport_.get()); | 50 CreateSendConfig(test->GetNumStreams(), send_transport_.get()); |
52 if (test->ShouldCreateReceivers()) { | 51 if (test->ShouldCreateReceivers()) { |
53 CreateMatchingReceiveConfigs(receive_transport_.get()); | 52 CreateMatchingReceiveConfigs(receive_transport_.get()); |
54 } | 53 } |
55 test->ModifyConfigs(&send_config_, &receive_configs_, &encoder_config_); | 54 test->ModifyVideoConfigs(&video_send_config_, &video_receive_configs_, |
| 55 &video_encoder_config_); |
56 CreateStreams(); | 56 CreateStreams(); |
57 test->OnStreamsCreated(send_stream_, receive_streams_); | 57 test->OnVideoStreamsCreated(video_send_stream_, video_receive_streams_); |
58 | 58 |
59 CreateFrameGeneratorCapturer(); | 59 CreateFrameGeneratorCapturer(); |
60 test->OnFrameGeneratorCapturerCreated(frame_generator_capturer_.get()); | 60 test->OnFrameGeneratorCapturerCreated(frame_generator_capturer_.get()); |
61 | 61 |
62 Start(); | 62 Start(); |
63 test->PerformTest(); | 63 test->PerformTest(); |
64 send_transport_->StopSending(); | 64 send_transport_->StopSending(); |
65 receive_transport_->StopSending(); | 65 receive_transport_->StopSending(); |
66 Stop(); | 66 Stop(); |
67 | 67 |
68 DestroyStreams(); | 68 DestroyStreams(); |
69 } | 69 } |
70 | 70 |
71 void CallTest::Start() { | 71 void CallTest::Start() { |
72 send_stream_->Start(); | 72 video_send_stream_->Start(); |
73 for (size_t i = 0; i < receive_streams_.size(); ++i) | 73 for (size_t i = 0; i < video_receive_streams_.size(); ++i) |
74 receive_streams_[i]->Start(); | 74 video_receive_streams_[i]->Start(); |
75 if (frame_generator_capturer_.get() != NULL) | 75 if (frame_generator_capturer_.get() != NULL) |
76 frame_generator_capturer_->Start(); | 76 frame_generator_capturer_->Start(); |
77 } | 77 } |
78 | 78 |
79 void CallTest::Stop() { | 79 void CallTest::Stop() { |
80 if (frame_generator_capturer_.get() != NULL) | 80 if (frame_generator_capturer_.get() != NULL) |
81 frame_generator_capturer_->Stop(); | 81 frame_generator_capturer_->Stop(); |
82 for (size_t i = 0; i < receive_streams_.size(); ++i) | 82 for (size_t i = 0; i < video_receive_streams_.size(); ++i) |
83 receive_streams_[i]->Stop(); | 83 video_receive_streams_[i]->Stop(); |
84 send_stream_->Stop(); | 84 video_send_stream_->Stop(); |
85 } | 85 } |
86 | 86 |
87 void CallTest::CreateCalls(const Call::Config& sender_config, | 87 void CallTest::CreateCalls(const Call::Config& sender_config, |
88 const Call::Config& receiver_config) { | 88 const Call::Config& receiver_config) { |
89 CreateSenderCall(sender_config); | 89 CreateSenderCall(sender_config); |
90 CreateReceiverCall(receiver_config); | 90 CreateReceiverCall(receiver_config); |
91 } | 91 } |
92 | 92 |
93 void CallTest::CreateSenderCall(const Call::Config& config) { | 93 void CallTest::CreateSenderCall(const Call::Config& config) { |
94 sender_call_.reset(Call::Create(config)); | 94 sender_call_.reset(Call::Create(config)); |
95 } | 95 } |
96 | 96 |
97 void CallTest::CreateReceiverCall(const Call::Config& config) { | 97 void CallTest::CreateReceiverCall(const Call::Config& config) { |
98 receiver_call_.reset(Call::Create(config)); | 98 receiver_call_.reset(Call::Create(config)); |
99 } | 99 } |
100 | 100 |
101 void CallTest::DestroyCalls() { | 101 void CallTest::DestroyCalls() { |
102 sender_call_.reset(nullptr); | 102 sender_call_.reset(nullptr); |
103 receiver_call_.reset(nullptr); | 103 receiver_call_.reset(nullptr); |
104 } | 104 } |
105 | 105 |
106 void CallTest::CreateSendConfig(size_t num_streams, | 106 void CallTest::CreateSendConfig(size_t num_streams, |
107 Transport* send_transport) { | 107 Transport* send_transport) { |
108 assert(num_streams <= kNumSsrcs); | 108 assert(num_streams <= kNumSsrcs); |
109 send_config_ = VideoSendStream::Config(send_transport); | 109 video_send_config_ = VideoSendStream::Config(send_transport); |
110 send_config_.encoder_settings.encoder = &fake_encoder_; | 110 video_send_config_.encoder_settings.encoder = &fake_encoder_; |
111 send_config_.encoder_settings.payload_name = "FAKE"; | 111 video_send_config_.encoder_settings.payload_name = "FAKE"; |
112 send_config_.encoder_settings.payload_type = kFakeSendPayloadType; | 112 video_send_config_.encoder_settings.payload_type = kFakeSendPayloadType; |
113 send_config_.rtp.extensions.push_back( | 113 video_send_config_.rtp.extensions.push_back( |
114 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId)); | 114 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId)); |
115 encoder_config_.streams = test::CreateVideoStreams(num_streams); | 115 video_encoder_config_.streams = test::CreateVideoStreams(num_streams); |
116 for (size_t i = 0; i < num_streams; ++i) | 116 for (size_t i = 0; i < num_streams; ++i) |
117 send_config_.rtp.ssrcs.push_back(kSendSsrcs[i]); | 117 video_send_config_.rtp.ssrcs.push_back(kSendSsrcs[i]); |
118 send_config_.rtp.extensions.push_back( | 118 video_send_config_.rtp.extensions.push_back( |
119 RtpExtension(RtpExtension::kVideoRotation, kVideoRotationRtpExtensionId)); | 119 RtpExtension(RtpExtension::kVideoRotation, kVideoRotationRtpExtensionId)); |
120 } | 120 } |
121 | 121 |
122 void CallTest::CreateMatchingReceiveConfigs( | 122 void CallTest::CreateMatchingReceiveConfigs( |
123 Transport* rtcp_send_transport) { | 123 Transport* rtcp_send_transport) { |
124 assert(!send_config_.rtp.ssrcs.empty()); | 124 assert(!video_send_config_.rtp.ssrcs.empty()); |
125 assert(receive_configs_.empty()); | 125 assert(video_receive_configs_.empty()); |
126 assert(allocated_decoders_.empty()); | 126 assert(allocated_decoders_.empty()); |
127 VideoReceiveStream::Config config(rtcp_send_transport); | 127 VideoReceiveStream::Config config(rtcp_send_transport); |
128 config.rtp.remb = true; | 128 config.rtp.remb = true; |
129 config.rtp.local_ssrc = kReceiverLocalSsrc; | 129 config.rtp.local_ssrc = kReceiverLocalSsrc; |
130 for (const RtpExtension& extension : send_config_.rtp.extensions) | 130 for (const RtpExtension& extension : video_send_config_.rtp.extensions) |
131 config.rtp.extensions.push_back(extension); | 131 config.rtp.extensions.push_back(extension); |
132 for (size_t i = 0; i < send_config_.rtp.ssrcs.size(); ++i) { | 132 for (size_t i = 0; i < video_send_config_.rtp.ssrcs.size(); ++i) { |
133 VideoReceiveStream::Decoder decoder = | 133 VideoReceiveStream::Decoder decoder = |
134 test::CreateMatchingDecoder(send_config_.encoder_settings); | 134 test::CreateMatchingDecoder(video_send_config_.encoder_settings); |
135 allocated_decoders_.push_back(decoder.decoder); | 135 allocated_decoders_.push_back(decoder.decoder); |
136 config.decoders.clear(); | 136 config.decoders.clear(); |
137 config.decoders.push_back(decoder); | 137 config.decoders.push_back(decoder); |
138 config.rtp.remote_ssrc = send_config_.rtp.ssrcs[i]; | 138 config.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[i]; |
139 receive_configs_.push_back(config); | 139 video_receive_configs_.push_back(config); |
140 } | 140 } |
141 } | 141 } |
142 | 142 |
143 void CallTest::CreateFrameGeneratorCapturer() { | 143 void CallTest::CreateFrameGeneratorCapturer() { |
144 VideoStream stream = encoder_config_.streams.back(); | 144 VideoStream stream = video_encoder_config_.streams.back(); |
145 frame_generator_capturer_.reset( | 145 frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create( |
146 test::FrameGeneratorCapturer::Create(send_stream_->Input(), | 146 video_send_stream_->Input(), stream.width, stream.height, |
147 stream.width, | 147 stream.max_framerate, clock_)); |
148 stream.height, | |
149 stream.max_framerate, | |
150 clock_)); | |
151 } | 148 } |
152 | 149 |
153 void CallTest::CreateStreams() { | 150 void CallTest::CreateStreams() { |
154 assert(send_stream_ == NULL); | 151 assert(video_send_stream_ == NULL); |
155 assert(receive_streams_.empty()); | 152 assert(video_receive_streams_.empty()); |
156 | 153 |
157 send_stream_ = | 154 video_send_stream_ = sender_call_->CreateVideoSendStream( |
158 sender_call_->CreateVideoSendStream(send_config_, encoder_config_); | 155 video_send_config_, video_encoder_config_); |
159 | 156 |
160 for (size_t i = 0; i < receive_configs_.size(); ++i) { | 157 for (size_t i = 0; i < video_receive_configs_.size(); ++i) { |
161 receive_streams_.push_back( | 158 video_receive_streams_.push_back( |
162 receiver_call_->CreateVideoReceiveStream(receive_configs_[i])); | 159 receiver_call_->CreateVideoReceiveStream(video_receive_configs_[i])); |
163 } | 160 } |
164 } | 161 } |
165 | 162 |
166 void CallTest::DestroyStreams() { | 163 void CallTest::DestroyStreams() { |
167 if (send_stream_ != NULL) | 164 if (video_send_stream_ != NULL) |
168 sender_call_->DestroyVideoSendStream(send_stream_); | 165 sender_call_->DestroyVideoSendStream(video_send_stream_); |
169 send_stream_ = NULL; | 166 video_send_stream_ = NULL; |
170 for (size_t i = 0; i < receive_streams_.size(); ++i) | 167 for (size_t i = 0; i < video_receive_streams_.size(); ++i) |
171 receiver_call_->DestroyVideoReceiveStream(receive_streams_[i]); | 168 receiver_call_->DestroyVideoReceiveStream(video_receive_streams_[i]); |
172 receive_streams_.clear(); | 169 video_receive_streams_.clear(); |
173 allocated_decoders_.clear(); | 170 allocated_decoders_.clear(); |
174 } | 171 } |
175 | 172 |
176 const int CallTest::kDefaultTimeoutMs = 30 * 1000; | 173 const int CallTest::kDefaultTimeoutMs = 30 * 1000; |
177 const int CallTest::kLongTimeoutMs = 120 * 1000; | 174 const int CallTest::kLongTimeoutMs = 120 * 1000; |
178 const uint8_t CallTest::kSendPayloadType = 100; | 175 const uint8_t CallTest::kSendPayloadType = 100; |
179 const uint8_t CallTest::kFakeSendPayloadType = 125; | 176 const uint8_t CallTest::kFakeSendPayloadType = 125; |
180 const uint8_t CallTest::kSendRtxPayloadType = 98; | 177 const uint8_t CallTest::kSendRtxPayloadType = 98; |
181 const uint8_t CallTest::kRedPayloadType = 118; | 178 const uint8_t CallTest::kRedPayloadType = 118; |
182 const uint8_t CallTest::kRtxRedPayloadType = 99; | 179 const uint8_t CallTest::kRtxRedPayloadType = 99; |
(...skipping 21 matching lines...) Expand all Loading... |
204 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) { | 201 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) { |
205 } | 202 } |
206 | 203 |
207 void BaseTest::OnTransportsCreated(PacketTransport* send_transport, | 204 void BaseTest::OnTransportsCreated(PacketTransport* send_transport, |
208 PacketTransport* receive_transport) {} | 205 PacketTransport* receive_transport) {} |
209 | 206 |
210 size_t BaseTest::GetNumStreams() const { | 207 size_t BaseTest::GetNumStreams() const { |
211 return 1; | 208 return 1; |
212 } | 209 } |
213 | 210 |
214 void BaseTest::ModifyConfigs( | 211 void BaseTest::ModifyVideoConfigs( |
215 VideoSendStream::Config* send_config, | 212 VideoSendStream::Config* send_config, |
216 std::vector<VideoReceiveStream::Config>* receive_configs, | 213 std::vector<VideoReceiveStream::Config>* receive_configs, |
217 VideoEncoderConfig* encoder_config) { | 214 VideoEncoderConfig* encoder_config) {} |
218 } | |
219 | 215 |
220 void BaseTest::OnStreamsCreated( | 216 void BaseTest::OnVideoStreamsCreated( |
221 VideoSendStream* send_stream, | 217 VideoSendStream* send_stream, |
222 const std::vector<VideoReceiveStream*>& receive_streams) { | 218 const std::vector<VideoReceiveStream*>& receive_streams) {} |
223 } | |
224 | 219 |
225 void BaseTest::OnFrameGeneratorCapturerCreated( | 220 void BaseTest::OnFrameGeneratorCapturerCreated( |
226 FrameGeneratorCapturer* frame_generator_capturer) { | 221 FrameGeneratorCapturer* frame_generator_capturer) { |
227 } | 222 } |
228 | 223 |
229 SendTest::SendTest(unsigned int timeout_ms) : BaseTest(timeout_ms) { | 224 SendTest::SendTest(unsigned int timeout_ms) : BaseTest(timeout_ms) { |
230 } | 225 } |
231 | 226 |
232 bool SendTest::ShouldCreateReceivers() const { | 227 bool SendTest::ShouldCreateReceivers() const { |
233 return false; | 228 return false; |
234 } | 229 } |
235 | 230 |
236 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) { | 231 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) { |
237 } | 232 } |
238 | 233 |
239 bool EndToEndTest::ShouldCreateReceivers() const { | 234 bool EndToEndTest::ShouldCreateReceivers() const { |
240 return true; | 235 return true; |
241 } | 236 } |
242 | 237 |
243 } // namespace test | 238 } // namespace test |
244 } // namespace webrtc | 239 } // namespace webrtc |
OLD | NEW |