Fix race on VCM protection callback.
Removes protection-callback removal and makes ViEChannel outlive ViEEncoder to not have races between BitrateAllocator and VideoSendStream destruction. BUG= R=stefan@webrtc.org Review URL: https://codereview.webrtc.org/1696693002 . Cr-Commit-Position: refs/heads/master@{#11604}
This commit is contained in:
parent
b72dada927
commit
579e832a51
@ -174,15 +174,6 @@ VideoSendStream::VideoSendStream(
|
||||
this,
|
||||
config.post_encode_callback,
|
||||
&stats_proxy_),
|
||||
vie_encoder_(num_cpu_cores,
|
||||
module_process_thread_,
|
||||
&stats_proxy_,
|
||||
config.pre_encode_callback,
|
||||
&overuse_detector_,
|
||||
congestion_controller_->pacer(),
|
||||
&payload_router_,
|
||||
bitrate_allocator),
|
||||
vcm_(vie_encoder_.vcm()),
|
||||
vie_channel_(config.send_transport,
|
||||
module_process_thread_,
|
||||
&payload_router_,
|
||||
@ -198,6 +189,15 @@ VideoSendStream::VideoSendStream(
|
||||
config_.rtp.ssrcs.size(),
|
||||
true),
|
||||
vie_receiver_(vie_channel_.vie_receiver()),
|
||||
vie_encoder_(num_cpu_cores,
|
||||
module_process_thread_,
|
||||
&stats_proxy_,
|
||||
config.pre_encode_callback,
|
||||
&overuse_detector_,
|
||||
congestion_controller_->pacer(),
|
||||
&payload_router_,
|
||||
bitrate_allocator),
|
||||
vcm_(vie_encoder_.vcm()),
|
||||
input_(&vie_encoder_,
|
||||
config_.local_renderer,
|
||||
&stats_proxy_,
|
||||
@ -306,10 +306,6 @@ VideoSendStream::~VideoSendStream() {
|
||||
Stop();
|
||||
|
||||
module_process_thread_->DeRegisterModule(&overuse_detector_);
|
||||
// Remove vcm_protection_callback (part of vie_channel_) before destroying
|
||||
// ViEChannel. vcm_ is owned by ViEEncoder and the registered callback does
|
||||
// not outlive it.
|
||||
vcm_->RegisterProtectionCallback(nullptr);
|
||||
vie_channel_.RegisterSendFrameCountObserver(nullptr);
|
||||
vie_channel_.RegisterSendBitrateObserver(nullptr);
|
||||
vie_channel_.RegisterRtcpPacketTypeCounterObserver(nullptr);
|
||||
|
||||
@ -94,11 +94,11 @@ class VideoSendStream : public webrtc::VideoSendStream,
|
||||
|
||||
OveruseFrameDetector overuse_detector_;
|
||||
PayloadRouter payload_router_;
|
||||
ViEEncoder vie_encoder_;
|
||||
VideoCodingModule* const vcm_;
|
||||
EncoderStateFeedback encoder_feedback_;
|
||||
ViEChannel vie_channel_;
|
||||
ViEReceiver* const vie_receiver_;
|
||||
ViEEncoder vie_encoder_;
|
||||
VideoCodingModule* const vcm_;
|
||||
VideoCaptureInput input_;
|
||||
};
|
||||
} // namespace internal
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user