Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(755)

Unified Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc

Issue 2528933002: Adding OnReceivedOverhead to AudioEncoder. (Closed)
Patch Set: adding static_cast Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc
index f07279fac7d877109ba3bef92a47c8522acb8347..9f2c3186bdf2085d0a69bbdcf643d84c5752669e 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc
@@ -14,6 +14,7 @@
#include "webrtc/common_types.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_audio_network_adaptor.h"
#include "webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h"
+#include "webrtc/test/field_trial.h"
#include "webrtc/test/gmock.h"
#include "webrtc/test/gtest.h"
#include "webrtc/system_wrappers/include/clock.h"
@@ -249,7 +250,7 @@ TEST(AudioEncoderOpusTest, SetReceiverFrameLengthRange) {
EXPECT_THAT(states.encoder->supported_frame_lengths_ms(), ElementsAre(20));
}
-TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetUplinkBandwidth) {
+TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedUplinkBandwidth) {
auto states = CreateCodec(2);
states.encoder->EnableAudioNetworkAdaptor("", nullptr);
@@ -267,7 +268,7 @@ TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetUplinkBandwidth) {
}
TEST(AudioEncoderOpusTest,
- InvokeAudioNetworkAdaptorOnSetUplinkPacketLossFraction) {
+ InvokeAudioNetworkAdaptorOnReceivedUplinkPacketLossFraction) {
auto states = CreateCodec(2);
states.encoder->EnableAudioNetworkAdaptor("", nullptr);
@@ -284,7 +285,8 @@ TEST(AudioEncoderOpusTest,
CheckEncoderRuntimeConfig(states.encoder.get(), config);
}
-TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetTargetAudioBitrate) {
+TEST(AudioEncoderOpusTest,
+ InvokeAudioNetworkAdaptorOnReceivedTargetAudioBitrate) {
auto states = CreateCodec(2);
states.encoder->EnableAudioNetworkAdaptor("", nullptr);
@@ -301,7 +303,7 @@ TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetTargetAudioBitrate) {
CheckEncoderRuntimeConfig(states.encoder.get(), config);
}
-TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetRtt) {
+TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedRtt) {
auto states = CreateCodec(2);
states.encoder->EnableAudioNetworkAdaptor("", nullptr);
@@ -317,6 +319,22 @@ TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetRtt) {
CheckEncoderRuntimeConfig(states.encoder.get(), config);
}
+TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnReceivedOverhead) {
+ auto states = CreateCodec(2);
+ states.encoder->EnableAudioNetworkAdaptor("", nullptr);
+
+ auto config = CreateEncoderRuntimeConfig();
+ EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig())
+ .WillOnce(Return(config));
+
+ // Since using mock audio network adaptor, any overhead is fine.
+ constexpr size_t kOverhead = 64;
+ EXPECT_CALL(**states.mock_audio_network_adaptor, SetOverhead(kOverhead));
+ states.encoder->OnReceivedOverhead(kOverhead);
+
+ CheckEncoderRuntimeConfig(states.encoder.get(), config);
+}
+
TEST(AudioEncoderOpusTest,
PacketLossFractionSmoothedOnSetUplinkPacketLossFraction) {
auto states = CreateCodec(2);
@@ -343,4 +361,64 @@ TEST(AudioEncoderOpusTest,
EXPECT_FLOAT_EQ(0.05f, states.encoder->packet_loss_rate());
}
+TEST(AudioEncoderOpusTest, DoNotInvokeSetTargetBitrateIfOverheadUnknown) {
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
+
+ auto states = CreateCodec(2);
+
+ states.encoder->OnReceivedTargetAudioBitrate(kDefaultOpusSettings.rate * 2);
+
+ // Since |OnReceivedOverhead| has not been called, the codec bitrate should
+ // not change.
+ EXPECT_EQ(kDefaultOpusSettings.rate, states.encoder->GetTargetBitrate());
+}
+
+TEST(AudioEncoderOpusTest, OverheadRemovedFromTargetAudioBitrate) {
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
+
+ auto states = CreateCodec(2);
+
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ states.encoder->OnReceivedOverhead(kOverheadBytesPerPacket);
+
+ constexpr int kTargetBitrateBps = 40000;
+ states.encoder->OnReceivedTargetAudioBitrate(kTargetBitrateBps);
+
+ int packet_rate = rtc::CheckedDivExact(48000, kDefaultOpusSettings.pacsize);
+ EXPECT_EQ(kTargetBitrateBps -
+ 8 * static_cast<int>(kOverheadBytesPerPacket) * packet_rate,
+ states.encoder->GetTargetBitrate());
+}
+
+TEST(AudioEncoderOpusTest, BitrateBounded) {
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
+
+ constexpr int kMinBitrateBps = 500;
+ constexpr int kMaxBitrateBps = 512000;
+
+ auto states = CreateCodec(2);
+
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ states.encoder->OnReceivedOverhead(kOverheadBytesPerPacket);
+
+ int packet_rate = rtc::CheckedDivExact(48000, kDefaultOpusSettings.pacsize);
+
+ // Set a target rate that is smaller than |kMinBitrateBps| when overhead is
+ // subtracted. The eventual codec rate should be bounded by |kMinBitrateBps|.
+ int target_bitrate =
+ kOverheadBytesPerPacket * 8 * packet_rate + kMinBitrateBps - 1;
+ states.encoder->OnReceivedTargetAudioBitrate(target_bitrate);
+ EXPECT_EQ(kMinBitrateBps, states.encoder->GetTargetBitrate());
+
+ // Set a target rate that is greater than |kMaxBitrateBps| when overhead is
+ // subtracted. The eventual codec rate should be bounded by |kMaxBitrateBps|.
+ target_bitrate =
+ kOverheadBytesPerPacket * 8 * packet_rate + kMaxBitrateBps + 1;
+ states.encoder->OnReceivedTargetAudioBitrate(target_bitrate);
+ EXPECT_EQ(kMaxBitrateBps, states.encoder->GetTargetBitrate());
+}
+
} // namespace webrtc
« no previous file with comments | « webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698