Index: media/cast/net/cast_transport_impl.cc |
diff --git a/media/cast/net/cast_transport_impl.cc b/media/cast/net/cast_transport_impl.cc |
index c1c5fd513205aabf7986b54416bc57d5f885ffaf..5ace37f1914fc439619810f052e1d0bf3d3eb1cd 100644 |
--- a/media/cast/net/cast_transport_impl.cc |
+++ b/media/cast/net/cast_transport_impl.cc |
@@ -56,6 +56,41 @@ PacketReceiverCallback CastTransport::PacketReceiverForTesting() { |
return PacketReceiverCallback(); |
} |
+class CastTransportImpl::RtcpClient : public RtcpObserver { |
+ public: |
+ RtcpClient(std::unique_ptr<RtcpObserver> observer, |
+ uint32_t rtp_sender_ssrc, |
+ EventMediaType media_type, |
+ CastTransportImpl* cast_transport_impl) |
+ : rtp_sender_ssrc_(rtp_sender_ssrc), |
+ rtcp_observer_(std::move(observer)), |
+ media_type_(media_type), |
+ cast_transport_impl_(cast_transport_impl) {} |
+ |
+ void OnReceivedCastMessage(const RtcpCastMessage& cast_message) override { |
+ rtcp_observer_->OnReceivedCastMessage(cast_message); |
+ cast_transport_impl_->OnReceivedCastMessage(rtp_sender_ssrc_, cast_message); |
+ } |
+ |
+ void OnReceivedRtt(base::TimeDelta round_trip_time) override { |
+ rtcp_observer_->OnReceivedRtt(round_trip_time); |
+ } |
+ |
+ void OnReceivedReceiverLog(const RtcpReceiverLogMessage& log) override { |
+ cast_transport_impl_->OnReceivedLogMessage(media_type_, log); |
+ } |
+ |
+ void OnReceivedPli() override { rtcp_observer_->OnReceivedPli(); } |
+ |
+ private: |
+ const uint32_t rtp_sender_ssrc_; |
+ const std::unique_ptr<RtcpObserver> rtcp_observer_; |
+ const EventMediaType media_type_; |
+ CastTransportImpl* const cast_transport_impl_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RtcpClient); |
+}; |
+ |
CastTransportImpl::CastTransportImpl( |
base::TickClock* clock, |
base::TimeDelta logging_flush_interval, |
@@ -96,9 +131,7 @@ CastTransportImpl::~CastTransportImpl() { |
void CastTransportImpl::InitializeAudio( |
const CastTransportRtpConfig& config, |
- const RtcpCastMessageCallback& cast_message_cb, |
- const RtcpRttCallback& rtt_cb, |
- const RtcpPliCallback& pli_cb) { |
+ std::unique_ptr<RtcpObserver> rtcp_observer) { |
LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) |
<< "Unsafe to send audio with encryption DISABLED."; |
if (!audio_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { |
@@ -118,12 +151,11 @@ void CastTransportImpl::InitializeAudio( |
return; |
} |
- audio_rtcp_session_.reset(new SenderRtcpSession( |
- base::Bind(&CastTransportImpl::OnReceivedCastMessage, |
- weak_factory_.GetWeakPtr(), config.ssrc, cast_message_cb), |
- rtt_cb, base::Bind(&CastTransportImpl::OnReceivedLogMessage, |
- weak_factory_.GetWeakPtr(), AUDIO_EVENT), |
- pli_cb, clock_, &pacer_, config.ssrc, config.feedback_ssrc)); |
+ audio_rtcp_observer_.reset( |
+ new RtcpClient(std::move(rtcp_observer), config.ssrc, AUDIO_EVENT, this)); |
+ audio_rtcp_session_.reset( |
+ new SenderRtcpSession(clock_, &pacer_, audio_rtcp_observer_.get(), |
+ config.ssrc, config.feedback_ssrc)); |
pacer_.RegisterAudioSsrc(config.ssrc); |
valid_sender_ssrcs_.insert(config.feedback_ssrc); |
transport_client_->OnStatusChanged(TRANSPORT_AUDIO_INITIALIZED); |
@@ -131,9 +163,7 @@ void CastTransportImpl::InitializeAudio( |
void CastTransportImpl::InitializeVideo( |
const CastTransportRtpConfig& config, |
- const RtcpCastMessageCallback& cast_message_cb, |
- const RtcpRttCallback& rtt_cb, |
- const RtcpPliCallback& pli_cb) { |
+ std::unique_ptr<RtcpObserver> rtcp_observer) { |
LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) |
<< "Unsafe to send video with encryption DISABLED."; |
if (!video_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { |
@@ -148,12 +178,11 @@ void CastTransportImpl::InitializeVideo( |
return; |
} |
- video_rtcp_session_.reset(new SenderRtcpSession( |
- base::Bind(&CastTransportImpl::OnReceivedCastMessage, |
- weak_factory_.GetWeakPtr(), config.ssrc, cast_message_cb), |
- rtt_cb, base::Bind(&CastTransportImpl::OnReceivedLogMessage, |
- weak_factory_.GetWeakPtr(), VIDEO_EVENT), |
- pli_cb, clock_, &pacer_, config.ssrc, config.feedback_ssrc)); |
+ video_rtcp_observer_.reset( |
+ new RtcpClient(std::move(rtcp_observer), config.ssrc, VIDEO_EVENT, this)); |
+ video_rtcp_session_.reset( |
+ new SenderRtcpSession(clock_, &pacer_, video_rtcp_observer_.get(), |
+ config.ssrc, config.feedback_ssrc)); |
pacer_.RegisterVideoSsrc(config.ssrc); |
valid_sender_ssrcs_.insert(config.feedback_ssrc); |
transport_client_->OnStatusChanged(TRANSPORT_VIDEO_INITIALIZED); |
@@ -349,10 +378,7 @@ void CastTransportImpl::OnReceivedLogMessage( |
void CastTransportImpl::OnReceivedCastMessage( |
uint32_t ssrc, |
- const RtcpCastMessageCallback& cast_message_cb, |
const RtcpCastMessage& cast_message) { |
- if (!cast_message_cb.is_null()) |
- cast_message_cb.Run(cast_message); |
DedupInfo dedup_info; |
if (audio_sender_ && audio_sender_->ssrc() == ssrc) { |