diff --git a/media/base/media_channel.cc b/media/base/media_channel.cc index 998a52b031..c512efdbbd 100644 --- a/media/base/media_channel.cc +++ b/media/base/media_channel.cc @@ -35,10 +35,6 @@ int MediaChannel::GetRtpSendTimeExtnId() const { return -1; } -rtc::DiffServCodePoint MediaChannel::PreferredDscp() const { - return rtc::DSCP_DEFAULT; -} - void MediaChannel::SetFrameEncryptor( uint32_t ssrc, rtc::scoped_refptr frame_encryptor) { diff --git a/media/base/media_channel.h b/media/base/media_channel.h index bd703dc624..7891e5569b 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -280,23 +280,37 @@ class MediaChannel : public sigslot::has_slots<> { const webrtc::RtpParameters& parameters) = 0; protected: - virtual rtc::DiffServCodePoint PreferredDscp() const; - bool DscpEnabled() const { return enable_dscp_; } - // This method sets DSCP |value| on both RTP and RTCP channels. - int UpdateDscp() { + // This is the DSCP value used for both RTP and RTCP channels if DSCP is + // enabled. It can be changed at any time via |SetPreferredDscp|. + rtc::DiffServCodePoint PreferredDscp() const { + rtc::CritScope cs(&network_interface_crit_); + return preferred_dscp_; + } + + int SetPreferredDscp(rtc::DiffServCodePoint preferred_dscp) { + rtc::CritScope cs(&network_interface_crit_); + if (preferred_dscp == preferred_dscp_) { + return 0; + } + preferred_dscp_ = preferred_dscp; + return UpdateDscp(); + } + + private: + // Apply the preferred DSCP setting to the underlying network interface RTP + // and RTCP channels. If DSCP is disabled, then apply the default DSCP value. + int UpdateDscp() RTC_EXCLUSIVE_LOCKS_REQUIRED(network_interface_crit_) { rtc::DiffServCodePoint value = - enable_dscp_ ? PreferredDscp() : rtc::DSCP_DEFAULT; - int ret; - ret = SetOption(NetworkInterface::ST_RTP, rtc::Socket::OPT_DSCP, value); + enable_dscp_ ? preferred_dscp_ : rtc::DSCP_DEFAULT; + int ret = SetOption(NetworkInterface::ST_RTP, rtc::Socket::OPT_DSCP, value); if (ret == 0) { ret = SetOption(NetworkInterface::ST_RTCP, rtc::Socket::OPT_DSCP, value); } return ret; } - private: bool DoSendPacket(rtc::CopyOnWriteBuffer* packet, bool rtcp, const rtc::PacketOptions& options) { @@ -313,7 +327,10 @@ class MediaChannel : public sigslot::has_slots<> { // from any MediaEngine threads. This critical section is to protect accessing // of network_interface_ object. rtc::CriticalSection network_interface_crit_; - NetworkInterface* network_interface_ = nullptr; + NetworkInterface* network_interface_ RTC_GUARDED_BY(network_interface_crit_) = + nullptr; + rtc::DiffServCodePoint preferred_dscp_ + RTC_GUARDED_BY(network_interface_crit_) = rtc::DSCP_DEFAULT; webrtc::MediaTransportInterface* media_transport_ = nullptr; bool extmap_allow_mixed_ = false; }; diff --git a/media/base/rtp_data_engine.cc b/media/base/rtp_data_engine.cc index 42ec8d076f..be71f46b95 100644 --- a/media/base/rtp_data_engine.cc +++ b/media/base/rtp_data_engine.cc @@ -56,6 +56,7 @@ static const DataCodec* FindCodecByName(const std::vector& codecs, RtpDataMediaChannel::RtpDataMediaChannel(const MediaConfig& config) : DataMediaChannel(config) { Construct(); + SetPreferredDscp(rtc::DSCP_AF41); } void RtpDataMediaChannel::Construct() { @@ -331,8 +332,4 @@ bool RtpDataMediaChannel::SendData(const SendDataParams& params, return true; } -rtc::DiffServCodePoint RtpDataMediaChannel::PreferredDscp() const { - return rtc::DSCP_AF41; -} - } // namespace cricket diff --git a/media/base/rtp_data_engine.h b/media/base/rtp_data_engine.h index f24b224695..6ac09aa3f4 100644 --- a/media/base/rtp_data_engine.h +++ b/media/base/rtp_data_engine.h @@ -89,7 +89,6 @@ class RtpDataMediaChannel : public DataMediaChannel { virtual bool SendData(const SendDataParams& params, const rtc::CopyOnWriteBuffer& payload, SendDataResult* result); - virtual rtc::DiffServCodePoint PreferredDscp() const; private: void Construct(); diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index 058fa8a692..c0848f6bd5 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -524,7 +524,6 @@ WebRtcVideoChannel::WebRtcVideoChannel( encoder_factory_(encoder_factory), decoder_factory_(decoder_factory), bitrate_allocator_factory_(bitrate_allocator_factory), - preferred_dscp_(rtc::DSCP_DEFAULT), default_send_options_(options), last_stats_log_ms_(-1), discard_unknown_ssrc_packets_(webrtc::field_trial::IsEnabled( @@ -660,11 +659,6 @@ bool WebRtcVideoChannel::GetChangedSendParameters( return true; } -rtc::DiffServCodePoint WebRtcVideoChannel::PreferredDscp() const { - RTC_DCHECK_RUN_ON(&thread_checker_); - return preferred_dscp_; -} - bool WebRtcVideoChannel::SetSendParameters(const VideoSendParameters& params) { RTC_DCHECK_RUN_ON(&thread_checker_); TRACE_EVENT0("webrtc", "WebRtcVideoChannel::SetSendParameters"); @@ -800,10 +794,7 @@ webrtc::RTCError WebRtcVideoChannel::SetRtpSendParameters( return webrtc::RTCError(webrtc::RTCErrorType::INVALID_RANGE); } - if (new_dscp != preferred_dscp_) { - preferred_dscp_ = new_dscp; - MediaChannel::UpdateDscp(); - } + SetPreferredDscp(new_dscp); } return it->second->SetRtpParameters(parameters); diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h index c24aad6f0b..35e6b855de 100644 --- a/media/engine/webrtc_video_engine.h +++ b/media/engine/webrtc_video_engine.h @@ -118,8 +118,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { ~WebRtcVideoChannel() override; // VideoMediaChannel implementation - rtc::DiffServCodePoint PreferredDscp() const override; - bool SetSendParameters(const VideoSendParameters& params) override; bool SetRecvParameters(const VideoRecvParameters& params) override; webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override; @@ -529,7 +527,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { // TODO(deadbeef): Don't duplicate information between // send_params/recv_params, rtp_extensions, options, etc. VideoSendParameters send_params_ RTC_GUARDED_BY(thread_checker_); - rtc::DiffServCodePoint preferred_dscp_ RTC_GUARDED_BY(thread_checker_); VideoOptions default_send_options_ RTC_GUARDED_BY(thread_checker_); VideoRecvParameters recv_params_ RTC_GUARDED_BY(thread_checker_); int64_t last_stats_log_ms_ RTC_GUARDED_BY(thread_checker_); diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index fe1de34fe1..b7128faa96 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc @@ -1275,10 +1275,6 @@ WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel() { engine()->UnregisterChannel(this); } -rtc::DiffServCodePoint WebRtcVoiceMediaChannel::PreferredDscp() const { - return preferred_dscp_; -} - bool WebRtcVoiceMediaChannel::SetSendParameters( const AudioSendParameters& params) { TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::SetSendParameters"); @@ -1407,10 +1403,7 @@ webrtc::RTCError WebRtcVoiceMediaChannel::SetRtpSendParameters( return webrtc::RTCError(webrtc::RTCErrorType::INVALID_RANGE); } - if (new_dscp != preferred_dscp_) { - preferred_dscp_ = new_dscp; - MediaChannel::UpdateDscp(); - } + SetPreferredDscp(new_dscp); } // TODO(minyue): The following legacy actions go into diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h index 830887d1b1..cbec00353d 100644 --- a/media/engine/webrtc_voice_engine.h +++ b/media/engine/webrtc_voice_engine.h @@ -155,8 +155,6 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, const AudioOptions& options() const { return options_; } - rtc::DiffServCodePoint PreferredDscp() const override; - bool SetSendParameters(const AudioSendParameters& params) override; bool SetRecvParameters(const AudioRecvParameters& params) override; webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override; @@ -275,7 +273,6 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, std::vector recv_codecs_; int max_send_bitrate_bps_ = 0; - rtc::DiffServCodePoint preferred_dscp_ = rtc::DSCP_DEFAULT; AudioOptions options_; absl::optional dtmf_payload_type_; int dtmf_payload_freq_ = -1;