Update audio encoder stats after encoding.
This avoids waiting for encoding when fetching the stats, which is currently done on the worker thread.
Bug: None
Change-Id: I08e853a2edc403b545920d154ae9604aab7a32a0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/383820
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Jakob Ivarsson‎ <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44277}
diff --git a/modules/audio_coding/acm2/audio_coding_module.cc b/modules/audio_coding/acm2/audio_coding_module.cc
index 84b7bf1..ddbcd7d 100644
--- a/modules/audio_coding/acm2/audio_coding_module.cc
+++ b/modules/audio_coding/acm2/audio_coding_module.cc
@@ -10,15 +10,21 @@
#include "modules/audio_coding/include/audio_coding_module.h"
-#include <algorithm>
+#include <array>
+#include <cstddef>
#include <cstdint>
+#include <memory>
+#include <optional>
+#include <string>
+#include <vector>
-#include "absl/strings/match.h"
#include "absl/strings/string_view.h"
#include "api/array_view.h"
+#include "api/audio_codecs/audio_encoder.h"
+#include "api/function_view.h"
#include "modules/audio_coding/acm2/acm_remixing.h"
#include "modules/audio_coding/acm2/acm_resampler.h"
-#include "modules/include/module_common_types.h"
+#include "modules/audio_coding/include/audio_coding_module_typedefs.h"
#include "modules/include/module_common_types_public.h"
#include "rtc_base/buffer.h"
#include "rtc_base/checks.h"
@@ -164,6 +170,10 @@
int codec_histogram_bins_log_[static_cast<size_t>(
AudioEncoder::CodecType::kMaxLoggedAudioCodecTypes)];
int number_of_consecutive_empty_packets_;
+
+ mutable Mutex stats_mutex_;
+ ANAStats ana_stats_ RTC_GUARDED_BY(stats_mutex_);
+ int target_bitrate_ RTC_GUARDED_BY(stats_mutex_) = -1;
};
// Adds a codec usage sample to the histogram.
@@ -284,6 +294,11 @@
}
absolute_capture_timestamp_ms_.reset();
previous_pltype_ = encoded_info.payload_type;
+ {
+ MutexLock lock(&stats_mutex_);
+ ana_stats_ = encoder_stack_->GetANAStats();
+ target_bitrate_ = encoder_stack_->GetTargetBitrate();
+ }
return static_cast<int32_t>(encode_buffer_.size());
}
@@ -430,7 +445,7 @@
}
if (!down_mix && !resample) {
- // No pre-processing is required.
+ // No preprocessing is required.
if (expected_in_ts_ == expected_codec_ts_) {
// If we've never resampled, we can use the input frame as-is
*ptr_out = &in_frame;
@@ -525,19 +540,13 @@
}
ANAStats AudioCodingModuleImpl::GetANAStats() const {
- MutexLock lock(&acm_mutex_);
- if (encoder_stack_)
- return encoder_stack_->GetANAStats();
- // If no encoder is set, return default stats.
- return ANAStats();
+ MutexLock lock(&stats_mutex_);
+ return ana_stats_;
}
int AudioCodingModuleImpl::GetTargetBitrate() const {
- MutexLock lock(&acm_mutex_);
- if (!encoder_stack_) {
- return -1;
- }
- return encoder_stack_->GetTargetBitrate();
+ MutexLock lock(&stats_mutex_);
+ return target_bitrate_;
}
} // namespace