| Index: chrome/browser/media/cast_transport_host_filter.cc
|
| diff --git a/chrome/browser/media/cast_transport_host_filter.cc b/chrome/browser/media/cast_transport_host_filter.cc
|
| index a26cd5204a6bd2a73d8d743d28707a93699c6cd0..6b5608157cd73f0a91ee15b94bf9706cb7716bf5 100644
|
| --- a/chrome/browser/media/cast_transport_host_filter.cc
|
| +++ b/chrome/browser/media/cast_transport_host_filter.cc
|
| @@ -169,24 +169,34 @@ void CastTransportHostFilter::OnNew(int32_t channel_id,
|
| base::Bind(&CastTransportHostFilter::OnStatusChanged,
|
| weak_factory_.GetWeakPtr(), channel_id)));
|
| udp_transport->SetUdpOptions(options);
|
| - std::unique_ptr<media::cast::CastTransport> sender =
|
| + std::unique_ptr<media::cast::CastTransport> transport =
|
| media::cast::CastTransport::Create(
|
| &clock_, base::TimeDelta::FromSeconds(kSendRawEventsIntervalSecs),
|
| base::MakeUnique<TransportClient>(channel_id, this),
|
| std::move(udp_transport), base::ThreadTaskRunnerHandle::Get());
|
| - sender->SetOptions(options);
|
| - id_map_.AddWithID(sender.release(), channel_id);
|
| + transport->SetOptions(options);
|
| + id_map_.AddWithID(transport.release(), channel_id);
|
| }
|
|
|
| void CastTransportHostFilter::OnDelete(int32_t channel_id) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| id_map_.Remove(channel_id);
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::Delete called "
|
| << "on non-existing channel";
|
| }
|
|
|
| + // Delete all existing remoting senders for this channel.
|
| + const auto entries = stream_id_map_.equal_range(channel_id);
|
| + for (auto it = entries.first; it != entries.second; ++it) {
|
| + if (remoting_sender_map_.Lookup(it->second)) {
|
| + DVLOG(3) << "Delete CastRemotingSender for stream: " << it->second;
|
| + remoting_sender_map_.Remove(it->second);
|
| + }
|
| + }
|
| + stream_id_map_.erase(channel_id);
|
| +
|
| if (id_map_.IsEmpty()) {
|
| DVLOG_IF(1, power_save_blocker_) <<
|
| ("Releasing the block on application suspension since no transports "
|
| @@ -198,11 +208,30 @@ void CastTransportHostFilter::OnDelete(int32_t channel_id) {
|
| void CastTransportHostFilter::OnInitializeStream(
|
| int32_t channel_id,
|
| const media::cast::CastTransportRtpConfig& config) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->InitializeStream(
|
| - config, base::MakeUnique<RtcpClient>(channel_id, config.ssrc,
|
| - weak_factory_.GetWeakPtr()));
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + if (config.rtp_payload_type == media::cast::RtpPayloadType::REMOTE_AUDIO ||
|
| + config.rtp_payload_type == media::cast::RtpPayloadType::REMOTE_VIDEO) {
|
| + // Create CastRemotingSender for this RTP stream.
|
| + scoped_refptr<media::cast::CastEnvironment> cast_environment =
|
| + new media::cast::CastEnvironment(
|
| + base::MakeUnique<base::DefaultTickClock>(),
|
| + base::ThreadTaskRunnerHandle::Get(),
|
| + base::ThreadTaskRunnerHandle::Get(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| + remoting_sender_map_.AddWithID(
|
| + new CastRemotingSender(std::move(cast_environment), transport,
|
| + config),
|
| + config.rtp_stream_id);
|
| + DVLOG(3) << "Create CastRemotingSender for stream: "
|
| + << config.rtp_stream_id;
|
| +
|
| + stream_id_map_.insert(std::make_pair(channel_id, config.rtp_stream_id));
|
| + } else {
|
| + transport->InitializeStream(
|
| + config, base::MakeUnique<RtcpClient>(channel_id, config.ssrc,
|
| + weak_factory_.GetWeakPtr()));
|
| + }
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::OnInitializeStream on non-existing "
|
| "channel";
|
| @@ -213,9 +242,9 @@ void CastTransportHostFilter::OnInsertFrame(
|
| int32_t channel_id,
|
| uint32_t ssrc,
|
| const media::cast::EncodedFrame& frame) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->InsertFrame(ssrc, frame);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->InsertFrame(ssrc, frame);
|
| } else {
|
| DVLOG(1)
|
| << "CastTransportHostFilter::OnInsertFrame on non-existing channel";
|
| @@ -226,9 +255,9 @@ void CastTransportHostFilter::OnCancelSendingFrames(
|
| int32_t channel_id,
|
| uint32_t ssrc,
|
| const std::vector<media::cast::FrameId>& frame_ids) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->CancelSendingFrames(ssrc, frame_ids);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->CancelSendingFrames(ssrc, frame_ids);
|
| } else {
|
| DVLOG(1)
|
| << "CastTransportHostFilter::OnCancelSendingFrames "
|
| @@ -240,9 +269,9 @@ void CastTransportHostFilter::OnResendFrameForKickstart(
|
| int32_t channel_id,
|
| uint32_t ssrc,
|
| media::cast::FrameId frame_id) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->ResendFrameForKickstart(ssrc, frame_id);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->ResendFrameForKickstart(ssrc, frame_id);
|
| } else {
|
| DVLOG(1)
|
| << "CastTransportHostFilter::OnResendFrameForKickstart "
|
| @@ -255,11 +284,10 @@ void CastTransportHostFilter::OnSendSenderReport(
|
| uint32_t ssrc,
|
| base::TimeTicks current_time,
|
| media::cast::RtpTimeTicks current_time_as_rtp_timestamp) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->SendSenderReport(ssrc,
|
| - current_time,
|
| - current_time_as_rtp_timestamp);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->SendSenderReport(ssrc, current_time,
|
| + current_time_as_rtp_timestamp);
|
| } else {
|
| DVLOG(1)
|
| << "CastTransportHostFilter::OnSendSenderReport "
|
| @@ -271,9 +299,9 @@ void CastTransportHostFilter::OnAddValidRtpReceiver(
|
| int32_t channel_id,
|
| uint32_t rtp_sender_ssrc,
|
| uint32_t rtp_receiver_ssrc) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->AddValidRtpReceiver(rtp_sender_ssrc, rtp_receiver_ssrc);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->AddValidRtpReceiver(rtp_sender_ssrc, rtp_receiver_ssrc);
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::OnAddValidRtpReceiver "
|
| << "on non-existing channel";
|
| @@ -284,9 +312,9 @@ void CastTransportHostFilter::OnInitializeRtpReceiverRtcpBuilder(
|
| int32_t channel_id,
|
| uint32_t rtp_receiver_ssrc,
|
| const media::cast::RtcpTimeData& time_data) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->InitializeRtpReceiverRtcpBuilder(rtp_receiver_ssrc, time_data);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->InitializeRtpReceiverRtcpBuilder(rtp_receiver_ssrc, time_data);
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::OnInitializeRtpReceiverRtcpBuilder "
|
| << "on non-existing channel";
|
| @@ -297,9 +325,9 @@ void CastTransportHostFilter::OnAddCastFeedback(
|
| int32_t channel_id,
|
| const media::cast::RtcpCastMessage& cast_message,
|
| base::TimeDelta target_delay) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->AddCastFeedback(cast_message, target_delay);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->AddCastFeedback(cast_message, target_delay);
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::OnAddCastFeedback "
|
| << "on non-existing channel";
|
| @@ -309,9 +337,9 @@ void CastTransportHostFilter::OnAddCastFeedback(
|
| void CastTransportHostFilter::OnAddPli(
|
| int32_t channel_id,
|
| const media::cast::RtcpPliMessage& pli_message) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->AddPli(pli_message);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->AddPli(pli_message);
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::OnAddPli on non-existing channel";
|
| }
|
| @@ -320,9 +348,9 @@ void CastTransportHostFilter::OnAddPli(
|
| void CastTransportHostFilter::OnAddRtcpEvents(
|
| int32_t channel_id,
|
| const media::cast::ReceiverRtcpEventSubscriber::RtcpEvents& rtcp_events) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->AddRtcpEvents(rtcp_events);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->AddRtcpEvents(rtcp_events);
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::OnAddRtcpEvents "
|
| << "on non-existing channel";
|
| @@ -332,9 +360,9 @@ void CastTransportHostFilter::OnAddRtcpEvents(
|
| void CastTransportHostFilter::OnAddRtpReceiverReport(
|
| int32_t channel_id,
|
| const media::cast::RtcpReportBlock& rtp_receiver_report_block) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->AddRtpReceiverReport(rtp_receiver_report_block);
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->AddRtpReceiverReport(rtp_receiver_report_block);
|
| } else {
|
| DVLOG(1) << "CastTransportHostFilter::OnAddRtpReceiverReport "
|
| << "on non-existing channel";
|
| @@ -342,9 +370,9 @@ void CastTransportHostFilter::OnAddRtpReceiverReport(
|
| }
|
|
|
| void CastTransportHostFilter::OnSendRtcpFromRtpReceiver(int32_t channel_id) {
|
| - media::cast::CastTransport* sender = id_map_.Lookup(channel_id);
|
| - if (sender) {
|
| - sender->SendRtcpFromRtpReceiver();
|
| + media::cast::CastTransport* transport = id_map_.Lookup(channel_id);
|
| + if (transport) {
|
| + transport->SendRtcpFromRtpReceiver();
|
| } else {
|
| DVLOG(1)
|
| << "CastTransportHostFilter::OnSendRtcpFromRtpReceiver "
|
|
|