| Index: webrtc/video/vie_channel.cc
|
| diff --git a/webrtc/video/vie_channel.cc b/webrtc/video/vie_channel.cc
|
| index 15dafcb708dbf35974402c57544002522d6bb71e..468ed94efba8e348e9ba103b1a751561240e02ab 100644
|
| --- a/webrtc/video/vie_channel.cc
|
| +++ b/webrtc/video/vie_channel.cc
|
| @@ -148,8 +148,7 @@ int32_t ViEChannel::Init() {
|
| }
|
| packet_router_->AddRtpModule(rtp_rtcp_modules_[0]);
|
| if (sender_) {
|
| - send_payload_router_->SetSendingRtpModules(
|
| - std::vector<RtpRtcp*>(1, rtp_rtcp_modules_[0]));
|
| + send_payload_router_->SetSendingRtpModules(1);
|
| RTC_DCHECK(!send_payload_router_->active());
|
| } else {
|
| if (vcm_->RegisterReceiveCallback(this) != 0) {
|
| @@ -169,7 +168,7 @@ ViEChannel::~ViEChannel() {
|
| module_process_thread_->DeRegisterModule(
|
| vie_receiver_.GetReceiveStatistics());
|
| if (sender_) {
|
| - send_payload_router_->SetSendingRtpModules(std::vector<RtpRtcp*>());
|
| + send_payload_router_->SetSendingRtpModules(0);
|
| }
|
| for (size_t i = 0; i < num_active_rtp_rtcp_modules_; ++i)
|
| packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i]);
|
| @@ -244,12 +243,10 @@ int32_t ViEChannel::SetSendCodec(const VideoCodec& video_codec,
|
| // The first layer is always active, so the first module can be checked for
|
| // sending status.
|
| bool is_sending = rtp_rtcp_modules_[0]->Sending();
|
| - bool router_was_active = send_payload_router_->active();
|
| send_payload_router_->set_active(false);
|
| - send_payload_router_->SetSendingRtpModules(std::vector<RtpRtcp*>());
|
| + send_payload_router_->SetSendingRtpModules(0);
|
|
|
| std::vector<RtpRtcp*> registered_modules;
|
| - std::vector<RtpRtcp*> deregistered_modules;
|
| size_t num_active_modules = video_codec.numberOfSimulcastStreams > 0
|
| ? video_codec.numberOfSimulcastStreams
|
| : 1;
|
| @@ -263,34 +260,14 @@ int32_t ViEChannel::SetSendCodec(const VideoCodec& video_codec,
|
| for (size_t i = 0; i < num_active_modules; ++i)
|
| registered_modules.push_back(rtp_rtcp_modules_[i]);
|
|
|
| - for (size_t i = num_active_modules; i < rtp_rtcp_modules_.size(); ++i)
|
| - deregistered_modules.push_back(rtp_rtcp_modules_[i]);
|
| -
|
| - // Disable inactive modules.
|
| - for (RtpRtcp* rtp_rtcp : deregistered_modules) {
|
| - rtp_rtcp->SetSendingStatus(false);
|
| - rtp_rtcp->SetSendingMediaStatus(false);
|
| - }
|
| -
|
| - // Configure active modules.
|
| - for (RtpRtcp* rtp_rtcp : registered_modules) {
|
| - rtp_rtcp->DeRegisterSendPayload(video_codec.plType);
|
| - if (rtp_rtcp->RegisterSendPayload(video_codec) != 0) {
|
| - return -1;
|
| - }
|
| - rtp_rtcp->SetSendingStatus(is_sending);
|
| - rtp_rtcp->SetSendingMediaStatus(is_sending);
|
| - }
|
| -
|
| // |RegisterSimulcastRtpRtcpModules| resets all old weak pointers and old
|
| // modules can be deleted after this step.
|
| vie_receiver_.RegisterRtpRtcpModules(registered_modules);
|
|
|
| // Update the packet and payload routers with the sending RtpRtcp modules.
|
| - send_payload_router_->SetSendingRtpModules(registered_modules);
|
| + send_payload_router_->SetSendingRtpModules(num_active_modules);
|
|
|
| - if (router_was_active)
|
| - send_payload_router_->set_active(true);
|
| + send_payload_router_->set_active(is_sending);
|
|
|
| // Deregister previously registered modules.
|
| for (size_t i = num_active_modules; i < num_prev_active_modules; ++i)
|
| @@ -483,35 +460,27 @@ void ViEChannel::RegisterSendBitrateObserver(
|
| }
|
|
|
| int32_t ViEChannel::StartSend() {
|
| - rtc::CritScope lock(&crit_);
|
| -
|
| if (rtp_rtcp_modules_[0]->Sending())
|
| return -1;
|
|
|
| - for (size_t i = 0; i < num_active_rtp_rtcp_modules_; ++i) {
|
| - RtpRtcp* rtp_rtcp = rtp_rtcp_modules_[i];
|
| - // Only have senders send media.
|
| - rtp_rtcp->SetSendingMediaStatus(sender_);
|
| - rtp_rtcp->SetSendingStatus(true);
|
| - }
|
| - if (sender_)
|
| + if (!sender_) {
|
| + rtp_rtcp_modules_[0]->SetSendingStatus(true);
|
| + } else {
|
| send_payload_router_->set_active(true);
|
| + }
|
| return 0;
|
| }
|
|
|
| int32_t ViEChannel::StopSend() {
|
| - if (sender_)
|
| - send_payload_router_->set_active(false);
|
| - for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_)
|
| - rtp_rtcp->SetSendingMediaStatus(false);
|
| -
|
| - if (!rtp_rtcp_modules_[0]->Sending()) {
|
| + if (!rtp_rtcp_modules_[0]->Sending())
|
| return -1;
|
| - }
|
|
|
| - for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
|
| - rtp_rtcp->SetSendingStatus(false);
|
| + if (!sender_) {
|
| + rtp_rtcp_modules_[0]->SetSendingStatus(false);
|
| + } else {
|
| + send_payload_router_->set_active(false);
|
| }
|
| +
|
| return 0;
|
| }
|
|
|
|
|