Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1040)

Unified Diff: webrtc/video/video_send_stream.cc

Issue 1654913002: Untangle ViEChannel and ViEEncoder. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/video/video_send_stream.cc
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index 254805ff238cc8cdeadb28b6b18d96cdf966f62f..c7280ed40fa74018eef9018a65917fc7a40c3663 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -25,7 +25,6 @@
#include "webrtc/modules/utility/include/process_thread.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"
@@ -163,28 +162,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, &overuse_detector_,
- congestion_controller_->pacer(), bitrate_allocator));
+ vie_encoder_.reset(new ViEEncoder(
+ 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();
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(),
+ &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);
@@ -266,6 +264,10 @@ VideoSendStream::VideoSendStream(
VideoSendStream::~VideoSendStream() {
LOG(LS_INFO) << "~VideoSendStream: " << config_.ToString();
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);
@@ -287,7 +289,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(

Powered by Google App Engine
This is Rietveld 408576698