From e5e632f8737442add11123826fce0d68f55b0b4c Mon Sep 17 00:00:00 2001 From: minyue Date: Tue, 27 Sep 2016 12:54:19 -0700 Subject: [PATCH] Hooking up target audio bitrate to audio network adaptor. After the landing of BitrateController, it is time to hook up the network data (target_audio_bitrate_bps) required by BitrateController. BUG=webrtc:6303 Review-Url: https://codereview.webrtc.org/2364473005 Cr-Commit-Position: refs/heads/master@{#14406} --- .../audio_network_adaptor_impl.cc | 33 +++++++++++-------- .../audio_network_adaptor_impl.h | 2 ++ .../audio_network_adaptor_impl_unittest.cc | 25 +++++++++++++- .../include/audio_network_adaptor.h | 2 ++ 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc index 5fa1bee8e9..0db5429650 100644 --- a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc +++ b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc @@ -42,11 +42,31 @@ void AudioNetworkAdaptorImpl::SetUplinkPacketLossFraction( DumpNetworkMetrics(); } +void AudioNetworkAdaptorImpl::SetTargetAudioBitrate( + int target_audio_bitrate_bps) { + last_metrics_.target_audio_bitrate_bps = + rtc::Optional(target_audio_bitrate_bps); + DumpNetworkMetrics(); +} + void AudioNetworkAdaptorImpl::SetRtt(int rtt_ms) { last_metrics_.rtt_ms = rtc::Optional(rtt_ms); DumpNetworkMetrics(); } +void AudioNetworkAdaptorImpl::SetReceiverFrameLengthRange( + int min_frame_length_ms, + int max_frame_length_ms) { + Controller::Constraints constraints; + constraints.receiver_frame_length_range = + rtc::Optional( + Controller::Constraints::FrameLengthRange(min_frame_length_ms, + max_frame_length_ms)); + auto controllers = controller_manager_->GetControllers(); + for (auto& controller : controllers) + controller->SetConstraints(constraints); +} + AudioNetworkAdaptor::EncoderRuntimeConfig AudioNetworkAdaptorImpl::GetEncoderRuntimeConfig() { EncoderRuntimeConfig config; @@ -62,19 +82,6 @@ AudioNetworkAdaptorImpl::GetEncoderRuntimeConfig() { return config; } -void AudioNetworkAdaptorImpl::SetReceiverFrameLengthRange( - int min_frame_length_ms, - int max_frame_length_ms) { - Controller::Constraints constraints; - constraints.receiver_frame_length_range = - rtc::Optional( - Controller::Constraints::FrameLengthRange(min_frame_length_ms, - max_frame_length_ms)); - auto controllers = controller_manager_->GetControllers(); - for (auto& controller : controllers) - controller->SetConstraints(constraints); -} - void AudioNetworkAdaptorImpl::StartDebugDump(FILE* file_handle) { debug_dump_writer_ = DebugDumpWriter::Create(file_handle); } diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h index a97bbad21e..0afba66f2b 100644 --- a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h +++ b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h @@ -43,6 +43,8 @@ class AudioNetworkAdaptorImpl final : public AudioNetworkAdaptor { void SetRtt(int rtt_ms) override; + void SetTargetAudioBitrate(int target_audio_bitrate_bps) override; + void SetReceiverFrameLengthRange(int min_frame_length_ms, int max_frame_length_ms) override; diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl_unittest.cc index aee41da1b0..178d39ce7d 100644 --- a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl_unittest.cc +++ b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl_unittest.cc @@ -106,10 +106,11 @@ TEST(AudioNetworkAdaptorImplTest, constexpr int kBandwidth = 16000; constexpr float kPacketLoss = 0.7f; + constexpr int kRtt = 100; + constexpr int kTargetAudioBitrate = 15000; Controller::NetworkMetrics check; check.uplink_bandwidth_bps = rtc::Optional(kBandwidth); - for (auto& mock_controller : states.mock_controllers) { EXPECT_CALL(*mock_controller, MakeDecision(NetworkMetricsIs(check), _)); } @@ -122,6 +123,20 @@ TEST(AudioNetworkAdaptorImplTest, } states.audio_network_adaptor->SetUplinkPacketLossFraction(kPacketLoss); states.audio_network_adaptor->GetEncoderRuntimeConfig(); + + check.rtt_ms = rtc::Optional(kRtt); + for (auto& mock_controller : states.mock_controllers) { + EXPECT_CALL(*mock_controller, MakeDecision(NetworkMetricsIs(check), _)); + } + states.audio_network_adaptor->SetRtt(kRtt); + states.audio_network_adaptor->GetEncoderRuntimeConfig(); + + check.target_audio_bitrate_bps = rtc::Optional(kTargetAudioBitrate); + for (auto& mock_controller : states.mock_controllers) { + EXPECT_CALL(*mock_controller, MakeDecision(NetworkMetricsIs(check), _)); + } + states.audio_network_adaptor->SetTargetAudioBitrate(kTargetAudioBitrate); + states.audio_network_adaptor->GetEncoderRuntimeConfig(); } TEST(AudioNetworkAdaptorImplTest, SetConstraintsIsCalledOnSetFrameLengthRange) { @@ -159,6 +174,7 @@ TEST(AudioNetworkAdaptorImplTest, constexpr int kBandwidth = 16000; constexpr float kPacketLoss = 0.7f; constexpr int kRtt = 100; + constexpr int kTargetAudioBitrate = 15000; Controller::NetworkMetrics check; check.uplink_bandwidth_bps = rtc::Optional(kBandwidth); @@ -181,6 +197,13 @@ TEST(AudioNetworkAdaptorImplTest, EXPECT_CALL(*states.mock_debug_dump_writer, DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); states.audio_network_adaptor->SetRtt(kRtt); + + states.simulated_clock->AdvanceTimeMilliseconds(150); + timestamp_check += 150; + check.target_audio_bitrate_bps = rtc::Optional(kTargetAudioBitrate); + EXPECT_CALL(*states.mock_debug_dump_writer, + DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); + states.audio_network_adaptor->SetTargetAudioBitrate(kTargetAudioBitrate); } } // namespace webrtc diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h b/webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h index e3c4db033e..1fcf8ddaac 100644 --- a/webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h +++ b/webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h @@ -45,6 +45,8 @@ class AudioNetworkAdaptor { virtual void SetRtt(int rtt_ms) = 0; + virtual void SetTargetAudioBitrate(int target_audio_bitrate_bps) = 0; + virtual void SetReceiverFrameLengthRange(int min_frame_length_ms, int max_frame_length_ms) = 0;