Index: webrtc/video/video_receive_stream.cc |
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc |
index 6d29336c0032cfaf625c50074c43683e4443e454..670d92b2f20be29168506c3fe6c3ff8b2fd7c950 100644 |
--- a/webrtc/video/video_receive_stream.cc |
+++ b/webrtc/video/video_receive_stream.cc |
@@ -171,29 +171,30 @@ VideoReceiveStream::VideoReceiveStream( |
&transport_adapter_, |
call_stats_->rtcp_rtt_stats(), |
congestion_controller_->pacer(), |
- congestion_controller_->packet_router()), |
- vie_channel_(&video_receiver_, |
- &rtp_stream_receiver_), |
+ congestion_controller_->packet_router(), |
+ config, |
+ &stats_proxy_), |
+ video_stream_decoder_(&video_receiver_, |
+ &rtp_stream_receiver_, |
+ &rtp_stream_receiver_, |
+ config.rtp.nack.rtp_history_ms > 0, |
+ &stats_proxy_, |
+ &incoming_video_stream_, |
+ this), |
vie_sync_(&video_receiver_), |
- rtp_rtcp_(vie_channel_.rtp_rtcp()) { |
+ rtp_rtcp_(rtp_stream_receiver_.rtp_rtcp()) { |
LOG(LS_INFO) << "VideoReceiveStream: " << config_.ToString(); |
RTC_DCHECK(process_thread_); |
RTC_DCHECK(congestion_controller_); |
RTC_DCHECK(call_stats_); |
RTC_DCHECK(remb_); |
- RTC_CHECK(vie_channel_.Init() == 0); |
- |
- // Register the channel to receive stats updates. |
- call_stats_->RegisterStatsObserver(vie_channel_.GetStatsObserver()); |
- |
- // TODO(pbos): This is not fine grained enough... |
- vie_channel_.SetProtectionMode(config_.rtp.nack.rtp_history_ms > 0, false, -1, |
- -1); |
RTC_DCHECK(config_.rtp.rtcp_mode != RtcpMode::kOff) |
<< "A stream should not be configured with RTCP disabled. This value is " |
"reserved for internal usage."; |
- rtp_rtcp_->SetRTCPStatus(config_.rtp.rtcp_mode); |
+ |
+ // Register the channel to receive stats updates. |
+ call_stats_->RegisterStatsObserver(&video_stream_decoder_); |
RTC_DCHECK(config_.rtp.remote_ssrc != 0); |
// TODO(pbos): What's an appropriate local_ssrc for receive-only streams? |
@@ -255,14 +256,8 @@ VideoReceiveStream::VideoReceiveStream( |
if (config.rtp.rtcp_xr.receiver_reference_time_report) |
rtp_rtcp_->SetRtcpXrRrtrStatus(true); |
- vie_channel_.RegisterReceiveStatisticsProxy(&stats_proxy_); |
- rtp_stream_receiver_.GetReceiveStatistics()->RegisterRtpStatisticsCallback( |
- &stats_proxy_); |
- rtp_stream_receiver_.GetReceiveStatistics()->RegisterRtcpStatisticsCallback( |
- &stats_proxy_); |
// Stats callback for CNAME changes. |
rtp_rtcp_->RegisterRtcpStatisticsCallback(&stats_proxy_); |
- vie_channel_.RegisterRtcpPacketTypeCounterObserver(&stats_proxy_); |
RTC_DCHECK(!config_.decoders.empty()); |
std::set<int> decoder_payload_types; |
@@ -286,8 +281,6 @@ VideoReceiveStream::VideoReceiveStream( |
video_receiver_.SetRenderDelay(config.render_delay_ms); |
incoming_video_stream_.SetExpectedRenderDelay(config.render_delay_ms); |
incoming_video_stream_.SetExternalCallback(this); |
- vie_channel_.SetIncomingVideoStream(&incoming_video_stream_); |
- vie_channel_.RegisterPreRenderCallback(this); |
process_thread_->RegisterModule(rtp_stream_receiver_.GetReceiveStatistics()); |
process_thread_->RegisterModule(rtp_stream_receiver_.rtp_rtcp()); |
@@ -305,16 +298,14 @@ VideoReceiveStream::~VideoReceiveStream() { |
process_thread_->DeRegisterModule( |
rtp_stream_receiver_.GetReceiveStatistics()); |
- // Deregister external decoders so that they are no longer running during |
+ // Deregister external decoders so they are no longer running during |
// destruction. This effectively stops the VCM since the decoder thread is |
// stopped, the VCM is deregistered and no asynchronous decoder threads are |
// running. |
for (const Decoder& decoder : config_.decoders) |
video_receiver_.RegisterExternalDecoder(nullptr, decoder.payload_type); |
- vie_channel_.RegisterPreRenderCallback(nullptr); |
- |
- call_stats_->DeregisterStatsObserver(vie_channel_.GetStatsObserver()); |
+ call_stats_->DeregisterStatsObserver(&video_stream_decoder_); |
rtp_rtcp_->SetREMBStatus(false); |
remb_->RemoveReceiveChannel(rtp_rtcp_); |