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

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

Issue 1505253004: Support for remote audio into tracks (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Address comments Created 5 years 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 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 26 matching lines...) Expand all
37 #include <cstdio> 37 #include <cstdio>
38 #include <string> 38 #include <string>
39 #include <vector> 39 #include <vector>
40 40
41 #include "talk/media/base/audioframe.h" 41 #include "talk/media/base/audioframe.h"
42 #include "talk/media/base/audiorenderer.h" 42 #include "talk/media/base/audiorenderer.h"
43 #include "talk/media/base/constants.h" 43 #include "talk/media/base/constants.h"
44 #include "talk/media/base/streamparams.h" 44 #include "talk/media/base/streamparams.h"
45 #include "talk/media/webrtc/webrtcmediaengine.h" 45 #include "talk/media/webrtc/webrtcmediaengine.h"
46 #include "talk/media/webrtc/webrtcvoe.h" 46 #include "talk/media/webrtc/webrtcvoe.h"
47 #include "webrtc/audio/audio_sink.h"
47 #include "webrtc/base/arraysize.h" 48 #include "webrtc/base/arraysize.h"
48 #include "webrtc/base/base64.h" 49 #include "webrtc/base/base64.h"
49 #include "webrtc/base/byteorder.h" 50 #include "webrtc/base/byteorder.h"
50 #include "webrtc/base/common.h" 51 #include "webrtc/base/common.h"
51 #include "webrtc/base/helpers.h" 52 #include "webrtc/base/helpers.h"
52 #include "webrtc/base/logging.h" 53 #include "webrtc/base/logging.h"
53 #include "webrtc/base/stringencode.h" 54 #include "webrtc/base/stringencode.h"
54 #include "webrtc/base/stringutils.h" 55 #include "webrtc/base/stringutils.h"
55 #include "webrtc/call/rtc_event_log.h" 56 #include "webrtc/call/rtc_event_log.h"
56 #include "webrtc/common.h" 57 #include "webrtc/common.h"
(...skipping 1184 matching lines...) Expand 10 before | Expand all | Expand 10 after
1241 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1242 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1242 RTC_DCHECK(stream_); 1243 RTC_DCHECK(stream_);
1243 return stream_->GetStats(); 1244 return stream_->GetStats();
1244 } 1245 }
1245 1246
1246 int channel() const { 1247 int channel() const {
1247 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1248 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1248 return config_.voe_channel_id; 1249 return config_.voe_channel_id;
1249 } 1250 }
1250 1251
1252 void SetRawAudioSink(rtc::scoped_ptr<webrtc::AudioSinkInterface> sink) {
1253 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1254 stream_->SetSink(std::move(sink));
1255 }
1256
1251 private: 1257 private:
1252 void RecreateAudioReceiveStream(bool use_combined_bwe, 1258 void RecreateAudioReceiveStream(bool use_combined_bwe,
1253 const std::vector<webrtc::RtpExtension>& extensions) { 1259 const std::vector<webrtc::RtpExtension>& extensions) {
1254 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 1260 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
1255 if (stream_) { 1261 if (stream_) {
1256 call_->DestroyAudioReceiveStream(stream_); 1262 call_->DestroyAudioReceiveStream(stream_);
1257 stream_ = nullptr; 1263 stream_ = nullptr;
1258 } 1264 }
1259 config_.rtp.extensions = extensions; 1265 config_.rtp.extensions = extensions;
1260 config_.combined_audio_video_bwe = use_combined_bwe; 1266 config_.combined_audio_video_bwe = use_combined_bwe;
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 // Deregister default channel, if that's the one being destroyed. 2031 // Deregister default channel, if that's the one being destroyed.
2026 if (IsDefaultRecvStream(ssrc)) { 2032 if (IsDefaultRecvStream(ssrc)) {
2027 default_recv_ssrc_ = -1; 2033 default_recv_ssrc_ = -1;
2028 } 2034 }
2029 2035
2030 const int channel = it->second->channel(); 2036 const int channel = it->second->channel();
2031 2037
2032 // Clean up and delete the receive stream+channel. 2038 // Clean up and delete the receive stream+channel.
2033 LOG(LS_INFO) << "Removing audio receive stream " << ssrc 2039 LOG(LS_INFO) << "Removing audio receive stream " << ssrc
2034 << " with VoiceEngine channel #" << channel << "."; 2040 << " with VoiceEngine channel #" << channel << ".";
2041 it->second->SetRawAudioSink(nullptr);
2035 delete it->second; 2042 delete it->second;
2036 recv_streams_.erase(it); 2043 recv_streams_.erase(it);
2037 return DeleteVoEChannel(channel); 2044 return DeleteVoEChannel(channel);
2038 } 2045 }
2039 2046
2040 bool WebRtcVoiceMediaChannel::SetLocalRenderer(uint32_t ssrc, 2047 bool WebRtcVoiceMediaChannel::SetLocalRenderer(uint32_t ssrc,
2041 AudioRenderer* renderer) { 2048 AudioRenderer* renderer) {
2042 auto it = send_streams_.find(ssrc); 2049 auto it = send_streams_.find(ssrc);
2043 if (it == send_streams_.end()) { 2050 if (it == send_streams_.end()) {
2044 if (renderer) { 2051 if (renderer) {
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
2401 rinfo.decoding_plc = stats.decoding_plc; 2408 rinfo.decoding_plc = stats.decoding_plc;
2402 rinfo.decoding_cng = stats.decoding_cng; 2409 rinfo.decoding_cng = stats.decoding_cng;
2403 rinfo.decoding_plc_cng = stats.decoding_plc_cng; 2410 rinfo.decoding_plc_cng = stats.decoding_plc_cng;
2404 rinfo.capture_start_ntp_time_ms = stats.capture_start_ntp_time_ms; 2411 rinfo.capture_start_ntp_time_ms = stats.capture_start_ntp_time_ms;
2405 info->receivers.push_back(rinfo); 2412 info->receivers.push_back(rinfo);
2406 } 2413 }
2407 2414
2408 return true; 2415 return true;
2409 } 2416 }
2410 2417
2418 void WebRtcVoiceMediaChannel::SetRawAudioSink(
2419 uint32_t ssrc,
2420 rtc::scoped_ptr<webrtc::AudioSinkInterface> sink) {
2421 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
2422 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::SetRawAudioSink";
2423 const auto it = recv_streams_.find(ssrc);
2424 if (it == recv_streams_.end()) {
2425 LOG(LS_WARNING) << "SetRawAudioSink: no recv stream" << ssrc;
2426 return;
2427 }
2428 it->second->SetRawAudioSink(std::move(sink));
2429 }
2430
2411 int WebRtcVoiceMediaChannel::GetOutputLevel(int channel) { 2431 int WebRtcVoiceMediaChannel::GetOutputLevel(int channel) {
2412 unsigned int ulevel = 0; 2432 unsigned int ulevel = 0;
2413 int ret = engine()->voe()->volume()->GetSpeechOutputLevel(channel, ulevel); 2433 int ret = engine()->voe()->volume()->GetSpeechOutputLevel(channel, ulevel);
2414 return (ret == 0) ? static_cast<int>(ulevel) : -1; 2434 return (ret == 0) ? static_cast<int>(ulevel) : -1;
2415 } 2435 }
2416 2436
2417 int WebRtcVoiceMediaChannel::GetReceiveChannelId(uint32_t ssrc) const { 2437 int WebRtcVoiceMediaChannel::GetReceiveChannelId(uint32_t ssrc) const {
2418 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 2438 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
2419 const auto it = recv_streams_.find(ssrc); 2439 const auto it = recv_streams_.find(ssrc);
2420 if (it != recv_streams_.end()) { 2440 if (it != recv_streams_.end()) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2485 } 2505 }
2486 } else { 2506 } else {
2487 LOG(LS_INFO) << "Stopping playout for channel #" << channel; 2507 LOG(LS_INFO) << "Stopping playout for channel #" << channel;
2488 engine()->voe()->base()->StopPlayout(channel); 2508 engine()->voe()->base()->StopPlayout(channel);
2489 } 2509 }
2490 return true; 2510 return true;
2491 } 2511 }
2492 } // namespace cricket 2512 } // namespace cricket
2493 2513
2494 #endif // HAVE_WEBRTC_VOICE 2514 #endif // HAVE_WEBRTC_VOICE
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698