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