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

Side by Side Diff: webrtc/voice_engine/channel.cc

Issue 1505253004: Support for remote audio into tracks (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Revert unwanted VoE changes 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 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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
11 #include "webrtc/voice_engine/channel.h" 11 #include "webrtc/voice_engine/channel.h"
12 12
13 #include <algorithm> 13 #include <algorithm>
14 #include <utility>
14 15
15 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
16 #include "webrtc/base/format_macros.h" 17 #include "webrtc/base/format_macros.h"
17 #include "webrtc/base/logging.h" 18 #include "webrtc/base/logging.h"
18 #include "webrtc/base/thread_checker.h" 19 #include "webrtc/base/thread_checker.h"
19 #include "webrtc/base/timeutils.h" 20 #include "webrtc/base/timeutils.h"
20 #include "webrtc/common.h" 21 #include "webrtc/common.h"
21 #include "webrtc/config.h" 22 #include "webrtc/config.h"
22 #include "webrtc/modules/audio_device/include/audio_device.h" 23 #include "webrtc/modules/audio_device/include/audio_device.h"
23 #include "webrtc/modules/audio_processing/include/audio_processing.h" 24 #include "webrtc/modules/audio_processing/include/audio_processing.h"
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 ChannelState::State state = channel_state_.Get(); 554 ChannelState::State state = channel_state_.Get();
554 555
555 if (state.rx_apm_is_enabled) { 556 if (state.rx_apm_is_enabled) {
556 int err = rx_audioproc_->ProcessStream(audioFrame); 557 int err = rx_audioproc_->ProcessStream(audioFrame);
557 if (err) { 558 if (err) {
558 LOG(LS_ERROR) << "ProcessStream() error: " << err; 559 LOG(LS_ERROR) << "ProcessStream() error: " << err;
559 assert(false); 560 assert(false);
560 } 561 }
561 } 562 }
562 563
564 {
565 // Pass the audio buffers to an optional sink callback, before applying
566 // scaling/panning, as that applies to the mix operation.
567 // External recipients of the audio (e.g. via AudioTrack), will do their
568 // own mixing/dynamic processing.
569 CriticalSectionScoped cs(&_callbackCritSect);
570 if (audio_sink_) {
571 AudioSink::Data data(reinterpret_cast<uint8_t*>(&audioFrame->data_[0]),
572 audioFrame->samples_per_channel_,
573 audioFrame->sample_rate_hz_,
574 audioFrame->num_channels_, audioFrame->timestamp_);
575 audio_sink_->OnData(data);
576 }
577 }
578
563 float output_gain = 1.0f; 579 float output_gain = 1.0f;
564 float left_pan = 1.0f; 580 float left_pan = 1.0f;
565 float right_pan = 1.0f; 581 float right_pan = 1.0f;
566 { 582 {
567 CriticalSectionScoped cs(&volume_settings_critsect_); 583 CriticalSectionScoped cs(&volume_settings_critsect_);
568 output_gain = _outputGain; 584 output_gain = _outputGain;
569 left_pan = _panLeft; 585 left_pan = _panLeft;
570 right_pan= _panRight; 586 right_pan= _panRight;
571 } 587 }
572 588
(...skipping 28 matching lines...) Expand all
601 MixAudioWithFile(*audioFrame, audioFrame->sample_rate_hz_); 617 MixAudioWithFile(*audioFrame, audioFrame->sample_rate_hz_);
602 } 618 }
603 619
604 // External media 620 // External media
605 if (_outputExternalMedia) 621 if (_outputExternalMedia)
606 { 622 {
607 CriticalSectionScoped cs(&_callbackCritSect); 623 CriticalSectionScoped cs(&_callbackCritSect);
608 const bool isStereo = (audioFrame->num_channels_ == 2); 624 const bool isStereo = (audioFrame->num_channels_ == 2);
609 if (_outputExternalMediaCallbackPtr) 625 if (_outputExternalMediaCallbackPtr)
610 { 626 {
611 _outputExternalMediaCallbackPtr->Process( 627 _outputExternalMediaCallbackPtr->Process(
612 _channelId, 628 _channelId,
613 kPlaybackPerChannel, 629 kPlaybackPerChannel,
614 (int16_t*)audioFrame->data_, 630 (int16_t*)audioFrame->data_,
615 audioFrame->samples_per_channel_, 631 audioFrame->samples_per_channel_,
616 audioFrame->sample_rate_hz_, 632 audioFrame->sample_rate_hz_,
617 isStereo); 633 isStereo);
618 } 634 }
619 } 635 }
620 636
621 // Record playout if enabled 637 // Record playout if enabled
622 { 638 {
623 CriticalSectionScoped cs(&_fileCritSect); 639 CriticalSectionScoped cs(&_fileCritSect);
624 640
625 if (_outputFileRecording && _outputFileRecorderPtr) 641 if (_outputFileRecording && _outputFileRecorderPtr)
626 { 642 {
627 _outputFileRecorderPtr->RecordAudioToFile(*audioFrame); 643 _outputFileRecorderPtr->RecordAudioToFile(*audioFrame);
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 } 1181 }
1166 1182
1167 int32_t 1183 int32_t
1168 Channel::UpdateLocalTimeStamp() 1184 Channel::UpdateLocalTimeStamp()
1169 { 1185 {
1170 1186
1171 _timeStamp += static_cast<uint32_t>(_audioFrame.samples_per_channel_); 1187 _timeStamp += static_cast<uint32_t>(_audioFrame.samples_per_channel_);
1172 return 0; 1188 return 0;
1173 } 1189 }
1174 1190
1191 void Channel::SetSink(rtc::scoped_ptr<AudioSink> sink) {
1192 CriticalSectionScoped cs(&_callbackCritSect);
1193 audio_sink_ = std::move(sink);
1194 }
1195
1175 int32_t 1196 int32_t
1176 Channel::StartPlayout() 1197 Channel::StartPlayout()
1177 { 1198 {
1178 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), 1199 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId),
1179 "Channel::StartPlayout()"); 1200 "Channel::StartPlayout()");
1180 if (channel_state_.Get().playing) 1201 if (channel_state_.Get().playing)
1181 { 1202 {
1182 return 0; 1203 return 0;
1183 } 1204 }
1184 1205
(...skipping 2901 matching lines...) Expand 10 before | Expand all | Expand 10 after
4086 int64_t min_rtt = 0; 4107 int64_t min_rtt = 0;
4087 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) 4108 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt)
4088 != 0) { 4109 != 0) {
4089 return 0; 4110 return 0;
4090 } 4111 }
4091 return rtt; 4112 return rtt;
4092 } 4113 }
4093 4114
4094 } // namespace voe 4115 } // namespace voe
4095 } // namespace webrtc 4116 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698