Update SetPayloadTypeDemuxingEnabled_w to avoid an unnecessary Invoke.
If a call to BaseChannel::SetPayloadTypeDemuxingEnabled does not result in a demuxer criteria configuration change, we can avoid an Invoke and speed up negotiations. Bug: webrtc:11993 Change-Id: I80c894d7cc2a733ab84c1f4978f0c58c09a123a5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/244920 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35649}
This commit is contained in:
parent
47ff35db61
commit
e68d874cf1
@ -572,10 +572,16 @@ void BaseChannel::ChannelNotWritable_n() {
|
||||
}
|
||||
|
||||
bool BaseChannel::SetPayloadTypeDemuxingEnabled_w(bool enabled) {
|
||||
RTC_LOG_THREAD_BLOCK_COUNT();
|
||||
|
||||
if (enabled == payload_type_demuxing_enabled_) {
|
||||
return true;
|
||||
}
|
||||
|
||||
payload_type_demuxing_enabled_ = enabled;
|
||||
|
||||
bool config_changed = false;
|
||||
|
||||
if (!enabled) {
|
||||
// TODO(crbug.com/11477): This will remove *all* unsignaled streams (those
|
||||
// without an explicitly signaled SSRC), which may include streams that
|
||||
@ -583,14 +589,25 @@ bool BaseChannel::SetPayloadTypeDemuxingEnabled_w(bool enabled) {
|
||||
// streams that were matched based on payload type alone, but currently
|
||||
// there is no straightforward way to identify those streams.
|
||||
media_channel()->ResetUnsignaledRecvStream();
|
||||
demuxer_criteria_.payload_types().clear();
|
||||
if (!demuxer_criteria_.payload_types().empty()) {
|
||||
config_changed = true;
|
||||
demuxer_criteria_.payload_types().clear();
|
||||
}
|
||||
} else if (!payload_types_.empty()) {
|
||||
// TODO(tommi): Instead of 'insert', should this simply overwrite the value
|
||||
// of the criteria?
|
||||
demuxer_criteria_.payload_types().insert(payload_types_.begin(),
|
||||
payload_types_.end());
|
||||
for (const auto& type : payload_types_) {
|
||||
if (demuxer_criteria_.payload_types().insert(type).second) {
|
||||
config_changed = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
RTC_DCHECK(demuxer_criteria_.payload_types().empty());
|
||||
}
|
||||
|
||||
RTC_DCHECK_BLOCK_COUNT_NO_MORE_THAN(0);
|
||||
|
||||
if (!config_changed)
|
||||
return true;
|
||||
|
||||
// Note: This synchronously hops to the network thread.
|
||||
return RegisterRtpDemuxerSink_w();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user