Support for two audio codec lists down into WebRtcVoiceEngine.

Added the plumbing necessary to get two different lists of codecs from
WebRtcVoiceEngine up to MediaSessionDescriptionFactory.

This should be the last step in this set of CLs. Once
https://codereview.webrtc.org/1991233004/ has landed, it's possible to
implement the ReceiveCodecs getter with the info from the
AudioDecoderFactory. The factory needs to be updated to actually
produce the correct list, as well.

BUG=webrtc:5805

Review-Url: https://codereview.webrtc.org/2013053002
Cr-Commit-Position: refs/heads/master@{#13131}
diff --git a/webrtc/pc/channelmanager.cc b/webrtc/pc/channelmanager.cc
index 334a712..afac930 100644
--- a/webrtc/pc/channelmanager.cc
+++ b/webrtc/pc/channelmanager.cc
@@ -100,15 +100,14 @@
   }
 }
 
-void ChannelManager::GetSupportedAudioCodecs(
+void ChannelManager::GetSupportedAudioSendCodecs(
     std::vector<AudioCodec>* codecs) const {
-  codecs->clear();
+  *codecs = media_engine_->audio_send_codecs();
+}
 
-  for (std::vector<AudioCodec>::const_iterator it =
-           media_engine_->audio_codecs().begin();
-      it != media_engine_->audio_codecs().end(); ++it) {
-    codecs->push_back(*it);
-  }
+void ChannelManager::GetSupportedAudioReceiveCodecs(
+    std::vector<AudioCodec>* codecs) const {
+  *codecs = media_engine_->audio_recv_codecs();
 }
 
 void ChannelManager::GetSupportedAudioRtpHeaderExtensions(
diff --git a/webrtc/pc/channelmanager.h b/webrtc/pc/channelmanager.h
index 3b0c0e9..16adf87 100644
--- a/webrtc/pc/channelmanager.h
+++ b/webrtc/pc/channelmanager.h
@@ -72,7 +72,8 @@
 
   // Retrieves the list of supported audio & video codec types.
   // Can be called before starting the media engine.
-  void GetSupportedAudioCodecs(std::vector<AudioCodec>* codecs) const;
+  void GetSupportedAudioSendCodecs(std::vector<AudioCodec>* codecs) const;
+  void GetSupportedAudioReceiveCodecs(std::vector<AudioCodec>* codecs) const;
   void GetSupportedAudioRtpHeaderExtensions(RtpHeaderExtensions* ext) const;
   void GetSupportedVideoCodecs(std::vector<VideoCodec>* codecs) const;
   void GetSupportedVideoRtpHeaderExtensions(RtpHeaderExtensions* ext) const;
diff --git a/webrtc/pc/mediasession.cc b/webrtc/pc/mediasession.cc
index 5d9af98..937a2c1 100644
--- a/webrtc/pc/mediasession.cc
+++ b/webrtc/pc/mediasession.cc
@@ -1273,16 +1273,19 @@
     : secure_(SEC_DISABLED),
       add_legacy_(true),
       transport_desc_factory_(transport_desc_factory) {
-  channel_manager->GetSupportedAudioCodecs(&audio_sendrecv_codecs_);
+  channel_manager->GetSupportedAudioSendCodecs(&audio_send_codecs_);
+  channel_manager->GetSupportedAudioReceiveCodecs(&audio_recv_codecs_);
+  channel_manager->GetSupportedAudioSendCodecs(&audio_send_codecs_);
   channel_manager->GetSupportedAudioRtpHeaderExtensions(&audio_rtp_extensions_);
   channel_manager->GetSupportedVideoCodecs(&video_codecs_);
   channel_manager->GetSupportedVideoRtpHeaderExtensions(&video_rtp_extensions_);
   channel_manager->GetSupportedDataCodecs(&data_codecs_);
-  audio_send_codecs_ = audio_sendrecv_codecs_;
-  audio_recv_codecs_ = audio_sendrecv_codecs_;
+  NegotiateCodecs(audio_recv_codecs_, audio_send_codecs_,
+                  &audio_sendrecv_codecs_);
 }
 
-const AudioCodecs& MediaSessionDescriptionFactory::audio_codecs() const {
+const AudioCodecs& MediaSessionDescriptionFactory::audio_sendrecv_codecs()
+    const {
   return audio_sendrecv_codecs_;
 }
 
diff --git a/webrtc/pc/mediasession.h b/webrtc/pc/mediasession.h
index 7a43b00..34354dc 100644
--- a/webrtc/pc/mediasession.h
+++ b/webrtc/pc/mediasession.h
@@ -428,7 +428,7 @@
   MediaSessionDescriptionFactory(ChannelManager* cmanager,
                                  const TransportDescriptionFactory* factory);
 
-  const AudioCodecs& audio_codecs() const;
+  const AudioCodecs& audio_sendrecv_codecs() const;
   const AudioCodecs& audio_send_codecs() const;
   const AudioCodecs& audio_recv_codecs() const;
   void set_audio_codecs(const AudioCodecs& send_codecs,
diff --git a/webrtc/pc/mediasession_unittest.cc b/webrtc/pc/mediasession_unittest.cc
index c898315..8ad6526 100644
--- a/webrtc/pc/mediasession_unittest.cc
+++ b/webrtc/pc/mediasession_unittest.cc
@@ -474,7 +474,7 @@
   const AudioContentDescription* acd =
       static_cast<const AudioContentDescription*>(ac->description);
   EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
-  EXPECT_EQ(f1_.audio_codecs(), acd->codecs());
+  EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
   EXPECT_NE(0U, acd->first_ssrc());             // a random nonzero ssrc
   EXPECT_EQ(kAutoBandwidth, acd->bandwidth());  // default bandwidth (auto)
   EXPECT_TRUE(acd->rtcp_mux());                 // rtcp-mux defaults on
@@ -500,7 +500,7 @@
   const VideoContentDescription* vcd =
       static_cast<const VideoContentDescription*>(vc->description);
   EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
-  EXPECT_EQ(f1_.audio_codecs(), acd->codecs());
+  EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
   EXPECT_NE(0U, acd->first_ssrc());             // a random nonzero ssrc
   EXPECT_EQ(kAutoBandwidth, acd->bandwidth());  // default bandwidth (auto)
   EXPECT_TRUE(acd->rtcp_mux());                 // rtcp-mux defaults on
@@ -520,7 +520,7 @@
 // duplicate RTP payload types.
 TEST_F(MediaSessionDescriptionFactoryTest, TestBundleOfferWithSameCodecPlType) {
   const VideoCodec& offered_video_codec = f2_.video_codecs()[0];
-  const AudioCodec& offered_audio_codec = f2_.audio_codecs()[0];
+  const AudioCodec& offered_audio_codec = f2_.audio_sendrecv_codecs()[0];
   const DataCodec& offered_data_codec = f2_.data_codecs()[0];
   ASSERT_EQ(offered_video_codec.id, offered_audio_codec.id);
   ASSERT_EQ(offered_video_codec.id, offered_data_codec.id);
@@ -607,7 +607,7 @@
   const DataContentDescription* dcd =
       static_cast<const DataContentDescription*>(dc->description);
   EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
-  EXPECT_EQ(f1_.audio_codecs(), acd->codecs());
+  EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
   EXPECT_NE(0U, acd->first_ssrc());             // a random nonzero ssrc
   EXPECT_EQ(kAutoBandwidth, acd->bandwidth());  // default bandwidth (auto)
   EXPECT_TRUE(acd->rtcp_mux());                 // rtcp-mux defaults on
@@ -1222,7 +1222,7 @@
   const DataContentDescription* dcd =
       static_cast<const DataContentDescription*>(dc->description);
   EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
-  EXPECT_EQ(f1_.audio_codecs(), acd->codecs());
+  EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
 
   const StreamParamsVec& audio_streams = acd->streams();
   ASSERT_EQ(2U, audio_streams.size());
@@ -2486,25 +2486,25 @@
   sf.set_audio_codecs(send_codecs, recv_codecs);
   EXPECT_TRUE(sf.audio_send_codecs() == send_codecs);
   EXPECT_TRUE(sf.audio_recv_codecs() == recv_codecs);
-  EXPECT_TRUE(sf.audio_codecs() == sendrecv_codecs);
+  EXPECT_TRUE(sf.audio_sendrecv_codecs() == sendrecv_codecs);
 
   // Test empty send codecs list
   sf.set_audio_codecs(no_codecs, recv_codecs);
   EXPECT_TRUE(sf.audio_send_codecs() == no_codecs);
   EXPECT_TRUE(sf.audio_recv_codecs() == recv_codecs);
-  EXPECT_TRUE(sf.audio_codecs() == no_codecs);
+  EXPECT_TRUE(sf.audio_sendrecv_codecs() == no_codecs);
 
   // Test empty recv codecs list
   sf.set_audio_codecs(send_codecs, no_codecs);
   EXPECT_TRUE(sf.audio_send_codecs() == send_codecs);
   EXPECT_TRUE(sf.audio_recv_codecs() == no_codecs);
-  EXPECT_TRUE(sf.audio_codecs() == no_codecs);
+  EXPECT_TRUE(sf.audio_sendrecv_codecs() == no_codecs);
 
   // Test all empty codec lists
   sf.set_audio_codecs(no_codecs, no_codecs);
   EXPECT_TRUE(sf.audio_send_codecs() == no_codecs);
   EXPECT_TRUE(sf.audio_recv_codecs() == no_codecs);
-  EXPECT_TRUE(sf.audio_codecs() == no_codecs);
+  EXPECT_TRUE(sf.audio_sendrecv_codecs() == no_codecs);
 }
 
 namespace {