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

Unified Diff: media/cast/net/cast_transport_sender_impl.cc

Issue 445933002: Cast: Move retransmission to the transport (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed test compile Created 6 years, 4 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
« no previous file with comments | « media/cast/net/cast_transport_sender_impl.h ('k') | media/cast/net/cast_transport_sender_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/net/cast_transport_sender_impl.cc
diff --git a/media/cast/net/cast_transport_sender_impl.cc b/media/cast/net/cast_transport_sender_impl.cc
index 248c69d6bb1e9c3b5d227ef45746aa122c533292..ba0e98e8bc5a33af3b0a27f995986eae19dd5411 100644
--- a/media/cast/net/cast_transport_sender_impl.cc
+++ b/media/cast/net/cast_transport_sender_impl.cc
@@ -111,7 +111,9 @@ void CastTransportSenderImpl::InitializeAudio(
}
audio_rtcp_session_.reset(
- new Rtcp(cast_message_cb,
+ new Rtcp(base::Bind(&CastTransportSenderImpl::OnReceivedCastMessage,
+ weak_factory_.GetWeakPtr(), config.ssrc,
+ cast_message_cb),
rtt_cb,
base::Bind(&CastTransportSenderImpl::OnReceivedLogMessage,
weak_factory_.GetWeakPtr(), AUDIO_EVENT),
@@ -142,7 +144,9 @@ void CastTransportSenderImpl::InitializeVideo(
}
video_rtcp_session_.reset(
- new Rtcp(cast_message_cb,
+ new Rtcp(base::Bind(&CastTransportSenderImpl::OnReceivedCastMessage,
+ weak_factory_.GetWeakPtr(), config.ssrc,
+ cast_message_cb),
rtt_cb,
base::Bind(&CastTransportSenderImpl::OnReceivedLogMessage,
weak_factory_.GetWeakPtr(), VIDEO_EVENT),
@@ -202,21 +206,48 @@ void CastTransportSenderImpl::SendSenderReport(
}
}
+void CastTransportSenderImpl::CancelSendingFrames(
+ uint32 ssrc,
+ const std::vector<uint32>& frame_ids) {
+ if (audio_sender_ && ssrc == audio_sender_->ssrc()) {
+ audio_sender_->CancelSendingFrames(frame_ids);
+ } else if (video_sender_ && ssrc == video_sender_->ssrc()) {
+ video_sender_->CancelSendingFrames(frame_ids);
+ } else {
+ NOTREACHED() << "Invalid request for cancel sending.";
+ }
+}
+
+void CastTransportSenderImpl::ResendFrameForKickstart(uint32 ssrc,
+ uint32 frame_id) {
+ if (audio_sender_ && ssrc == audio_sender_->ssrc()) {
+ DCHECK(audio_rtcp_session_);
+ audio_sender_->ResendFrameForKickstart(frame_id,
+ audio_rtcp_session_->rtt());
+ } else if (video_sender_ && ssrc == video_sender_->ssrc()) {
+ DCHECK(video_rtcp_session_);
+ video_sender_->ResendFrameForKickstart(frame_id,
+ video_rtcp_session_->rtt());
+ } else {
+ NOTREACHED() << "Invalid request for kickstart.";
+ }
+}
+
void CastTransportSenderImpl::ResendPackets(
- bool is_audio,
+ uint32 ssrc,
const MissingFramesAndPacketsMap& missing_packets,
bool cancel_rtx_if_not_in_list,
base::TimeDelta dedupe_window) {
- if (is_audio) {
- DCHECK(audio_sender_) << "Audio sender uninitialized";
+ if (audio_sender_ && ssrc == audio_sender_->ssrc()) {
audio_sender_->ResendPackets(missing_packets,
cancel_rtx_if_not_in_list,
dedupe_window);
- } else {
- DCHECK(video_sender_) << "Video sender uninitialized";
+ } else if (video_sender_ && ssrc == video_sender_->ssrc()) {
video_sender_->ResendPackets(missing_packets,
cancel_rtx_if_not_in_list,
dedupe_window);
+ } else {
+ NOTREACHED() << "Invalid request for retransmission.";
}
}
@@ -293,5 +324,31 @@ void CastTransportSenderImpl::OnReceivedLogMessage(
}
}
+void CastTransportSenderImpl::OnReceivedCastMessage(
+ uint32 ssrc,
+ const RtcpCastMessageCallback& cast_message_cb,
+ const RtcpCastMessage& cast_message) {
+ if (!cast_message_cb.is_null())
+ cast_message_cb.Run(cast_message);
+
+ if (cast_message.missing_frames_and_packets.empty())
+ return;
+
+ base::TimeDelta rtt;
+ if (video_sender_ && video_sender_->ssrc() == ssrc) {
+ rtt = video_rtcp_session_->rtt();
+ }
+
+ // This call does two things.
+ // 1. Specifies that retransmissions for packets not listed in the set are
+ // cancelled.
+ // 2. Specifies a deduplication window. For video this would be the most
+ // recent RTT. For audio there is no deduplication.
+ ResendPackets(ssrc,
+ cast_message.missing_frames_and_packets,
+ true,
+ rtt);
+}
+
} // namespace cast
} // namespace media
« no previous file with comments | « media/cast/net/cast_transport_sender_impl.h ('k') | media/cast/net/cast_transport_sender_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698