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

Side by Side Diff: webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc

Issue 2353293002: Relanding of "Adding BitrateController to audio network adaptor." (Closed)
Patch Set: rebasing Created 4 years, 3 months 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 unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller.h "
13
14 namespace webrtc {
15 namespace audio_network_adaptor {
16
17 namespace {
18
19 // L2(14B) + IPv4(20B) + UDP(8B) + RTP(12B) + SRTP_AUTH(10B) = 64B = 512 bits
20 constexpr int kPacketOverheadBits = 512;
21
22 void CheckDecision(BitrateController* controller,
23 const rtc::Optional<int>& target_audio_bitrate_bps,
24 const rtc::Optional<int>& frame_length_ms,
25 int expected_bitrate_bps) {
26 Controller::NetworkMetrics metrics;
27 metrics.target_audio_bitrate_bps = target_audio_bitrate_bps;
28 AudioNetworkAdaptor::EncoderRuntimeConfig config;
29 config.frame_length_ms = frame_length_ms;
30 controller->MakeDecision(metrics, &config);
31 EXPECT_EQ(rtc::Optional<int>(expected_bitrate_bps), config.bitrate_bps);
32 }
33
34 } // namespace
35
36 // These tests are named AnaBitrateControllerTest to distinguish from
37 // BitrateControllerTest in
38 // modules/bitrate_controller/bitrate_controller_unittest.cc.
39
40 TEST(AnaBitrateControllerTest, OutputInitValueWhenTargetBitrateUnknown) {
41 constexpr int kInitialBitrateBps = 32000;
42 constexpr int kInitialFrameLengthMs = 20;
43 BitrateController controller(
44 BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
45 CheckDecision(&controller, rtc::Optional<int>(),
46 rtc::Optional<int>(kInitialFrameLengthMs * 2),
47 kInitialBitrateBps);
48 }
49
50 TEST(AnaBitrateControllerTest, ChangeBitrateOnTargetBitrateChanged) {
51 constexpr int kInitialBitrateBps = 32000;
52 constexpr int kInitialFrameLengthMs = 20;
53 BitrateController controller(
54 BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
55 constexpr int kTargetBitrateBps = 48000;
56 // Frame length unchanged, bitrate changes in accordance with
57 // |metrics.target_audio_bitrate_bps|
58 CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
59 rtc::Optional<int>(kInitialFrameLengthMs), kTargetBitrateBps);
60 }
61
62 TEST(AnaBitrateControllerTest, TreatUnknownFrameLengthAsFrameLengthUnchanged) {
63 constexpr int kInitialBitrateBps = 32000;
64 constexpr int kInitialFrameLengthMs = 20;
65 BitrateController controller(
66 BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
67 constexpr int kTargetBitrateBps = 48000;
68 CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
69 rtc::Optional<int>(), kTargetBitrateBps);
70 }
71
72 TEST(AnaBitrateControllerTest, IncreaseBitrateOnFrameLengthIncreased) {
73 constexpr int kInitialBitrateBps = 32000;
74 constexpr int kInitialFrameLengthMs = 20;
75 BitrateController controller(
76 BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
77 constexpr int kFrameLengthMs = 60;
78 constexpr int kPacketOverheadRateDiff =
79 kPacketOverheadBits * 1000 / kInitialFrameLengthMs -
80 kPacketOverheadBits * 1000 / kFrameLengthMs;
81 CheckDecision(&controller, rtc::Optional<int>(kInitialBitrateBps),
82 rtc::Optional<int>(kFrameLengthMs),
83 kInitialBitrateBps + kPacketOverheadRateDiff);
84 }
85
86 TEST(AnaBitrateControllerTest, DecreaseBitrateOnFrameLengthDecreased) {
87 constexpr int kInitialBitrateBps = 32000;
88 constexpr int kInitialFrameLengthMs = 60;
89 BitrateController controller(
90 BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
91 constexpr int kFrameLengthMs = 20;
92 constexpr int kPacketOverheadRateDiff =
93 kPacketOverheadBits * 1000 / kInitialFrameLengthMs -
94 kPacketOverheadBits * 1000 / kFrameLengthMs;
95 CheckDecision(&controller, rtc::Optional<int>(kInitialBitrateBps),
96 rtc::Optional<int>(kFrameLengthMs),
97 kInitialBitrateBps + kPacketOverheadRateDiff);
98 }
99
100 TEST(AnaBitrateControllerTest, CheckBehaviorOnChangingCondition) {
101 constexpr int kInitialBitrateBps = 32000;
102 constexpr int kInitialFrameLengthMs = 20;
103 BitrateController controller(
104 BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
105
106 int last_overhead_bitrate =
107 kPacketOverheadBits * 1000 / kInitialFrameLengthMs;
108 int current_overhead_bitrate = kPacketOverheadBits * 1000 / 20;
109 // Start from an arbitrary overall bitrate.
110 int overall_bitrate = 34567;
111 CheckDecision(
112 &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
113 rtc::Optional<int>(20), overall_bitrate - current_overhead_bitrate);
114
115 // Next: increase overall bitrate.
116 overall_bitrate += 100;
117 CheckDecision(
118 &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
119 rtc::Optional<int>(20), overall_bitrate - current_overhead_bitrate);
120
121 // Next: change frame length.
122 current_overhead_bitrate = kPacketOverheadBits * 1000 / 60;
123 CheckDecision(
124 &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
125 rtc::Optional<int>(60), overall_bitrate - current_overhead_bitrate);
126 last_overhead_bitrate = current_overhead_bitrate;
127
128 // Next: change frame length.
129 current_overhead_bitrate = kPacketOverheadBits * 1000 / 20;
130 CheckDecision(
131 &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
132 rtc::Optional<int>(20), overall_bitrate - current_overhead_bitrate);
133 last_overhead_bitrate = current_overhead_bitrate;
134
135 // Next: decrease overall bitrate and frame length.
136 overall_bitrate -= 100;
137 current_overhead_bitrate = kPacketOverheadBits * 1000 / 60;
138 CheckDecision(
139 &controller, rtc::Optional<int>(overall_bitrate - last_overhead_bitrate),
140 rtc::Optional<int>(60), overall_bitrate - current_overhead_bitrate);
141 }
142
143 } // namespace audio_network_adaptor
144 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698