| Index: webrtc/video/video_send_stream.cc
|
| diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
|
| index 08dcd77ac69c749ac609e63c73d1f65c0490b5bb..56dd5d4d4fe40c7a8d2038e22ec6b17fc2d6fcdd 100644
|
| --- a/webrtc/video/video_send_stream.cc
|
| +++ b/webrtc/video/video_send_stream.cc
|
| @@ -24,7 +24,6 @@
|
| #include "webrtc/modules/pacing/packet_router.h"
|
| #include "webrtc/video/call_stats.h"
|
| #include "webrtc/video/encoder_state_feedback.h"
|
| -#include "webrtc/video/payload_router.h"
|
| #include "webrtc/video/video_capture_input.h"
|
| #include "webrtc/video/vie_channel.h"
|
| #include "webrtc/video/vie_encoder.h"
|
| @@ -124,7 +123,6 @@ VideoSendStream::VideoSendStream(
|
| encoded_frame_proxy_(config.post_encode_callback),
|
| config_(config),
|
| suspended_ssrcs_(suspended_ssrcs),
|
| - module_process_thread_(module_process_thread),
|
| call_stats_(call_stats),
|
| congestion_controller_(congestion_controller),
|
| encoder_feedback_(new EncoderStateFeedback()),
|
| @@ -144,28 +142,27 @@ VideoSendStream::VideoSendStream(
|
|
|
| const std::vector<uint32_t>& ssrcs = config.rtp.ssrcs;
|
|
|
| - vie_encoder_.reset(new ViEEncoder(
|
| - num_cpu_cores, module_process_thread_, &stats_proxy_,
|
| - config.pre_encode_callback, congestion_controller_->pacer(),
|
| - bitrate_allocator));
|
| + vie_encoder_.reset(new ViEEncoder(num_cpu_cores, module_process_thread,
|
| + &stats_proxy_, config.pre_encode_callback,
|
| + congestion_controller_->pacer(),
|
| + &payload_router_, bitrate_allocator));
|
| + vcm_ = vie_encoder_->vcm();
|
| RTC_CHECK(vie_encoder_->Init());
|
|
|
| vie_channel_.reset(new ViEChannel(
|
| - num_cpu_cores, config.send_transport, module_process_thread_,
|
| - encoder_feedback_->GetRtcpIntraFrameObserver(),
|
| - congestion_controller_->GetBitrateController()->
|
| - CreateRtcpBandwidthObserver(),
|
| + num_cpu_cores, config.send_transport, module_process_thread,
|
| + &payload_router_, nullptr, encoder_feedback_->GetRtcpIntraFrameObserver(),
|
| + congestion_controller_->GetBitrateController()
|
| + ->CreateRtcpBandwidthObserver(),
|
| transport_feedback_observer,
|
| congestion_controller_->GetRemoteBitrateEstimator(false),
|
| call_stats_->rtcp_rtt_stats(), congestion_controller_->pacer(),
|
| congestion_controller_->packet_router(), ssrcs.size(), true));
|
| RTC_CHECK(vie_channel_->Init() == 0);
|
|
|
| - call_stats_->RegisterStatsObserver(vie_channel_->GetStatsObserver());
|
| + vcm_->RegisterProtectionCallback(vie_channel_->vcm_protection_callback());
|
|
|
| - vie_encoder_->StartThreadsAndSetSharedMembers(
|
| - vie_channel_->send_payload_router(),
|
| - vie_channel_->vcm_protection_callback());
|
| + call_stats_->RegisterStatsObserver(vie_channel_->GetStatsObserver());
|
|
|
| std::vector<uint32_t> first_ssrc(1, ssrcs[0]);
|
| vie_encoder_->SetSsrcs(first_ssrc);
|
| @@ -207,7 +204,7 @@ VideoSendStream::VideoSendStream(
|
| vie_channel_->SetRTCPCName(config_.rtp.c_name.c_str());
|
|
|
| input_.reset(new internal::VideoCaptureInput(
|
| - module_process_thread_, vie_encoder_.get(), config_.local_renderer,
|
| + module_process_thread, vie_encoder_.get(), config_.local_renderer,
|
| &stats_proxy_, this, config_.encoding_time_observer));
|
|
|
| // 28 to match packet overhead in ModuleRtpRtcpImpl.
|
| @@ -244,6 +241,10 @@ VideoSendStream::VideoSendStream(
|
|
|
| VideoSendStream::~VideoSendStream() {
|
| LOG(LS_INFO) << "~VideoSendStream: " << config_.ToString();
|
| + // 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);
|
| @@ -265,7 +266,6 @@ VideoSendStream::~VideoSendStream() {
|
| // done before deleting the channel.
|
| congestion_controller_->RemoveEncoder(vie_encoder_.get());
|
| encoder_feedback_->RemoveEncoder(vie_encoder_.get());
|
| - vie_encoder_->StopThreadsAndRemoveSharedMembers();
|
|
|
| uint32_t remote_ssrc = vie_channel_->GetRemoteSSRC();
|
| congestion_controller_->GetRemoteBitrateEstimator(false)->RemoveStream(
|
|
|