| 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 | 10 |
| 11 #include <stdio.h> | 11 #include <stdio.h> |
| 12 | 12 |
| 13 #include <map> | 13 #include <map> |
| 14 #include <memory> | 14 #include <memory> |
| 15 #include <sstream> | 15 #include <sstream> |
| 16 | 16 |
| 17 #include "gflags/gflags.h" | 17 #include "gflags/gflags.h" |
| 18 #include "webrtc/api/video_codecs/video_decoder.h" | 18 #include "webrtc/api/video_codecs/video_decoder.h" |
| 19 #include "webrtc/call/call.h" | 19 #include "webrtc/call/call.h" |
| 20 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" | 20 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" |
| 21 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" | 21 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" |
| 22 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" | 22 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" |
| 23 #include "webrtc/rtc_base/checks.h" | 23 #include "webrtc/rtc_base/checks.h" |
| 24 #include "webrtc/system_wrappers/include/clock.h" | 24 #include "webrtc/system_wrappers/include/clock.h" |
| 25 #include "webrtc/system_wrappers/include/sleep.h" | 25 #include "webrtc/system_wrappers/include/sleep.h" |
| 26 #include "webrtc/test/call_test.h" |
| 26 #include "webrtc/test/encoder_settings.h" | 27 #include "webrtc/test/encoder_settings.h" |
| 27 #include "webrtc/test/fake_decoder.h" | 28 #include "webrtc/test/fake_decoder.h" |
| 28 #include "webrtc/test/gtest.h" | 29 #include "webrtc/test/gtest.h" |
| 29 #include "webrtc/test/null_transport.h" | 30 #include "webrtc/test/null_transport.h" |
| 30 #include "webrtc/test/rtp_file_reader.h" | 31 #include "webrtc/test/rtp_file_reader.h" |
| 31 #include "webrtc/test/run_loop.h" | 32 #include "webrtc/test/run_loop.h" |
| 32 #include "webrtc/test/run_test.h" | 33 #include "webrtc/test/run_test.h" |
| 33 #include "webrtc/test/video_capturer.h" | 34 #include "webrtc/test/video_capturer.h" |
| 34 #include "webrtc/test/video_renderer.h" | 35 #include "webrtc/test/video_renderer.h" |
| 35 #include "webrtc/typedefs.h" | 36 #include "webrtc/typedefs.h" |
| 36 | 37 |
| 37 namespace webrtc { | 38 namespace webrtc { |
| 38 namespace flags { | 39 namespace flags { |
| 39 | 40 |
| 40 // TODO(pbos): Multiple receivers. | 41 // TODO(pbos): Multiple receivers. |
| 41 | 42 |
| 42 // Flag for payload type. | 43 // Flag for payload type. |
| 43 static bool ValidatePayloadType(const char* flagname, int32_t payload_type) { | 44 static bool ValidatePayloadType(const char* flagname, int32_t payload_type) { |
| 44 return payload_type > 0 && payload_type <= 127; | 45 return payload_type > 0 && payload_type <= 127; |
| 45 } | 46 } |
| 46 DEFINE_int32(payload_type, 0, "Payload type"); | 47 DEFINE_int32(payload_type, test::CallTest::kPayloadTypeVP8, "Payload type"); |
| 47 static int PayloadType() { return static_cast<int>(FLAGS_payload_type); } | 48 static int PayloadType() { return static_cast<int>(FLAGS_payload_type); } |
| 48 static const bool payload_dummy = | 49 static const bool payload_dummy = |
| 49 google::RegisterFlagValidator(&FLAGS_payload_type, &ValidatePayloadType); | 50 google::RegisterFlagValidator(&FLAGS_payload_type, &ValidatePayloadType); |
| 50 | 51 |
| 52 DEFINE_int32(payload_type_rtx, |
| 53 test::CallTest::kSendRtxPayloadType, |
| 54 "RTX payload type"); |
| 55 static int PayloadTypeRtx() { |
| 56 return static_cast<int>(FLAGS_payload_type_rtx); |
| 57 } |
| 58 static const bool payload_rtx_dummy = |
| 59 google::RegisterFlagValidator(&FLAGS_payload_type_rtx, |
| 60 &ValidatePayloadType); |
| 61 |
| 51 // Flag for SSRC. | 62 // Flag for SSRC. |
| 52 static bool ValidateSsrc(const char* flagname, uint64_t ssrc) { | 63 static bool ValidateSsrc(const char* flagname, uint64_t ssrc) { |
| 53 return ssrc > 0 && ssrc <= 0xFFFFFFFFu; | 64 return ssrc > 0 && ssrc <= 0xFFFFFFFFu; |
| 54 } | 65 } |
| 55 | 66 |
| 56 DEFINE_uint64(ssrc, 0, "Incoming SSRC"); | 67 DEFINE_uint64(ssrc, test::CallTest::kVideoSendSsrcs[0], "Incoming SSRC"); |
| 57 static uint32_t Ssrc() { return static_cast<uint32_t>(FLAGS_ssrc); } | 68 static uint32_t Ssrc() { return static_cast<uint32_t>(FLAGS_ssrc); } |
| 58 static const bool ssrc_dummy = | 69 static const bool ssrc_dummy = |
| 59 google::RegisterFlagValidator(&FLAGS_ssrc, &ValidateSsrc); | 70 google::RegisterFlagValidator(&FLAGS_ssrc, &ValidateSsrc); |
| 60 | 71 |
| 72 DEFINE_uint64(ssrc_rtx, test::CallTest::kSendRtxSsrcs[0], "Incoming RTX SSRC"); |
| 73 static uint32_t SsrcRtx() { |
| 74 return static_cast<uint32_t>(FLAGS_ssrc_rtx); |
| 75 } |
| 76 static const bool ssrc_rtx_dummy = |
| 77 google::RegisterFlagValidator(&FLAGS_ssrc_rtx, &ValidateSsrc); |
| 78 |
| 61 static bool ValidateOptionalPayloadType(const char* flagname, | 79 static bool ValidateOptionalPayloadType(const char* flagname, |
| 62 int32_t payload_type) { | 80 int32_t payload_type) { |
| 63 return payload_type == -1 || ValidatePayloadType(flagname, payload_type); | 81 return payload_type == -1 || ValidatePayloadType(flagname, payload_type); |
| 64 } | 82 } |
| 65 | 83 |
| 66 // Flag for RED payload type. | 84 // Flag for RED payload type. |
| 67 DEFINE_int32(red_payload_type, -1, "RED payload type"); | 85 DEFINE_int32(red_payload_type, -1, "RED payload type"); |
| 68 static int RedPayloadType() { | 86 static int RedPayloadType() { |
| 69 return static_cast<int>(FLAGS_red_payload_type); | 87 return static_cast<int>(FLAGS_red_payload_type); |
| 70 } | 88 } |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 FileRenderPassthrough file_passthrough(flags::OutBase(), | 230 FileRenderPassthrough file_passthrough(flags::OutBase(), |
| 213 playback_video.get()); | 231 playback_video.get()); |
| 214 | 232 |
| 215 webrtc::RtcEventLogNullImpl event_log; | 233 webrtc::RtcEventLogNullImpl event_log; |
| 216 std::unique_ptr<Call> call(Call::Create(Call::Config(&event_log))); | 234 std::unique_ptr<Call> call(Call::Create(Call::Config(&event_log))); |
| 217 | 235 |
| 218 test::NullTransport transport; | 236 test::NullTransport transport; |
| 219 VideoReceiveStream::Config receive_config(&transport); | 237 VideoReceiveStream::Config receive_config(&transport); |
| 220 receive_config.rtp.remote_ssrc = flags::Ssrc(); | 238 receive_config.rtp.remote_ssrc = flags::Ssrc(); |
| 221 receive_config.rtp.local_ssrc = kReceiverLocalSsrc; | 239 receive_config.rtp.local_ssrc = kReceiverLocalSsrc; |
| 240 receive_config.rtp.rtx_ssrc = flags::SsrcRtx(); |
| 241 receive_config.rtp.rtx_payload_types[flags::PayloadType()] = |
| 242 flags::PayloadTypeRtx(); |
| 222 receive_config.rtp.ulpfec.ulpfec_payload_type = flags::FecPayloadType(); | 243 receive_config.rtp.ulpfec.ulpfec_payload_type = flags::FecPayloadType(); |
| 223 receive_config.rtp.ulpfec.red_payload_type = flags::RedPayloadType(); | 244 receive_config.rtp.ulpfec.red_payload_type = flags::RedPayloadType(); |
| 224 receive_config.rtp.nack.rtp_history_ms = 1000; | 245 receive_config.rtp.nack.rtp_history_ms = 1000; |
| 225 if (flags::TransmissionOffsetId() != -1) { | 246 if (flags::TransmissionOffsetId() != -1) { |
| 226 receive_config.rtp.extensions.push_back(RtpExtension( | 247 receive_config.rtp.extensions.push_back(RtpExtension( |
| 227 RtpExtension::kTimestampOffsetUri, flags::TransmissionOffsetId())); | 248 RtpExtension::kTimestampOffsetUri, flags::TransmissionOffsetId())); |
| 228 } | 249 } |
| 229 if (flags::AbsSendTimeId() != -1) { | 250 if (flags::AbsSendTimeId() != -1) { |
| 230 receive_config.rtp.extensions.push_back( | 251 receive_config.rtp.extensions.push_back( |
| 231 RtpExtension(RtpExtension::kAbsSendTimeUri, flags::AbsSendTimeId())); | 252 RtpExtension(RtpExtension::kAbsSendTimeUri, flags::AbsSendTimeId())); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 } | 348 } |
| 328 } // namespace webrtc | 349 } // namespace webrtc |
| 329 | 350 |
| 330 int main(int argc, char* argv[]) { | 351 int main(int argc, char* argv[]) { |
| 331 ::testing::InitGoogleTest(&argc, argv); | 352 ::testing::InitGoogleTest(&argc, argv); |
| 332 google::ParseCommandLineFlags(&argc, &argv, true); | 353 google::ParseCommandLineFlags(&argc, &argv, true); |
| 333 | 354 |
| 334 webrtc::test::RunTest(webrtc::RtpReplay); | 355 webrtc::test::RunTest(webrtc::RtpReplay); |
| 335 return 0; | 356 return 0; |
| 336 } | 357 } |
| OLD | NEW |