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