Save Environment in the AudioEncoderOpus
This allows to simplify AudioEncoder api as it doesn't need to pass
RtcEventLog that is already available for the encoder implementation.
It would also would allow to rely on propagated rather than global clock.
Bug: webrtc:42223992
Change-Id: Ic42938e62938acf3cd6a11b616364809c63d69d9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/404520
Reviewed-by: Jakob Ivarsson‎ <jakobi@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45348}
diff --git a/api/audio_codecs/audio_encoder.cc b/api/audio_codecs/audio_encoder.cc
index 3a28249..d33f176 100644
--- a/api/audio_codecs/audio_encoder.cc
+++ b/api/audio_codecs/audio_encoder.cc
@@ -16,6 +16,7 @@
#include <optional>
#include <string>
+#include "absl/strings/string_view.h"
#include "api/array_view.h"
#include "api/call/bitrate_allocation.h"
#include "rtc_base/buffer.h"
@@ -82,9 +83,12 @@
return nullptr;
}
-bool AudioEncoder::EnableAudioNetworkAdaptor(
- const std::string& /* config_string */,
- RtcEventLog* /* event_log */) {
+bool AudioEncoder::EnableAudioNetworkAdaptor(const std::string& config_string,
+ RtcEventLog* /* event_log */) {
+ return EnableAudioNetworkAdaptor(config_string);
+}
+
+bool AudioEncoder::EnableAudioNetworkAdaptor(absl::string_view /*config*/) {
return false;
}
diff --git a/api/audio_codecs/audio_encoder.h b/api/audio_codecs/audio_encoder.h
index 8d45eb6..a5d659a 100644
--- a/api/audio_codecs/audio_encoder.h
+++ b/api/audio_codecs/audio_encoder.h
@@ -21,6 +21,7 @@
#include <vector>
#include "absl/base/attributes.h"
+#include "absl/strings/string_view.h"
#include "api/array_view.h"
#include "api/audio/audio_view.h"
#include "api/call/bitrate_allocation.h"
@@ -201,8 +202,10 @@
virtual ArrayView<std::unique_ptr<AudioEncoder>> ReclaimContainedEncoders();
// Enables audio network adaptor. Returns true if successful.
+ [[deprecated]]
virtual bool EnableAudioNetworkAdaptor(const std::string& config_string,
RtcEventLog* event_log);
+ virtual bool EnableAudioNetworkAdaptor(absl::string_view config);
// Disables audio network adaptor.
virtual void DisableAudioNetworkAdaptor();
diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc
index 024d617..fc923a8 100644
--- a/audio/audio_send_stream.cc
+++ b/audio/audio_send_stream.cc
@@ -605,8 +605,14 @@
// Enable ANA if configured (currently only used by Opus).
if (new_config.audio_network_adaptor_config) {
+// TODO: bugs.webrtc.org/42223992 - call non-deprecated variant of the
+// `EnableAudioNetworkAdaptor` when deprecated one is removed from the
+// interface.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
if (encoder->EnableAudioNetworkAdaptor(
*new_config.audio_network_adaptor_config, &env_.event_log())) {
+#pragma clang diagnostic pop
RTC_LOG(LS_INFO) << "Audio network adaptor enabled on SSRC "
<< new_config.rtp.ssrc;
} else {
@@ -706,8 +712,14 @@
if (new_config.audio_network_adaptor_config) {
channel_send_->CallEncoder([&](AudioEncoder* encoder) {
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
+// TODO: bugs.webrtc.org/42223992 - call non-deprecated variant of the
+// `EnableAudioNetworkAdaptor` when deprecated one is removed from the
+// interface.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
if (encoder->EnableAudioNetworkAdaptor(
*new_config.audio_network_adaptor_config, &env_.event_log())) {
+#pragma clang diagnostic pop
RTC_LOG(LS_INFO) << "Audio network adaptor enabled on SSRC "
<< new_config.rtp.ssrc;
if (overhead_per_packet_ > 0) {
diff --git a/modules/audio_coding/codecs/opus/audio_encoder_opus.cc b/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
index 73a6ea5..549b14f 100644
--- a/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
+++ b/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
@@ -369,8 +369,8 @@
env,
config,
payload_type,
- [this](absl::string_view config_string, RtcEventLog* event_log) {
- return DefaultAudioNetworkAdaptorCreator(config_string, event_log);
+ [this](absl::string_view config) {
+ return DefaultAudioNetworkAdaptorCreator(config);
},
// We choose 5sec as initial time constant due to empirical data.
std::make_unique<SmoothingFilterImpl>(5'000)) {}
@@ -381,11 +381,12 @@
int payload_type,
const AudioNetworkAdaptorCreator& audio_network_adaptor_creator,
std::unique_ptr<SmoothingFilter> bitrate_smoother)
- : payload_type_(payload_type),
+ : env_(env),
+ payload_type_(payload_type),
adjust_bandwidth_(
- env.field_trials().IsEnabled("WebRTC-AdjustOpusBandwidth")),
+ env_.field_trials().IsEnabled("WebRTC-AdjustOpusBandwidth")),
bitrate_changed_(true),
- bitrate_multipliers_(GetBitrateMultipliers(env.field_trials())),
+ bitrate_multipliers_(GetBitrateMultipliers(env_.field_trials())),
packet_loss_rate_(0.0),
inst_(nullptr),
packet_loss_fraction_smoother_(new PacketLossFractionSmoother()),
@@ -477,11 +478,8 @@
RTC_CHECK(RecreateEncoderInstance(conf));
}
-bool AudioEncoderOpusImpl::EnableAudioNetworkAdaptor(
- const std::string& config_string,
- RtcEventLog* event_log) {
- audio_network_adaptor_ =
- audio_network_adaptor_creator_(config_string, event_log);
+bool AudioEncoderOpusImpl::EnableAudioNetworkAdaptor(absl::string_view config) {
+ audio_network_adaptor_ = audio_network_adaptor_creator_(config);
return audio_network_adaptor_ != nullptr;
}
@@ -772,16 +770,15 @@
std::unique_ptr<AudioNetworkAdaptor>
AudioEncoderOpusImpl::DefaultAudioNetworkAdaptorCreator(
- absl::string_view config_string,
- RtcEventLog* event_log) const {
+ absl::string_view config_string) const {
AudioNetworkAdaptorImpl::Config config;
- config.event_log = event_log;
- return std::unique_ptr<AudioNetworkAdaptor>(new AudioNetworkAdaptorImpl(
+ config.event_log = &env_.event_log();
+ return std::make_unique<AudioNetworkAdaptorImpl>(
config, ControllerManagerImpl::Create(
config_string, NumChannels(), supported_frame_lengths_ms(),
AudioEncoderOpusConfig::kMinBitrateBps,
num_channels_to_encode_, next_frame_length_ms_,
- GetTargetBitrate(), config_.fec_enabled, GetDtx())));
+ GetTargetBitrate(), config_.fec_enabled, GetDtx()));
}
void AudioEncoderOpusImpl::MaybeUpdateUplinkBandwidth() {
diff --git a/modules/audio_coding/codecs/opus/audio_encoder_opus.h b/modules/audio_coding/codecs/opus/audio_encoder_opus.h
index 52b852b..222bee2 100644
--- a/modules/audio_coding/codecs/opus/audio_encoder_opus.h
+++ b/modules/audio_coding/codecs/opus/audio_encoder_opus.h
@@ -16,7 +16,6 @@
#include <functional>
#include <memory>
#include <optional>
-#include <string>
#include <utility>
#include <vector>
@@ -35,8 +34,6 @@
namespace webrtc {
-class RtcEventLog;
-
class AudioEncoderOpusImpl final : public AudioEncoder {
public:
// Returns empty if the current bitrate falls within the hysteresis window,
@@ -54,8 +51,7 @@
OpusEncInst* inst);
using AudioNetworkAdaptorCreator =
- std::function<std::unique_ptr<AudioNetworkAdaptor>(absl::string_view,
- RtcEventLog*)>;
+ std::function<std::unique_ptr<AudioNetworkAdaptor>(absl::string_view)>;
static std::unique_ptr<AudioEncoderOpusImpl> CreateForTesting(
const Environment& env,
@@ -91,8 +87,7 @@
bool SetApplication(Application application) override;
void SetMaxPlaybackRate(int frequency_hz) override;
- bool EnableAudioNetworkAdaptor(const std::string& config_string,
- RtcEventLog* event_log) override;
+ bool EnableAudioNetworkAdaptor(absl::string_view config) override;
void DisableAudioNetworkAdaptor() override;
void OnReceivedUplinkPacketLossFraction(
float uplink_packet_loss_fraction) override;
@@ -156,11 +151,11 @@
void ApplyAudioNetworkAdaptor();
std::unique_ptr<AudioNetworkAdaptor> DefaultAudioNetworkAdaptorCreator(
- absl::string_view config_string,
- RtcEventLog* event_log) const;
+ absl::string_view config_string) const;
void MaybeUpdateUplinkBandwidth();
+ const Environment env_;
AudioEncoderOpusConfig config_;
const int payload_type_;
const bool adjust_bandwidth_;
diff --git a/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc b/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc
index ee06128..8e9ee95 100644
--- a/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc
+++ b/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc
@@ -81,9 +81,8 @@
MockAudioNetworkAdaptor** mock_ptr = &states->mock_audio_network_adaptor;
AudioEncoderOpusImpl::AudioNetworkAdaptorCreator creator =
- [mock_ptr](absl::string_view, RtcEventLog* /* event_log */) {
- std::unique_ptr<MockAudioNetworkAdaptor> adaptor(
- new NiceMock<MockAudioNetworkAdaptor>());
+ [mock_ptr](absl::string_view) {
+ auto adaptor = std::make_unique<NiceMock<MockAudioNetworkAdaptor>>();
EXPECT_CALL(*adaptor, Die());
*mock_ptr = adaptor.get();
return adaptor;
@@ -265,7 +264,7 @@
TEST_P(AudioEncoderOpusTest,
InvokeAudioNetworkAdaptorOnReceivedUplinkPacketLossFraction) {
auto states = CreateCodec(sample_rate_hz_, 2);
- states->encoder->EnableAudioNetworkAdaptor("", nullptr);
+ states->encoder->EnableAudioNetworkAdaptor("");
auto config = CreateEncoderRuntimeConfig();
EXPECT_CALL(*states->mock_audio_network_adaptor, GetEncoderRuntimeConfig())
@@ -284,7 +283,7 @@
InvokeAudioNetworkAdaptorOnReceivedUplinkBandwidth) {
FieldTrials field_trials = CreateTestFieldTrials("");
auto states = CreateCodec(sample_rate_hz_, 2, &field_trials);
- states->encoder->EnableAudioNetworkAdaptor("", nullptr);
+ states->encoder->EnableAudioNetworkAdaptor("");
auto config = CreateEncoderRuntimeConfig();
EXPECT_CALL(*states->mock_audio_network_adaptor, GetEncoderRuntimeConfig())
@@ -307,7 +306,7 @@
TEST_P(AudioEncoderOpusTest,
InvokeAudioNetworkAdaptorOnReceivedUplinkAllocation) {
auto states = CreateCodec(sample_rate_hz_, 2);
- states->encoder->EnableAudioNetworkAdaptor("", nullptr);
+ states->encoder->EnableAudioNetworkAdaptor("");
auto config = CreateEncoderRuntimeConfig();
EXPECT_CALL(*states->mock_audio_network_adaptor, GetEncoderRuntimeConfig())
@@ -326,7 +325,7 @@
TEST_P(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedRtt) {
auto states = CreateCodec(sample_rate_hz_, 2);
- states->encoder->EnableAudioNetworkAdaptor("", nullptr);
+ states->encoder->EnableAudioNetworkAdaptor("");
auto config = CreateEncoderRuntimeConfig();
EXPECT_CALL(*states->mock_audio_network_adaptor, GetEncoderRuntimeConfig())
@@ -342,7 +341,7 @@
TEST_P(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedOverhead) {
auto states = CreateCodec(sample_rate_hz_, 2);
- states->encoder->EnableAudioNetworkAdaptor("", nullptr);
+ states->encoder->EnableAudioNetworkAdaptor("");
auto config = CreateEncoderRuntimeConfig();
EXPECT_CALL(*states->mock_audio_network_adaptor, GetEncoderRuntimeConfig())
@@ -481,7 +480,7 @@
TEST_P(AudioEncoderOpusTest, EmptyConfigDoesNotAffectEncoderSettings) {
auto states = CreateCodec(sample_rate_hz_, 2);
- states->encoder->EnableAudioNetworkAdaptor("", nullptr);
+ states->encoder->EnableAudioNetworkAdaptor("");
auto config = CreateEncoderRuntimeConfig();
AudioEncoderRuntimeConfig empty_config;
@@ -502,7 +501,7 @@
TEST_P(AudioEncoderOpusTest, UpdateUplinkBandwidthInAudioNetworkAdaptor) {
FieldTrials field_trials = CreateTestFieldTrials("");
auto states = CreateCodec(sample_rate_hz_, 2, &field_trials);
- states->encoder->EnableAudioNetworkAdaptor("", nullptr);
+ states->encoder->EnableAudioNetworkAdaptor("");
const size_t opus_rate_khz = CheckedDivExact(sample_rate_hz_, 1000);
const std::vector<int16_t> audio(opus_rate_khz * 10 * 2, 0);
Buffer encoded;
diff --git a/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc b/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc
index e7bb295..ba5ad20 100644
--- a/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc
+++ b/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc
@@ -229,10 +229,8 @@
speech_encoder_->SetMaxPlaybackRate(frequency_hz);
}
-bool AudioEncoderCopyRed::EnableAudioNetworkAdaptor(
- const std::string& config_string,
- RtcEventLog* event_log) {
- return speech_encoder_->EnableAudioNetworkAdaptor(config_string, event_log);
+bool AudioEncoderCopyRed::EnableAudioNetworkAdaptor(absl::string_view config) {
+ return speech_encoder_->EnableAudioNetworkAdaptor(config);
}
void AudioEncoderCopyRed::DisableAudioNetworkAdaptor() {
diff --git a/modules/audio_coding/codecs/red/audio_encoder_copy_red.h b/modules/audio_coding/codecs/red/audio_encoder_copy_red.h
index e5a3d94..7d14780 100644
--- a/modules/audio_coding/codecs/red/audio_encoder_copy_red.h
+++ b/modules/audio_coding/codecs/red/audio_encoder_copy_red.h
@@ -17,9 +17,9 @@
#include <list>
#include <memory>
#include <optional>
-#include <string>
#include <utility>
+#include "absl/strings/string_view.h"
#include "api/array_view.h"
#include "api/audio_codecs/audio_encoder.h"
#include "api/call/bitrate_allocation.h"
@@ -67,8 +67,7 @@
bool SetApplication(Application application) override;
void SetMaxPlaybackRate(int frequency_hz) override;
- bool EnableAudioNetworkAdaptor(const std::string& config_string,
- RtcEventLog* event_log) override;
+ bool EnableAudioNetworkAdaptor(absl::string_view config) override;
void DisableAudioNetworkAdaptor() override;
void OnReceivedUplinkPacketLossFraction(
float uplink_packet_loss_fraction) override;