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

Side by Side Diff: webrtc/test/call_test.cc

Issue 2794243002: Making FakeNetworkPipe demux audio and video packets. (Closed)
Patch Set: fixing android Created 3 years, 8 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
OLDNEW
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 "webrtc/test/call_test.h" 11 #include "webrtc/test/call_test.h"
12 12
13 #include <algorithm> 13 #include <algorithm>
14 14
15 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h" 15 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
16 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
17 #include "webrtc/config.h" 17 #include "webrtc/config.h"
18 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h" 18 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h"
19 #include "webrtc/test/testsupport/fileutils.h" 19 #include "webrtc/test/testsupport/fileutils.h"
20 #include "webrtc/voice_engine/include/voe_base.h" 20 #include "webrtc/voice_engine/include/voe_base.h"
21 21
22 namespace webrtc { 22 namespace webrtc {
23 namespace test { 23 namespace test {
24 24
25 namespace { 25 namespace {
26 const int kVideoRotationRtpExtensionId = 4; 26 const int kVideoRotationRtpExtensionId = 4;
27 } 27 }
28 28
29 void CallTest::PayloadDemuxer::SetReceiver(PacketReceiver* receiver) {
30 receiver_ = receiver;
31 }
32
33 PacketReceiver::DeliveryStatus CallTest::PayloadDemuxer::DeliverPacket(
34 MediaType media_type,
35 const uint8_t* packet,
36 size_t length,
37 const PacketTime& packet_time) {
38 if (media_type == MediaType::ANY) {
39 // This simplistic demux logic will not make much sense for RTCP
40 // packets, but it seems that doesn't matter.
41 RTC_CHECK_GE(length, 2);
42 uint8_t pt = packet[1] & 0x7f;
43 if (pt == kFakeVideoSendPayloadType || pt == kFlexfecPayloadType) {
44 media_type = MediaType::VIDEO;
45 } else {
46 media_type = MediaType::AUDIO;
47 }
48 }
49 return receiver_->DeliverPacket(media_type, packet, length, packet_time);
50 }
51
52 CallTest::CallTest() 29 CallTest::CallTest()
53 : clock_(Clock::GetRealTimeClock()), 30 : clock_(Clock::GetRealTimeClock()),
54 event_log_(RtcEventLog::CreateNull()), 31 event_log_(RtcEventLog::CreateNull()),
55 video_send_config_(nullptr), 32 video_send_config_(nullptr),
56 video_send_stream_(nullptr), 33 video_send_stream_(nullptr),
57 audio_send_config_(nullptr), 34 audio_send_config_(nullptr),
58 audio_send_stream_(nullptr), 35 audio_send_stream_(nullptr),
59 fake_encoder_(clock_), 36 fake_encoder_(clock_),
60 num_video_streams_(1), 37 num_video_streams_(1),
61 num_audio_streams_(0), 38 num_audio_streams_(0),
(...skipping 30 matching lines...) Expand all
92 audio_state_config.audio_mixer = AudioMixerImpl::Create(); 69 audio_state_config.audio_mixer = AudioMixerImpl::Create();
93 recv_config.audio_state = AudioState::Create(audio_state_config); 70 recv_config.audio_state = AudioState::Create(audio_state_config);
94 } 71 }
95 CreateReceiverCall(recv_config); 72 CreateReceiverCall(recv_config);
96 } 73 }
97 test->OnCallsCreated(sender_call_.get(), receiver_call_.get()); 74 test->OnCallsCreated(sender_call_.get(), receiver_call_.get());
98 receive_transport_.reset(test->CreateReceiveTransport()); 75 receive_transport_.reset(test->CreateReceiveTransport());
99 send_transport_.reset(test->CreateSendTransport(sender_call_.get())); 76 send_transport_.reset(test->CreateSendTransport(sender_call_.get()));
100 77
101 if (test->ShouldCreateReceivers()) { 78 if (test->ShouldCreateReceivers()) {
102 // For tests using only video or only audio, we rely on each test 79 send_transport_->SetReceiver(receiver_call_->Receiver());
103 // configuring the underlying FakeNetworkPipe with the right media 80 receive_transport_->SetReceiver(sender_call_->Receiver());
104 // type. But for tests sending both video and audio over the same
105 // FakeNetworkPipe, we need to "demux", i.e., setting the
106 // MediaType based on RTP payload type.
107 if (num_video_streams_ > 0 && num_audio_streams_ > 0) {
108 receive_demuxer_.SetReceiver(receiver_call_->Receiver());
109 send_transport_->SetReceiver(&receive_demuxer_);
110 send_demuxer_.SetReceiver(sender_call_->Receiver());
111 receive_transport_->SetReceiver(&send_demuxer_);
112 } else {
113 send_transport_->SetReceiver(receiver_call_->Receiver());
114 receive_transport_->SetReceiver(sender_call_->Receiver());
115 }
116 if (num_video_streams_ > 0) 81 if (num_video_streams_ > 0)
117 receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); 82 receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
118 if (num_audio_streams_ > 0) 83 if (num_audio_streams_ > 0)
119 receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp); 84 receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp);
120 } else { 85 } else {
121 // Sender-only call delivers to itself. 86 // Sender-only call delivers to itself.
122 send_transport_->SetReceiver(sender_call_->Receiver()); 87 send_transport_->SetReceiver(sender_call_->Receiver());
123 receive_transport_->SetReceiver(nullptr); 88 receive_transport_->SetReceiver(nullptr);
124 } 89 }
125 90
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 258
294 RTC_DCHECK_GE(1, num_audio_streams_); 259 RTC_DCHECK_GE(1, num_audio_streams_);
295 if (num_audio_streams_ == 1) { 260 if (num_audio_streams_ == 1) {
296 RTC_DCHECK_LE(0, voe_send_.channel_id); 261 RTC_DCHECK_LE(0, voe_send_.channel_id);
297 AudioReceiveStream::Config audio_config; 262 AudioReceiveStream::Config audio_config;
298 audio_config.rtp.local_ssrc = kReceiverLocalAudioSsrc; 263 audio_config.rtp.local_ssrc = kReceiverLocalAudioSsrc;
299 audio_config.rtcp_send_transport = rtcp_send_transport; 264 audio_config.rtcp_send_transport = rtcp_send_transport;
300 audio_config.voe_channel_id = voe_recv_.channel_id; 265 audio_config.voe_channel_id = voe_recv_.channel_id;
301 audio_config.rtp.remote_ssrc = audio_send_config_.rtp.ssrc; 266 audio_config.rtp.remote_ssrc = audio_send_config_.rtp.ssrc;
302 audio_config.decoder_factory = decoder_factory_; 267 audio_config.decoder_factory = decoder_factory_;
303 audio_config.decoder_map = {{120, {"opus", 48000, 2}}}; 268 audio_config.decoder_map = {{kAudioSendPayloadType, {"opus", 48000, 2}}};
304 audio_receive_configs_.push_back(audio_config); 269 audio_receive_configs_.push_back(audio_config);
305 } 270 }
306 271
307 // TODO(brandtr): Update this when we support multistream protection. 272 // TODO(brandtr): Update this when we support multistream protection.
308 RTC_DCHECK(num_flexfec_streams_ <= 1); 273 RTC_DCHECK(num_flexfec_streams_ <= 1);
309 if (num_flexfec_streams_ == 1) { 274 if (num_flexfec_streams_ == 1) {
310 FlexfecReceiveStream::Config config(rtcp_send_transport); 275 FlexfecReceiveStream::Config config(rtcp_send_transport);
311 config.payload_type = kFlexfecPayloadType; 276 config.payload_type = kFlexfecPayloadType;
312 config.remote_ssrc = kFlexfecSendSsrc; 277 config.remote_ssrc = kFlexfecSendSsrc;
313 config.protected_media_ssrcs = {kVideoSendSsrcs[0]}; 278 config.protected_media_ssrcs = {kVideoSendSsrcs[0]};
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 const uint32_t CallTest::kSendRtxSsrcs[kNumSsrcs] = {0xBADCAFD, 0xBADCAFE, 420 const uint32_t CallTest::kSendRtxSsrcs[kNumSsrcs] = {0xBADCAFD, 0xBADCAFE,
456 0xBADCAFF}; 421 0xBADCAFF};
457 const uint32_t CallTest::kVideoSendSsrcs[kNumSsrcs] = {0xC0FFED, 0xC0FFEE, 422 const uint32_t CallTest::kVideoSendSsrcs[kNumSsrcs] = {0xC0FFED, 0xC0FFEE,
458 0xC0FFEF}; 423 0xC0FFEF};
459 const uint32_t CallTest::kAudioSendSsrc = 0xDEADBEEF; 424 const uint32_t CallTest::kAudioSendSsrc = 0xDEADBEEF;
460 const uint32_t CallTest::kFlexfecSendSsrc = 0xBADBEEF; 425 const uint32_t CallTest::kFlexfecSendSsrc = 0xBADBEEF;
461 const uint32_t CallTest::kReceiverLocalVideoSsrc = 0x123456; 426 const uint32_t CallTest::kReceiverLocalVideoSsrc = 0x123456;
462 const uint32_t CallTest::kReceiverLocalAudioSsrc = 0x1234567; 427 const uint32_t CallTest::kReceiverLocalAudioSsrc = 0x1234567;
463 const int CallTest::kNackRtpHistoryMs = 1000; 428 const int CallTest::kNackRtpHistoryMs = 1000;
464 429
430 const std::map<uint8_t, MediaType> CallTest::payload_type_map_ = {
431 {CallTest::kVideoSendPayloadType, MediaType::VIDEO},
432 {CallTest::kFakeVideoSendPayloadType, MediaType::VIDEO},
433 {CallTest::kSendRtxPayloadType, MediaType::VIDEO},
434 {CallTest::kRedPayloadType, MediaType::VIDEO},
435 {CallTest::kRtxRedPayloadType, MediaType::VIDEO},
436 {CallTest::kUlpfecPayloadType, MediaType::VIDEO},
437 {CallTest::kFlexfecPayloadType, MediaType::VIDEO},
438 {CallTest::kAudioSendPayloadType, MediaType::AUDIO}};
439
465 BaseTest::BaseTest() : event_log_(RtcEventLog::CreateNull()) {} 440 BaseTest::BaseTest() : event_log_(RtcEventLog::CreateNull()) {}
466 441
467 BaseTest::BaseTest(unsigned int timeout_ms) 442 BaseTest::BaseTest(unsigned int timeout_ms)
468 : RtpRtcpObserver(timeout_ms), event_log_(RtcEventLog::CreateNull()) {} 443 : RtpRtcpObserver(timeout_ms), event_log_(RtcEventLog::CreateNull()) {}
469 444
470 BaseTest::~BaseTest() { 445 BaseTest::~BaseTest() {
471 } 446 }
472 447
473 std::unique_ptr<FakeAudioDevice::Capturer> BaseTest::CreateCapturer() { 448 std::unique_ptr<FakeAudioDevice::Capturer> BaseTest::CreateCapturer() {
474 return FakeAudioDevice::CreatePulsedNoiseCapturer(256, 48000); 449 return FakeAudioDevice::CreatePulsedNoiseCapturer(256, 48000);
(...skipping 11 matching lines...) Expand all
486 return Call::Config(event_log_.get()); 461 return Call::Config(event_log_.get());
487 } 462 }
488 463
489 Call::Config BaseTest::GetReceiverCallConfig() { 464 Call::Config BaseTest::GetReceiverCallConfig() {
490 return Call::Config(event_log_.get()); 465 return Call::Config(event_log_.get());
491 } 466 }
492 467
493 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) { 468 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {
494 } 469 }
495 470
496 MediaType BaseTest::SelectMediaType() {
497 if (GetNumVideoStreams() > 0) {
498 if (GetNumAudioStreams() > 0) {
499 // Relies on PayloadDemuxer to set media type from payload type.
500 return MediaType::ANY;
501 } else {
502 return MediaType::VIDEO;
503 }
504 } else {
505 return MediaType::AUDIO;
506 }
507 }
508
509 test::PacketTransport* BaseTest::CreateSendTransport(Call* sender_call) { 471 test::PacketTransport* BaseTest::CreateSendTransport(Call* sender_call) {
510 return new PacketTransport(sender_call, this, test::PacketTransport::kSender, 472 return new PacketTransport(sender_call, this, test::PacketTransport::kSender,
511 SelectMediaType(), 473 CallTest::payload_type_map_,
512 FakeNetworkPipe::Config()); 474 FakeNetworkPipe::Config());
513 } 475 }
514 476
515 test::PacketTransport* BaseTest::CreateReceiveTransport() { 477 test::PacketTransport* BaseTest::CreateReceiveTransport() {
516 return new PacketTransport(nullptr, this, test::PacketTransport::kReceiver, 478 return new PacketTransport(nullptr, this, test::PacketTransport::kReceiver,
517 SelectMediaType(), 479 CallTest::payload_type_map_,
518 FakeNetworkPipe::Config()); 480 FakeNetworkPipe::Config());
519 } 481 }
520 482
521 size_t BaseTest::GetNumVideoStreams() const { 483 size_t BaseTest::GetNumVideoStreams() const {
522 return 1; 484 return 1;
523 } 485 }
524 486
525 size_t BaseTest::GetNumAudioStreams() const { 487 size_t BaseTest::GetNumAudioStreams() const {
526 return 0; 488 return 0;
527 } 489 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 537
576 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) { 538 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) {
577 } 539 }
578 540
579 bool EndToEndTest::ShouldCreateReceivers() const { 541 bool EndToEndTest::ShouldCreateReceivers() const {
580 return true; 542 return true;
581 } 543 }
582 544
583 } // namespace test 545 } // namespace test
584 } // namespace webrtc 546 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698