OLD | NEW |
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 |
(...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 if(_outputFilePlayerPtr->Frequency()>highestNeeded) | 621 if(_outputFilePlayerPtr->Frequency()>highestNeeded) |
622 { | 622 { |
623 highestNeeded=_outputFilePlayerPtr->Frequency(); | 623 highestNeeded=_outputFilePlayerPtr->Frequency(); |
624 } | 624 } |
625 } | 625 } |
626 } | 626 } |
627 | 627 |
628 return(highestNeeded); | 628 return(highestNeeded); |
629 } | 629 } |
630 | 630 |
631 int32_t | 631 int32_t Channel::CreateChannel(Channel*& channel, |
632 Channel::CreateChannel(Channel*& channel, | 632 int32_t channelId, |
633 int32_t channelId, | 633 uint32_t instanceId, |
634 uint32_t instanceId, | 634 RtcEventLog* const event_log, |
635 const Config& config) | 635 const Config& config) { |
636 { | |
637 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId,channelId), | 636 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId,channelId), |
638 "Channel::CreateChannel(channelId=%d, instanceId=%d)", | 637 "Channel::CreateChannel(channelId=%d, instanceId=%d)", |
639 channelId, instanceId); | 638 channelId, instanceId); |
640 | 639 |
641 channel = new Channel(channelId, instanceId, config); | 640 channel = new Channel(channelId, instanceId, event_log, config); |
642 if (channel == NULL) | 641 if (channel == NULL) |
643 { | 642 { |
644 WEBRTC_TRACE(kTraceMemory, kTraceVoice, | 643 WEBRTC_TRACE(kTraceMemory, kTraceVoice, |
645 VoEId(instanceId,channelId), | 644 VoEId(instanceId,channelId), |
646 "Channel::CreateChannel() unable to allocate memory for" | 645 "Channel::CreateChannel() unable to allocate memory for" |
647 " channel"); | 646 " channel"); |
648 return -1; | 647 return -1; |
649 } | 648 } |
650 return 0; | 649 return 0; |
651 } | 650 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 | 705 |
707 _outputFileRecording = false; | 706 _outputFileRecording = false; |
708 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | 707 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, |
709 VoEId(_instanceId,_channelId), | 708 VoEId(_instanceId,_channelId), |
710 "Channel::RecordFileEnded() => output file recorder module is" | 709 "Channel::RecordFileEnded() => output file recorder module is" |
711 " shutdown"); | 710 " shutdown"); |
712 } | 711 } |
713 | 712 |
714 Channel::Channel(int32_t channelId, | 713 Channel::Channel(int32_t channelId, |
715 uint32_t instanceId, | 714 uint32_t instanceId, |
716 const Config& config) : | 715 RtcEventLog* const event_log, |
717 _fileCritSect(*CriticalSectionWrapper::CreateCriticalSection()), | 716 const Config& config) |
718 _callbackCritSect(*CriticalSectionWrapper::CreateCriticalSection()), | 717 : _fileCritSect(*CriticalSectionWrapper::CreateCriticalSection()), |
719 volume_settings_critsect_(*CriticalSectionWrapper::CreateCriticalSection()), | 718 _callbackCritSect(*CriticalSectionWrapper::CreateCriticalSection()), |
720 _instanceId(instanceId), | 719 volume_settings_critsect_( |
721 _channelId(channelId), | 720 *CriticalSectionWrapper::CreateCriticalSection()), |
722 rtp_header_parser_(RtpHeaderParser::Create()), | 721 _instanceId(instanceId), |
723 rtp_payload_registry_( | 722 _channelId(channelId), |
724 new RTPPayloadRegistry(RTPPayloadStrategy::CreateStrategy(true))), | 723 rtp_header_parser_(RtpHeaderParser::Create()), |
725 rtp_receive_statistics_(ReceiveStatistics::Create( | 724 rtp_payload_registry_( |
726 Clock::GetRealTimeClock())), | 725 new RTPPayloadRegistry(RTPPayloadStrategy::CreateStrategy(true))), |
727 rtp_receiver_(RtpReceiver::CreateAudioReceiver( | 726 rtp_receive_statistics_( |
728 VoEModuleId(instanceId, channelId), Clock::GetRealTimeClock(), this, | 727 ReceiveStatistics::Create(Clock::GetRealTimeClock())), |
729 this, this, rtp_payload_registry_.get())), | 728 rtp_receiver_( |
730 telephone_event_handler_(rtp_receiver_->GetTelephoneEventHandler()), | 729 RtpReceiver::CreateAudioReceiver(VoEModuleId(instanceId, channelId), |
731 _outputAudioLevel(), | 730 Clock::GetRealTimeClock(), |
732 _externalTransport(false), | 731 this, |
733 _inputFilePlayerPtr(NULL), | 732 this, |
734 _outputFilePlayerPtr(NULL), | 733 this, |
735 _outputFileRecorderPtr(NULL), | 734 rtp_payload_registry_.get())), |
736 // Avoid conflict with other channels by adding 1024 - 1026, | 735 telephone_event_handler_(rtp_receiver_->GetTelephoneEventHandler()), |
737 // won't use as much as 1024 channels. | 736 _outputAudioLevel(), |
738 _inputFilePlayerId(VoEModuleId(instanceId, channelId) + 1024), | 737 _externalTransport(false), |
739 _outputFilePlayerId(VoEModuleId(instanceId, channelId) + 1025), | 738 _inputFilePlayerPtr(NULL), |
740 _outputFileRecorderId(VoEModuleId(instanceId, channelId) + 1026), | 739 _outputFilePlayerPtr(NULL), |
741 _outputFileRecording(false), | 740 _outputFileRecorderPtr(NULL), |
742 _inbandDtmfQueue(VoEModuleId(instanceId, channelId)), | 741 // Avoid conflict with other channels by adding 1024 - 1026, |
743 _inbandDtmfGenerator(VoEModuleId(instanceId, channelId)), | 742 // won't use as much as 1024 channels. |
744 _outputExternalMedia(false), | 743 _inputFilePlayerId(VoEModuleId(instanceId, channelId) + 1024), |
745 _inputExternalMediaCallbackPtr(NULL), | 744 _outputFilePlayerId(VoEModuleId(instanceId, channelId) + 1025), |
746 _outputExternalMediaCallbackPtr(NULL), | 745 _outputFileRecorderId(VoEModuleId(instanceId, channelId) + 1026), |
747 _timeStamp(0), // This is just an offset, RTP module will add it's own rando
m offset | 746 _outputFileRecording(false), |
748 _sendTelephoneEventPayloadType(106), | 747 _inbandDtmfQueue(VoEModuleId(instanceId, channelId)), |
749 ntp_estimator_(Clock::GetRealTimeClock()), | 748 _inbandDtmfGenerator(VoEModuleId(instanceId, channelId)), |
750 jitter_buffer_playout_timestamp_(0), | 749 _outputExternalMedia(false), |
751 playout_timestamp_rtp_(0), | 750 _inputExternalMediaCallbackPtr(NULL), |
752 playout_timestamp_rtcp_(0), | 751 _outputExternalMediaCallbackPtr(NULL), |
753 playout_delay_ms_(0), | 752 _timeStamp(0), // This is just an offset, RTP module will add it's own |
754 _numberOfDiscardedPackets(0), | 753 // random offset |
755 send_sequence_number_(0), | 754 _sendTelephoneEventPayloadType(106), |
756 ts_stats_lock_(CriticalSectionWrapper::CreateCriticalSection()), | 755 ntp_estimator_(Clock::GetRealTimeClock()), |
757 rtp_ts_wraparound_handler_(new rtc::TimestampWrapAroundHandler()), | 756 jitter_buffer_playout_timestamp_(0), |
758 capture_start_rtp_time_stamp_(-1), | 757 playout_timestamp_rtp_(0), |
759 capture_start_ntp_time_ms_(-1), | 758 playout_timestamp_rtcp_(0), |
760 _engineStatisticsPtr(NULL), | 759 playout_delay_ms_(0), |
761 _outputMixerPtr(NULL), | 760 _numberOfDiscardedPackets(0), |
762 _transmitMixerPtr(NULL), | 761 send_sequence_number_(0), |
763 _moduleProcessThreadPtr(NULL), | 762 ts_stats_lock_(CriticalSectionWrapper::CreateCriticalSection()), |
764 _audioDeviceModulePtr(NULL), | 763 rtp_ts_wraparound_handler_(new rtc::TimestampWrapAroundHandler()), |
765 _voiceEngineObserverPtr(NULL), | 764 capture_start_rtp_time_stamp_(-1), |
766 _callbackCritSectPtr(NULL), | 765 capture_start_ntp_time_ms_(-1), |
767 _transportPtr(NULL), | 766 _engineStatisticsPtr(NULL), |
768 _rxVadObserverPtr(NULL), | 767 _outputMixerPtr(NULL), |
769 _oldVadDecision(-1), | 768 _transmitMixerPtr(NULL), |
770 _sendFrameType(0), | 769 _moduleProcessThreadPtr(NULL), |
771 _externalMixing(false), | 770 _audioDeviceModulePtr(NULL), |
772 _mixFileWithMicrophone(false), | 771 _voiceEngineObserverPtr(NULL), |
773 _mute(false), | 772 _callbackCritSectPtr(NULL), |
774 _panLeft(1.0f), | 773 _transportPtr(NULL), |
775 _panRight(1.0f), | 774 _rxVadObserverPtr(NULL), |
776 _outputGain(1.0f), | 775 _oldVadDecision(-1), |
777 _playOutbandDtmfEvent(false), | 776 _sendFrameType(0), |
778 _playInbandDtmfEvent(false), | 777 _externalMixing(false), |
779 _lastLocalTimeStamp(0), | 778 _mixFileWithMicrophone(false), |
780 _lastPayloadType(0), | 779 _mute(false), |
781 _includeAudioLevelIndication(false), | 780 _panLeft(1.0f), |
782 _outputSpeechType(AudioFrame::kNormalSpeech), | 781 _panRight(1.0f), |
783 _average_jitter_buffer_delay_us(0), | 782 _outputGain(1.0f), |
784 least_required_delay_ms_(0), | 783 _playOutbandDtmfEvent(false), |
785 _previousTimestamp(0), | 784 _playInbandDtmfEvent(false), |
786 _recPacketDelayMs(20), | 785 _lastLocalTimeStamp(0), |
787 _RxVadDetection(false), | 786 _lastPayloadType(0), |
788 _rxAgcIsEnabled(false), | 787 _includeAudioLevelIndication(false), |
789 _rxNsIsEnabled(false), | 788 _outputSpeechType(AudioFrame::kNormalSpeech), |
790 restored_packet_in_use_(false), | 789 _average_jitter_buffer_delay_us(0), |
791 rtcp_observer_(new VoERtcpObserver(this)), | 790 least_required_delay_ms_(0), |
792 network_predictor_(new NetworkPredictor(Clock::GetRealTimeClock())), | 791 _previousTimestamp(0), |
793 assoc_send_channel_lock_(CriticalSectionWrapper::CreateCriticalSection()), | 792 _recPacketDelayMs(20), |
794 associate_send_channel_(ChannelOwner(nullptr)) | 793 _RxVadDetection(false), |
795 { | 794 _rxAgcIsEnabled(false), |
| 795 _rxNsIsEnabled(false), |
| 796 restored_packet_in_use_(false), |
| 797 rtcp_observer_(new VoERtcpObserver(this)), |
| 798 network_predictor_(new NetworkPredictor(Clock::GetRealTimeClock())), |
| 799 assoc_send_channel_lock_(CriticalSectionWrapper::CreateCriticalSection()), |
| 800 associate_send_channel_(ChannelOwner(nullptr)) { |
796 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId,_channelId), | 801 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId,_channelId), |
797 "Channel::Channel() - ctor"); | 802 "Channel::Channel() - ctor"); |
798 AudioCodingModule::Config acm_config; | 803 AudioCodingModule::Config acm_config; |
799 acm_config.id = VoEModuleId(instanceId, channelId); | 804 acm_config.id = VoEModuleId(instanceId, channelId); |
800 if (config.Get<NetEqCapacityConfig>().enabled) { | 805 if (config.Get<NetEqCapacityConfig>().enabled) { |
801 // Clamping the buffer capacity at 20 packets. While going lower will | 806 // Clamping the buffer capacity at 20 packets. While going lower will |
802 // probably work, it makes little sense. | 807 // probably work, it makes little sense. |
803 acm_config.neteq_config.max_packets_in_buffer = | 808 acm_config.neteq_config.max_packets_in_buffer = |
804 std::max(20, config.Get<NetEqCapacityConfig>().capacity); | 809 std::max(20, config.Get<NetEqCapacityConfig>().capacity); |
805 } | 810 } |
806 acm_config.neteq_config.enable_fast_accelerate = | 811 acm_config.neteq_config.enable_fast_accelerate = |
807 config.Get<NetEqFastAccelerate>().enabled; | 812 config.Get<NetEqFastAccelerate>().enabled; |
| 813 acm_config.event_log = event_log; |
808 audio_coding_.reset(AudioCodingModule::Create(acm_config)); | 814 audio_coding_.reset(AudioCodingModule::Create(acm_config)); |
809 | 815 |
810 _inbandDtmfQueue.ResetDtmf(); | 816 _inbandDtmfQueue.ResetDtmf(); |
811 _inbandDtmfGenerator.Init(); | 817 _inbandDtmfGenerator.Init(); |
812 _outputAudioLevel.Clear(); | 818 _outputAudioLevel.Clear(); |
813 | 819 |
814 RtpRtcp::Configuration configuration; | 820 RtpRtcp::Configuration configuration; |
815 configuration.id = VoEModuleId(instanceId, channelId); | 821 configuration.id = VoEModuleId(instanceId, channelId); |
816 configuration.audio = true; | 822 configuration.audio = true; |
817 configuration.outgoing_transport = this; | 823 configuration.outgoing_transport = this; |
(...skipping 3313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4131 int64_t min_rtt = 0; | 4137 int64_t min_rtt = 0; |
4132 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) | 4138 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) |
4133 != 0) { | 4139 != 0) { |
4134 return 0; | 4140 return 0; |
4135 } | 4141 } |
4136 return rtt; | 4142 return rtt; |
4137 } | 4143 } |
4138 | 4144 |
4139 } // namespace voe | 4145 } // namespace voe |
4140 } // namespace webrtc | 4146 } // namespace webrtc |
OLD | NEW |