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

Unified Diff: webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc

Issue 2530653003: Adding packet overhead to audio network adaptor. (Closed)
Patch Set: adding field trial Created 4 years, 1 month 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
Index: webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc
index 1ba1e8212e6284c4830256186313ae20a7f7a3f8..a4ebfc886024603b885f43f2e08822e7aa79d575 100644
--- a/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc
@@ -9,6 +9,7 @@
*/
#include "webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller.h"
+#include "webrtc/test/field_trial.h"
#include "webrtc/test/gtest.h"
namespace webrtc {
@@ -16,15 +17,14 @@ namespace audio_network_adaptor {
namespace {
-// L2(14B) + IPv4(20B) + UDP(8B) + RTP(12B) + SRTP_AUTH(10B) = 64B = 512 bits
-constexpr int kPacketOverheadBits = 512;
-
void CheckDecision(BitrateController* controller,
const rtc::Optional<int>& target_audio_bitrate_bps,
+ const rtc::Optional<size_t>& overhead_bytes_per_packet,
const rtc::Optional<int>& frame_length_ms,
int expected_bitrate_bps) {
Controller::NetworkMetrics metrics;
metrics.target_audio_bitrate_bps = target_audio_bitrate_bps;
+ metrics.overhead_bytes_per_packet = overhead_bytes_per_packet;
AudioNetworkAdaptor::EncoderRuntimeConfig config;
config.frame_length_ms = frame_length_ms;
controller->MakeDecision(metrics, &config);
@@ -40,104 +40,183 @@ void CheckDecision(BitrateController* controller,
TEST(AnaBitrateControllerTest, OutputInitValueWhenTargetBitrateUnknown) {
constexpr int kInitialBitrateBps = 32000;
constexpr int kInitialFrameLengthMs = 20;
+ constexpr size_t kOverheadBytesPerPacket = 64;
BitrateController controller(
BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
CheckDecision(&controller, rtc::Optional<int>(),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
rtc::Optional<int>(kInitialFrameLengthMs * 2),
kInitialBitrateBps);
}
-TEST(AnaBitrateControllerTest, ChangeBitrateOnTargetBitrateChanged) {
+TEST(AnaBitrateControllerTest, OutputInitValueWhenOverheadUnknown) {
constexpr int kInitialBitrateBps = 32000;
constexpr int kInitialFrameLengthMs = 20;
+ constexpr int kTargetBitrateBps = 48000;
BitrateController controller(
BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
+ CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(),
+ rtc::Optional<int>(kInitialFrameLengthMs * 2),
+ kInitialBitrateBps);
+}
+
+TEST(AnaBitrateControllerTest, ChangeBitrateOnTargetBitrateChanged) {
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
+ constexpr int kInitialFrameLengthMs = 20;
+ BitrateController controller(
+ BitrateController::Config(32000, kInitialFrameLengthMs));
constexpr int kTargetBitrateBps = 48000;
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ constexpr int kBitrateBps =
+ kTargetBitrateBps -
+ kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
// Frame length unchanged, bitrate changes in accordance with
- // |metrics.target_audio_bitrate_bps|
+ // |metrics.target_audio_bitrate_bps| and |metrics.overhead_bytes_per_packet|.
CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<int>(kInitialFrameLengthMs), kTargetBitrateBps);
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
+ rtc::Optional<int>(kInitialFrameLengthMs), kBitrateBps);
}
TEST(AnaBitrateControllerTest, TreatUnknownFrameLengthAsFrameLengthUnchanged) {
- constexpr int kInitialBitrateBps = 32000;
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
constexpr int kInitialFrameLengthMs = 20;
BitrateController controller(
- BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
+ BitrateController::Config(32000, kInitialFrameLengthMs));
constexpr int kTargetBitrateBps = 48000;
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ constexpr int kBitrateBps =
+ kTargetBitrateBps -
+ kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<int>(), kTargetBitrateBps);
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
+ rtc::Optional<int>(), kBitrateBps);
}
TEST(AnaBitrateControllerTest, IncreaseBitrateOnFrameLengthIncreased) {
- constexpr int kInitialBitrateBps = 32000;
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
constexpr int kInitialFrameLengthMs = 20;
BitrateController controller(
- BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
+ BitrateController::Config(32000, kInitialFrameLengthMs));
+
+ constexpr int kTargetBitrateBps = 48000;
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ constexpr int kBitrateBps =
+ kTargetBitrateBps -
+ kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
+ CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
+ rtc::Optional<int>(), kBitrateBps);
+
constexpr int kFrameLengthMs = 60;
- constexpr int kPacketOverheadRateDiff =
- kPacketOverheadBits * 1000 / kInitialFrameLengthMs -
- kPacketOverheadBits * 1000 / kFrameLengthMs;
- CheckDecision(&controller, rtc::Optional<int>(kInitialBitrateBps),
+ constexpr size_t kPacketOverheadRateDiff =
+ kOverheadBytesPerPacket * 8 * 1000 / 20 -
+ kOverheadBytesPerPacket * 8 * 1000 / 60;
+ CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
rtc::Optional<int>(kFrameLengthMs),
- kInitialBitrateBps + kPacketOverheadRateDiff);
+ kBitrateBps + kPacketOverheadRateDiff);
}
TEST(AnaBitrateControllerTest, DecreaseBitrateOnFrameLengthDecreased) {
- constexpr int kInitialBitrateBps = 32000;
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
constexpr int kInitialFrameLengthMs = 60;
BitrateController controller(
- BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
+ BitrateController::Config(32000, kInitialFrameLengthMs));
+
+ constexpr int kTargetBitrateBps = 48000;
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ constexpr int kBitrateBps =
+ kTargetBitrateBps -
+ kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
+ CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
+ rtc::Optional<int>(), kBitrateBps);
+
constexpr int kFrameLengthMs = 20;
- constexpr int kPacketOverheadRateDiff =
- kPacketOverheadBits * 1000 / kInitialFrameLengthMs -
- kPacketOverheadBits * 1000 / kFrameLengthMs;
- CheckDecision(&controller, rtc::Optional<int>(kInitialBitrateBps),
+ constexpr size_t kPacketOverheadRateDiff =
+ kOverheadBytesPerPacket * 8 * 1000 / 20 -
+ kOverheadBytesPerPacket * 8 * 1000 / 60;
+ CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
rtc::Optional<int>(kFrameLengthMs),
- kInitialBitrateBps + kPacketOverheadRateDiff);
+ kBitrateBps - kPacketOverheadRateDiff);
+}
+
+TEST(AnaBitrateControllerTest, BitrateNeverBecomesNegative) {
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
+ BitrateController controller(BitrateController::Config(32000, 20));
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ constexpr int kFrameLengthMs = 60;
+ // Set a target rate smaller than overhead rate, the bitrate is bounded by 0.
+ constexpr int kTargetBitrateBps =
+ kOverheadBytesPerPacket * 8 * 1000 / kFrameLengthMs - 1;
+ CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket),
+ rtc::Optional<int>(kFrameLengthMs), 0);
}
TEST(AnaBitrateControllerTest, CheckBehaviorOnChangingCondition) {
- constexpr int kInitialBitrateBps = 32000;
- constexpr int kInitialFrameLengthMs = 20;
- BitrateController controller(
- BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
+ BitrateController controller(BitrateController::Config(32000, 20));
- int last_overhead_bitrate =
- kPacketOverheadBits * 1000 / kInitialFrameLengthMs;
- int current_overhead_bitrate = kPacketOverheadBits * 1000 / 20;
// Start from an arbitrary overall bitrate.
int overall_bitrate = 34567;
- CheckDecision(
- &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
- rtc::Optional<int>(20), overall_bitrate - current_overhead_bitrate);
+ size_t overhead_bytes_per_packet = 64;
+ int frame_length_ms = 20;
+ int current_bitrate =
+ overall_bitrate - overhead_bytes_per_packet * 8 * 1000 / frame_length_ms;
+
+ CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet),
+ rtc::Optional<int>(frame_length_ms), current_bitrate);
// Next: increase overall bitrate.
overall_bitrate += 100;
- CheckDecision(
- &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
- rtc::Optional<int>(20), overall_bitrate - current_overhead_bitrate);
+ current_bitrate += 100;
+ CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet),
+ rtc::Optional<int>(frame_length_ms), current_bitrate);
// Next: change frame length.
- current_overhead_bitrate = kPacketOverheadBits * 1000 / 60;
- CheckDecision(
- &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
- rtc::Optional<int>(60), overall_bitrate - current_overhead_bitrate);
- last_overhead_bitrate = current_overhead_bitrate;
+ frame_length_ms = 60;
+ current_bitrate += overhead_bytes_per_packet * 8 * 1000 / 20 -
+ overhead_bytes_per_packet * 8 * 1000 / 60;
+ CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet),
+ rtc::Optional<int>(frame_length_ms), current_bitrate);
+
+ // Next: change overhead.
+ overhead_bytes_per_packet -= 30;
+ current_bitrate += 30 * 8 * 1000 / frame_length_ms;
+ CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet),
+ rtc::Optional<int>(frame_length_ms), current_bitrate);
// Next: change frame length.
- current_overhead_bitrate = kPacketOverheadBits * 1000 / 20;
- CheckDecision(
- &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
- rtc::Optional<int>(20), overall_bitrate - current_overhead_bitrate);
- last_overhead_bitrate = current_overhead_bitrate;
+ frame_length_ms = 20;
+ current_bitrate -= overhead_bytes_per_packet * 8 * 1000 / 20 -
+ overhead_bytes_per_packet * 8 * 1000 / 60;
+ CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet),
+ rtc::Optional<int>(frame_length_ms), current_bitrate);
// Next: decrease overall bitrate and frame length.
overall_bitrate -= 100;
- current_overhead_bitrate = kPacketOverheadBits * 1000 / 60;
- CheckDecision(
- &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
- rtc::Optional<int>(60), overall_bitrate - current_overhead_bitrate);
+ current_bitrate -= 100;
+ frame_length_ms = 60;
+ current_bitrate += overhead_bytes_per_packet * 8 * 1000 / 20 -
+ overhead_bytes_per_packet * 8 * 1000 / 60;
+
+ CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet),
+ rtc::Optional<int>(frame_length_ms), current_bitrate);
}
} // namespace audio_network_adaptor

Powered by Google App Engine
This is Rietveld 408576698