| OLD | NEW |
| 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 944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 ret = false; | 955 ret = false; |
| 956 } | 956 } |
| 957 | 957 |
| 958 if (ret) { | 958 if (ret) { |
| 959 LOG(LS_INFO) << "Set microphone to (id=" << in_id | 959 LOG(LS_INFO) << "Set microphone to (id=" << in_id |
| 960 << ") and speaker to (id=" << out_id << ")"; | 960 << ") and speaker to (id=" << out_id << ")"; |
| 961 } | 961 } |
| 962 #endif // !WEBRTC_IOS | 962 #endif // !WEBRTC_IOS |
| 963 } | 963 } |
| 964 | 964 |
| 965 // TODO(solenberg): Remove, once AudioMonitor is gone. |
| 965 int WebRtcVoiceEngine::GetInputLevel() { | 966 int WebRtcVoiceEngine::GetInputLevel() { |
| 966 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 967 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 967 unsigned int ulevel; | 968 int8_t level = transmit_mixer()->AudioLevel(); |
| 968 return (voe_wrapper_->volume()->GetSpeechInputLevel(ulevel) != -1) ? | 969 RTC_DCHECK_LE(0, level); |
| 969 static_cast<int>(ulevel) : -1; | 970 return level; |
| 970 } | 971 } |
| 971 | 972 |
| 972 const std::vector<AudioCodec>& WebRtcVoiceEngine::send_codecs() const { | 973 const std::vector<AudioCodec>& WebRtcVoiceEngine::send_codecs() const { |
| 973 RTC_DCHECK(signal_thread_checker_.CalledOnValidThread()); | 974 RTC_DCHECK(signal_thread_checker_.CalledOnValidThread()); |
| 974 return send_codecs_; | 975 return send_codecs_; |
| 975 } | 976 } |
| 976 | 977 |
| 977 const std::vector<AudioCodec>& WebRtcVoiceEngine::recv_codecs() const { | 978 const std::vector<AudioCodec>& WebRtcVoiceEngine::recv_codecs() const { |
| 978 RTC_DCHECK(signal_thread_checker_.CalledOnValidThread()); | 979 RTC_DCHECK(signal_thread_checker_.CalledOnValidThread()); |
| 979 return recv_codecs_; | 980 return recv_codecs_; |
| (...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1570 RecreateAudioReceiveStream(); | 1571 RecreateAudioReceiveStream(); |
| 1571 } | 1572 } |
| 1572 } | 1573 } |
| 1573 | 1574 |
| 1574 webrtc::AudioReceiveStream::Stats GetStats() const { | 1575 webrtc::AudioReceiveStream::Stats GetStats() const { |
| 1575 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1576 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 1576 RTC_DCHECK(stream_); | 1577 RTC_DCHECK(stream_); |
| 1577 return stream_->GetStats(); | 1578 return stream_->GetStats(); |
| 1578 } | 1579 } |
| 1579 | 1580 |
| 1581 int GetOutputLevel() const { |
| 1582 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 1583 RTC_DCHECK(stream_); |
| 1584 return stream_->GetOutputLevel(); |
| 1585 } |
| 1586 |
| 1580 int channel() const { | 1587 int channel() const { |
| 1581 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1588 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 1582 return config_.voe_channel_id; | 1589 return config_.voe_channel_id; |
| 1583 } | 1590 } |
| 1584 | 1591 |
| 1585 void SetRawAudioSink(std::unique_ptr<webrtc::AudioSinkInterface> sink) { | 1592 void SetRawAudioSink(std::unique_ptr<webrtc::AudioSinkInterface> sink) { |
| 1586 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1593 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 1587 stream_->SetSink(std::move(sink)); | 1594 stream_->SetSink(std::move(sink)); |
| 1588 } | 1595 } |
| 1589 | 1596 |
| (...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2334 | 2341 |
| 2335 if (source) { | 2342 if (source) { |
| 2336 it->second->SetSource(source); | 2343 it->second->SetSource(source); |
| 2337 } else { | 2344 } else { |
| 2338 it->second->ClearSource(); | 2345 it->second->ClearSource(); |
| 2339 } | 2346 } |
| 2340 | 2347 |
| 2341 return true; | 2348 return true; |
| 2342 } | 2349 } |
| 2343 | 2350 |
| 2351 // TODO(solenberg): Remove, once AudioMonitor is gone. |
| 2344 bool WebRtcVoiceMediaChannel::GetActiveStreams( | 2352 bool WebRtcVoiceMediaChannel::GetActiveStreams( |
| 2345 AudioInfo::StreamList* actives) { | 2353 AudioInfo::StreamList* actives) { |
| 2346 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 2354 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 2347 actives->clear(); | 2355 actives->clear(); |
| 2348 for (const auto& ch : recv_streams_) { | 2356 for (const auto& ch : recv_streams_) { |
| 2349 int level = GetOutputLevel(ch.second->channel()); | 2357 int level = ch.second->GetOutputLevel(); |
| 2350 if (level > 0) { | 2358 if (level > 0) { |
| 2351 actives->push_back(std::make_pair(ch.first, level)); | 2359 actives->push_back(std::make_pair(ch.first, level)); |
| 2352 } | 2360 } |
| 2353 } | 2361 } |
| 2354 return true; | 2362 return true; |
| 2355 } | 2363 } |
| 2356 | 2364 |
| 2365 // TODO(solenberg): Remove, once AudioMonitor is gone. |
| 2357 int WebRtcVoiceMediaChannel::GetOutputLevel() { | 2366 int WebRtcVoiceMediaChannel::GetOutputLevel() { |
| 2358 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 2367 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 2359 int highest = 0; | 2368 int highest = 0; |
| 2360 for (const auto& ch : recv_streams_) { | 2369 for (const auto& ch : recv_streams_) { |
| 2361 highest = std::max(GetOutputLevel(ch.second->channel()), highest); | 2370 highest = std::max(ch.second->GetOutputLevel(), highest); |
| 2362 } | 2371 } |
| 2363 return highest; | 2372 return highest; |
| 2364 } | 2373 } |
| 2365 | 2374 |
| 2366 bool WebRtcVoiceMediaChannel::SetOutputVolume(uint32_t ssrc, double volume) { | 2375 bool WebRtcVoiceMediaChannel::SetOutputVolume(uint32_t ssrc, double volume) { |
| 2367 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 2376 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 2368 std::vector<uint32_t> ssrcs(1, ssrc); | 2377 std::vector<uint32_t> ssrcs(1, ssrc); |
| 2369 if (ssrc == 0) { | 2378 if (ssrc == 0) { |
| 2370 default_recv_volume_ = volume; | 2379 default_recv_volume_ = volume; |
| 2371 ssrcs = unsignaled_recv_ssrcs_; | 2380 ssrcs = unsignaled_recv_ssrcs_; |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2650 return; | 2659 return; |
| 2651 } | 2660 } |
| 2652 const auto it = recv_streams_.find(ssrc); | 2661 const auto it = recv_streams_.find(ssrc); |
| 2653 if (it == recv_streams_.end()) { | 2662 if (it == recv_streams_.end()) { |
| 2654 LOG(LS_WARNING) << "SetRawAudioSink: no recv stream " << ssrc; | 2663 LOG(LS_WARNING) << "SetRawAudioSink: no recv stream " << ssrc; |
| 2655 return; | 2664 return; |
| 2656 } | 2665 } |
| 2657 it->second->SetRawAudioSink(std::move(sink)); | 2666 it->second->SetRawAudioSink(std::move(sink)); |
| 2658 } | 2667 } |
| 2659 | 2668 |
| 2660 int WebRtcVoiceMediaChannel::GetOutputLevel(int channel) { | |
| 2661 unsigned int ulevel = 0; | |
| 2662 int ret = engine()->voe()->volume()->GetSpeechOutputLevel(channel, ulevel); | |
| 2663 return (ret == 0) ? static_cast<int>(ulevel) : -1; | |
| 2664 } | |
| 2665 | |
| 2666 int WebRtcVoiceMediaChannel::GetReceiveChannelId(uint32_t ssrc) const { | 2669 int WebRtcVoiceMediaChannel::GetReceiveChannelId(uint32_t ssrc) const { |
| 2667 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 2670 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 2668 const auto it = recv_streams_.find(ssrc); | 2671 const auto it = recv_streams_.find(ssrc); |
| 2669 if (it != recv_streams_.end()) { | 2672 if (it != recv_streams_.end()) { |
| 2670 return it->second->channel(); | 2673 return it->second->channel(); |
| 2671 } | 2674 } |
| 2672 return -1; | 2675 return -1; |
| 2673 } | 2676 } |
| 2674 | 2677 |
| 2675 int WebRtcVoiceMediaChannel::GetSendChannelId(uint32_t ssrc) const { | 2678 int WebRtcVoiceMediaChannel::GetSendChannelId(uint32_t ssrc) const { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2689 ssrc); | 2692 ssrc); |
| 2690 if (it != unsignaled_recv_ssrcs_.end()) { | 2693 if (it != unsignaled_recv_ssrcs_.end()) { |
| 2691 unsignaled_recv_ssrcs_.erase(it); | 2694 unsignaled_recv_ssrcs_.erase(it); |
| 2692 return true; | 2695 return true; |
| 2693 } | 2696 } |
| 2694 return false; | 2697 return false; |
| 2695 } | 2698 } |
| 2696 } // namespace cricket | 2699 } // namespace cricket |
| 2697 | 2700 |
| 2698 #endif // HAVE_WEBRTC_VOICE | 2701 #endif // HAVE_WEBRTC_VOICE |
| OLD | NEW |