blob: 32e11df46ed71442527473c35a83b37806ba69a0 [file] [log] [blame]
Sebastian Jansson470a5ea2019-01-23 12:37:49 +01001/*
2 * Copyright 2019 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#ifndef RTC_BASE_EXPERIMENTS_AUDIO_ALLOCATION_SETTINGS_H_
11#define RTC_BASE_EXPERIMENTS_AUDIO_ALLOCATION_SETTINGS_H_
12
13#include "rtc_base/experiments/field_trial_parser.h"
14#include "rtc_base/experiments/field_trial_units.h"
15namespace webrtc {
16// This class encapsulates the logic that controls how allocation of audio
17// bitrate is done. This is primarily based on field trials, but also on the
18// values of audio parameters.
19class AudioAllocationSettings {
20 public:
21 AudioAllocationSettings();
22 ~AudioAllocationSettings();
23 // Returns true if audio feedback should be force disabled.
24 bool ForceNoAudioFeedback() const;
25 // Returns true if changes in transport sequence number id should be ignored
26 // as a trigger for reconfiguration.
27 bool IgnoreSeqNumIdChange() const;
28 // Returns true if the bitrate allocation range should be configured.
29 bool ConfigureRateAllocationRange() const;
Per Kjellander914351d2019-02-15 10:54:55 +010030 // Returns true if sent audio packets should have transport wide sequence
31 // numbers.
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010032 // |transport_seq_num_extension_header_id| the extension header id for
33 // transport sequence numbers. Set to 0 if not the extension is not
34 // configured.
Per Kjellander914351d2019-02-15 10:54:55 +010035 bool ShouldSendTransportSequenceNumber(
36 int transport_seq_num_extension_header_id) const;
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010037 // Returns true if audio should be added to rate allocation when the audio
38 // stream is started.
39 // |min_bitrate_bps| the configured min bitrate, set to -1 if unset.
40 // |max_bitrate_bps| the configured max bitrate, set to -1 if unset.
41 // |has_dscp| true is dscp is enabled.
42 // |transport_seq_num_extension_header_id| the extension header id for
43 // transport sequence numbers. Set to 0 if not the extension is not
44 // configured.
45 bool IncludeAudioInAllocationOnStart(
46 int min_bitrate_bps,
47 int max_bitrate_bps,
48 bool has_dscp,
49 int transport_seq_num_extension_header_id) const;
50 // Returns true if audio should be added to rate allocation when the audio
51 // stream is reconfigured.
52 // |min_bitrate_bps| the configured min bitrate, set to -1 if unset.
53 // |max_bitrate_bps| the configured max bitrate, set to -1 if unset.
54 // |has_dscp| true is dscp is enabled.
55 // |transport_seq_num_extension_header_id| the extension header id for
56 // transport sequence numbers. Set to 0 if not the extension is not
57 // configured.
58 bool IncludeAudioInAllocationOnReconfigure(
59 int min_bitrate_bps,
60 int max_bitrate_bps,
61 bool has_dscp,
62 int transport_seq_num_extension_header_id) const;
63
64 // Returns the min bitrate for audio rate allocation, potentially including
65 // overhead.
66 int MinBitrateBps() const;
67 // Returns the max bitrate for audio rate allocation, potentially including
68 // overhead. |rtp_parameter_max_bitrate_bps| max bitrate as configured in rtp
69 // parameters, excluding overhead.
70 int MaxBitrateBps(absl::optional<int> rtp_parameter_max_bitrate_bps) const;
Sebastian Jansson464a5572019-02-12 13:32:32 +010071 // Indicates the default priority bitrate for audio streams. The bitrate
72 // allocator will prioritize audio until it reaches this bitrate and will
73 // divide bitrate evently between audio and video above this bitrate.
74 DataRate DefaultPriorityBitrate() const;
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010075
76 private:
77 FieldTrialFlag audio_send_side_bwe_;
78 FieldTrialFlag allocate_audio_without_feedback_;
79 FieldTrialFlag force_no_audio_feedback_;
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010080 FieldTrialFlag send_side_bwe_with_overhead_;
81 int min_overhead_bps_ = 0;
Sebastian Jansson464a5572019-02-12 13:32:32 +010082 // Default bitrates to use as range if there's no user configured
83 // bitrate range but audio bitrate allocation is enabled.
84 FieldTrialParameter<DataRate> default_min_bitrate_;
85 FieldTrialParameter<DataRate> default_max_bitrate_;
86 FieldTrialParameter<DataRate> priority_bitrate_;
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010087};
88} // namespace webrtc
89
90#endif // RTC_BASE_EXPERIMENTS_AUDIO_ALLOCATION_SETTINGS_H_