Making FakeNetworkPipe demux audio and video packets.

BUG=None

Review-Url: https://codereview.webrtc.org/2794243002
Cr-Commit-Position: refs/heads/master@{#17629}
diff --git a/webrtc/test/call_test.cc b/webrtc/test/call_test.cc
index 5c60895..5c0b42c 100644
--- a/webrtc/test/call_test.cc
+++ b/webrtc/test/call_test.cc
@@ -26,29 +26,6 @@
 const int kVideoRotationRtpExtensionId = 4;
 }
 
-void CallTest::PayloadDemuxer::SetReceiver(PacketReceiver* receiver) {
-  receiver_ = receiver;
-}
-
-PacketReceiver::DeliveryStatus CallTest::PayloadDemuxer::DeliverPacket(
-    MediaType media_type,
-    const uint8_t* packet,
-    size_t length,
-    const PacketTime& packet_time) {
-  if (media_type == MediaType::ANY) {
-    // This simplistic demux logic will not make much sense for RTCP
-    // packets, but it seems that doesn't matter.
-    RTC_CHECK_GE(length, 2);
-    uint8_t pt = packet[1] & 0x7f;
-    if (pt == kFakeVideoSendPayloadType || pt == kFlexfecPayloadType) {
-      media_type = MediaType::VIDEO;
-    } else {
-      media_type = MediaType::AUDIO;
-    }
-  }
-  return receiver_->DeliverPacket(media_type, packet, length, packet_time);
-}
-
 CallTest::CallTest()
     : clock_(Clock::GetRealTimeClock()),
       event_log_(RtcEventLog::CreateNull()),
@@ -99,20 +76,8 @@
   send_transport_.reset(test->CreateSendTransport(sender_call_.get()));
 
   if (test->ShouldCreateReceivers()) {
-    // For tests using only video or only audio, we rely on each test
-    // configuring the underlying FakeNetworkPipe with the right media
-    // type. But for tests sending both video and audio over the same
-    // FakeNetworkPipe, we need to "demux", i.e., setting the
-    // MediaType based on RTP payload type.
-    if (num_video_streams_ > 0 && num_audio_streams_ > 0) {
-      receive_demuxer_.SetReceiver(receiver_call_->Receiver());
-      send_transport_->SetReceiver(&receive_demuxer_);
-      send_demuxer_.SetReceiver(sender_call_->Receiver());
-      receive_transport_->SetReceiver(&send_demuxer_);
-    } else {
-      send_transport_->SetReceiver(receiver_call_->Receiver());
-      receive_transport_->SetReceiver(sender_call_->Receiver());
-    }
+    send_transport_->SetReceiver(receiver_call_->Receiver());
+    receive_transport_->SetReceiver(sender_call_->Receiver());
     if (num_video_streams_ > 0)
       receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
     if (num_audio_streams_ > 0)
@@ -300,7 +265,7 @@
     audio_config.voe_channel_id = voe_recv_.channel_id;
     audio_config.rtp.remote_ssrc = audio_send_config_.rtp.ssrc;
     audio_config.decoder_factory = decoder_factory_;
-    audio_config.decoder_map = {{120, {"opus", 48000, 2}}};
+    audio_config.decoder_map = {{kAudioSendPayloadType, {"opus", 48000, 2}}};
     audio_receive_configs_.push_back(audio_config);
   }
 
@@ -462,6 +427,16 @@
 const uint32_t CallTest::kReceiverLocalAudioSsrc = 0x1234567;
 const int CallTest::kNackRtpHistoryMs = 1000;
 
+const std::map<uint8_t, MediaType> CallTest::payload_type_map_ = {
+    {CallTest::kVideoSendPayloadType, MediaType::VIDEO},
+    {CallTest::kFakeVideoSendPayloadType, MediaType::VIDEO},
+    {CallTest::kSendRtxPayloadType, MediaType::VIDEO},
+    {CallTest::kRedPayloadType, MediaType::VIDEO},
+    {CallTest::kRtxRedPayloadType, MediaType::VIDEO},
+    {CallTest::kUlpfecPayloadType, MediaType::VIDEO},
+    {CallTest::kFlexfecPayloadType, MediaType::VIDEO},
+    {CallTest::kAudioSendPayloadType, MediaType::AUDIO}};
+
 BaseTest::BaseTest() : event_log_(RtcEventLog::CreateNull()) {}
 
 BaseTest::BaseTest(unsigned int timeout_ms)
@@ -493,28 +468,15 @@
 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {
 }
 
-MediaType BaseTest::SelectMediaType() {
-  if (GetNumVideoStreams() > 0) {
-    if (GetNumAudioStreams() > 0) {
-      // Relies on PayloadDemuxer to set media type from payload type.
-      return MediaType::ANY;
-    } else {
-      return MediaType::VIDEO;
-    }
-  } else {
-    return MediaType::AUDIO;
-  }
-}
-
 test::PacketTransport* BaseTest::CreateSendTransport(Call* sender_call) {
   return new PacketTransport(sender_call, this, test::PacketTransport::kSender,
-                             SelectMediaType(),
+                             CallTest::payload_type_map_,
                              FakeNetworkPipe::Config());
 }
 
 test::PacketTransport* BaseTest::CreateReceiveTransport() {
   return new PacketTransport(nullptr, this, test::PacketTransport::kReceiver,
-                             SelectMediaType(),
+                             CallTest::payload_type_map_,
                              FakeNetworkPipe::Config());
 }