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

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

Issue 2110113003: Reland of "Move RtcEventLog object from inside VoiceEngine to Call.", "Fix to make the start/stop f… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase. Created 4 years, 5 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
« no previous file with comments | « webrtc/voice_engine/channel.h ('k') | webrtc/voice_engine/channel_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <utility>
15 15
16 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
17 #include "webrtc/base/criticalsection.h" 17 #include "webrtc/base/criticalsection.h"
18 #include "webrtc/base/format_macros.h" 18 #include "webrtc/base/format_macros.h"
19 #include "webrtc/base/logging.h" 19 #include "webrtc/base/logging.h"
20 #include "webrtc/base/thread_checker.h" 20 #include "webrtc/base/thread_checker.h"
21 #include "webrtc/base/timeutils.h" 21 #include "webrtc/base/timeutils.h"
22 #include "webrtc/call/rtc_event_log.h"
22 #include "webrtc/common.h" 23 #include "webrtc/common.h"
23 #include "webrtc/config.h" 24 #include "webrtc/config.h"
24 #include "webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory.h" 25 #include "webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory.h"
25 #include "webrtc/modules/audio_device/include/audio_device.h" 26 #include "webrtc/modules/audio_device/include/audio_device.h"
26 #include "webrtc/modules/audio_processing/include/audio_processing.h" 27 #include "webrtc/modules/audio_processing/include/audio_processing.h"
27 #include "webrtc/modules/include/module_common_types.h" 28 #include "webrtc/modules/include/module_common_types.h"
28 #include "webrtc/modules/pacing/packet_router.h" 29 #include "webrtc/modules/pacing/packet_router.h"
29 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h" 30 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h"
30 #include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h" 31 #include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h"
31 #include "webrtc/modules/rtp_rtcp/include/rtp_receiver.h" 32 #include "webrtc/modules/rtp_rtcp/include/rtp_receiver.h"
(...skipping 19 matching lines...) Expand all
51 const CodecInst& ci) { 52 const CodecInst& ci) {
52 const int result = (*acm)->RegisterReceiveCodec( 53 const int result = (*acm)->RegisterReceiveCodec(
53 ci, [&] { return rac->RentIsacDecoder(ci.plfreq); }); 54 ci, [&] { return rac->RentIsacDecoder(ci.plfreq); });
54 return result == 0; 55 return result == 0;
55 } 56 }
56 57
57 } // namespace 58 } // namespace
58 59
59 const int kTelephoneEventAttenuationdB = 10; 60 const int kTelephoneEventAttenuationdB = 10;
60 61
62 class RtcEventLogProxy final : public webrtc::RtcEventLog {
63 public:
64 RtcEventLogProxy() : event_log_(nullptr) {}
65
66 bool StartLogging(const std::string& file_name,
67 int64_t max_size_bytes) override {
68 RTC_NOTREACHED();
69 return false;
70 }
71
72 bool StartLogging(rtc::PlatformFile log_file,
73 int64_t max_size_bytes) override {
74 RTC_NOTREACHED();
75 return false;
76 }
77
78 void StopLogging() override { RTC_NOTREACHED(); }
79
80 void LogVideoReceiveStreamConfig(
81 const webrtc::VideoReceiveStream::Config& config) override {
82 rtc::CritScope lock(&crit_);
83 if (event_log_) {
84 event_log_->LogVideoReceiveStreamConfig(config);
85 }
86 }
87
88 void LogVideoSendStreamConfig(
89 const webrtc::VideoSendStream::Config& config) override {
90 rtc::CritScope lock(&crit_);
91 if (event_log_) {
92 event_log_->LogVideoSendStreamConfig(config);
93 }
94 }
95
96 void LogRtpHeader(webrtc::PacketDirection direction,
97 webrtc::MediaType media_type,
98 const uint8_t* header,
99 size_t packet_length) override {
100 rtc::CritScope lock(&crit_);
101 if (event_log_) {
102 event_log_->LogRtpHeader(direction, media_type, header, packet_length);
103 }
104 }
105
106 void LogRtcpPacket(webrtc::PacketDirection direction,
107 webrtc::MediaType media_type,
108 const uint8_t* packet,
109 size_t length) override {
110 rtc::CritScope lock(&crit_);
111 if (event_log_) {
112 event_log_->LogRtcpPacket(direction, media_type, packet, length);
113 }
114 }
115
116 void LogAudioPlayout(uint32_t ssrc) override {
117 rtc::CritScope lock(&crit_);
118 if (event_log_) {
119 event_log_->LogAudioPlayout(ssrc);
120 }
121 }
122
123 void LogBwePacketLossEvent(int32_t bitrate,
124 uint8_t fraction_loss,
125 int32_t total_packets) override {
126 rtc::CritScope lock(&crit_);
127 if (event_log_) {
128 event_log_->LogBwePacketLossEvent(bitrate, fraction_loss, total_packets);
129 }
130 }
131
132 void SetEventLog(RtcEventLog* event_log) {
133 rtc::CritScope lock(&crit_);
134 event_log_ = event_log;
135 }
136
137 private:
138 rtc::CriticalSection crit_;
139 RtcEventLog* event_log_ GUARDED_BY(crit_);
140 RTC_DISALLOW_COPY_AND_ASSIGN(RtcEventLogProxy);
141 };
142
61 class TransportFeedbackProxy : public TransportFeedbackObserver { 143 class TransportFeedbackProxy : public TransportFeedbackObserver {
62 public: 144 public:
63 TransportFeedbackProxy() : feedback_observer_(nullptr) { 145 TransportFeedbackProxy() : feedback_observer_(nullptr) {
64 pacer_thread_.DetachFromThread(); 146 pacer_thread_.DetachFromThread();
65 network_thread_.DetachFromThread(); 147 network_thread_.DetachFromThread();
66 } 148 }
67 149
68 void SetTransportFeedbackObserver( 150 void SetTransportFeedbackObserver(
69 TransportFeedbackObserver* feedback_observer) { 151 TransportFeedbackObserver* feedback_observer) {
70 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 152 RTC_DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 header.payload_type_frequency = 555 header.payload_type_frequency =
474 rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType); 556 rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType);
475 if (header.payload_type_frequency < 0) 557 if (header.payload_type_frequency < 0)
476 return false; 558 return false;
477 return ReceivePacket(rtp_packet, rtp_packet_length, header, false); 559 return ReceivePacket(rtp_packet, rtp_packet_length, header, false);
478 } 560 }
479 561
480 MixerParticipant::AudioFrameInfo Channel::GetAudioFrameWithMuted( 562 MixerParticipant::AudioFrameInfo Channel::GetAudioFrameWithMuted(
481 int32_t id, 563 int32_t id,
482 AudioFrame* audioFrame) { 564 AudioFrame* audioFrame) {
483 if (event_log_) { 565 unsigned int ssrc;
484 unsigned int ssrc; 566 RTC_CHECK_EQ(GetLocalSSRC(ssrc), 0);
485 RTC_CHECK_EQ(GetLocalSSRC(ssrc), 0); 567 event_log_proxy_->LogAudioPlayout(ssrc);
486 event_log_->LogAudioPlayout(ssrc);
487 }
488 // Get 10ms raw PCM data from the ACM (mixer limits output frequency) 568 // Get 10ms raw PCM data from the ACM (mixer limits output frequency)
489 bool muted; 569 bool muted;
490 if (audio_coding_->PlayoutData10Ms(audioFrame->sample_rate_hz_, audioFrame, 570 if (audio_coding_->PlayoutData10Ms(audioFrame->sample_rate_hz_, audioFrame,
491 &muted) == -1) { 571 &muted) == -1) {
492 WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, _channelId), 572 WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, _channelId),
493 "Channel::GetAudioFrame() PlayoutData10Ms() failed!"); 573 "Channel::GetAudioFrame() PlayoutData10Ms() failed!");
494 // In all likelihood, the audio in this frame is garbage. We return an 574 // In all likelihood, the audio in this frame is garbage. We return an
495 // error so that the audio mixer module doesn't add it to the mix. As 575 // error so that the audio mixer module doesn't add it to the mix. As
496 // a result, it won't be played out and the actions skipped here are 576 // a result, it won't be played out and the actions skipped here are
497 // irrelevant. 577 // irrelevant.
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 } 744 }
665 } 745 }
666 } 746 }
667 747
668 return (highestNeeded); 748 return (highestNeeded);
669 } 749 }
670 750
671 int32_t Channel::CreateChannel(Channel*& channel, 751 int32_t Channel::CreateChannel(Channel*& channel,
672 int32_t channelId, 752 int32_t channelId,
673 uint32_t instanceId, 753 uint32_t instanceId,
674 RtcEventLog* const event_log,
675 const Config& config) { 754 const Config& config) {
676 return CreateChannel(channel, channelId, instanceId, event_log, config, 755 return CreateChannel(channel, channelId, instanceId, config,
677 CreateBuiltinAudioDecoderFactory()); 756 CreateBuiltinAudioDecoderFactory());
678 } 757 }
679 758
680 int32_t Channel::CreateChannel( 759 int32_t Channel::CreateChannel(
681 Channel*& channel, 760 Channel*& channel,
682 int32_t channelId, 761 int32_t channelId,
683 uint32_t instanceId, 762 uint32_t instanceId,
684 RtcEventLog* const event_log,
685 const Config& config, 763 const Config& config,
686 const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) { 764 const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) {
687 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId, channelId), 765 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId, channelId),
688 "Channel::CreateChannel(channelId=%d, instanceId=%d)", channelId, 766 "Channel::CreateChannel(channelId=%d, instanceId=%d)", channelId,
689 instanceId); 767 instanceId);
690 768
691 channel = 769 channel = new Channel(channelId, instanceId, config, decoder_factory);
692 new Channel(channelId, instanceId, event_log, config, decoder_factory);
693 if (channel == NULL) { 770 if (channel == NULL) {
694 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId, channelId), 771 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId, channelId),
695 "Channel::CreateChannel() unable to allocate memory for" 772 "Channel::CreateChannel() unable to allocate memory for"
696 " channel"); 773 " channel");
697 return -1; 774 return -1;
698 } 775 }
699 return 0; 776 return 0;
700 } 777 }
701 778
702 void Channel::PlayNotification(int32_t id, uint32_t durationMs) { 779 void Channel::PlayNotification(int32_t id, uint32_t durationMs) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 rtc::CritScope cs(&_fileCritSect); 818 rtc::CritScope cs(&_fileCritSect);
742 819
743 _outputFileRecording = false; 820 _outputFileRecording = false;
744 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, _channelId), 821 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, _channelId),
745 "Channel::RecordFileEnded() => output file recorder module is" 822 "Channel::RecordFileEnded() => output file recorder module is"
746 " shutdown"); 823 " shutdown");
747 } 824 }
748 825
749 Channel::Channel(int32_t channelId, 826 Channel::Channel(int32_t channelId,
750 uint32_t instanceId, 827 uint32_t instanceId,
751 RtcEventLog* const event_log,
752 const Config& config, 828 const Config& config,
753 const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) 829 const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory)
754 : _instanceId(instanceId), 830 : _instanceId(instanceId),
755 _channelId(channelId), 831 _channelId(channelId),
756 event_log_(event_log), 832 event_log_proxy_(new RtcEventLogProxy()),
757 rtp_header_parser_(RtpHeaderParser::Create()), 833 rtp_header_parser_(RtpHeaderParser::Create()),
758 rtp_payload_registry_( 834 rtp_payload_registry_(
759 new RTPPayloadRegistry(RTPPayloadStrategy::CreateStrategy(true))), 835 new RTPPayloadRegistry(RTPPayloadStrategy::CreateStrategy(true))),
760 rtp_receive_statistics_( 836 rtp_receive_statistics_(
761 ReceiveStatistics::Create(Clock::GetRealTimeClock())), 837 ReceiveStatistics::Create(Clock::GetRealTimeClock())),
762 rtp_receiver_( 838 rtp_receiver_(
763 RtpReceiver::CreateAudioReceiver(Clock::GetRealTimeClock(), 839 RtpReceiver::CreateAudioReceiver(Clock::GetRealTimeClock(),
764 this, 840 this,
765 this, 841 this,
766 rtp_payload_registry_.get())), 842 rtp_payload_registry_.get())),
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 configuration.audio = true; 925 configuration.audio = true;
850 configuration.outgoing_transport = this; 926 configuration.outgoing_transport = this;
851 configuration.receive_statistics = rtp_receive_statistics_.get(); 927 configuration.receive_statistics = rtp_receive_statistics_.get();
852 configuration.bandwidth_callback = rtcp_observer_.get(); 928 configuration.bandwidth_callback = rtcp_observer_.get();
853 if (pacing_enabled_) { 929 if (pacing_enabled_) {
854 configuration.paced_sender = rtp_packet_sender_proxy_.get(); 930 configuration.paced_sender = rtp_packet_sender_proxy_.get();
855 configuration.transport_sequence_number_allocator = 931 configuration.transport_sequence_number_allocator =
856 seq_num_allocator_proxy_.get(); 932 seq_num_allocator_proxy_.get();
857 configuration.transport_feedback_callback = feedback_observer_proxy_.get(); 933 configuration.transport_feedback_callback = feedback_observer_proxy_.get();
858 } 934 }
859 configuration.event_log = event_log; 935 configuration.event_log = &(*event_log_proxy_);
860 936
861 _rtpRtcpModule.reset(RtpRtcp::CreateRtpRtcp(configuration)); 937 _rtpRtcpModule.reset(RtpRtcp::CreateRtpRtcp(configuration));
862 _rtpRtcpModule->SetSendingMediaStatus(false); 938 _rtpRtcpModule->SetSendingMediaStatus(false);
863 939
864 statistics_proxy_.reset(new StatisticsProxy(_rtpRtcpModule->SSRC())); 940 statistics_proxy_.reset(new StatisticsProxy(_rtpRtcpModule->SSRC()));
865 rtp_receive_statistics_->RegisterRtcpStatisticsCallback( 941 rtp_receive_statistics_->RegisterRtcpStatisticsCallback(
866 statistics_proxy_.get()); 942 statistics_proxy_.get());
867 943
868 Config audioproc_config; 944 Config audioproc_config;
869 audioproc_config.Set<ExperimentalAgc>(new ExperimentalAgc(false)); 945 audioproc_config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
(...skipping 2131 matching lines...) Expand 10 before | Expand all | Expand 10 after
3001 rtc::CritScope lock(&assoc_send_channel_lock_); 3077 rtc::CritScope lock(&assoc_send_channel_lock_);
3002 Channel* channel = associate_send_channel_.channel(); 3078 Channel* channel = associate_send_channel_.channel();
3003 if (channel && channel->ChannelId() == channel_id) { 3079 if (channel && channel->ChannelId() == channel_id) {
3004 // If this channel is associated with a send channel of the specified 3080 // If this channel is associated with a send channel of the specified
3005 // Channel ID, disassociate with it. 3081 // Channel ID, disassociate with it.
3006 ChannelOwner ref(NULL); 3082 ChannelOwner ref(NULL);
3007 associate_send_channel_ = ref; 3083 associate_send_channel_ = ref;
3008 } 3084 }
3009 } 3085 }
3010 3086
3087 void Channel::SetRtcEventLog(RtcEventLog* event_log) {
3088 event_log_proxy_->SetEventLog(event_log);
3089 }
3090
3011 int Channel::RegisterExternalMediaProcessing(ProcessingTypes type, 3091 int Channel::RegisterExternalMediaProcessing(ProcessingTypes type,
3012 VoEMediaProcess& processObject) { 3092 VoEMediaProcess& processObject) {
3013 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), 3093 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
3014 "Channel::RegisterExternalMediaProcessing()"); 3094 "Channel::RegisterExternalMediaProcessing()");
3015 3095
3016 rtc::CritScope cs(&_callbackCritSect); 3096 rtc::CritScope cs(&_callbackCritSect);
3017 3097
3018 if (kPlaybackPerChannel == type) { 3098 if (kPlaybackPerChannel == type) {
3019 if (_outputExternalMediaCallbackPtr) { 3099 if (_outputExternalMediaCallbackPtr) {
3020 _engineStatisticsPtr->SetLastError( 3100 _engineStatisticsPtr->SetLastError(
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
3482 int64_t min_rtt = 0; 3562 int64_t min_rtt = 0;
3483 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != 3563 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) !=
3484 0) { 3564 0) {
3485 return 0; 3565 return 0;
3486 } 3566 }
3487 return rtt; 3567 return rtt;
3488 } 3568 }
3489 3569
3490 } // namespace voe 3570 } // namespace voe
3491 } // namespace webrtc 3571 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/voice_engine/channel.h ('k') | webrtc/voice_engine/channel_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698