| Index: webrtc/media/engine/webrtcvoiceengine.cc
|
| diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
|
| index 31a9d27184c785e40d286779b1e1199b4c3e7d12..7c6d7940f685cd9e11aa4f90227b93582ccf6ce0 100644
|
| --- a/webrtc/media/engine/webrtcvoiceengine.cc
|
| +++ b/webrtc/media/engine/webrtcvoiceengine.cc
|
| @@ -129,6 +129,13 @@
|
| std::stringstream ss;
|
| ss << codec.name << "/" << codec.clockrate << "/" << codec.channels
|
| << " (" << codec.id << ")";
|
| + return ss.str();
|
| +}
|
| +
|
| +std::string ToString(const webrtc::CodecInst& codec) {
|
| + std::stringstream ss;
|
| + ss << codec.plname << "/" << codec.plfreq << "/" << codec.channels
|
| + << " (" << codec.pltype << ")";
|
| return ss.str();
|
| }
|
|
|
| @@ -1459,8 +1466,7 @@
|
| const std::vector<webrtc::RtpExtension>& extensions,
|
| webrtc::Call* call,
|
| webrtc::Transport* rtcp_send_transport,
|
| - const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
|
| - const std::map<int, webrtc::SdpAudioFormat>& decoder_map)
|
| + const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory)
|
| : call_(call), config_() {
|
| RTC_DCHECK_GE(ch, 0);
|
| RTC_DCHECK(call);
|
| @@ -1473,7 +1479,6 @@
|
| config_.voe_channel_id = ch;
|
| config_.sync_group = sync_group;
|
| config_.decoder_factory = decoder_factory;
|
| - config_.decoder_map = decoder_map;
|
| RecreateAudioReceiveStream();
|
| }
|
|
|
| @@ -1862,9 +1867,8 @@
|
| ChangePlayout(false);
|
| }
|
|
|
| - decoder_map_ = std::move(decoder_map);
|
| for (auto& kv : recv_streams_) {
|
| - kv.second->RecreateAudioReceiveStream(decoder_map_);
|
| + kv.second->RecreateAudioReceiveStream(decoder_map);
|
| }
|
| recv_codecs_ = codecs;
|
|
|
| @@ -2221,12 +2225,38 @@
|
| return false;
|
| }
|
|
|
| + // Turn off all supported codecs.
|
| + // TODO(solenberg): Remove once "no codecs" is the default state of a stream.
|
| + for (webrtc::CodecInst voe_codec : webrtc::acm2::RentACodec::Database()) {
|
| + voe_codec.pltype = -1;
|
| + if (engine()->voe()->codec()->SetRecPayloadType(channel, voe_codec) == -1) {
|
| + LOG_RTCERR2(SetRecPayloadType, channel, ToString(voe_codec));
|
| + DeleteVoEChannel(channel);
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + // Only enable those configured for this channel.
|
| + for (const auto& codec : recv_codecs_) {
|
| + webrtc::CodecInst voe_codec = {0};
|
| + if (WebRtcVoiceEngine::ToCodecInst(codec, &voe_codec)) {
|
| + voe_codec.pltype = codec.id;
|
| + if (engine()->voe()->codec()->SetRecPayloadType(
|
| + channel, voe_codec) == -1) {
|
| + LOG_RTCERR2(SetRecPayloadType, channel, ToString(voe_codec));
|
| + DeleteVoEChannel(channel);
|
| + return false;
|
| + }
|
| + }
|
| + }
|
| +
|
| recv_streams_.insert(std::make_pair(
|
| - ssrc,
|
| - new WebRtcAudioReceiveStream(
|
| - channel, ssrc, receiver_reports_ssrc_, recv_transport_cc_enabled_,
|
| - recv_nack_enabled_, sp.sync_label, recv_rtp_extensions_, call_, this,
|
| - engine()->decoder_factory_, decoder_map_)));
|
| + ssrc, new WebRtcAudioReceiveStream(channel, ssrc, receiver_reports_ssrc_,
|
| + recv_transport_cc_enabled_,
|
| + recv_nack_enabled_,
|
| + sp.sync_label, recv_rtp_extensions_,
|
| + call_, this,
|
| + engine()->decoder_factory_)));
|
| recv_streams_[ssrc]->SetPlayout(playout_);
|
|
|
| return true;
|
|
|