| 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;
|
|
|