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

Unified Diff: webrtc/video_engine/vie_channel.cc

Issue 1247293002: Add support for transport wide sequence numbers (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 5 years, 5 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_engine/vie_channel.cc
diff --git a/webrtc/video_engine/vie_channel.cc b/webrtc/video_engine/vie_channel.cc
index d0465b209de0b0d23151a02629dbe68c4e6e9cb7..eee2a8223c620682c92a8bd2526dd29044eb808c 100644
--- a/webrtc/video_engine/vie_channel.cc
+++ b/webrtc/video_engine/vie_channel.cc
@@ -132,6 +132,7 @@ ViEChannel::ViEChannel(int32_t channel_id,
&rtcp_packet_type_counter_observer_,
remote_bitrate_estimator,
paced_sender_,
+ sender_ ? packet_router_ : nullptr,
&send_bitrate_observer_,
&send_frame_count_observer_,
&send_side_delay_observer_,
@@ -201,8 +202,11 @@ ViEChannel::~ViEChannel() {
module_process_thread_->DeRegisterModule(vcm_);
module_process_thread_->DeRegisterModule(&vie_sync_);
send_payload_router_->SetSendingRtpModules(std::list<RtpRtcp*>());
+ if (sender_ && packet_router_) {
+ for (size_t i = 0; i < num_active_rtp_rtcp_modules_; ++i)
+ packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i]);
+ }
for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
- packet_router_->RemoveRtpModule(rtp_rtcp);
module_process_thread_->DeRegisterModule(rtp_rtcp);
delete rtp_rtcp;
}
@@ -359,8 +363,6 @@ int32_t ViEChannel::SetSendCodec(const VideoCodec& video_codec,
bool router_was_active = send_payload_router_->active();
send_payload_router_->set_active(false);
send_payload_router_->SetSendingRtpModules(std::list<RtpRtcp*>());
- for (RtpRtcp* module : rtp_rtcp_modules_)
- packet_router_->RemoveRtpModule(module);
std::vector<RtpRtcp*> registered_modules;
std::vector<RtpRtcp*> deregistered_modules;
@@ -401,22 +403,28 @@ int32_t ViEChannel::SetSendCodec(const VideoCodec& video_codec,
vie_receiver_.RegisterRtpRtcpModules(registered_modules);
// Update the packet and payload routers with the sending RtpRtcp modules.
- std::list<RtpRtcp*> active_send_modules;
- for (RtpRtcp* rtp_rtcp : registered_modules) {
- packet_router_->AddRtpModule(rtp_rtcp);
- active_send_modules.push_back(rtp_rtcp);
+ if (sender_) {
+ std::list<RtpRtcp*> active_send_modules;
+ for (RtpRtcp* rtp_rtcp : registered_modules)
+ active_send_modules.push_back(rtp_rtcp);
+ send_payload_router_->SetSendingRtpModules(active_send_modules);
}
- send_payload_router_->SetSendingRtpModules(active_send_modules);
if (router_was_active)
send_payload_router_->set_active(true);
// Deregister previously registered modules.
- for (size_t i = num_active_modules; i < num_prev_active_modules; ++i)
+ for (size_t i = num_active_modules; i < num_prev_active_modules; ++i) {
module_process_thread_->DeRegisterModule(rtp_rtcp_modules_[i]);
+ if (sender_ && packet_router_)
+ packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i]);
+ }
// Register new active modules.
- for (size_t i = num_prev_active_modules; i < num_active_modules; ++i)
+ for (size_t i = num_prev_active_modules; i < num_active_modules; ++i) {
module_process_thread_->RegisterModule(rtp_rtcp_modules_[i]);
+ if (sender_ && packet_router_)
+ packet_router_->AddRtpModule(rtp_rtcp_modules_[i]);
+ }
return 0;
}
@@ -700,6 +708,27 @@ int ViEChannel::SetReceiveVideoRotationStatus(bool enable, int id) {
return vie_receiver_.SetReceiveVideoRotationStatus(enable, id) ? 0 : -1;
}
+int ViEChannel::SetSendTransportSequenceNumber(bool enable, int id) {
+ // Disable any previous registrations of this extension to avoid errors.
+ for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
+ rtp_rtcp->DeregisterSendRtpHeaderExtension(
+ kRtpExtensionTransportSequenceNumber);
+ }
+ if (!enable)
+ return 0;
+ // Enable the extension.
+ int error = 0;
+ for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
+ error |= rtp_rtcp->RegisterSendRtpHeaderExtension(
+ kRtpExtensionTransportSequenceNumber, id);
+ }
+ return error;
+}
+
+int ViEChannel::SetReceiveTransportSequenceNumber(bool enable, int id) {
+ return vie_receiver_.SetReceiveTransportSequenceNumber(enable, id) ? 0 : -1;
+}
+
void ViEChannel::SetRtcpXrRrtrStatus(bool enable) {
rtp_rtcp_modules_[0]->SetRtcpXrRrtrStatus(enable);
}
@@ -1150,6 +1179,7 @@ std::vector<RtpRtcp*> ViEChannel::CreateRtpRtcpModules(
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
RemoteBitrateEstimator* remote_bitrate_estimator,
PacedSender* paced_sender,
+ PacketRouter* packet_router,
BitrateStatisticsObserver* send_bitrate_observer,
FrameCountObserver* send_frame_count_observer,
SendSideDelayObserver* send_side_delay_observer,
@@ -1167,6 +1197,7 @@ std::vector<RtpRtcp*> ViEChannel::CreateRtpRtcpModules(
configuration.rtcp_packet_type_counter_observer =
rtcp_packet_type_counter_observer;
configuration.paced_sender = paced_sender;
+ configuration.packet_router = packet_router;
configuration.send_bitrate_observer = send_bitrate_observer;
configuration.send_frame_count_observer = send_frame_count_observer;
configuration.send_side_delay_observer = send_side_delay_observer;

Powered by Google App Engine
This is Rietveld 408576698