Remove the default RTP module.
This CL removes the default module owned by ViEEncoder, functionality in
the module to register default modules and the final changes in
rtp_rtcp_impl using default/child modules.
BUG=769
R=pbos@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/42509004
Cr-Commit-Position: refs/heads/master@{#8514}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8514 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h b/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h
index 6bc7dc4..62631fc 100644
--- a/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h
+++ b/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h
@@ -55,7 +55,6 @@
int32_t id;
bool audio;
Clock* clock;
- RtpRtcp* default_module;
ReceiveStatistics* receive_statistics;
Transport* outgoing_transport;
RtcpIntraFrameObserver* intra_frame_callback;
@@ -196,7 +195,8 @@
*/
virtual void SetSequenceNumber(uint16_t seq) = 0;
- virtual void SetRtpStateForSsrc(uint32_t ssrc,
+ // Returns true if the ssrc matched this module, false otherwise.
+ virtual bool SetRtpStateForSsrc(uint32_t ssrc,
const RtpState& rtp_state) = 0;
virtual bool GetRtpStateForSsrc(uint32_t ssrc, RtpState* rtp_state) = 0;
diff --git a/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h b/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
index 873ac31..cefcf10 100644
--- a/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
+++ b/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
@@ -82,7 +82,7 @@
uint16_t());
MOCK_METHOD1(SetSequenceNumber, void(const uint16_t seq));
MOCK_METHOD2(SetRtpStateForSsrc,
- void(uint32_t ssrc, const RtpState& rtp_state));
+ bool(uint32_t ssrc, const RtpState& rtp_state));
MOCK_METHOD2(GetRtpStateForSsrc, bool(uint32_t ssrc, RtpState* rtp_state));
MOCK_CONST_METHOD0(SSRC,
uint32_t());
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 9acf5fe..99d2df5 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -30,7 +30,6 @@
: id(-1),
audio(false),
clock(NULL),
- default_module(NULL),
receive_statistics(NullObjectReceiveStatistics()),
outgoing_transport(NULL),
intra_frame_callback(NULL),
@@ -87,18 +86,11 @@
last_bitrate_process_time_(configuration.clock->TimeInMilliseconds()),
last_rtt_process_time_(configuration.clock->TimeInMilliseconds()),
packet_overhead_(28), // IPV4 UDP.
- critical_section_module_ptrs_(
- CriticalSectionWrapper::CreateCriticalSection()),
- critical_section_module_ptrs_feedback_(
- CriticalSectionWrapper::CreateCriticalSection()),
- default_module_(
- static_cast<ModuleRtpRtcpImpl*>(configuration.default_module)),
padding_index_(static_cast<size_t>(-1)), // Start padding at first child.
nack_method_(kNackOff),
nack_last_time_sent_full_(0),
nack_last_time_sent_full_prev_(0),
nack_last_seq_number_sent_(0),
- simulcast_(false),
key_frame_req_method_(kKeyFrameReqFirRtp),
remote_bitrate_(configuration.remote_bitrate_estimator),
rtt_stats_(configuration.rtt_stats),
@@ -106,9 +98,6 @@
rtt_ms_(0) {
send_video_codec_.codecType = kVideoCodecUnknown;
- if (default_module_) {
- default_module_->RegisterChildModule(this);
- }
// TODO(pwestin) move to constructors of each rtp/rtcp sender/receiver object.
rtcp_sender_.RegisterSendTransport(configuration.outgoing_transport);
@@ -118,47 +107,6 @@
SetRtcpReceiverSsrcs(SSRC);
}
-ModuleRtpRtcpImpl::~ModuleRtpRtcpImpl() {
- // All child modules MUST be deleted before deleting the default.
- DCHECK(child_modules_.empty());
-
- // Deregister for the child modules.
- // Will go in to the default and remove it self.
- if (default_module_) {
- default_module_->DeRegisterChildModule(this);
- }
-}
-
-void ModuleRtpRtcpImpl::RegisterChildModule(RtpRtcp* module) {
- CriticalSectionScoped lock(
- critical_section_module_ptrs_.get());
- CriticalSectionScoped double_lock(
- critical_section_module_ptrs_feedback_.get());
-
- // We use two locks for protecting child_modules_, one
- // (critical_section_module_ptrs_feedback_) for incoming
- // messages (BitrateSent) and critical_section_module_ptrs_
- // for all outgoing messages sending packets etc.
- child_modules_.push_back(static_cast<ModuleRtpRtcpImpl*>(module));
-}
-
-void ModuleRtpRtcpImpl::DeRegisterChildModule(RtpRtcp* remove_module) {
- CriticalSectionScoped lock(
- critical_section_module_ptrs_.get());
- CriticalSectionScoped double_lock(
- critical_section_module_ptrs_feedback_.get());
-
- std::vector<ModuleRtpRtcpImpl*>::iterator it = child_modules_.begin();
- while (it != child_modules_.end()) {
- RtpRtcp* module = *it;
- if (module == remove_module) {
- child_modules_.erase(it);
- return;
- }
- it++;
- }
-}
-
// Returns the number of milliseconds until the module want a worker thread
// to call Process.
int64_t ModuleRtpRtcpImpl::TimeUntilNextProcess() {
@@ -178,71 +126,67 @@
last_bitrate_process_time_ = now;
}
- if (!IsDefaultModule()) {
- const int64_t kRtpRtcpRttProcessTimeMs = 1000;
- bool process_rtt = now >= last_rtt_process_time_ + kRtpRtcpRttProcessTimeMs;
- if (rtcp_sender_.Sending()) {
- // Process RTT if we have received a receiver report and we haven't
- // processed RTT for at least |kRtpRtcpRttProcessTimeMs| milliseconds.
- if (rtcp_receiver_.LastReceivedReceiverReport() >
- last_rtt_process_time_ && process_rtt) {
- std::vector<RTCPReportBlock> receive_blocks;
- rtcp_receiver_.StatisticsReceived(&receive_blocks);
- int64_t max_rtt = 0;
- for (std::vector<RTCPReportBlock>::iterator it = receive_blocks.begin();
- it != receive_blocks.end(); ++it) {
- int64_t rtt = 0;
- rtcp_receiver_.RTT(it->remoteSSRC, &rtt, NULL, NULL, NULL);
- max_rtt = (rtt > max_rtt) ? rtt : max_rtt;
- }
- // Report the rtt.
- if (rtt_stats_ && max_rtt != 0)
- rtt_stats_->OnRttUpdate(max_rtt);
+ const int64_t kRtpRtcpRttProcessTimeMs = 1000;
+ bool process_rtt = now >= last_rtt_process_time_ + kRtpRtcpRttProcessTimeMs;
+ if (rtcp_sender_.Sending()) {
+ // Process RTT if we have received a receiver report and we haven't
+ // processed RTT for at least |kRtpRtcpRttProcessTimeMs| milliseconds.
+ if (rtcp_receiver_.LastReceivedReceiverReport() >
+ last_rtt_process_time_ && process_rtt) {
+ std::vector<RTCPReportBlock> receive_blocks;
+ rtcp_receiver_.StatisticsReceived(&receive_blocks);
+ int64_t max_rtt = 0;
+ for (std::vector<RTCPReportBlock>::iterator it = receive_blocks.begin();
+ it != receive_blocks.end(); ++it) {
+ int64_t rtt = 0;
+ rtcp_receiver_.RTT(it->remoteSSRC, &rtt, NULL, NULL, NULL);
+ max_rtt = (rtt > max_rtt) ? rtt : max_rtt;
}
-
- // Verify receiver reports are delivered and the reported sequence number
- // is increasing.
- int64_t rtcp_interval = RtcpReportInterval();
- if (rtcp_receiver_.RtcpRrTimeout(rtcp_interval)) {
- LOG_F(LS_WARNING) << "Timeout: No RTCP RR received.";
- } else if (rtcp_receiver_.RtcpRrSequenceNumberTimeout(rtcp_interval)) {
- LOG_F(LS_WARNING) <<
- "Timeout: No increase in RTCP RR extended highest sequence number.";
- }
-
- if (remote_bitrate_ && rtcp_sender_.TMMBR()) {
- unsigned int target_bitrate = 0;
- std::vector<unsigned int> ssrcs;
- if (remote_bitrate_->LatestEstimate(&ssrcs, &target_bitrate)) {
- if (!ssrcs.empty()) {
- target_bitrate = target_bitrate / ssrcs.size();
- }
- rtcp_sender_.SetTargetBitrate(target_bitrate);
- }
- }
- } else {
- // Report rtt from receiver.
- if (process_rtt) {
- int64_t rtt_ms;
- if (rtt_stats_ && rtcp_receiver_.GetAndResetXrRrRtt(&rtt_ms)) {
- rtt_stats_->OnRttUpdate(rtt_ms);
- }
- }
+ // Report the rtt.
+ if (rtt_stats_ && max_rtt != 0)
+ rtt_stats_->OnRttUpdate(max_rtt);
}
- // Get processed rtt.
+ // Verify receiver reports are delivered and the reported sequence number
+ // is increasing.
+ int64_t rtcp_interval = RtcpReportInterval();
+ if (rtcp_receiver_.RtcpRrTimeout(rtcp_interval)) {
+ LOG_F(LS_WARNING) << "Timeout: No RTCP RR received.";
+ } else if (rtcp_receiver_.RtcpRrSequenceNumberTimeout(rtcp_interval)) {
+ LOG_F(LS_WARNING) <<
+ "Timeout: No increase in RTCP RR extended highest sequence number.";
+ }
+
+ if (remote_bitrate_ && rtcp_sender_.TMMBR()) {
+ unsigned int target_bitrate = 0;
+ std::vector<unsigned int> ssrcs;
+ if (remote_bitrate_->LatestEstimate(&ssrcs, &target_bitrate)) {
+ if (!ssrcs.empty()) {
+ target_bitrate = target_bitrate / ssrcs.size();
+ }
+ rtcp_sender_.SetTargetBitrate(target_bitrate);
+ }
+ }
+ } else {
+ // Report rtt from receiver.
if (process_rtt) {
- last_rtt_process_time_ = now;
- if (rtt_stats_) {
- set_rtt_ms(rtt_stats_->LastProcessedRtt());
- }
- }
-
- if (rtcp_sender_.TimeToSendRTCPReport()) {
- rtcp_sender_.SendRTCP(GetFeedbackState(), kRtcpReport);
+ int64_t rtt_ms;
+ if (rtt_stats_ && rtcp_receiver_.GetAndResetXrRrRtt(&rtt_ms)) {
+ rtt_stats_->OnRttUpdate(rtt_ms);
+ }
}
}
+ // Get processed rtt.
+ if (process_rtt) {
+ last_rtt_process_time_ = now;
+ if (rtt_stats_)
+ set_rtt_ms(rtt_stats_->LastProcessedRtt());
+ }
+
+ if (rtcp_sender_.TimeToSendRTCPReport())
+ rtcp_sender_.SendRTCP(GetFeedbackState(), kRtcpReport);
+
if (UpdateRTCPReceiveInformationTimers()) {
// A receiver has timed out
rtcp_receiver_.UpdateTMMBR();
@@ -288,7 +232,6 @@
int32_t ModuleRtpRtcpImpl::RegisterSendPayload(
const CodecInst& voice_codec) {
- DCHECK(!IsDefaultModule());
return rtp_sender_.RegisterPayload(
voice_codec.plname,
voice_codec.pltype,
@@ -299,12 +242,6 @@
int32_t ModuleRtpRtcpImpl::RegisterSendPayload(const VideoCodec& video_codec) {
send_video_codec_ = video_codec;
- {
- // simulcast_ is accessed when accessing child_modules_, so this write needs
- // to be protected by the same lock.
- CriticalSectionScoped lock(critical_section_module_ptrs_.get());
- simulcast_ = video_codec.numberOfSimulcastStreams > 1;
- }
return rtp_sender_.RegisterPayload(video_codec.plName,
video_codec.plType,
90000,
@@ -339,21 +276,17 @@
rtp_sender_.SetSequenceNumber(seq_num);
}
-void ModuleRtpRtcpImpl::SetRtpStateForSsrc(uint32_t ssrc,
+bool ModuleRtpRtcpImpl::SetRtpStateForSsrc(uint32_t ssrc,
const RtpState& rtp_state) {
if (rtp_sender_.SSRC() == ssrc) {
rtp_sender_.SetRtpState(rtp_state);
- return;
+ return true;
}
if (rtp_sender_.RtxSsrc() == ssrc) {
rtp_sender_.SetRtxRtpState(rtp_state);
- return;
+ return true;
}
-
- CriticalSectionScoped lock(critical_section_module_ptrs_.get());
- for (size_t i = 0; i < child_modules_.size(); ++i) {
- child_modules_[i]->SetRtpStateForSsrc(ssrc, rtp_state);
- }
+ return false;
}
bool ModuleRtpRtcpImpl::GetRtpStateForSsrc(uint32_t ssrc, RtpState* rtp_state) {
@@ -361,17 +294,10 @@
*rtp_state = rtp_sender_.GetRtpState();
return true;
}
-
if (rtp_sender_.RtxSsrc() == ssrc) {
*rtp_state = rtp_sender_.GetRtxRtpState();
return true;
}
-
- CriticalSectionScoped lock(critical_section_module_ptrs_.get());
- for (size_t i = 0; i < child_modules_.size(); ++i) {
- if (child_modules_[i]->GetRtpStateForSsrc(ssrc, rtp_state))
- return true;
- }
return false;
}
@@ -387,7 +313,6 @@
}
void ModuleRtpRtcpImpl::SetCsrcs(const std::vector<uint32_t>& csrcs) {
- DCHECK(!IsDefaultModule());
rtcp_sender_.SetCsrcs(csrcs);
rtp_sender_.SetCsrcs(csrcs);
}
@@ -424,8 +349,6 @@
}
int32_t ModuleRtpRtcpImpl::SetSendingStatus(const bool sending) {
- DCHECK(!IsDefaultModule());
-
if (rtcp_sender_.Sending() != sending) {
// Sends RTCP BYE when going from true to false
if (rtcp_sender_.SetSendingStatus(GetFeedbackState(), sending) != 0) {
@@ -454,17 +377,14 @@
}
bool ModuleRtpRtcpImpl::Sending() const {
- DCHECK(!IsDefaultModule());
return rtcp_sender_.Sending();
}
void ModuleRtpRtcpImpl::SetSendingMediaStatus(const bool sending) {
- DCHECK(!IsDefaultModule());
rtp_sender_.SetSendingMediaStatus(sending);
}
bool ModuleRtpRtcpImpl::SendingMedia() const {
- DCHECK(!IsDefaultModule());
return rtp_sender_.SendingMedia();
}
@@ -477,8 +397,6 @@
size_t payload_size,
const RTPFragmentationHeader* fragmentation,
const RTPVideoHeader* rtp_video_hdr) {
- DCHECK(!IsDefaultModule());
-
rtcp_sender_.SetLastRtpTime(time_stamp, capture_time_ms);
if (rtcp_sender_.TimeToSendRTCPReport(kVideoFrameKey == frame_type)) {
rtcp_sender_.SendRTCP(GetFeedbackState(), kRtcpReport);
@@ -498,7 +416,6 @@
uint16_t sequence_number,
int64_t capture_time_ms,
bool retransmission) {
- DCHECK(!IsDefaultModule());
if (SendingMedia() && ssrc == rtp_sender_.SSRC()) {
return rtp_sender_.TimeToSendPacket(
sequence_number, capture_time_ms, retransmission);
@@ -508,7 +425,6 @@
}
size_t ModuleRtpRtcpImpl::TimeToSendPadding(size_t bytes) {
- DCHECK(!IsDefaultModule());
return rtp_sender_.TimeToSendPadding(bytes);
}
@@ -516,11 +432,6 @@
int* max_send_delay_ms) const {
DCHECK(avg_send_delay_ms);
DCHECK(max_send_delay_ms);
-
- if (IsDefaultModule()) {
- // This API is only supported for child modules.
- return false;
- }
return rtp_sender_.GetSendSideDelay(avg_send_delay_ms, max_send_delay_ms);
}
@@ -529,7 +440,6 @@
}
uint16_t ModuleRtpRtcpImpl::MaxDataPayloadLength() const {
- DCHECK(!IsDefaultModule());
return rtp_sender_.MaxDataPayloadLength();
}
@@ -895,7 +805,6 @@
}
void ModuleRtpRtcpImpl::SetTargetSendBitrate(uint32_t bitrate_bps) {
- DCHECK(!IsDefaultModule());
rtp_sender_.SetTargetBitrate(bitrate_bps);
}
@@ -936,41 +845,13 @@
bool& enable,
uint8_t& payload_type_red,
uint8_t& payload_type_fec) {
- bool child_enabled = false;
- if (IsDefaultModule()) {
- // For default we need to check all child modules too.
- CriticalSectionScoped lock(critical_section_module_ptrs_.get());
- std::vector<ModuleRtpRtcpImpl*>::iterator it = child_modules_.begin();
- while (it != child_modules_.end()) {
- RtpRtcp* module = *it;
- if (module) {
- bool enabled = false;
- uint8_t dummy_ptype_red = 0;
- uint8_t dummy_ptype_fec = 0;
- if (module->GenericFECStatus(enabled,
- dummy_ptype_red,
- dummy_ptype_fec) == 0 && enabled) {
- child_enabled = true;
- break;
- }
- }
- it++;
- }
- }
- int32_t ret_val = rtp_sender_.GenericFECStatus(&enable,
- &payload_type_red,
- &payload_type_fec);
- if (child_enabled) {
- // Returns true if enabled for any child module.
- enable = child_enabled;
- }
- return ret_val;
+ return rtp_sender_.GenericFECStatus(&enable, &payload_type_red,
+ &payload_type_fec);
}
int32_t ModuleRtpRtcpImpl::SetFecParameters(
const FecProtectionParams* delta_params,
const FecProtectionParams* key_params) {
- DCHECK(!IsDefaultModule());
return rtp_sender_.SetFecParameters(delta_params, key_params);
}
@@ -1002,7 +883,6 @@
uint32_t* video_rate,
uint32_t* fec_rate,
uint32_t* nack_rate) const {
- DCHECK(!IsDefaultModule());
*total_rate = rtp_sender_.BitrateSent();
*video_rate = rtp_sender_.VideoBitrateSent();
*fec_rate = rtp_sender_.FecOverheadRate();
@@ -1118,10 +998,4 @@
ModuleRtpRtcpImpl::GetSendChannelRtpStatisticsCallback() const {
return rtp_sender_.GetRtpStatisticsCallback();
}
-
-bool ModuleRtpRtcpImpl::IsDefaultModule() const {
- CriticalSectionScoped cs(critical_section_module_ptrs_.get());
- return !child_modules_.empty();
-}
-
} // namespace webrtc
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
index d0f8aede..8a3d7ec 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
+++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
@@ -27,8 +27,6 @@
public:
explicit ModuleRtpRtcpImpl(const RtpRtcp::Configuration& configuration);
- virtual ~ModuleRtpRtcpImpl();
-
// Returns the number of milliseconds until the module want a worker thread to
// call Process.
virtual int64_t TimeUntilNextProcess() OVERRIDE;
@@ -72,7 +70,7 @@
// Set SequenceNumber, default is a random number.
virtual void SetSequenceNumber(uint16_t seq) OVERRIDE;
- virtual void SetRtpStateForSsrc(uint32_t ssrc,
+ virtual bool SetRtpStateForSsrc(uint32_t ssrc,
const RtpState& rtp_state) OVERRIDE;
virtual bool GetRtpStateForSsrc(uint32_t ssrc, RtpState* rtp_state) OVERRIDE;
@@ -345,10 +343,6 @@
void OnRequestSendReport();
protected:
- void RegisterChildModule(RtpRtcp* module);
-
- void DeRegisterChildModule(RtpRtcp* module);
-
bool UpdateRTCPReceiveInformationTimers();
uint32_t BitrateReceivedNow() const;
@@ -377,8 +371,6 @@
bool TimeToSendFullNackList(int64_t now) const;
- bool IsDefaultModule() const;
-
int32_t id_;
const bool audio_;
bool collision_detected_;
@@ -387,10 +379,6 @@
int64_t last_rtt_process_time_;
uint16_t packet_overhead_;
- scoped_ptr<CriticalSectionWrapper> critical_section_module_ptrs_;
- scoped_ptr<CriticalSectionWrapper> critical_section_module_ptrs_feedback_;
- ModuleRtpRtcpImpl* default_module_;
- std::vector<ModuleRtpRtcpImpl*> child_modules_;
size_t padding_index_;
// Send side
@@ -399,7 +387,6 @@
uint32_t nack_last_time_sent_full_prev_;
uint16_t nack_last_seq_number_sent_;
- bool simulcast_;
VideoCodec send_video_codec_;
KeyFrameRequestMethod key_frame_req_method_;
diff --git a/webrtc/video_engine/encoder_state_feedback_unittest.cc b/webrtc/video_engine/encoder_state_feedback_unittest.cc
index 0cb0fc7..c2ddb4d 100644
--- a/webrtc/video_engine/encoder_state_feedback_unittest.cc
+++ b/webrtc/video_engine/encoder_state_feedback_unittest.cc
@@ -28,7 +28,7 @@
class MockVieEncoder : public ViEEncoder {
public:
explicit MockVieEncoder(ProcessThread* process_thread)
- : ViEEncoder(1, 1, 1, config_, *process_thread, NULL, false) {}
+ : ViEEncoder(1, 1, config_, *process_thread, NULL, false) {}
~MockVieEncoder() {}
MOCK_METHOD1(OnReceivedIntraFrameRequest,
diff --git a/webrtc/video_engine/vie_channel.cc b/webrtc/video_engine/vie_channel.cc
index 50b8a49..f857298 100644
--- a/webrtc/video_engine/vie_channel.cc
+++ b/webrtc/video_engine/vie_channel.cc
@@ -91,7 +91,6 @@
RemoteBitrateEstimator* remote_bitrate_estimator,
RtcpRttStats* rtt_stats,
PacedSender* paced_sender,
- RtpRtcp* default_rtp_rtcp,
bool sender,
bool disable_default_encoder)
: ViEFrameProviderBase(channel_id, engine_id),
@@ -101,7 +100,6 @@
num_socket_threads_(kViESocketThreads),
callback_cs_(CriticalSectionWrapper::CreateCriticalSection()),
rtp_rtcp_cs_(CriticalSectionWrapper::CreateCriticalSection()),
- default_rtp_rtcp_(default_rtp_rtcp),
send_payload_router_(new PayloadRouter()),
vcm_protection_callback_(new ViEChannelProtectionCallback(this)),
vcm_(VideoCodingModule::Create()),
@@ -1009,16 +1007,36 @@
void ViEChannel::SetRtpStateForSsrc(uint32_t ssrc, const RtpState& rtp_state) {
assert(!rtp_rtcp_->Sending());
- default_rtp_rtcp_->SetRtpStateForSsrc(ssrc, rtp_state);
+ if (rtp_rtcp_->SetRtpStateForSsrc(ssrc, rtp_state))
+ return;
+ CriticalSectionScoped cs(rtp_rtcp_cs_.get());
+ for (auto* module : simulcast_rtp_rtcp_) {
+ if (module->SetRtpStateForSsrc(ssrc, rtp_state))
+ return;
+ }
+ for (auto* module : removed_rtp_rtcp_) {
+ if (module->SetRtpStateForSsrc(ssrc, rtp_state))
+ return;
+ }
}
RtpState ViEChannel::GetRtpStateForSsrc(uint32_t ssrc) {
assert(!rtp_rtcp_->Sending());
RtpState rtp_state;
- if (!default_rtp_rtcp_->GetRtpStateForSsrc(ssrc, &rtp_state)) {
- LOG(LS_ERROR) << "Couldn't get RTP state for ssrc: " << ssrc;
+ if (rtp_rtcp_->GetRtpStateForSsrc(ssrc, &rtp_state))
+ return rtp_state;
+
+ CriticalSectionScoped cs(rtp_rtcp_cs_.get());
+ for (auto* module : simulcast_rtp_rtcp_) {
+ if (module->GetRtpStateForSsrc(ssrc, &rtp_state))
+ return rtp_state;
}
+ for (auto* module : removed_rtp_rtcp_) {
+ if (module->GetRtpStateForSsrc(ssrc, &rtp_state))
+ return rtp_state;
+ }
+ LOG(LS_ERROR) << "Couldn't get RTP state for ssrc: " << ssrc;
return rtp_state;
}
@@ -1759,7 +1777,6 @@
RtpRtcp::Configuration configuration;
configuration.id = ViEModuleId(engine_id_, channel_id_);
configuration.audio = false;
- configuration.default_module = default_rtp_rtcp_;
configuration.outgoing_transport = &vie_sender_;
configuration.intra_frame_callback = intra_frame_observer_;
configuration.bandwidth_callback = bandwidth_observer_.get();
diff --git a/webrtc/video_engine/vie_channel.h b/webrtc/video_engine/vie_channel.h
index 73dbb2b..5d11b4d 100644
--- a/webrtc/video_engine/vie_channel.h
+++ b/webrtc/video_engine/vie_channel.h
@@ -76,7 +76,6 @@
RemoteBitrateEstimator* remote_bitrate_estimator,
RtcpRttStats* rtt_stats,
PacedSender* paced_sender,
- RtpRtcp* default_rtp_rtcp,
bool sender,
bool disable_default_encoder);
~ViEChannel();
@@ -500,8 +499,6 @@
scoped_ptr<CriticalSectionWrapper> callback_cs_;
scoped_ptr<CriticalSectionWrapper> rtp_rtcp_cs_;
- RtpRtcp* default_rtp_rtcp_;
-
// Owned modules/classes.
scoped_ptr<RtpRtcp> rtp_rtcp_;
std::list<RtpRtcp*> simulcast_rtp_rtcp_;
diff --git a/webrtc/video_engine/vie_channel_manager.cc b/webrtc/video_engine/vie_channel_manager.cc
index 9a70364..4baf2a9 100644
--- a/webrtc/video_engine/vie_channel_manager.cc
+++ b/webrtc/video_engine/vie_channel_manager.cc
@@ -90,7 +90,7 @@
ChannelGroup* group = new ChannelGroup(module_process_thread_,
channel_group_config);
BitrateController* bitrate_controller = group->GetBitrateController();
- ViEEncoder* vie_encoder = new ViEEncoder(engine_id_, new_channel_id,
+ ViEEncoder* vie_encoder = new ViEEncoder(new_channel_id,
number_of_cores_,
engine_config_,
*module_process_thread_,
@@ -166,7 +166,7 @@
ViEEncoder* vie_encoder = NULL;
if (sender) {
// We need to create a new ViEEncoder.
- vie_encoder = new ViEEncoder(engine_id_, new_channel_id, number_of_cores_,
+ vie_encoder = new ViEEncoder(new_channel_id, number_of_cores_,
engine_config_,
*module_process_thread_,
bitrate_controller,
@@ -435,9 +435,6 @@
bool disable_default_encoder) {
PacedSender* paced_sender = vie_encoder->GetPacedSender();
- // Register the channel at the encoder.
- RtpRtcp* send_rtp_rtcp_module = vie_encoder->SendRtpRtcpModule();
-
ViEChannel* vie_channel = new ViEChannel(channel_id, engine_id_,
number_of_cores_,
engine_config_,
@@ -447,7 +444,6 @@
remote_bitrate_estimator,
rtcp_rtt_stats,
paced_sender,
- send_rtp_rtcp_module,
sender,
disable_default_encoder);
if (vie_channel->Init() != 0) {
diff --git a/webrtc/video_engine/vie_encoder.cc b/webrtc/video_engine/vie_encoder.cc
index 48fa0f0..9c105ee 100644
--- a/webrtc/video_engine/vie_encoder.cc
+++ b/webrtc/video_engine/vie_encoder.cc
@@ -19,7 +19,6 @@
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
#include "webrtc/frame_callback.h"
#include "webrtc/modules/pacing/include/paced_sender.h"
-#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
#include "webrtc/modules/utility/interface/process_thread.h"
#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
#include "webrtc/modules/video_coding/main/interface/video_coding.h"
@@ -128,20 +127,17 @@
ViEEncoder* owner_;
};
-ViEEncoder::ViEEncoder(int32_t engine_id,
- int32_t channel_id,
+ViEEncoder::ViEEncoder(int32_t channel_id,
uint32_t number_of_cores,
const Config& config,
ProcessThread& module_process_thread,
BitrateController* bitrate_controller,
bool disable_default_encoder)
- : engine_id_(engine_id),
- channel_id_(channel_id),
+ : channel_id_(channel_id),
number_of_cores_(number_of_cores),
disable_default_encoder_(disable_default_encoder),
vcm_(*webrtc::VideoCodingModule::Create()),
- vpm_(*webrtc::VideoProcessingModule::Create(ViEModuleId(engine_id,
- channel_id))),
+ vpm_(*webrtc::VideoProcessingModule::Create(ViEModuleId(-1, channel_id))),
send_payload_router_(NULL),
vcm_protection_callback_(NULL),
callback_cs_(CriticalSectionWrapper::CreateCriticalSection()),
@@ -169,11 +165,6 @@
pre_encode_callback_(NULL),
start_ms_(Clock::GetRealTimeClock()->TimeInMilliseconds()),
send_statistics_proxy_(NULL) {
- RtpRtcp::Configuration configuration;
- configuration.id = ViEModuleId(engine_id_, channel_id_);
- configuration.audio = false; // Video.
-
- default_rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(configuration));
bitrate_observer_.reset(new ViEBitrateObserver(this));
pacing_callback_.reset(new ViEPacedSenderCallback(this));
paced_sender_.reset(new PacedSender(
@@ -239,7 +230,6 @@
vcm_protection_callback_ = vcm_protection_callback;
module_process_thread_.RegisterModule(&vcm_);
- module_process_thread_.RegisterModule(default_rtp_rtcp_.get());
pacer_thread_->RegisterModule(paced_sender_.get());
pacer_thread_->Start();
}
@@ -251,7 +241,6 @@
pacer_thread_->DeRegisterModule(paced_sender_.get());
module_process_thread_.DeRegisterModule(&vcm_);
module_process_thread_.DeRegisterModule(&vpm_);
- module_process_thread_.DeRegisterModule(default_rtp_rtcp_.get());
}
ViEEncoder::~ViEEncoder() {
@@ -510,10 +499,6 @@
encoder_paused_and_dropped_frame_ = false;
}
-RtpRtcp* ViEEncoder::SendRtpRtcpModule() {
- return default_rtp_rtcp_.get();
-}
-
void ViEEncoder::DeliverFrame(int id,
I420VideoFrame* video_frame,
const std::vector<uint32_t>& csrcs) {
diff --git a/webrtc/video_engine/vie_encoder.h b/webrtc/video_engine/vie_encoder.h
index a862af7..2aab5f6 100644
--- a/webrtc/video_engine/vie_encoder.h
+++ b/webrtc/video_engine/vie_encoder.h
@@ -37,7 +37,6 @@
class PayloadRouter;
class ProcessThread;
class QMVideoSettingsCallback;
-class RtpRtcp;
class SendStatisticsProxy;
class ViEBitrateObserver;
class ViEEffectFilter;
@@ -54,8 +53,7 @@
friend class ViEBitrateObserver;
friend class ViEPacedSenderCallback;
- ViEEncoder(int32_t engine_id,
- int32_t channel_id,
+ ViEEncoder(int32_t channel_id,
uint32_t number_of_cores,
const Config& config,
ProcessThread& module_process_thread,
@@ -105,9 +103,6 @@
// Scale or crop/pad image.
int32_t ScaleInputImage(bool enable);
- // RTP settings.
- RtpRtcp* SendRtpRtcpModule();
-
// Implementing ViEFrameCallback.
virtual void DeliverFrame(int id,
I420VideoFrame* video_frame,
@@ -201,14 +196,12 @@
void UpdateHistograms();
- int32_t engine_id_;
const int channel_id_;
const uint32_t number_of_cores_;
const bool disable_default_encoder_;
VideoCodingModule& vcm_;
VideoProcessingModule& vpm_;
- rtc::scoped_ptr<RtpRtcp> default_rtp_rtcp_;
scoped_refptr<PayloadRouter> send_payload_router_;
VCMProtectionCallback* vcm_protection_callback_;