Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3592)

Unified Diff: chrome/browser/media/cast_transport_host_filter.cc

Issue 2307653002: Adding CastRemotingSender for media remoting. (Closed)
Patch Set: Rebased. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 "

Powered by Google App Engine
This is Rietveld 408576698