Remove synchronization from VideoSendStream construction.
* Make VideoSendStream and VideoSendStreamImpl construction non-blocking. * Move ownership of the rtp video sender to VideoSendStream. * Most state is constructed in initializer lists. * More state is now const (including VideoSendStreamImpl ptr) * Adding thread checks to classes that appear to have had a race before E.g. RtpTransportControllerSend. The change in threading now actually fixes an issue we weren't aware of. * Moved from using weak_ptr to safety flag and made some PostTask calls cancellable that could potentially have been problematic. Initalizing the flag without thread synchronization is also simpler. This should speed up renegotiation significantly when there are multiple channels. A follow-up change will improve SetSend as well which is another costly step during renegotiation. Bug: webrtc:12840 Change-Id: If4b28da5a085643ce132c7cfcf80a62cd1a625c5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/221105 Commit-Queue: Tommi <tommi@webrtc.org> Reviewed-by: Markus Handell <handellm@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34224}
This commit is contained in:
@ -142,6 +142,7 @@ RtpTransportControllerSend::RtpTransportControllerSend(
|
||||
}
|
||||
|
||||
RtpTransportControllerSend::~RtpTransportControllerSend() {
|
||||
RTC_DCHECK(video_rtp_senders_.empty());
|
||||
process_thread_->Stop();
|
||||
}
|
||||
|
||||
@ -156,6 +157,7 @@ RtpVideoSenderInterface* RtpTransportControllerSend::CreateRtpVideoSender(
|
||||
std::unique_ptr<FecController> fec_controller,
|
||||
const RtpSenderFrameEncryptionConfig& frame_encryption_config,
|
||||
rtc::scoped_refptr<FrameTransformerInterface> frame_transformer) {
|
||||
RTC_DCHECK_RUN_ON(&main_thread_);
|
||||
video_rtp_senders_.push_back(std::make_unique<RtpVideoSender>(
|
||||
clock_, suspended_ssrcs, states, rtp_config, rtcp_report_interval_ms,
|
||||
send_transport, observers,
|
||||
@ -169,6 +171,7 @@ RtpVideoSenderInterface* RtpTransportControllerSend::CreateRtpVideoSender(
|
||||
|
||||
void RtpTransportControllerSend::DestroyRtpVideoSender(
|
||||
RtpVideoSenderInterface* rtp_video_sender) {
|
||||
RTC_DCHECK_RUN_ON(&main_thread_);
|
||||
std::vector<std::unique_ptr<RtpVideoSenderInterface>>::iterator it =
|
||||
video_rtp_senders_.end();
|
||||
for (it = video_rtp_senders_.begin(); it != video_rtp_senders_.end(); ++it) {
|
||||
@ -354,6 +357,7 @@ void RtpTransportControllerSend::OnNetworkRouteChanged(
|
||||
}
|
||||
}
|
||||
void RtpTransportControllerSend::OnNetworkAvailability(bool network_available) {
|
||||
RTC_DCHECK_RUN_ON(&main_thread_);
|
||||
RTC_LOG(LS_VERBOSE) << "SignalNetworkState "
|
||||
<< (network_available ? "Up" : "Down");
|
||||
NetworkAvailability msg;
|
||||
@ -470,6 +474,7 @@ RtpTransportControllerSend::ApplyOrLiftRelayCap(bool is_relayed) {
|
||||
|
||||
void RtpTransportControllerSend::OnTransportOverheadChanged(
|
||||
size_t transport_overhead_bytes_per_packet) {
|
||||
RTC_DCHECK_RUN_ON(&main_thread_);
|
||||
if (transport_overhead_bytes_per_packet >= kMaxOverheadBytes) {
|
||||
RTC_LOG(LS_ERROR) << "Transport overhead exceeds " << kMaxOverheadBytes;
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user