| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include <string> | 31 #include <string> |
| 32 #include <vector> | 32 #include <vector> |
| 33 | 33 |
| 34 #include "talk/media/base/codec.h" | 34 #include "talk/media/base/codec.h" |
| 35 #include "talk/media/base/constants.h" | 35 #include "talk/media/base/constants.h" |
| 36 #include "talk/media/base/streamparams.h" | 36 #include "talk/media/base/streamparams.h" |
| 37 #include "webrtc/base/basictypes.h" | 37 #include "webrtc/base/basictypes.h" |
| 38 #include "webrtc/base/buffer.h" | 38 #include "webrtc/base/buffer.h" |
| 39 #include "webrtc/base/dscp.h" | 39 #include "webrtc/base/dscp.h" |
| 40 #include "webrtc/base/logging.h" | 40 #include "webrtc/base/logging.h" |
| 41 #include "webrtc/base/maybe.h" |
| 41 #include "webrtc/base/sigslot.h" | 42 #include "webrtc/base/sigslot.h" |
| 42 #include "webrtc/base/socket.h" | 43 #include "webrtc/base/socket.h" |
| 43 #include "webrtc/base/window.h" | 44 #include "webrtc/base/window.h" |
| 44 // TODO(juberti): re-evaluate this include | 45 // TODO(juberti): re-evaluate this include |
| 45 #include "talk/session/media/audiomonitor.h" | 46 #include "talk/session/media/audiomonitor.h" |
| 46 | 47 |
| 47 namespace rtc { | 48 namespace rtc { |
| 48 class Buffer; | 49 class Buffer; |
| 49 class RateLimiter; | 50 class RateLimiter; |
| 50 class Timing; | 51 class Timing; |
| 51 } | 52 } |
| 52 | 53 |
| 53 namespace cricket { | 54 namespace cricket { |
| 54 | 55 |
| 55 class AudioRenderer; | 56 class AudioRenderer; |
| 56 struct RtpHeader; | 57 struct RtpHeader; |
| 57 class ScreencastId; | 58 class ScreencastId; |
| 58 struct VideoFormat; | 59 struct VideoFormat; |
| 59 class VideoCapturer; | 60 class VideoCapturer; |
| 60 class VideoRenderer; | 61 class VideoRenderer; |
| 61 | 62 |
| 62 const int kMinRtpHeaderExtensionId = 1; | 63 const int kMinRtpHeaderExtensionId = 1; |
| 63 const int kMaxRtpHeaderExtensionId = 255; | 64 const int kMaxRtpHeaderExtensionId = 255; |
| 64 const int kScreencastDefaultFps = 5; | 65 const int kScreencastDefaultFps = 5; |
| 65 | 66 |
| 66 // Used in AudioOptions and VideoOptions to signify "unset" values. | |
| 67 template <class T> | 67 template <class T> |
| 68 class Settable { | 68 static std::string ToStringIfSet(const char* key, const rtc::Maybe<T>& val) { |
| 69 public: | |
| 70 Settable() : set_(false), val_() {} | |
| 71 explicit Settable(T val) : set_(true), val_(val) {} | |
| 72 | |
| 73 bool IsSet() const { | |
| 74 return set_; | |
| 75 } | |
| 76 | |
| 77 bool Get(T* out) const { | |
| 78 *out = val_; | |
| 79 return set_; | |
| 80 } | |
| 81 | |
| 82 T GetWithDefaultIfUnset(const T& default_value) const { | |
| 83 return set_ ? val_ : default_value; | |
| 84 } | |
| 85 | |
| 86 void Set(T val) { | |
| 87 set_ = true; | |
| 88 val_ = val; | |
| 89 } | |
| 90 | |
| 91 void Clear() { | |
| 92 Set(T()); | |
| 93 set_ = false; | |
| 94 } | |
| 95 | |
| 96 void SetFrom(const Settable<T>& o) { | |
| 97 // Set this value based on the value of o, iff o is set. If this value is | |
| 98 // set and o is unset, the current value will be unchanged. | |
| 99 T val; | |
| 100 if (o.Get(&val)) { | |
| 101 Set(val); | |
| 102 } | |
| 103 } | |
| 104 | |
| 105 std::string ToString() const { | |
| 106 return set_ ? rtc::ToString(val_) : ""; | |
| 107 } | |
| 108 | |
| 109 bool operator==(const Settable<T>& o) const { | |
| 110 // Equal if both are unset with any value or both set with the same value. | |
| 111 return (set_ == o.set_) && (!set_ || (val_ == o.val_)); | |
| 112 } | |
| 113 | |
| 114 bool operator!=(const Settable<T>& o) const { | |
| 115 return !operator==(o); | |
| 116 } | |
| 117 | |
| 118 protected: | |
| 119 void InitializeValue(const T &val) { | |
| 120 val_ = val; | |
| 121 } | |
| 122 | |
| 123 private: | |
| 124 bool set_; | |
| 125 T val_; | |
| 126 }; | |
| 127 | |
| 128 template <class T> | |
| 129 static std::string ToStringIfSet(const char* key, const Settable<T>& val) { | |
| 130 std::string str; | 69 std::string str; |
| 131 if (val.IsSet()) { | 70 if (val) { |
| 132 str = key; | 71 str = key; |
| 133 str += ": "; | 72 str += ": "; |
| 134 str += val.ToString(); | 73 str += val ? rtc::ToString(*val) : ""; |
| 135 str += ", "; | 74 str += ", "; |
| 136 } | 75 } |
| 137 return str; | 76 return str; |
| 138 } | 77 } |
| 139 | 78 |
| 140 template <class T> | 79 template <class T> |
| 141 static std::string VectorToString(const std::vector<T>& vals) { | 80 static std::string VectorToString(const std::vector<T>& vals) { |
| 142 std::ostringstream ost; | 81 std::ostringstream ost; |
| 143 ost << "["; | 82 ost << "["; |
| 144 for (size_t i = 0; i < vals.size(); ++i) { | 83 for (size_t i = 0; i < vals.size(); ++i) { |
| 145 if (i > 0) { | 84 if (i > 0) { |
| 146 ost << ", "; | 85 ost << ", "; |
| 147 } | 86 } |
| 148 ost << vals[i].ToString(); | 87 ost << vals[i].ToString(); |
| 149 } | 88 } |
| 150 ost << "]"; | 89 ost << "]"; |
| 151 return ost.str(); | 90 return ost.str(); |
| 152 } | 91 } |
| 153 | 92 |
| 154 // Options that can be applied to a VoiceMediaChannel or a VoiceMediaEngine. | 93 // Options that can be applied to a VoiceMediaChannel or a VoiceMediaEngine. |
| 155 // Used to be flags, but that makes it hard to selectively apply options. | 94 // Used to be flags, but that makes it hard to selectively apply options. |
| 156 // We are moving all of the setting of options to structs like this, | 95 // We are moving all of the setting of options to structs like this, |
| 157 // but some things currently still use flags. | 96 // but some things currently still use flags. |
| 158 struct AudioOptions { | 97 struct AudioOptions { |
| 159 void SetAll(const AudioOptions& change) { | 98 void SetAll(const AudioOptions& change) { |
| 160 echo_cancellation.SetFrom(change.echo_cancellation); | 99 SetFrom(&echo_cancellation, change.echo_cancellation); |
| 161 auto_gain_control.SetFrom(change.auto_gain_control); | 100 SetFrom(&auto_gain_control, change.auto_gain_control); |
| 162 noise_suppression.SetFrom(change.noise_suppression); | 101 SetFrom(&noise_suppression, change.noise_suppression); |
| 163 highpass_filter.SetFrom(change.highpass_filter); | 102 SetFrom(&highpass_filter, change.highpass_filter); |
| 164 stereo_swapping.SetFrom(change.stereo_swapping); | 103 SetFrom(&stereo_swapping, change.stereo_swapping); |
| 165 audio_jitter_buffer_max_packets.SetFrom( | 104 SetFrom(&audio_jitter_buffer_max_packets, |
| 166 change.audio_jitter_buffer_max_packets); | 105 change.audio_jitter_buffer_max_packets); |
| 167 audio_jitter_buffer_fast_accelerate.SetFrom( | 106 SetFrom(&audio_jitter_buffer_fast_accelerate, |
| 168 change.audio_jitter_buffer_fast_accelerate); | 107 change.audio_jitter_buffer_fast_accelerate); |
| 169 typing_detection.SetFrom(change.typing_detection); | 108 SetFrom(&typing_detection, change.typing_detection); |
| 170 aecm_generate_comfort_noise.SetFrom(change.aecm_generate_comfort_noise); | 109 SetFrom(&aecm_generate_comfort_noise, change.aecm_generate_comfort_noise); |
| 171 conference_mode.SetFrom(change.conference_mode); | 110 SetFrom(&conference_mode, change.conference_mode); |
| 172 adjust_agc_delta.SetFrom(change.adjust_agc_delta); | 111 SetFrom(&adjust_agc_delta, change.adjust_agc_delta); |
| 173 experimental_agc.SetFrom(change.experimental_agc); | 112 SetFrom(&experimental_agc, change.experimental_agc); |
| 174 extended_filter_aec.SetFrom(change.extended_filter_aec); | 113 SetFrom(&extended_filter_aec, change.extended_filter_aec); |
| 175 delay_agnostic_aec.SetFrom(change.delay_agnostic_aec); | 114 SetFrom(&delay_agnostic_aec, change.delay_agnostic_aec); |
| 176 experimental_ns.SetFrom(change.experimental_ns); | 115 SetFrom(&experimental_ns, change.experimental_ns); |
| 177 aec_dump.SetFrom(change.aec_dump); | 116 SetFrom(&aec_dump, change.aec_dump); |
| 178 tx_agc_target_dbov.SetFrom(change.tx_agc_target_dbov); | 117 SetFrom(&tx_agc_target_dbov, change.tx_agc_target_dbov); |
| 179 tx_agc_digital_compression_gain.SetFrom( | 118 SetFrom(&tx_agc_digital_compression_gain, |
| 180 change.tx_agc_digital_compression_gain); | 119 change.tx_agc_digital_compression_gain); |
| 181 tx_agc_limiter.SetFrom(change.tx_agc_limiter); | 120 SetFrom(&tx_agc_limiter, change.tx_agc_limiter); |
| 182 recording_sample_rate.SetFrom(change.recording_sample_rate); | 121 SetFrom(&recording_sample_rate, change.recording_sample_rate); |
| 183 playout_sample_rate.SetFrom(change.playout_sample_rate); | 122 SetFrom(&playout_sample_rate, change.playout_sample_rate); |
| 184 dscp.SetFrom(change.dscp); | 123 SetFrom(&dscp, change.dscp); |
| 185 combined_audio_video_bwe.SetFrom(change.combined_audio_video_bwe); | 124 SetFrom(&combined_audio_video_bwe, change.combined_audio_video_bwe); |
| 186 } | 125 } |
| 187 | 126 |
| 188 bool operator==(const AudioOptions& o) const { | 127 bool operator==(const AudioOptions& o) const { |
| 189 return echo_cancellation == o.echo_cancellation && | 128 return echo_cancellation == o.echo_cancellation && |
| 190 auto_gain_control == o.auto_gain_control && | 129 auto_gain_control == o.auto_gain_control && |
| 191 noise_suppression == o.noise_suppression && | 130 noise_suppression == o.noise_suppression && |
| 192 highpass_filter == o.highpass_filter && | 131 highpass_filter == o.highpass_filter && |
| 193 stereo_swapping == o.stereo_swapping && | 132 stereo_swapping == o.stereo_swapping && |
| 194 audio_jitter_buffer_max_packets == o.audio_jitter_buffer_max_packets && | 133 audio_jitter_buffer_max_packets == o.audio_jitter_buffer_max_packets && |
| 195 audio_jitter_buffer_fast_accelerate == | 134 audio_jitter_buffer_fast_accelerate == |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 ost << ToStringIfSet("recording_sample_rate", recording_sample_rate); | 179 ost << ToStringIfSet("recording_sample_rate", recording_sample_rate); |
| 241 ost << ToStringIfSet("playout_sample_rate", playout_sample_rate); | 180 ost << ToStringIfSet("playout_sample_rate", playout_sample_rate); |
| 242 ost << ToStringIfSet("dscp", dscp); | 181 ost << ToStringIfSet("dscp", dscp); |
| 243 ost << ToStringIfSet("combined_audio_video_bwe", combined_audio_video_bwe); | 182 ost << ToStringIfSet("combined_audio_video_bwe", combined_audio_video_bwe); |
| 244 ost << "}"; | 183 ost << "}"; |
| 245 return ost.str(); | 184 return ost.str(); |
| 246 } | 185 } |
| 247 | 186 |
| 248 // Audio processing that attempts to filter away the output signal from | 187 // Audio processing that attempts to filter away the output signal from |
| 249 // later inbound pickup. | 188 // later inbound pickup. |
| 250 Settable<bool> echo_cancellation; | 189 rtc::Maybe<bool> echo_cancellation; |
| 251 // Audio processing to adjust the sensitivity of the local mic dynamically. | 190 // Audio processing to adjust the sensitivity of the local mic dynamically. |
| 252 Settable<bool> auto_gain_control; | 191 rtc::Maybe<bool> auto_gain_control; |
| 253 // Audio processing to filter out background noise. | 192 // Audio processing to filter out background noise. |
| 254 Settable<bool> noise_suppression; | 193 rtc::Maybe<bool> noise_suppression; |
| 255 // Audio processing to remove background noise of lower frequencies. | 194 // Audio processing to remove background noise of lower frequencies. |
| 256 Settable<bool> highpass_filter; | 195 rtc::Maybe<bool> highpass_filter; |
| 257 // Audio processing to swap the left and right channels. | 196 // Audio processing to swap the left and right channels. |
| 258 Settable<bool> stereo_swapping; | 197 rtc::Maybe<bool> stereo_swapping; |
| 259 // Audio receiver jitter buffer (NetEq) max capacity in number of packets. | 198 // Audio receiver jitter buffer (NetEq) max capacity in number of packets. |
| 260 Settable<int> audio_jitter_buffer_max_packets; | 199 rtc::Maybe<int> audio_jitter_buffer_max_packets; |
| 261 // Audio receiver jitter buffer (NetEq) fast accelerate mode. | 200 // Audio receiver jitter buffer (NetEq) fast accelerate mode. |
| 262 Settable<bool> audio_jitter_buffer_fast_accelerate; | 201 rtc::Maybe<bool> audio_jitter_buffer_fast_accelerate; |
| 263 // Audio processing to detect typing. | 202 // Audio processing to detect typing. |
| 264 Settable<bool> typing_detection; | 203 rtc::Maybe<bool> typing_detection; |
| 265 Settable<bool> aecm_generate_comfort_noise; | 204 rtc::Maybe<bool> aecm_generate_comfort_noise; |
| 266 Settable<bool> conference_mode; | 205 rtc::Maybe<bool> conference_mode; |
| 267 Settable<int> adjust_agc_delta; | 206 rtc::Maybe<int> adjust_agc_delta; |
| 268 Settable<bool> experimental_agc; | 207 rtc::Maybe<bool> experimental_agc; |
| 269 Settable<bool> extended_filter_aec; | 208 rtc::Maybe<bool> extended_filter_aec; |
| 270 Settable<bool> delay_agnostic_aec; | 209 rtc::Maybe<bool> delay_agnostic_aec; |
| 271 Settable<bool> experimental_ns; | 210 rtc::Maybe<bool> experimental_ns; |
| 272 Settable<bool> aec_dump; | 211 rtc::Maybe<bool> aec_dump; |
| 273 // Note that tx_agc_* only applies to non-experimental AGC. | 212 // Note that tx_agc_* only applies to non-experimental AGC. |
| 274 Settable<uint16_t> tx_agc_target_dbov; | 213 rtc::Maybe<uint16_t> tx_agc_target_dbov; |
| 275 Settable<uint16_t> tx_agc_digital_compression_gain; | 214 rtc::Maybe<uint16_t> tx_agc_digital_compression_gain; |
| 276 Settable<bool> tx_agc_limiter; | 215 rtc::Maybe<bool> tx_agc_limiter; |
| 277 Settable<uint32_t> recording_sample_rate; | 216 rtc::Maybe<uint32_t> recording_sample_rate; |
| 278 Settable<uint32_t> playout_sample_rate; | 217 rtc::Maybe<uint32_t> playout_sample_rate; |
| 279 // Set DSCP value for packet sent from audio channel. | 218 // Set DSCP value for packet sent from audio channel. |
| 280 Settable<bool> dscp; | 219 rtc::Maybe<bool> dscp; |
| 281 // Enable combined audio+bandwidth BWE. | 220 // Enable combined audio+bandwidth BWE. |
| 282 Settable<bool> combined_audio_video_bwe; | 221 rtc::Maybe<bool> combined_audio_video_bwe; |
| 222 |
| 223 private: |
| 224 template <typename T> |
| 225 static void SetFrom(rtc::Maybe<T>* s, const rtc::Maybe<T>& o) { |
| 226 if (o) { |
| 227 *s = o; |
| 228 } |
| 229 } |
| 283 }; | 230 }; |
| 284 | 231 |
| 285 // Options that can be applied to a VideoMediaChannel or a VideoMediaEngine. | 232 // Options that can be applied to a VideoMediaChannel or a VideoMediaEngine. |
| 286 // Used to be flags, but that makes it hard to selectively apply options. | 233 // Used to be flags, but that makes it hard to selectively apply options. |
| 287 // We are moving all of the setting of options to structs like this, | 234 // We are moving all of the setting of options to structs like this, |
| 288 // but some things currently still use flags. | 235 // but some things currently still use flags. |
| 289 struct VideoOptions { | 236 struct VideoOptions { |
| 290 VideoOptions() { | 237 VideoOptions() |
| 291 process_adaptation_threshhold.Set(kProcessCpuThreshold); | 238 : process_adaptation_threshhold(kProcessCpuThreshold), |
| 292 system_low_adaptation_threshhold.Set(kLowSystemCpuThreshold); | 239 system_low_adaptation_threshhold(kLowSystemCpuThreshold), |
| 293 system_high_adaptation_threshhold.Set(kHighSystemCpuThreshold); | 240 system_high_adaptation_threshhold(kHighSystemCpuThreshold), |
| 294 unsignalled_recv_stream_limit.Set(kNumDefaultUnsignalledVideoRecvStreams); | 241 unsignalled_recv_stream_limit(kNumDefaultUnsignalledVideoRecvStreams) {} |
| 295 } | |
| 296 | 242 |
| 297 void SetAll(const VideoOptions& change) { | 243 void SetAll(const VideoOptions& change) { |
| 298 adapt_input_to_cpu_usage.SetFrom(change.adapt_input_to_cpu_usage); | 244 SetFrom(&adapt_input_to_cpu_usage, change.adapt_input_to_cpu_usage); |
| 299 adapt_cpu_with_smoothing.SetFrom(change.adapt_cpu_with_smoothing); | 245 SetFrom(&adapt_cpu_with_smoothing, change.adapt_cpu_with_smoothing); |
| 300 video_adapt_third.SetFrom(change.video_adapt_third); | 246 SetFrom(&video_adapt_third, change.video_adapt_third); |
| 301 video_noise_reduction.SetFrom(change.video_noise_reduction); | 247 SetFrom(&video_noise_reduction, change.video_noise_reduction); |
| 302 video_start_bitrate.SetFrom(change.video_start_bitrate); | 248 SetFrom(&video_start_bitrate, change.video_start_bitrate); |
| 303 cpu_overuse_detection.SetFrom(change.cpu_overuse_detection); | 249 SetFrom(&cpu_overuse_detection, change.cpu_overuse_detection); |
| 304 cpu_underuse_threshold.SetFrom(change.cpu_underuse_threshold); | 250 SetFrom(&cpu_underuse_threshold, change.cpu_underuse_threshold); |
| 305 cpu_overuse_threshold.SetFrom(change.cpu_overuse_threshold); | 251 SetFrom(&cpu_overuse_threshold, change.cpu_overuse_threshold); |
| 306 cpu_underuse_encode_rsd_threshold.SetFrom( | 252 SetFrom(&cpu_underuse_encode_rsd_threshold, |
| 307 change.cpu_underuse_encode_rsd_threshold); | 253 change.cpu_underuse_encode_rsd_threshold); |
| 308 cpu_overuse_encode_rsd_threshold.SetFrom( | 254 SetFrom(&cpu_overuse_encode_rsd_threshold, |
| 309 change.cpu_overuse_encode_rsd_threshold); | 255 change.cpu_overuse_encode_rsd_threshold); |
| 310 cpu_overuse_encode_usage.SetFrom(change.cpu_overuse_encode_usage); | 256 SetFrom(&cpu_overuse_encode_usage, change.cpu_overuse_encode_usage); |
| 311 conference_mode.SetFrom(change.conference_mode); | 257 SetFrom(&conference_mode, change.conference_mode); |
| 312 process_adaptation_threshhold.SetFrom(change.process_adaptation_threshhold); | 258 SetFrom(&process_adaptation_threshhold, |
| 313 system_low_adaptation_threshhold.SetFrom( | 259 change.process_adaptation_threshhold); |
| 314 change.system_low_adaptation_threshhold); | 260 SetFrom(&system_low_adaptation_threshhold, |
| 315 system_high_adaptation_threshhold.SetFrom( | 261 change.system_low_adaptation_threshhold); |
| 316 change.system_high_adaptation_threshhold); | 262 SetFrom(&system_high_adaptation_threshhold, |
| 317 dscp.SetFrom(change.dscp); | 263 change.system_high_adaptation_threshhold); |
| 318 suspend_below_min_bitrate.SetFrom(change.suspend_below_min_bitrate); | 264 SetFrom(&dscp, change.dscp); |
| 319 unsignalled_recv_stream_limit.SetFrom(change.unsignalled_recv_stream_limit); | 265 SetFrom(&suspend_below_min_bitrate, change.suspend_below_min_bitrate); |
| 320 use_simulcast_adapter.SetFrom(change.use_simulcast_adapter); | 266 SetFrom(&unsignalled_recv_stream_limit, |
| 321 screencast_min_bitrate.SetFrom(change.screencast_min_bitrate); | 267 change.unsignalled_recv_stream_limit); |
| 268 SetFrom(&use_simulcast_adapter, change.use_simulcast_adapter); |
| 269 SetFrom(&screencast_min_bitrate, change.screencast_min_bitrate); |
| 322 } | 270 } |
| 323 | 271 |
| 324 bool operator==(const VideoOptions& o) const { | 272 bool operator==(const VideoOptions& o) const { |
| 325 return adapt_input_to_cpu_usage == o.adapt_input_to_cpu_usage && | 273 return adapt_input_to_cpu_usage == o.adapt_input_to_cpu_usage && |
| 326 adapt_cpu_with_smoothing == o.adapt_cpu_with_smoothing && | 274 adapt_cpu_with_smoothing == o.adapt_cpu_with_smoothing && |
| 327 video_adapt_third == o.video_adapt_third && | 275 video_adapt_third == o.video_adapt_third && |
| 328 video_noise_reduction == o.video_noise_reduction && | 276 video_noise_reduction == o.video_noise_reduction && |
| 329 video_start_bitrate == o.video_start_bitrate && | 277 video_start_bitrate == o.video_start_bitrate && |
| 330 cpu_overuse_detection == o.cpu_overuse_detection && | 278 cpu_overuse_detection == o.cpu_overuse_detection && |
| 331 cpu_underuse_threshold == o.cpu_underuse_threshold && | 279 cpu_underuse_threshold == o.cpu_underuse_threshold && |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 suspend_below_min_bitrate); | 322 suspend_below_min_bitrate); |
| 375 ost << ToStringIfSet("num channels for early receive", | 323 ost << ToStringIfSet("num channels for early receive", |
| 376 unsignalled_recv_stream_limit); | 324 unsignalled_recv_stream_limit); |
| 377 ost << ToStringIfSet("use simulcast adapter", use_simulcast_adapter); | 325 ost << ToStringIfSet("use simulcast adapter", use_simulcast_adapter); |
| 378 ost << ToStringIfSet("screencast min bitrate", screencast_min_bitrate); | 326 ost << ToStringIfSet("screencast min bitrate", screencast_min_bitrate); |
| 379 ost << "}"; | 327 ost << "}"; |
| 380 return ost.str(); | 328 return ost.str(); |
| 381 } | 329 } |
| 382 | 330 |
| 383 // Enable CPU adaptation? | 331 // Enable CPU adaptation? |
| 384 Settable<bool> adapt_input_to_cpu_usage; | 332 rtc::Maybe<bool> adapt_input_to_cpu_usage; |
| 385 // Enable CPU adaptation smoothing? | 333 // Enable CPU adaptation smoothing? |
| 386 Settable<bool> adapt_cpu_with_smoothing; | 334 rtc::Maybe<bool> adapt_cpu_with_smoothing; |
| 387 // Enable video adapt third? | 335 // Enable video adapt third? |
| 388 Settable<bool> video_adapt_third; | 336 rtc::Maybe<bool> video_adapt_third; |
| 389 // Enable denoising? | 337 // Enable denoising? |
| 390 Settable<bool> video_noise_reduction; | 338 rtc::Maybe<bool> video_noise_reduction; |
| 391 // Experimental: Enable WebRtc higher start bitrate? | 339 // Experimental: Enable WebRtc higher start bitrate? |
| 392 Settable<int> video_start_bitrate; | 340 rtc::Maybe<int> video_start_bitrate; |
| 393 // Enable WebRTC Cpu Overuse Detection, which is a new version of the CPU | 341 // Enable WebRTC Cpu Overuse Detection, which is a new version of the CPU |
| 394 // adaptation algorithm. So this option will override the | 342 // adaptation algorithm. So this option will override the |
| 395 // |adapt_input_to_cpu_usage|. | 343 // |adapt_input_to_cpu_usage|. |
| 396 Settable<bool> cpu_overuse_detection; | 344 rtc::Maybe<bool> cpu_overuse_detection; |
| 397 // Low threshold (t1) for cpu overuse adaptation. (Adapt up) | 345 // Low threshold (t1) for cpu overuse adaptation. (Adapt up) |
| 398 // Metric: encode usage (m1). m1 < t1 => underuse. | 346 // Metric: encode usage (m1). m1 < t1 => underuse. |
| 399 Settable<int> cpu_underuse_threshold; | 347 rtc::Maybe<int> cpu_underuse_threshold; |
| 400 // High threshold (t1) for cpu overuse adaptation. (Adapt down) | 348 // High threshold (t1) for cpu overuse adaptation. (Adapt down) |
| 401 // Metric: encode usage (m1). m1 > t1 => overuse. | 349 // Metric: encode usage (m1). m1 > t1 => overuse. |
| 402 Settable<int> cpu_overuse_threshold; | 350 rtc::Maybe<int> cpu_overuse_threshold; |
| 403 // Low threshold (t2) for cpu overuse adaptation. (Adapt up) | 351 // Low threshold (t2) for cpu overuse adaptation. (Adapt up) |
| 404 // Metric: relative standard deviation of encode time (m2). | 352 // Metric: relative standard deviation of encode time (m2). |
| 405 // Optional threshold. If set, (m1 < t1 && m2 < t2) => underuse. | 353 // Optional threshold. If set, (m1 < t1 && m2 < t2) => underuse. |
| 406 // Note: t2 will have no effect if t1 is not set. | 354 // Note: t2 will have no effect if t1 is not set. |
| 407 Settable<int> cpu_underuse_encode_rsd_threshold; | 355 rtc::Maybe<int> cpu_underuse_encode_rsd_threshold; |
| 408 // High threshold (t2) for cpu overuse adaptation. (Adapt down) | 356 // High threshold (t2) for cpu overuse adaptation. (Adapt down) |
| 409 // Metric: relative standard deviation of encode time (m2). | 357 // Metric: relative standard deviation of encode time (m2). |
| 410 // Optional threshold. If set, (m1 > t1 || m2 > t2) => overuse. | 358 // Optional threshold. If set, (m1 > t1 || m2 > t2) => overuse. |
| 411 // Note: t2 will have no effect if t1 is not set. | 359 // Note: t2 will have no effect if t1 is not set. |
| 412 Settable<int> cpu_overuse_encode_rsd_threshold; | 360 rtc::Maybe<int> cpu_overuse_encode_rsd_threshold; |
| 413 // Use encode usage for cpu detection. | 361 // Use encode usage for cpu detection. |
| 414 Settable<bool> cpu_overuse_encode_usage; | 362 rtc::Maybe<bool> cpu_overuse_encode_usage; |
| 415 // Use conference mode? | 363 // Use conference mode? |
| 416 Settable<bool> conference_mode; | 364 rtc::Maybe<bool> conference_mode; |
| 417 // Threshhold for process cpu adaptation. (Process limit) | 365 // Threshhold for process cpu adaptation. (Process limit) |
| 418 Settable<float> process_adaptation_threshhold; | 366 rtc::Maybe<float> process_adaptation_threshhold; |
| 419 // Low threshhold for cpu adaptation. (Adapt up) | 367 // Low threshhold for cpu adaptation. (Adapt up) |
| 420 Settable<float> system_low_adaptation_threshhold; | 368 rtc::Maybe<float> system_low_adaptation_threshhold; |
| 421 // High threshhold for cpu adaptation. (Adapt down) | 369 // High threshhold for cpu adaptation. (Adapt down) |
| 422 Settable<float> system_high_adaptation_threshhold; | 370 rtc::Maybe<float> system_high_adaptation_threshhold; |
| 423 // Set DSCP value for packet sent from video channel. | 371 // Set DSCP value for packet sent from video channel. |
| 424 Settable<bool> dscp; | 372 rtc::Maybe<bool> dscp; |
| 425 // Enable WebRTC suspension of video. No video frames will be sent when the | 373 // Enable WebRTC suspension of video. No video frames will be sent when the |
| 426 // bitrate is below the configured minimum bitrate. | 374 // bitrate is below the configured minimum bitrate. |
| 427 Settable<bool> suspend_below_min_bitrate; | 375 rtc::Maybe<bool> suspend_below_min_bitrate; |
| 428 // Limit on the number of early receive channels that can be created. | 376 // Limit on the number of early receive channels that can be created. |
| 429 Settable<int> unsignalled_recv_stream_limit; | 377 rtc::Maybe<int> unsignalled_recv_stream_limit; |
| 430 // Enable use of simulcast adapter. | 378 // Enable use of simulcast adapter. |
| 431 Settable<bool> use_simulcast_adapter; | 379 rtc::Maybe<bool> use_simulcast_adapter; |
| 432 // Force screencast to use a minimum bitrate | 380 // Force screencast to use a minimum bitrate |
| 433 Settable<int> screencast_min_bitrate; | 381 rtc::Maybe<int> screencast_min_bitrate; |
| 382 |
| 383 private: |
| 384 template <typename T> |
| 385 static void SetFrom(rtc::Maybe<T>* s, const rtc::Maybe<T>& o) { |
| 386 if (o) { |
| 387 *s = o; |
| 388 } |
| 389 } |
| 434 }; | 390 }; |
| 435 | 391 |
| 436 struct RtpHeaderExtension { | 392 struct RtpHeaderExtension { |
| 437 RtpHeaderExtension() : id(0) {} | 393 RtpHeaderExtension() : id(0) {} |
| 438 RtpHeaderExtension(const std::string& u, int i) : uri(u), id(i) {} | 394 RtpHeaderExtension(const std::string& u, int i) : uri(u), id(i) {} |
| 439 | 395 |
| 440 bool operator==(const RtpHeaderExtension& ext) const { | 396 bool operator==(const RtpHeaderExtension& ext) const { |
| 441 // id is a reserved word in objective-c. Therefore the id attribute has to | 397 // id is a reserved word in objective-c. Therefore the id attribute has to |
| 442 // be a fully qualified name in order to compile on IOS. | 398 // be a fully qualified name in order to compile on IOS. |
| 443 return this->id == ext.id && | 399 return this->id == ext.id && |
| (...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 // Signal when the media channel is ready to send the stream. Arguments are: | 1204 // Signal when the media channel is ready to send the stream. Arguments are: |
| 1249 // writable(bool) | 1205 // writable(bool) |
| 1250 sigslot::signal1<bool> SignalReadyToSend; | 1206 sigslot::signal1<bool> SignalReadyToSend; |
| 1251 // Signal for notifying that the remote side has closed the DataChannel. | 1207 // Signal for notifying that the remote side has closed the DataChannel. |
| 1252 sigslot::signal1<uint32_t> SignalStreamClosedRemotely; | 1208 sigslot::signal1<uint32_t> SignalStreamClosedRemotely; |
| 1253 }; | 1209 }; |
| 1254 | 1210 |
| 1255 } // namespace cricket | 1211 } // namespace cricket |
| 1256 | 1212 |
| 1257 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ | 1213 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ |
| OLD | NEW |