Index: webrtc/media/base/mediachannel.h |
diff --git a/webrtc/media/base/mediachannel.h b/webrtc/media/base/mediachannel.h |
index 30d4a45ff21debbf7caa4ba80b17873046193bf4..170df586a7586a2cb8a3ffd3c5a01db8ba7f8eeb 100644 |
--- a/webrtc/media/base/mediachannel.h |
+++ b/webrtc/media/base/mediachannel.h |
@@ -95,6 +95,12 @@ static std::string VectorToString(const std::vector<T>& vals) { |
return ost.str(); |
} |
+struct MediaChannelOptions { |
+ // Set DSCP value for packet sent from media channel. This flag |
+ // comes from the PeerConnection constraint 'googDscp'. |
+ bool enable_dscp = false; |
+}; |
+ |
// Options that can be applied to a VoiceMediaChannel or a VoiceMediaEngine. |
// Used to be flags, but that makes it hard to selectively apply options. |
// We are moving all of the setting of options to structs like this, |
@@ -125,7 +131,6 @@ struct AudioOptions { |
SetFrom(&tx_agc_limiter, change.tx_agc_limiter); |
SetFrom(&recording_sample_rate, change.recording_sample_rate); |
SetFrom(&playout_sample_rate, change.playout_sample_rate); |
- SetFrom(&dscp, change.dscp); |
SetFrom(&combined_audio_video_bwe, change.combined_audio_video_bwe); |
} |
@@ -152,7 +157,6 @@ struct AudioOptions { |
tx_agc_limiter == o.tx_agc_limiter && |
recording_sample_rate == o.recording_sample_rate && |
playout_sample_rate == o.playout_sample_rate && |
- dscp == o.dscp && |
combined_audio_video_bwe == o.combined_audio_video_bwe; |
} |
@@ -183,7 +187,6 @@ struct AudioOptions { |
ost << ToStringIfSet("tx_agc_limiter", tx_agc_limiter); |
ost << ToStringIfSet("recording_sample_rate", recording_sample_rate); |
ost << ToStringIfSet("playout_sample_rate", playout_sample_rate); |
- ost << ToStringIfSet("dscp", dscp); |
ost << ToStringIfSet("combined_audio_video_bwe", combined_audio_video_bwe); |
ost << "}"; |
return ost.str(); |
@@ -220,8 +223,6 @@ struct AudioOptions { |
rtc::Optional<bool> tx_agc_limiter; |
rtc::Optional<uint32_t> recording_sample_rate; |
rtc::Optional<uint32_t> playout_sample_rate; |
- // Set DSCP value for packet sent from audio channel. |
- rtc::Optional<bool> dscp; |
// Enable combined audio+bandwidth BWE. |
rtc::Optional<bool> combined_audio_video_bwe; |
@@ -243,7 +244,6 @@ struct VideoOptions { |
SetFrom(&video_noise_reduction, change.video_noise_reduction); |
SetFrom(&cpu_overuse_detection, change.cpu_overuse_detection); |
SetFrom(&conference_mode, change.conference_mode); |
- SetFrom(&dscp, change.dscp); |
SetFrom(&suspend_below_min_bitrate, change.suspend_below_min_bitrate); |
SetFrom(&screencast_min_bitrate_kbps, change.screencast_min_bitrate_kbps); |
SetFrom(&disable_prerenderer_smoothing, |
@@ -254,7 +254,6 @@ struct VideoOptions { |
return video_noise_reduction == o.video_noise_reduction && |
cpu_overuse_detection == o.cpu_overuse_detection && |
conference_mode == o.conference_mode && |
- dscp == o.dscp && |
suspend_below_min_bitrate == o.suspend_below_min_bitrate && |
screencast_min_bitrate_kbps == o.screencast_min_bitrate_kbps && |
disable_prerenderer_smoothing == o.disable_prerenderer_smoothing; |
@@ -266,7 +265,6 @@ struct VideoOptions { |
ost << ToStringIfSet("noise reduction", video_noise_reduction); |
ost << ToStringIfSet("cpu overuse detection", cpu_overuse_detection); |
ost << ToStringIfSet("conference mode", conference_mode); |
- ost << ToStringIfSet("dscp", dscp); |
ost << ToStringIfSet("suspend below min bitrate", |
suspend_below_min_bitrate); |
ost << ToStringIfSet("screencast min bitrate kbps", |
@@ -291,12 +289,6 @@ struct VideoOptions { |
// WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig. |
// The special screencast behaviour is disabled by default. |
rtc::Optional<bool> conference_mode; |
- // 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. This |
// flag comes from the PeerConnection constraint |
@@ -385,13 +377,18 @@ class MediaChannel : public sigslot::has_slots<> { |
virtual ~NetworkInterface() {} |
}; |
- MediaChannel() : network_interface_(NULL) {} |
+ MediaChannel(const MediaChannelOptions& options) |
+ : options_(options), network_interface_(NULL) {} |
virtual ~MediaChannel() {} |
// Sets the abstract interface class for sending RTP/RTCP data. |
virtual void SetInterface(NetworkInterface *iface) { |
rtc::CritScope cs(&network_interface_crit_); |
network_interface_ = iface; |
+ SetDscp(options_.enable_dscp ? MediaTypeDscpValue() : rtc::DSCP_DEFAULT); |
+ } |
+ virtual rtc::DiffServCodePoint MediaTypeDscpValue() const { |
+ return rtc::DSCP_DEFAULT; |
} |
// Called when a RTP packet is received. |
@@ -468,6 +465,7 @@ class MediaChannel : public sigslot::has_slots<> { |
: network_interface_->SendRtcp(packet, options); |
} |
+ const MediaChannelOptions options_; |
// |network_interface_| can be accessed from the worker_thread and |
// from any MediaEngine threads. This critical section is to protect accessing |
// of network_interface_ object. |
@@ -920,7 +918,9 @@ class VoiceMediaChannel : public MediaChannel { |
ERROR_PLAY_SRTP_REPLAY, // Packet replay detected. |
}; |
- VoiceMediaChannel() {} |
+ VoiceMediaChannel(const MediaChannelOptions& options) |
+ : MediaChannel(options) {} |
+ |
virtual ~VoiceMediaChannel() {} |
virtual bool SetSendParameters(const AudioSendParameters& params) = 0; |
virtual bool SetRecvParameters(const AudioRecvParameters& params) = 0; |
@@ -983,7 +983,8 @@ class VideoMediaChannel : public MediaChannel { |
ERROR_PLAY_SRTP_REPLAY, // Packet replay detected. |
}; |
- VideoMediaChannel() {} |
+ VideoMediaChannel(const MediaChannelOptions& options) |
+ : MediaChannel(options) {} |
virtual ~VideoMediaChannel() {} |
virtual bool SetSendParameters(const VideoSendParameters& params) = 0; |
@@ -1106,6 +1107,8 @@ class DataMediaChannel : public MediaChannel { |
ERROR_RECV_SRTP_REPLAY, // Packet replay detected. |
}; |
+ DataMediaChannel(const MediaChannelOptions& options) |
+ : MediaChannel(options) {} |
virtual ~DataMediaChannel() {} |
virtual bool SetSendParameters(const DataSendParameters& params) = 0; |