Chromium Code Reviews| 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..c7f8d61658a7a99f2f6b4523d0f759658ec66188 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; | 
| @@ -402,21 +404,25 @@ int32_t ViEChannel::SetSendCodec(const VideoCodec& video_codec, | 
| // 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); | 
| + for (RtpRtcp* rtp_rtcp : registered_modules) | 
| active_send_modules.push_back(rtp_rtcp); | 
| - } | 
| send_payload_router_->SetSendingRtpModules(active_send_modules); | 
| 
 
stefan-webrtc
2015/07/22 10:49:01
Seems like send_payload_router_ and active_send_mo
 
sprang_webrtc
2015/07/22 15:11:32
Done.
 
 | 
| 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 +706,26 @@ 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_) | 
| 
 
stefan-webrtc
2015/07/22 10:49:01
{}
 
sprang_webrtc
2015/07/22 15:11:33
Done.
 
 | 
| + 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 +1176,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 +1194,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; |