Index: webrtc/call/flexfec_receive_stream_impl.cc |
diff --git a/webrtc/call/flexfec_receive_stream_impl.cc b/webrtc/call/flexfec_receive_stream_impl.cc |
index f01043349892574f5d240cacd27583173c68ad71..c73d9e98e59f55985821ef5be2b794f52b73aa26 100644 |
--- a/webrtc/call/flexfec_receive_stream_impl.cc |
+++ b/webrtc/call/flexfec_receive_stream_impl.cc |
@@ -15,6 +15,7 @@ |
#include "webrtc/base/checks.h" |
#include "webrtc/base/location.h" |
#include "webrtc/base/logging.h" |
+#include "webrtc/call/rtp_stream_receiver_controller_interface.h" |
#include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h" |
#include "webrtc/modules/rtp_rtcp/include/receive_statistics.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" |
@@ -122,6 +123,7 @@ std::unique_ptr<RtpRtcp> CreateRtpRtcpModule( |
} // namespace |
FlexfecReceiveStreamImpl::FlexfecReceiveStreamImpl( |
+ RtpStreamReceiverControllerInterface* receiver_controller, |
const Config& config, |
RecoveredPacketReceiver* recovered_packet_receiver, |
RtcpRttStats* rtt_stats, |
@@ -141,6 +143,22 @@ FlexfecReceiveStreamImpl::FlexfecReceiveStreamImpl( |
rtp_rtcp_->SetRTCPStatus(config_.rtcp_mode); |
rtp_rtcp_->SetSSRC(config_.local_ssrc); |
process_thread_->RegisterModule(rtp_rtcp_.get(), RTC_FROM_HERE); |
+ |
+ // Register with transport. |
+ // TODO(nisse): OnRtpPacket in this class delegates all real work to |
+ // |receiver_|. So maybe we don't need to implement RtpPacketSinkInterface |
+ // here at all, we'd then delete the OnRtpPacket method and instead register |
+ // |receiver_| as the RtpPacketSinkInterface for this stream. |
+ // TODO(nisse): Passing |this| from the constructor to the RtpDemuxer, before |
+ // the object is fully initialized, is risky. But it works in this case |
+ // because locking in our caller, Call::CreateFlexfecReceiveStream, ensures |
+ // that the demuxer doesn't call OnRtpPacket before this object is fully |
+ // constructed. Registering |receiver_| instead of |this| would solve this |
+ // problem too. |
+ rtp_stream_receiver_ = |
+ receiver_controller->CreateReceiver(config_.remote_ssrc, this); |
nisse-webrtc
2017/06/20 13:35:35
This is another case of passing |this| before the
|
+ for (uint32_t ssrc : config.protected_media_ssrcs) |
+ receiver_controller->AddSink(ssrc, this); |
} |
FlexfecReceiveStreamImpl::~FlexfecReceiveStreamImpl() { |