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

Side by Side Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2686043006: WebRtcVoiceMediaChannel::AddRecvStream: Don't call SetRecPayloadType (Closed)
Patch Set: rebase Created 3 years, 9 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) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 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
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 } 125 }
126 126
127 // Dumps an AudioCodec in RFC 2327-ish format. 127 // Dumps an AudioCodec in RFC 2327-ish format.
128 std::string ToString(const AudioCodec& codec) { 128 std::string ToString(const AudioCodec& codec) {
129 std::stringstream ss; 129 std::stringstream ss;
130 ss << codec.name << "/" << codec.clockrate << "/" << codec.channels 130 ss << codec.name << "/" << codec.clockrate << "/" << codec.channels
131 << " (" << codec.id << ")"; 131 << " (" << codec.id << ")";
132 return ss.str(); 132 return ss.str();
133 } 133 }
134 134
135 std::string ToString(const webrtc::CodecInst& codec) {
136 std::stringstream ss;
137 ss << codec.plname << "/" << codec.plfreq << "/" << codec.channels
138 << " (" << codec.pltype << ")";
139 return ss.str();
140 }
141
142 bool IsCodec(const AudioCodec& codec, const char* ref_name) { 135 bool IsCodec(const AudioCodec& codec, const char* ref_name) {
143 return (_stricmp(codec.name.c_str(), ref_name) == 0); 136 return (_stricmp(codec.name.c_str(), ref_name) == 0);
144 } 137 }
145 138
146 bool IsCodec(const webrtc::CodecInst& codec, const char* ref_name) { 139 bool IsCodec(const webrtc::CodecInst& codec, const char* ref_name) {
147 return (_stricmp(codec.plname, ref_name) == 0); 140 return (_stricmp(codec.plname, ref_name) == 0);
148 } 141 }
149 142
150 bool FindCodec(const std::vector<AudioCodec>& codecs, 143 bool FindCodec(const std::vector<AudioCodec>& codecs,
151 const AudioCodec& codec, 144 const AudioCodec& codec,
(...skipping 1307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 WebRtcAudioReceiveStream( 1452 WebRtcAudioReceiveStream(
1460 int ch, 1453 int ch,
1461 uint32_t remote_ssrc, 1454 uint32_t remote_ssrc,
1462 uint32_t local_ssrc, 1455 uint32_t local_ssrc,
1463 bool use_transport_cc, 1456 bool use_transport_cc,
1464 bool use_nack, 1457 bool use_nack,
1465 const std::string& sync_group, 1458 const std::string& sync_group,
1466 const std::vector<webrtc::RtpExtension>& extensions, 1459 const std::vector<webrtc::RtpExtension>& extensions,
1467 webrtc::Call* call, 1460 webrtc::Call* call,
1468 webrtc::Transport* rtcp_send_transport, 1461 webrtc::Transport* rtcp_send_transport,
1469 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory) 1462 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
1463 const std::map<int, webrtc::SdpAudioFormat>& decoder_map)
1470 : call_(call), config_() { 1464 : call_(call), config_() {
1471 RTC_DCHECK_GE(ch, 0); 1465 RTC_DCHECK_GE(ch, 0);
1472 RTC_DCHECK(call); 1466 RTC_DCHECK(call);
1473 config_.rtp.remote_ssrc = remote_ssrc; 1467 config_.rtp.remote_ssrc = remote_ssrc;
1474 config_.rtp.local_ssrc = local_ssrc; 1468 config_.rtp.local_ssrc = local_ssrc;
1475 config_.rtp.transport_cc = use_transport_cc; 1469 config_.rtp.transport_cc = use_transport_cc;
1476 config_.rtp.nack.rtp_history_ms = use_nack ? kNackRtpHistoryMs : 0; 1470 config_.rtp.nack.rtp_history_ms = use_nack ? kNackRtpHistoryMs : 0;
1477 config_.rtp.extensions = extensions; 1471 config_.rtp.extensions = extensions;
1478 config_.rtcp_send_transport = rtcp_send_transport; 1472 config_.rtcp_send_transport = rtcp_send_transport;
1479 config_.voe_channel_id = ch; 1473 config_.voe_channel_id = ch;
1480 config_.sync_group = sync_group; 1474 config_.sync_group = sync_group;
1481 config_.decoder_factory = decoder_factory; 1475 config_.decoder_factory = decoder_factory;
1476 config_.decoder_map = decoder_map;
1482 RecreateAudioReceiveStream(); 1477 RecreateAudioReceiveStream();
1483 } 1478 }
1484 1479
1485 ~WebRtcAudioReceiveStream() { 1480 ~WebRtcAudioReceiveStream() {
1486 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1481 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1487 call_->DestroyAudioReceiveStream(stream_); 1482 call_->DestroyAudioReceiveStream(stream_);
1488 } 1483 }
1489 1484
1490 void RecreateAudioReceiveStream(uint32_t local_ssrc) { 1485 void RecreateAudioReceiveStream(uint32_t local_ssrc) {
1491 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1486 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
1860 } 1855 }
1861 decoder_map.insert({codec.id, std::move(format)}); 1856 decoder_map.insert({codec.id, std::move(format)});
1862 } 1857 }
1863 1858
1864 if (playout_) { 1859 if (playout_) {
1865 // Receive codecs can not be changed while playing. So we temporarily 1860 // Receive codecs can not be changed while playing. So we temporarily
1866 // pause playout. 1861 // pause playout.
1867 ChangePlayout(false); 1862 ChangePlayout(false);
1868 } 1863 }
1869 1864
1865 decoder_map_ = std::move(decoder_map);
1870 for (auto& kv : recv_streams_) { 1866 for (auto& kv : recv_streams_) {
1871 kv.second->RecreateAudioReceiveStream(decoder_map); 1867 kv.second->RecreateAudioReceiveStream(decoder_map_);
1872 } 1868 }
1873 recv_codecs_ = codecs; 1869 recv_codecs_ = codecs;
1874 1870
1875 if (desired_playout_ && !playout_) { 1871 if (desired_playout_ && !playout_) {
1876 ChangePlayout(desired_playout_); 1872 ChangePlayout(desired_playout_);
1877 } 1873 }
1878 return true; 1874 return true;
1879 } 1875 }
1880 1876
1881 // Utility function called from SetSendParameters() to extract current send 1877 // Utility function called from SetSendParameters() to extract current send
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 LOG(LS_ERROR) << "Stream already exists with ssrc " << ssrc; 2214 LOG(LS_ERROR) << "Stream already exists with ssrc " << ssrc;
2219 return false; 2215 return false;
2220 } 2216 }
2221 2217
2222 // Create a new channel for receiving audio data. 2218 // Create a new channel for receiving audio data.
2223 const int channel = CreateVoEChannel(); 2219 const int channel = CreateVoEChannel();
2224 if (channel == -1) { 2220 if (channel == -1) {
2225 return false; 2221 return false;
2226 } 2222 }
2227 2223
2228 // Turn off all supported codecs.
2229 // TODO(solenberg): Remove once "no codecs" is the default state of a stream.
2230 for (webrtc::CodecInst voe_codec : webrtc::acm2::RentACodec::Database()) {
2231 voe_codec.pltype = -1;
2232 if (engine()->voe()->codec()->SetRecPayloadType(channel, voe_codec) == -1) {
2233 LOG_RTCERR2(SetRecPayloadType, channel, ToString(voe_codec));
2234 DeleteVoEChannel(channel);
2235 return false;
2236 }
2237 }
2238
2239 // Only enable those configured for this channel.
2240 for (const auto& codec : recv_codecs_) {
2241 webrtc::CodecInst voe_codec = {0};
2242 if (WebRtcVoiceEngine::ToCodecInst(codec, &voe_codec)) {
2243 voe_codec.pltype = codec.id;
2244 if (engine()->voe()->codec()->SetRecPayloadType(
2245 channel, voe_codec) == -1) {
2246 LOG_RTCERR2(SetRecPayloadType, channel, ToString(voe_codec));
2247 DeleteVoEChannel(channel);
2248 return false;
2249 }
2250 }
2251 }
2252
2253 recv_streams_.insert(std::make_pair( 2224 recv_streams_.insert(std::make_pair(
2254 ssrc, new WebRtcAudioReceiveStream(channel, ssrc, receiver_reports_ssrc_, 2225 ssrc,
2255 recv_transport_cc_enabled_, 2226 new WebRtcAudioReceiveStream(
2256 recv_nack_enabled_, 2227 channel, ssrc, receiver_reports_ssrc_, recv_transport_cc_enabled_,
2257 sp.sync_label, recv_rtp_extensions_, 2228 recv_nack_enabled_, sp.sync_label, recv_rtp_extensions_, call_, this,
2258 call_, this, 2229 engine()->decoder_factory_, decoder_map_)));
2259 engine()->decoder_factory_)));
2260 recv_streams_[ssrc]->SetPlayout(playout_); 2230 recv_streams_[ssrc]->SetPlayout(playout_);
2261 2231
2262 return true; 2232 return true;
2263 } 2233 }
2264 2234
2265 bool WebRtcVoiceMediaChannel::RemoveRecvStream(uint32_t ssrc) { 2235 bool WebRtcVoiceMediaChannel::RemoveRecvStream(uint32_t ssrc) {
2266 TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::RemoveRecvStream"); 2236 TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::RemoveRecvStream");
2267 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 2237 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
2268 LOG(LS_INFO) << "RemoveRecvStream: " << ssrc; 2238 LOG(LS_INFO) << "RemoveRecvStream: " << ssrc;
2269 2239
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
2654 ssrc); 2624 ssrc);
2655 if (it != unsignaled_recv_ssrcs_.end()) { 2625 if (it != unsignaled_recv_ssrcs_.end()) {
2656 unsignaled_recv_ssrcs_.erase(it); 2626 unsignaled_recv_ssrcs_.erase(it);
2657 return true; 2627 return true;
2658 } 2628 }
2659 return false; 2629 return false;
2660 } 2630 }
2661 } // namespace cricket 2631 } // namespace cricket
2662 2632
2663 #endif // HAVE_WEBRTC_VOICE 2633 #endif // HAVE_WEBRTC_VOICE
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698