Guard preferred_dscp with the network interface lock
Bug: webrtc:10389 Change-Id: I96112c2135c9c2d545140feeef6345f8a9b81086 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/126540 Commit-Queue: Steve Anton <steveanton@webrtc.org> Reviewed-by: Amit Hilbuch <amithi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27043}
This commit is contained in:
parent
9a071d14aa
commit
e25f595c0a
@ -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<webrtc::FrameEncryptorInterface> frame_encryptor) {
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
@ -56,6 +56,7 @@ static const DataCodec* FindCodecByName(const std::vector<DataCodec>& 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
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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_);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<AudioCodec> recv_codecs_;
|
||||
|
||||
int max_send_bitrate_bps_ = 0;
|
||||
rtc::DiffServCodePoint preferred_dscp_ = rtc::DSCP_DEFAULT;
|
||||
AudioOptions options_;
|
||||
absl::optional<int> dtmf_payload_type_;
|
||||
int dtmf_payload_freq_ = -1;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user