diff --git a/audio/voip/BUILD.gn b/audio/voip/BUILD.gn index a491ec43ee..a49e336796 100644 --- a/audio/voip/BUILD.gn +++ b/audio/voip/BUILD.gn @@ -63,6 +63,7 @@ rtc_library("audio_ingress") { "../../api:transport_api", "../../api/audio:audio_mixer_api", "../../api/audio_codecs:audio_codecs_api", + "../../api/environment", "../../api/voip:voip_api", "../../modules/audio_coding", "../../modules/rtp_rtcp", @@ -87,6 +88,7 @@ rtc_library("audio_egress") { "..:audio", "../../api:sequence_checker", "../../api/audio_codecs:audio_codecs_api", + "../../api/environment", "../../api/task_queue", "../../call:audio_sender_interface", "../../modules/audio_coding", diff --git a/audio/voip/audio_channel.cc b/audio/voip/audio_channel.cc index a70e33ec38..4d72bed9d1 100644 --- a/audio/voip/audio_channel.cc +++ b/audio/voip/audio_channel.cc @@ -28,20 +28,18 @@ constexpr int kRtcpReportIntervalMs = 5000; } // namespace AudioChannel::AudioChannel( + const Environment& env, Transport* transport, uint32_t local_ssrc, - TaskQueueFactory* task_queue_factory, AudioMixer* audio_mixer, rtc::scoped_refptr decoder_factory) : audio_mixer_(audio_mixer) { - RTC_DCHECK(task_queue_factory); RTC_DCHECK(audio_mixer); - Clock* clock = Clock::GetRealTimeClock(); - receive_statistics_ = ReceiveStatistics::Create(clock); + receive_statistics_ = ReceiveStatistics::Create(&env.clock()); RtpRtcpInterface::Configuration rtp_config; - rtp_config.clock = clock; + rtp_config.clock = &env.clock(); rtp_config.audio = true; rtp_config.receive_statistics = receive_statistics_.get(); rtp_config.rtcp_report_interval_ms = kRtcpReportIntervalMs; @@ -53,11 +51,10 @@ AudioChannel::AudioChannel( rtp_rtcp_->SetSendingMediaStatus(false); rtp_rtcp_->SetRTCPStatus(RtcpMode::kCompound); - ingress_ = std::make_unique(rtp_rtcp_.get(), clock, + ingress_ = std::make_unique(env, rtp_rtcp_.get(), receive_statistics_.get(), std::move(decoder_factory)); - egress_ = - std::make_unique(rtp_rtcp_.get(), clock, task_queue_factory); + egress_ = std::make_unique(env, rtp_rtcp_.get()); // Set the instance of audio ingress to be part of audio mixer for ADM to // fetch audio samples to play. diff --git a/audio/voip/audio_channel.h b/audio/voip/audio_channel.h index 90ce8d4d57..d2452fd36c 100644 --- a/audio/voip/audio_channel.h +++ b/audio/voip/audio_channel.h @@ -31,9 +31,9 @@ namespace webrtc { // these two classes as it has both sending and receiving capabilities. class AudioChannel : public RefCountInterface { public: - AudioChannel(Transport* transport, + AudioChannel(const Environment& env, + Transport* transport, uint32_t local_ssrc, - TaskQueueFactory* task_queue_factory, AudioMixer* audio_mixer, rtc::scoped_refptr decoder_factory); ~AudioChannel() override; diff --git a/audio/voip/audio_egress.cc b/audio/voip/audio_egress.cc index 09396cd28d..d93784ed8d 100644 --- a/audio/voip/audio_egress.cc +++ b/audio/voip/audio_egress.cc @@ -18,13 +18,11 @@ namespace webrtc { -AudioEgress::AudioEgress(RtpRtcpInterface* rtp_rtcp, - Clock* clock, - TaskQueueFactory* task_queue_factory) +AudioEgress::AudioEgress(const Environment& env, RtpRtcpInterface* rtp_rtcp) : rtp_rtcp_(rtp_rtcp), - rtp_sender_audio_(clock, rtp_rtcp_->RtpSender()), + rtp_sender_audio_(&env.clock(), rtp_rtcp_->RtpSender()), audio_coding_(AudioCodingModule::Create()), - encoder_queue_(task_queue_factory->CreateTaskQueue( + encoder_queue_(env.task_queue_factory().CreateTaskQueue( "AudioEncoder", TaskQueueFactory::Priority::NORMAL)), encoder_queue_checker_(encoder_queue_.get()) { diff --git a/audio/voip/audio_egress.h b/audio/voip/audio_egress.h index 6d1489db34..aaaea08777 100644 --- a/audio/voip/audio_egress.h +++ b/audio/voip/audio_egress.h @@ -15,6 +15,7 @@ #include #include "api/audio_codecs/audio_format.h" +#include "api/environment/environment.h" #include "api/sequence_checker.h" #include "api/task_queue/task_queue_base.h" #include "api/task_queue/task_queue_factory.h" @@ -46,9 +47,7 @@ namespace webrtc { // smaller footprint. class AudioEgress : public AudioSender, public AudioPacketizationCallback { public: - AudioEgress(RtpRtcpInterface* rtp_rtcp, - Clock* clock, - TaskQueueFactory* task_queue_factory); + AudioEgress(const Environment& env, RtpRtcpInterface* rtp_rtcp); ~AudioEgress() override; // Set the encoder format and payload type for AudioCodingModule. diff --git a/audio/voip/audio_ingress.cc b/audio/voip/audio_ingress.cc index 29363c1c36..7a61ab449a 100644 --- a/audio/voip/audio_ingress.cc +++ b/audio/voip/audio_ingress.cc @@ -41,18 +41,18 @@ acm2::AcmReceiver::Config CreateAcmConfig( } // namespace AudioIngress::AudioIngress( + const Environment& env, RtpRtcpInterface* rtp_rtcp, - Clock* clock, ReceiveStatistics* receive_statistics, rtc::scoped_refptr decoder_factory) - : playing_(false), + : env_(env), + playing_(false), remote_ssrc_(0), first_rtp_timestamp_(-1), rtp_receive_statistics_(receive_statistics), rtp_rtcp_(rtp_rtcp), acm_receiver_(CreateAcmConfig(decoder_factory)), - ntp_estimator_(clock), - clock_(clock) {} + ntp_estimator_(&env_.clock()) {} AudioIngress::~AudioIngress() = default; @@ -186,8 +186,8 @@ void AudioIngress::ReceivedRTPPacket(rtc::ArrayView rtp_packet) { auto data_view = rtc::ArrayView(payload, payload_data_length); // Push the incoming payload (parsed and ready for decoding) into the ACM. - if (acm_receiver_.InsertPacket(header, data_view, clock_->CurrentTime()) != - 0) { + if (acm_receiver_.InsertPacket(header, data_view, + env_.clock().CurrentTime()) != 0) { RTC_DLOG(LS_ERROR) << "AudioIngress::ReceivedRTPPacket() unable to " "push data to the ACM"; } diff --git a/audio/voip/audio_ingress.h b/audio/voip/audio_ingress.h index 36876deead..daa21cb50c 100644 --- a/audio/voip/audio_ingress.h +++ b/audio/voip/audio_ingress.h @@ -20,6 +20,7 @@ #include "absl/types/optional.h" #include "api/array_view.h" #include "api/audio/audio_mixer.h" +#include "api/environment/environment.h" #include "api/rtp_headers.h" #include "api/scoped_refptr.h" #include "api/voip/voip_statistics.h" @@ -46,8 +47,8 @@ namespace webrtc { // smaller footprint. class AudioIngress : public AudioMixer::Source { public: - AudioIngress(RtpRtcpInterface* rtp_rtcp, - Clock* clock, + AudioIngress(const Environment& env, + RtpRtcpInterface* rtp_rtcp, ReceiveStatistics* receive_statistics, rtc::scoped_refptr decoder_factory); ~AudioIngress() override; @@ -105,6 +106,8 @@ class AudioIngress : public AudioMixer::Source { } private: + const Environment env_; + // Indicates AudioIngress status as caller invokes Start/StopPlaying. // If not playing, incoming RTP data processing is skipped, thus // producing no data to output device. @@ -133,8 +136,6 @@ class AudioIngress : public AudioMixer::Source { RemoteNtpTimeEstimator ntp_estimator_ RTC_GUARDED_BY(lock_); - Clock* clock_; - // For receiving RTP statistics, this tracks the sampling rate value // per payload type set when caller set via SetReceiveCodecs. std::map receive_codec_info_ RTC_GUARDED_BY(lock_); diff --git a/audio/voip/test/audio_channel_unittest.cc b/audio/voip/test/audio_channel_unittest.cc index 08ca47d12d..0d4c05f7a1 100644 --- a/audio/voip/test/audio_channel_unittest.cc +++ b/audio/voip/test/audio_channel_unittest.cc @@ -73,8 +73,7 @@ class AudioChannelTest : public ::testing::Test { // simplify network routing logic. rtc::scoped_refptr audio_channel = rtc::make_ref_counted( - &transport_, ssrc, &env_.task_queue_factory(), audio_mixer_.get(), - decoder_factory_); + env_, &transport_, ssrc, audio_mixer_.get(), decoder_factory_); audio_channel->SetEncoder( kPcmuPayload, kPcmuFormat, encoder_factory_->Create(env_, kPcmuFormat, diff --git a/audio/voip/test/audio_egress_unittest.cc b/audio/voip/test/audio_egress_unittest.cc index c42b78f2e6..166938a300 100644 --- a/audio/voip/test/audio_egress_unittest.cc +++ b/audio/voip/test/audio_egress_unittest.cc @@ -70,9 +70,7 @@ class AudioEgressTest : public ::testing::Test { void SetUp() override { rtp_rtcp_ = CreateRtpStack(time_controller_.GetClock(), &transport_, kRemoteSsrc); - egress_ = std::make_unique( - rtp_rtcp_.get(), time_controller_.GetClock(), - time_controller_.GetTaskQueueFactory()); + egress_ = std::make_unique(env_, rtp_rtcp_.get()); constexpr int kPcmuPayload = 0; egress_->SetEncoder(kPcmuPayload, kPcmuFormat, encoder_factory_->Create( diff --git a/audio/voip/test/audio_ingress_unittest.cc b/audio/voip/test/audio_ingress_unittest.cc index 194d97a55c..d4a9b7ffa9 100644 --- a/audio/voip/test/audio_ingress_unittest.cc +++ b/audio/voip/test/audio_ingress_unittest.cc @@ -64,13 +64,10 @@ class AudioIngressTest : public ::testing::Test { void SetUp() override { constexpr int kPcmuPayload = 0; ingress_ = std::make_unique( - rtp_rtcp_.get(), time_controller_.GetClock(), receive_statistics_.get(), - decoder_factory_); + env_, rtp_rtcp_.get(), receive_statistics_.get(), decoder_factory_); ingress_->SetReceiveCodecs({{kPcmuPayload, kPcmuFormat}}); - egress_ = std::make_unique( - rtp_rtcp_.get(), time_controller_.GetClock(), - time_controller_.GetTaskQueueFactory()); + egress_ = std::make_unique(env_, rtp_rtcp_.get()); egress_->SetEncoder(kPcmuPayload, kPcmuFormat, encoder_factory_->Create( env_, kPcmuFormat, {.payload_type = kPcmuPayload})); diff --git a/audio/voip/voip_core.cc b/audio/voip/voip_core.cc index c1e1a0686c..e4aec2055e 100644 --- a/audio/voip/voip_core.cc +++ b/audio/voip/voip_core.cc @@ -132,8 +132,7 @@ ChannelId VoipCore::CreateChannel(Transport* transport, } rtc::scoped_refptr channel = - rtc::make_ref_counted(transport, local_ssrc.value(), - &env_.task_queue_factory(), + rtc::make_ref_counted(env_, transport, local_ssrc.value(), audio_mixer_.get(), decoder_factory_); {