Index: talk/media/base/mediachannel.h |
diff --git a/talk/media/base/mediachannel.h b/talk/media/base/mediachannel.h |
index c18847465c560a1c000e1982a52cb9a46ec40786..7322c59d2d2209ba21ed43b7a316c405323de5d6 100644 |
--- a/talk/media/base/mediachannel.h |
+++ b/talk/media/base/mediachannel.h |
@@ -238,160 +238,89 @@ struct AudioOptions { |
// We are moving all of the setting of options to structs like this, |
// but some things currently still use flags. |
struct VideoOptions { |
- VideoOptions() |
- : process_adaptation_threshhold(kProcessCpuThreshold), |
- system_low_adaptation_threshhold(kLowSystemCpuThreshold), |
- system_high_adaptation_threshhold(kHighSystemCpuThreshold), |
- unsignalled_recv_stream_limit(kNumDefaultUnsignalledVideoRecvStreams) {} |
- |
void SetAll(const VideoOptions& change) { |
- SetFrom(&adapt_input_to_cpu_usage, change.adapt_input_to_cpu_usage); |
- SetFrom(&adapt_cpu_with_smoothing, change.adapt_cpu_with_smoothing); |
- SetFrom(&video_adapt_third, change.video_adapt_third); |
SetFrom(&video_noise_reduction, change.video_noise_reduction); |
- SetFrom(&video_start_bitrate, change.video_start_bitrate); |
SetFrom(&cpu_overuse_detection, change.cpu_overuse_detection); |
- SetFrom(&cpu_underuse_threshold, change.cpu_underuse_threshold); |
- SetFrom(&cpu_overuse_threshold, change.cpu_overuse_threshold); |
- SetFrom(&cpu_underuse_encode_rsd_threshold, |
- change.cpu_underuse_encode_rsd_threshold); |
- SetFrom(&cpu_overuse_encode_rsd_threshold, |
- change.cpu_overuse_encode_rsd_threshold); |
- SetFrom(&cpu_overuse_encode_usage, change.cpu_overuse_encode_usage); |
SetFrom(&conference_mode, change.conference_mode); |
- SetFrom(&process_adaptation_threshhold, |
- change.process_adaptation_threshhold); |
- SetFrom(&system_low_adaptation_threshhold, |
- change.system_low_adaptation_threshhold); |
- SetFrom(&system_high_adaptation_threshhold, |
- change.system_high_adaptation_threshhold); |
SetFrom(&dscp, change.dscp); |
SetFrom(&suspend_below_min_bitrate, change.suspend_below_min_bitrate); |
- SetFrom(&unsignalled_recv_stream_limit, |
- change.unsignalled_recv_stream_limit); |
- SetFrom(&use_simulcast_adapter, change.use_simulcast_adapter); |
- SetFrom(&screencast_min_bitrate, change.screencast_min_bitrate); |
+ SetFrom(&screencast_min_bitrate_kbps, change.screencast_min_bitrate_kbps); |
SetFrom(&disable_prerenderer_smoothing, |
change.disable_prerenderer_smoothing); |
} |
bool operator==(const VideoOptions& o) const { |
- return adapt_input_to_cpu_usage == o.adapt_input_to_cpu_usage && |
- adapt_cpu_with_smoothing == o.adapt_cpu_with_smoothing && |
- video_adapt_third == o.video_adapt_third && |
- video_noise_reduction == o.video_noise_reduction && |
- video_start_bitrate == o.video_start_bitrate && |
+ return video_noise_reduction == o.video_noise_reduction && |
cpu_overuse_detection == o.cpu_overuse_detection && |
- cpu_underuse_threshold == o.cpu_underuse_threshold && |
- cpu_overuse_threshold == o.cpu_overuse_threshold && |
- cpu_underuse_encode_rsd_threshold == |
- o.cpu_underuse_encode_rsd_threshold && |
- cpu_overuse_encode_rsd_threshold == |
- o.cpu_overuse_encode_rsd_threshold && |
- cpu_overuse_encode_usage == o.cpu_overuse_encode_usage && |
conference_mode == o.conference_mode && |
- process_adaptation_threshhold == o.process_adaptation_threshhold && |
- system_low_adaptation_threshhold == |
- o.system_low_adaptation_threshhold && |
- system_high_adaptation_threshhold == |
- o.system_high_adaptation_threshhold && |
dscp == o.dscp && |
suspend_below_min_bitrate == o.suspend_below_min_bitrate && |
- unsignalled_recv_stream_limit == o.unsignalled_recv_stream_limit && |
- use_simulcast_adapter == o.use_simulcast_adapter && |
- screencast_min_bitrate == o.screencast_min_bitrate && |
+ screencast_min_bitrate_kbps == o.screencast_min_bitrate_kbps && |
disable_prerenderer_smoothing == o.disable_prerenderer_smoothing; |
} |
std::string ToString() const { |
std::ostringstream ost; |
ost << "VideoOptions {"; |
- ost << ToStringIfSet("cpu adaption", adapt_input_to_cpu_usage); |
- ost << ToStringIfSet("cpu adaptation smoothing", adapt_cpu_with_smoothing); |
- ost << ToStringIfSet("video adapt third", video_adapt_third); |
ost << ToStringIfSet("noise reduction", video_noise_reduction); |
- ost << ToStringIfSet("start bitrate", video_start_bitrate); |
ost << ToStringIfSet("cpu overuse detection", cpu_overuse_detection); |
- ost << ToStringIfSet("cpu underuse threshold", cpu_underuse_threshold); |
- ost << ToStringIfSet("cpu overuse threshold", cpu_overuse_threshold); |
- ost << ToStringIfSet("cpu underuse encode rsd threshold", |
- cpu_underuse_encode_rsd_threshold); |
- ost << ToStringIfSet("cpu overuse encode rsd threshold", |
- cpu_overuse_encode_rsd_threshold); |
- ost << ToStringIfSet("cpu overuse encode usage", |
- cpu_overuse_encode_usage); |
ost << ToStringIfSet("conference mode", conference_mode); |
- ost << ToStringIfSet("process", process_adaptation_threshhold); |
- ost << ToStringIfSet("low", system_low_adaptation_threshhold); |
- ost << ToStringIfSet("high", system_high_adaptation_threshhold); |
ost << ToStringIfSet("dscp", dscp); |
ost << ToStringIfSet("suspend below min bitrate", |
suspend_below_min_bitrate); |
- ost << ToStringIfSet("num channels for early receive", |
- unsignalled_recv_stream_limit); |
- ost << ToStringIfSet("use simulcast adapter", use_simulcast_adapter); |
- ost << ToStringIfSet("screencast min bitrate", screencast_min_bitrate); |
+ ost << ToStringIfSet("screencast min bitrate kbps", |
+ screencast_min_bitrate_kbps); |
ost << "}"; |
return ost.str(); |
} |
- // Enable CPU adaptation? |
- rtc::Optional<bool> adapt_input_to_cpu_usage; |
- // Enable CPU adaptation smoothing? |
- rtc::Optional<bool> adapt_cpu_with_smoothing; |
- // Enable video adapt third? |
- rtc::Optional<bool> video_adapt_third; |
- // Enable denoising? |
+ // Enable denoising? This flag comes from the getUserMedia |
+ // constraint 'googNoiseReduction', and WebRtcVideoEngine2 passes it |
+ // on to the codec options. Disabled by default. |
rtc::Optional<bool> video_noise_reduction; |
- // Experimental: Enable WebRtc higher start bitrate? |
- rtc::Optional<int> video_start_bitrate; |
- // Enable WebRTC Cpu Overuse Detection, which is a new version of the CPU |
- // adaptation algorithm. So this option will override the |
- // |adapt_input_to_cpu_usage|. |
+ // Enable WebRTC Cpu Overuse Detection. This flag comes from the |
+ // PeerConnection constraint 'googCpuOveruseDetection' and is |
+ // checked in WebRtcVideoChannel2::OnLoadUpdate, where it's passed |
+ // to VideoCapturer::video_adapter()->OnCpuResolutionRequest. |
rtc::Optional<bool> cpu_overuse_detection; |
- // Low threshold (t1) for cpu overuse adaptation. (Adapt up) |
- // Metric: encode usage (m1). m1 < t1 => underuse. |
- rtc::Optional<int> cpu_underuse_threshold; |
- // High threshold (t1) for cpu overuse adaptation. (Adapt down) |
- // Metric: encode usage (m1). m1 > t1 => overuse. |
- rtc::Optional<int> cpu_overuse_threshold; |
- // Low threshold (t2) for cpu overuse adaptation. (Adapt up) |
- // Metric: relative standard deviation of encode time (m2). |
- // Optional threshold. If set, (m1 < t1 && m2 < t2) => underuse. |
- // Note: t2 will have no effect if t1 is not set. |
- rtc::Optional<int> cpu_underuse_encode_rsd_threshold; |
- // High threshold (t2) for cpu overuse adaptation. (Adapt down) |
- // Metric: relative standard deviation of encode time (m2). |
- // Optional threshold. If set, (m1 > t1 || m2 > t2) => overuse. |
- // Note: t2 will have no effect if t1 is not set. |
- rtc::Optional<int> cpu_overuse_encode_rsd_threshold; |
- // Use encode usage for cpu detection. |
- rtc::Optional<bool> cpu_overuse_encode_usage; |
- // Use conference mode? |
+ // Use conference mode? This flag comes from the remote |
+ // description's SDP line 'a=x-google-flag:conference', copied over |
+ // by VideoChannel::SetRemoteContent_w, and ultimately used by |
+ // conference mode screencast logic in |
+ // WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig. |
+ // The special screencast behaviour is disabled by default. |
rtc::Optional<bool> conference_mode; |
- // Threshhold for process cpu adaptation. (Process limit) |
- rtc::Optional<float> process_adaptation_threshhold; |
- // Low threshhold for cpu adaptation. (Adapt up) |
- rtc::Optional<float> system_low_adaptation_threshhold; |
- // High threshhold for cpu adaptation. (Adapt down) |
- rtc::Optional<float> system_high_adaptation_threshhold; |
- // Set DSCP value for packet sent from video channel. |
+ // Set DSCP value for packet sent from video channel. This flag |
+ // comes from the PeerConnection constraint 'googDscp' and, |
+ // WebRtcVideoChannel2::SetOptions checks it before calling |
+ // MediaChannel::SetDscp. If enabled, rtc::DSCP_AF41 is used. If |
+ // disabled, which is the default, rtc::DSCP_DEFAULT is used. |
rtc::Optional<bool> dscp; |
- // Enable WebRTC suspension of video. No video frames will be sent when the |
- // bitrate is below the configured minimum bitrate. |
+ // Enable WebRTC suspension of video. No video frames will be sent |
+ // when the bitrate is below the configured minimum bitrate. This |
+ // flag comes from the PeerConnection constraint |
+ // 'googSuspendBelowMinBitrate', and WebRtcVideoChannel2 copies it |
+ // to VideoSendStream::Config::suspend_below_min_bitrate. |
rtc::Optional<bool> suspend_below_min_bitrate; |
- // Limit on the number of early receive channels that can be created. |
- rtc::Optional<int> unsignalled_recv_stream_limit; |
- // Enable use of simulcast adapter. |
- rtc::Optional<bool> use_simulcast_adapter; |
- // Force screencast to use a minimum bitrate |
- rtc::Optional<int> screencast_min_bitrate; |
+ // Force screencast to use a minimum bitrate. This flag comes from |
+ // the PeerConnection constraint 'googScreencastMinBitrate'. It is |
+ // copied to the encoder config by WebRtcVideoChannel2. |
+ rtc::Optional<int> screencast_min_bitrate_kbps; |
// Set to true if the renderer has an algorithm of frame selection. |
// If the value is true, then WebRTC will hand over a frame as soon as |
// possible without delay, and rendering smoothness is completely the duty |
// of the renderer; |
// If the value is false, then WebRTC is responsible to delay frame release |
// in order to increase rendering smoothness. |
+ // |
+ // This flag comes from PeerConnection's RtcConfiguration, but is |
+ // currently only set by the command line flag |
+ // 'disable-rtc-smoothness-algorithm'. |
+ // WebRtcVideoChannel2::AddRecvStream copies it to the created |
+ // WebRtcVideoReceiveStream, where it is returned by the |
+ // SmoothsRenderedFrames method. This method is used by the |
+ // VideoReceiveStream, where the value is passed on to the |
+ // IncomingVideoStream constructor. |
rtc::Optional<bool> disable_prerenderer_smoothing; |
private: |