Chromium Code Reviews| 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 739dc3f723626859729be02fe51ffc334ce8fe0d..5d0e5cc5aa5109e7a0b41de3a9639dcd03c53acc 100644 |
| --- a/media/cast/net/cast_transport_impl.cc |
| +++ b/media/cast/net/cast_transport_impl.cc |
| @@ -9,6 +9,7 @@ |
| #include <string> |
| #include <utility> |
| +#include "base/memory/ptr_util.h" |
| #include "base/single_thread_task_runner.h" |
| #include "build/build_config.h" |
| #include "media/cast/net/cast_transport_defines.h" |
| @@ -41,13 +42,13 @@ int LookupOptionWithDefault(const base::DictionaryValue& options, |
| } // namespace |
| -scoped_ptr<CastTransport> CastTransport::Create( |
| +std::unique_ptr<CastTransport> CastTransport::Create( |
| base::TickClock* clock, // Owned by the caller. |
| base::TimeDelta logging_flush_interval, |
| - scoped_ptr<Client> client, |
| - scoped_ptr<PacketTransport> transport, |
| + std::unique_ptr<Client> client, |
| + std::unique_ptr<PacketTransport> transport, |
| const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) { |
| - return scoped_ptr<CastTransport>( |
| + return std::unique_ptr<CastTransport>( |
| new CastTransportImpl(clock, logging_flush_interval, std::move(client), |
| std::move(transport), transport_task_runner.get())); |
| } |
| @@ -56,11 +57,46 @@ PacketReceiverCallback CastTransport::PacketReceiverForTesting() { |
| return PacketReceiverCallback(); |
| } |
| +class CastTransportImpl::RtcpObserver : public SenderRtcpObserver { |
| + public: |
| + RtcpObserver(std::unique_ptr<SenderRtcpObserver> observer, |
| + uint32_t rtp_sender_ssrc, |
| + EventMediaType media_type, |
| + CastTransportImpl* cast_transport_impl) |
| + : rtp_sender_ssrc_(rtp_sender_ssrc), |
| + sender_rtcp_observer_(std::move(observer)), |
| + media_type_(media_type), |
| + cast_transport_impl_(cast_transport_impl) {} |
| + |
| + void OnCastMessageReceived(const RtcpCastMessage& cast_message) override { |
| + sender_rtcp_observer_->OnCastMessageReceived(cast_message); |
| + cast_transport_impl_->OnReceivedCastMessage(rtp_sender_ssrc_, cast_message); |
|
miu
2016/04/25 23:23:53
naming nit: OnCastMessageReceived versus OnReceive
xjz
2016/04/29 19:15:49
Done.
|
| + } |
| + |
| + void OnRttReceived(base::TimeDelta round_trip_time) override { |
| + sender_rtcp_observer_->OnRttReceived(round_trip_time); |
| + } |
| + |
| + void OnReceiverLogReceived(const RtcpReceiverLogMessage& log) override { |
| + cast_transport_impl_->OnReceivedLogMessage(media_type_, log); |
| + } |
| + |
| + void OnPliReceived() override { sender_rtcp_observer_->OnPliReceived(); } |
| + |
| + private: |
| + const uint32_t rtp_sender_ssrc_; |
| + const std::unique_ptr<SenderRtcpObserver> sender_rtcp_observer_; |
| + const EventMediaType media_type_; |
| + CastTransportImpl* const cast_transport_impl_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(RtcpObserver); |
| +}; |
| + |
| CastTransportImpl::CastTransportImpl( |
| base::TickClock* clock, |
| base::TimeDelta logging_flush_interval, |
| - scoped_ptr<Client> client, |
| - scoped_ptr<PacketTransport> transport, |
| + std::unique_ptr<Client> client, |
| + std::unique_ptr<PacketTransport> transport, |
| const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) |
| : clock_(clock), |
| logging_flush_interval_(logging_flush_interval), |
| @@ -96,9 +132,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<SenderRtcpObserver> 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)) { |
| @@ -119,11 +153,9 @@ void CastTransportImpl::InitializeAudio( |
| } |
| 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)); |
| + base::WrapUnique(new RtcpObserver(std::move(rtcp_observer), config.ssrc, |
| + AUDIO_EVENT, this)), |
| + clock_, &pacer_, 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<SenderRtcpObserver> 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)) { |
| @@ -149,11 +179,9 @@ void CastTransportImpl::InitializeVideo( |
| } |
| 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)); |
| + base::WrapUnique(new RtcpObserver(std::move(rtcp_observer), config.ssrc, |
| + VIDEO_EVENT, this)), |
| + clock_, &pacer_, config.ssrc, config.feedback_ssrc)); |
| pacer_.RegisterVideoSsrc(config.ssrc); |
| valid_sender_ssrcs_.insert(config.feedback_ssrc); |
| transport_client_->OnStatusChanged(TRANSPORT_VIDEO_INITIALIZED); |
| @@ -259,10 +287,10 @@ void CastTransportImpl::SendRawEvents() { |
| DCHECK(logging_flush_interval_ > base::TimeDelta()); |
| if (!recent_frame_events_.empty() || !recent_packet_events_.empty()) { |
| - scoped_ptr<std::vector<FrameEvent>> frame_events( |
| + std::unique_ptr<std::vector<FrameEvent>> frame_events( |
| new std::vector<FrameEvent>()); |
| frame_events->swap(recent_frame_events_); |
| - scoped_ptr<std::vector<PacketEvent>> packet_events( |
| + std::unique_ptr<std::vector<PacketEvent>> packet_events( |
| new std::vector<PacketEvent>()); |
| packet_events->swap(recent_packet_events_); |
| transport_client_->OnLoggingEventsReceived(std::move(frame_events), |
| @@ -275,7 +303,7 @@ void CastTransportImpl::SendRawEvents() { |
| logging_flush_interval_); |
| } |
| -bool CastTransportImpl::OnReceivedPacket(scoped_ptr<Packet> packet) { |
| +bool CastTransportImpl::OnReceivedPacket(std::unique_ptr<Packet> packet) { |
| const uint8_t* const data = &packet->front(); |
| const size_t length = packet->size(); |
| uint32_t ssrc; |
| @@ -347,10 +375,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) { |