Index: webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc |
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 654bc27df55a1d33bd8b2bd91940806b8be48008..07b484e15cce4ad2409d39efd398e05a736d783a 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 |
@@ -14,6 +14,7 @@ |
#include "webrtc/rtc_base/logging.h" |
#include "webrtc/rtc_base/timeutils.h" |
+#include "webrtc/system_wrappers/include/field_trial.h" |
namespace webrtc { |
@@ -42,6 +43,17 @@ AudioNetworkAdaptorImpl::AudioNetworkAdaptorImpl( |
kEventLogMinPacketLossChangeFraction) |
: nullptr) { |
RTC_DCHECK(controller_manager_); |
+ // Set the field trial flags to determine if adaptation is enabled. |
+ enable_bitrate_adaptation_ = |
+ webrtc::field_trial::IsEnabled("WebRTC-Audio-BitrateAdaptation"); |
+ enable_channel_adaptation_ = |
+ webrtc::field_trial::IsEnabled("WebRTC-Audio-ChannelAdaptation"); |
+ enable_dtx_adaptation_ = |
+ webrtc::field_trial::IsEnabled("WebRTC-Audio-DtxAdaptation"); |
+ enable_fec_adaptation_ = |
+ webrtc::field_trial::IsEnabled("WebRTC-Audio-FecAdaptation"); |
+ enable_frame_length_adaptation_ = |
+ webrtc::field_trial::IsEnabled("WebRTC-Audio-FrameLengthAdaptation"); |
} |
AudioNetworkAdaptorImpl::~AudioNetworkAdaptorImpl() = default; |
@@ -118,6 +130,49 @@ AudioEncoderRuntimeConfig AudioNetworkAdaptorImpl::GetEncoderRuntimeConfig() { |
controller_manager_->GetSortedControllers(last_metrics_)) |
controller->MakeDecision(&config); |
+ // Update ANA stats. |
+ auto increment_opt = [](rtc::Optional<int>& a) { |
+ if (a) |
+ (*a)++; |
+ else |
+ a = rtc::Optional<int>(1); |
+ }; |
+ if (prev_config_) { |
+ if (config.bitrate_bps != prev_config_->bitrate_bps) { |
+ increment_opt(stats_.ana_bitrate_action_counter); |
+ } |
+ if (config.enable_dtx != prev_config_->enable_dtx) { |
+ increment_opt(stats_.ana_dtx_action_counter); |
+ } |
+ if (config.enable_fec != prev_config_->enable_fec) { |
alexnarest
2017/09/04 11:24:02
In addition I think we want to record the fact FEC
ivoc
2017/09/05 09:01:40
Another option is to add another stat for uplink p
alexnarest
2017/09/05 10:43:27
Yes, I think it is a good idea
|
+ increment_opt(stats_.ana_fec_action_counter); |
+ } |
+ if (config.frame_length_ms != prev_config_->frame_length_ms) { |
alexnarest
2017/09/05 10:43:27
It would be helpful to report inc/dec counters rat
|
+ increment_opt(stats_.ana_frame_length_action_counter); |
+ } |
+ if (config.num_channels != prev_config_->num_channels) { |
+ increment_opt(stats_.ana_channel_action_counter); |
+ } |
+ } |
+ prev_config_ = rtc::Optional<AudioEncoderRuntimeConfig>(config); |
+ |
+ // Prevent certain controllers from taking action (determined by field trials) |
+ if (!enable_bitrate_adaptation_ && config.bitrate_bps) { |
+ config.bitrate_bps = rtc::Optional<int>(); |
+ } |
+ if (!enable_dtx_adaptation_ && config.enable_dtx) { |
+ config.enable_dtx = rtc::Optional<bool>(); |
+ } |
+ if (!enable_fec_adaptation_ && config.enable_fec) { |
alexnarest
2017/09/04 11:24:01
In addition to enable_fec we want to prevent PL sm
ivoc
2017/09/05 09:01:40
Good point, done.
|
+ config.enable_fec = rtc::Optional<bool>(); |
+ } |
+ if (!enable_frame_length_adaptation_ && config.frame_length_ms) { |
+ config.frame_length_ms = rtc::Optional<int>(); |
+ } |
+ if (!enable_channel_adaptation_ && config.num_channels) { |
+ config.num_channels = rtc::Optional<size_t>(); |
+ } |
+ |
if (debug_dump_writer_) |
debug_dump_writer_->DumpEncoderRuntimeConfig(config, rtc::TimeMillis()); |
@@ -137,8 +192,7 @@ void AudioNetworkAdaptorImpl::StopDebugDump() { |
AudioNetworkAdaptorImpl::AudioNetworkAdaptorStats |
AudioNetworkAdaptorImpl::GetStats() const { |
- // TODO(ivoc): Actually implement the stat. |
- return AudioNetworkAdaptorStats(); |
+ return stats_; |
} |
void AudioNetworkAdaptorImpl::DumpNetworkMetrics() { |