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

Unified Diff: webrtc/video/video_receive_stream.cc

Issue 1670123002: Set VideoReceiveStream members in init list. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 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
« no previous file with comments | « webrtc/video/video_receive_stream.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/video_receive_stream.cc
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
index 28fe7f3d6d978dcbb3b9d598472535c40ab0f830..9681e19bef85ca4052618aaa52a800fa591996b9 100644
--- a/webrtc/video/video_receive_stream.cc
+++ b/webrtc/video/video_receive_stream.cc
@@ -153,56 +153,62 @@ VideoReceiveStream::VideoReceiveStream(
clock_(Clock::GetRealTimeClock()),
congestion_controller_(congestion_controller),
call_stats_(call_stats),
- vcm_(VideoCodingModule::Create(clock_, nullptr, nullptr)) {
+ vcm_(VideoCodingModule::Create(clock_, nullptr, nullptr)),
+ incoming_video_stream_(
+ 0,
+ config.renderer ? config.renderer->SmoothsRenderedFrames() : false),
+ stats_proxy_(config_.rtp.remote_ssrc, clock_),
+ vie_channel_(num_cpu_cores,
+ &transport_adapter_,
+ process_thread,
+ nullptr,
+ vcm_.get(),
+ nullptr,
+ nullptr,
+ nullptr,
+ GetRemoteBitrateEstimator(),
+ call_stats_->rtcp_rtt_stats(),
+ congestion_controller_->pacer(),
+ congestion_controller_->packet_router(),
+ 1,
+ false) {
LOG(LS_INFO) << "VideoReceiveStream: " << config_.ToString();
- bool send_side_bwe =
- config.rtp.transport_cc && UseSendSideBwe(config_.rtp.extensions);
-
- RemoteBitrateEstimator* bitrate_estimator =
- congestion_controller_->GetRemoteBitrateEstimator(send_side_bwe);
-
- vie_channel_.reset(new ViEChannel(
- num_cpu_cores, &transport_adapter_, process_thread, nullptr, vcm_.get(),
- nullptr, nullptr, nullptr, bitrate_estimator,
- call_stats_->rtcp_rtt_stats(), congestion_controller_->pacer(),
- congestion_controller_->packet_router(), 1, false));
-
- RTC_CHECK(vie_channel_->Init() == 0);
+ RTC_CHECK(vie_channel_.Init() == 0);
// Register the channel to receive stats updates.
- call_stats_->RegisterStatsObserver(vie_channel_->GetStatsObserver());
+ 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,
+ 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.";
- vie_channel_->SetRTCPMode(config_.rtp.rtcp_mode);
+ vie_channel_.SetRTCPMode(config_.rtp.rtcp_mode);
RTC_DCHECK(config_.rtp.remote_ssrc != 0);
// TODO(pbos): What's an appropriate local_ssrc for receive-only streams?
RTC_DCHECK(config_.rtp.local_ssrc != 0);
RTC_DCHECK(config_.rtp.remote_ssrc != config_.rtp.local_ssrc);
- vie_channel_->SetSSRC(config_.rtp.local_ssrc, kViEStreamTypeNormal, 0);
+ vie_channel_.SetSSRC(config_.rtp.local_ssrc, kViEStreamTypeNormal, 0);
// TODO(pbos): Support multiple RTX, per video payload.
Config::Rtp::RtxMap::const_iterator it = config_.rtp.rtx.begin();
for (; it != config_.rtp.rtx.end(); ++it) {
RTC_DCHECK(it->second.ssrc != 0);
RTC_DCHECK(it->second.payload_type != 0);
- vie_channel_->SetRemoteSSRCType(kViEStreamTypeRtx, it->second.ssrc);
- vie_channel_->SetRtxReceivePayloadType(it->second.payload_type, it->first);
+ vie_channel_.SetRemoteSSRCType(kViEStreamTypeRtx, it->second.ssrc);
+ vie_channel_.SetRtxReceivePayloadType(it->second.payload_type, it->first);
}
// TODO(holmer): When Chrome no longer depends on this being false by default,
// always use the mapping and remove this whole codepath.
- vie_channel_->SetUseRtxPayloadMappingOnRestore(
+ vie_channel_.SetUseRtxPayloadMappingOnRestore(
config_.rtp.use_rtx_payload_mapping_on_restore);
congestion_controller_->SetChannelRembStatus(false, config_.rtp.remb,
- vie_channel_->rtp_rtcp());
+ vie_channel_.rtp_rtcp());
for (size_t i = 0; i < config_.rtp.extensions.size(); ++i) {
const std::string& extension = config_.rtp.extensions[i].name;
@@ -211,14 +217,14 @@ VideoReceiveStream::VideoReceiveStream(
RTC_DCHECK_GE(id, 1);
RTC_DCHECK_LE(id, 14);
if (extension == RtpExtension::kTOffset) {
- RTC_CHECK_EQ(0, vie_channel_->SetReceiveTimestampOffsetStatus(true, id));
+ RTC_CHECK_EQ(0, vie_channel_.SetReceiveTimestampOffsetStatus(true, id));
} else if (extension == RtpExtension::kAbsSendTime) {
- RTC_CHECK_EQ(0, vie_channel_->SetReceiveAbsoluteSendTimeStatus(true, id));
+ RTC_CHECK_EQ(0, vie_channel_.SetReceiveAbsoluteSendTimeStatus(true, id));
} else if (extension == RtpExtension::kVideoRotation) {
- RTC_CHECK_EQ(0, vie_channel_->SetReceiveVideoRotationStatus(true, id));
+ RTC_CHECK_EQ(0, vie_channel_.SetReceiveVideoRotationStatus(true, id));
} else if (extension == RtpExtension::kTransportSequenceNumber) {
RTC_CHECK_EQ(0,
- vie_channel_->SetReceiveTransportSequenceNumber(true, id));
+ vie_channel_.SetReceiveTransportSequenceNumber(true, id));
} else {
RTC_NOTREACHED() << "Unsupported RTP extension.";
}
@@ -232,7 +238,7 @@ VideoReceiveStream::VideoReceiveStream(
codec.codecType = kVideoCodecULPFEC;
strncpy(codec.plName, "ulpfec", sizeof(codec.plName));
codec.plType = config_.rtp.fec.ulpfec_payload_type;
- RTC_CHECK_EQ(0, vie_channel_->SetReceiveCodec(codec));
+ RTC_CHECK_EQ(0, vie_channel_.SetReceiveCodec(codec));
}
if (config_.rtp.fec.red_payload_type != -1) {
VideoCodec codec;
@@ -240,25 +246,21 @@ VideoReceiveStream::VideoReceiveStream(
codec.codecType = kVideoCodecRED;
strncpy(codec.plName, "red", sizeof(codec.plName));
codec.plType = config_.rtp.fec.red_payload_type;
- RTC_CHECK_EQ(0, vie_channel_->SetReceiveCodec(codec));
+ RTC_CHECK_EQ(0, vie_channel_.SetReceiveCodec(codec));
if (config_.rtp.fec.red_rtx_payload_type != -1) {
- vie_channel_->SetRtxReceivePayloadType(
+ vie_channel_.SetRtxReceivePayloadType(
config_.rtp.fec.red_rtx_payload_type,
config_.rtp.fec.red_payload_type);
}
}
if (config.rtp.rtcp_xr.receiver_reference_time_report)
- vie_channel_->SetRtcpXrRrtrStatus(true);
-
- stats_proxy_.reset(
- new ReceiveStatisticsProxy(config_.rtp.remote_ssrc, clock_));
+ vie_channel_.SetRtcpXrRrtrStatus(true);
- vie_channel_->RegisterReceiveStatisticsProxy(stats_proxy_.get());
- vie_channel_->RegisterReceiveChannelRtcpStatisticsCallback(
- stats_proxy_.get());
- vie_channel_->RegisterReceiveChannelRtpStatisticsCallback(stats_proxy_.get());
- vie_channel_->RegisterRtcpPacketTypeCounterObserver(stats_proxy_.get());
+ vie_channel_.RegisterReceiveStatisticsProxy(&stats_proxy_);
+ vie_channel_.RegisterReceiveChannelRtcpStatisticsCallback(&stats_proxy_);
+ vie_channel_.RegisterReceiveChannelRtpStatisticsCallback(&stats_proxy_);
+ vie_channel_.RegisterRtcpPacketTypeCounterObserver(&stats_proxy_);
RTC_DCHECK(!config_.decoders.empty());
std::set<int> decoder_payload_types;
@@ -270,53 +272,49 @@ VideoReceiveStream::VideoReceiveStream(
<< "Duplicate payload type (" << decoder.payload_type
<< ") for different decoders.";
decoder_payload_types.insert(decoder.payload_type);
- vie_channel_->RegisterExternalDecoder(decoder.payload_type,
+ vie_channel_.RegisterExternalDecoder(decoder.payload_type,
decoder.decoder);
VideoCodec codec = CreateDecoderVideoCodec(decoder);
- RTC_CHECK_EQ(0, vie_channel_->SetReceiveCodec(codec));
+ RTC_CHECK_EQ(0, vie_channel_.SetReceiveCodec(codec));
}
- incoming_video_stream_.reset(new IncomingVideoStream(
- 0, config.renderer ? config.renderer->SmoothsRenderedFrames() : false));
- incoming_video_stream_->SetExpectedRenderDelay(config.render_delay_ms);
- vie_channel_->SetExpectedRenderDelay(config.render_delay_ms);
- incoming_video_stream_->SetExternalCallback(this);
- vie_channel_->SetIncomingVideoStream(incoming_video_stream_.get());
+ incoming_video_stream_.SetExpectedRenderDelay(config.render_delay_ms);
+ vie_channel_.SetExpectedRenderDelay(config.render_delay_ms);
+ incoming_video_stream_.SetExternalCallback(this);
+ vie_channel_.SetIncomingVideoStream(&incoming_video_stream_);
- vie_channel_->RegisterPreDecodeImageCallback(this);
- vie_channel_->RegisterPreRenderCallback(this);
+ vie_channel_.RegisterPreDecodeImageCallback(this);
+ vie_channel_.RegisterPreRenderCallback(this);
process_thread_->RegisterModule(vcm_.get());
}
VideoReceiveStream::~VideoReceiveStream() {
LOG(LS_INFO) << "~VideoReceiveStream: " << config_.ToString();
- incoming_video_stream_->Stop();
+ incoming_video_stream_.Stop();
process_thread_->DeRegisterModule(vcm_.get());
- vie_channel_->RegisterPreRenderCallback(nullptr);
- vie_channel_->RegisterPreDecodeImageCallback(nullptr);
+ vie_channel_.RegisterPreRenderCallback(nullptr);
+ vie_channel_.RegisterPreDecodeImageCallback(nullptr);
- call_stats_->DeregisterStatsObserver(vie_channel_->GetStatsObserver());
+ call_stats_->DeregisterStatsObserver(vie_channel_.GetStatsObserver());
congestion_controller_->SetChannelRembStatus(false, false,
- vie_channel_->rtp_rtcp());
+ vie_channel_.rtp_rtcp());
- uint32_t remote_ssrc = vie_channel_->GetRemoteSSRC();
- bool send_side_bwe = UseSendSideBwe(config_.rtp.extensions);
- congestion_controller_->GetRemoteBitrateEstimator(send_side_bwe)->
- RemoveStream(remote_ssrc);
+ uint32_t remote_ssrc = vie_channel_.GetRemoteSSRC();
+ GetRemoteBitrateEstimator()->RemoveStream(remote_ssrc);
}
void VideoReceiveStream::Start() {
transport_adapter_.Enable();
- incoming_video_stream_->Start();
- vie_channel_->StartReceive();
+ incoming_video_stream_.Start();
+ vie_channel_.StartReceive();
}
void VideoReceiveStream::Stop() {
- incoming_video_stream_->Stop();
- vie_channel_->StopReceive();
+ incoming_video_stream_.Stop();
+ vie_channel_.StopReceive();
transport_adapter_.Disable();
}
@@ -324,29 +322,29 @@ void VideoReceiveStream::SetSyncChannel(VoiceEngine* voice_engine,
int audio_channel_id) {
if (voice_engine != nullptr && audio_channel_id != -1) {
VoEVideoSync* voe_sync_interface = VoEVideoSync::GetInterface(voice_engine);
- vie_channel_->SetVoiceChannel(audio_channel_id, voe_sync_interface);
+ vie_channel_.SetVoiceChannel(audio_channel_id, voe_sync_interface);
voe_sync_interface->Release();
} else {
- vie_channel_->SetVoiceChannel(-1, nullptr);
+ vie_channel_.SetVoiceChannel(-1, nullptr);
}
}
VideoReceiveStream::Stats VideoReceiveStream::GetStats() const {
- return stats_proxy_->GetStats();
+ return stats_proxy_.GetStats();
}
bool VideoReceiveStream::DeliverRtcp(const uint8_t* packet, size_t length) {
- return vie_channel_->ReceivedRTCPPacket(packet, length) == 0;
+ return vie_channel_.ReceivedRTCPPacket(packet, length) == 0;
}
bool VideoReceiveStream::DeliverRtp(const uint8_t* packet,
size_t length,
const PacketTime& packet_time) {
- return vie_channel_->ReceivedRTPPacket(packet, length, packet_time) == 0;
+ return vie_channel_.ReceivedRTPPacket(packet, length, packet_time) == 0;
}
void VideoReceiveStream::FrameCallback(VideoFrame* video_frame) {
- stats_proxy_->OnDecodedFrame();
+ stats_proxy_.OnDecodedFrame();
// Post processing is not supported if the frame is backed by a texture.
if (video_frame->native_handle() == NULL) {
@@ -366,7 +364,7 @@ int VideoReceiveStream::RenderFrame(const uint32_t /*stream_id*/,
video_frame,
video_frame.render_time_ms() - clock_->TimeInMilliseconds());
- stats_proxy_->OnRenderedFrame(video_frame.width(), video_frame.height());
+ stats_proxy_.OnRenderedFrame(video_frame.width(), video_frame.height());
return 0;
}
@@ -377,7 +375,7 @@ int32_t VideoReceiveStream::Encoded(
const EncodedImage& encoded_image,
const CodecSpecificInfo* codec_specific_info,
const RTPFragmentationHeader* fragmentation) {
- stats_proxy_->OnPreDecode(encoded_image, codec_specific_info);
+ stats_proxy_.OnPreDecode(encoded_image, codec_specific_info);
if (config_.pre_decode_callback) {
// TODO(asapersson): Remove EncodedFrameCallbackAdapter.
encoded_frame_proxy_.Encoded(
@@ -387,9 +385,16 @@ int32_t VideoReceiveStream::Encoded(
}
void VideoReceiveStream::SignalNetworkState(NetworkState state) {
- vie_channel_->SetRTCPMode(state == kNetworkUp ? config_.rtp.rtcp_mode
+ vie_channel_.SetRTCPMode(state == kNetworkUp ? config_.rtp.rtcp_mode
: RtcpMode::kOff);
}
+RemoteBitrateEstimator* VideoReceiveStream::GetRemoteBitrateEstimator() const {
+ bool send_side_bwe =
+ config_.rtp.transport_cc && UseSendSideBwe(config_.rtp.extensions);
+
+ return congestion_controller_->GetRemoteBitrateEstimator(send_side_bwe);
+}
stefan-webrtc 2016/02/05 12:50:36 Remove this and change UseSendSideBwe() to also ch
pbos-webrtc 2016/02/05 12:58:04 Done.
+
} // namespace internal
} // namespace webrtc
« no previous file with comments | « webrtc/video/video_receive_stream.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698