blob: bcc0f3e90b9e31715e895cecb0bab05e6bc599b3 [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;
Ying Wang397c06f2019-02-15 08:53:09 +000030 // Returns true if the transport sequence number extension should be enabled.
31 bool EnableTransportSequenceNumberExtension() const;
32 // Returns true if audio traffic should be included in transport wide feedback
33 // packets.
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010034 // |transport_seq_num_extension_header_id| the extension header id for
35 // transport sequence numbers. Set to 0 if not the extension is not
36 // configured.
Ying Wang397c06f2019-02-15 08:53:09 +000037 bool IncludeAudioInFeedback(int transport_seq_num_extension_header_id) const;
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010038 // Returns true if target bitrate for audio streams should be updated.
39 // |transport_seq_num_extension_header_id| the extension header id for
40 // transport sequence numbers. Set to 0 if not the extension is not
41 // configured.
42 bool UpdateAudioTargetBitrate(
43 int transport_seq_num_extension_header_id) const;
44 // Returns true if audio should be added to rate allocation when the audio
45 // stream is started.
46 // |min_bitrate_bps| the configured min bitrate, set to -1 if unset.
47 // |max_bitrate_bps| the configured max bitrate, set to -1 if unset.
48 // |has_dscp| true is dscp is enabled.
49 // |transport_seq_num_extension_header_id| the extension header id for
50 // transport sequence numbers. Set to 0 if not the extension is not
51 // configured.
52 bool IncludeAudioInAllocationOnStart(
53 int min_bitrate_bps,
54 int max_bitrate_bps,
55 bool has_dscp,
56 int transport_seq_num_extension_header_id) const;
57 // Returns true if audio should be added to rate allocation when the audio
58 // stream is reconfigured.
59 // |min_bitrate_bps| the configured min bitrate, set to -1 if unset.
60 // |max_bitrate_bps| the configured max bitrate, set to -1 if unset.
61 // |has_dscp| true is dscp is enabled.
62 // |transport_seq_num_extension_header_id| the extension header id for
63 // transport sequence numbers. Set to 0 if not the extension is not
64 // configured.
65 bool IncludeAudioInAllocationOnReconfigure(
66 int min_bitrate_bps,
67 int max_bitrate_bps,
68 bool has_dscp,
69 int transport_seq_num_extension_header_id) const;
70
71 // Returns the min bitrate for audio rate allocation, potentially including
72 // overhead.
73 int MinBitrateBps() const;
74 // Returns the max bitrate for audio rate allocation, potentially including
75 // overhead. |rtp_parameter_max_bitrate_bps| max bitrate as configured in rtp
76 // parameters, excluding overhead.
77 int MaxBitrateBps(absl::optional<int> rtp_parameter_max_bitrate_bps) const;
Sebastian Jansson464a5572019-02-12 13:32:32 +010078 // Indicates the default priority bitrate for audio streams. The bitrate
79 // allocator will prioritize audio until it reaches this bitrate and will
80 // divide bitrate evently between audio and video above this bitrate.
81 DataRate DefaultPriorityBitrate() const;
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010082
83 private:
84 FieldTrialFlag audio_send_side_bwe_;
85 FieldTrialFlag allocate_audio_without_feedback_;
86 FieldTrialFlag force_no_audio_feedback_;
87 FieldTrialFlag audio_feedback_to_improve_video_bwe_;
88 FieldTrialFlag send_side_bwe_with_overhead_;
89 int min_overhead_bps_ = 0;
Sebastian Jansson464a5572019-02-12 13:32:32 +010090 // Default bitrates to use as range if there's no user configured
91 // bitrate range but audio bitrate allocation is enabled.
92 FieldTrialParameter<DataRate> default_min_bitrate_;
93 FieldTrialParameter<DataRate> default_max_bitrate_;
94 FieldTrialParameter<DataRate> priority_bitrate_;
Sebastian Jansson470a5ea2019-01-23 12:37:49 +010095};
96} // namespace webrtc
97
98#endif // RTC_BASE_EXPERIMENTS_AUDIO_ALLOCATION_SETTINGS_H_