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

Unified Diff: media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc

Issue 248493002: Cast: Deduplicate packets in paced sender and always send older packets first (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: re-upping to trick build system Created 6 years, 8 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: media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
index 4d62b87964d798d84708aa167a95c8ed7ec00f3d..0acb5755d96674c3e493eb4c3dfa1642957e759f 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
+++ b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
@@ -56,12 +56,12 @@ void RtpPacketizer::IncomingEncodedVideoFrame(
if (config_.audio)
return;
- time_last_sent_rtp_timestamp_ = capture_time;
Cast(video_frame->key_frame,
video_frame->frame_id,
video_frame->last_referenced_frame_id,
video_frame->rtp_timestamp,
- video_frame->data);
+ video_frame->data,
+ capture_time);
}
void RtpPacketizer::IncomingEncodedAudioFrame(
@@ -71,12 +71,12 @@ void RtpPacketizer::IncomingEncodedAudioFrame(
if (!config_.audio)
return;
- time_last_sent_rtp_timestamp_ = recorded_time;
Cast(true,
audio_frame->frame_id,
0,
audio_frame->rtp_timestamp,
- audio_frame->data);
+ audio_frame->data,
+ recorded_time);
}
uint16 RtpPacketizer::NextSequenceNumber() {
@@ -99,7 +99,9 @@ void RtpPacketizer::Cast(bool is_key,
uint32 frame_id,
uint32 reference_frame_id,
uint32 timestamp,
- const std::string& data) {
+ const std::string& data,
+ const base::TimeTicks& capture_time) {
+ time_last_sent_rtp_timestamp_ = capture_time;
uint16 rtp_header_length = kCommonRtpHeaderLength + kCastRtpHeaderLength;
uint16 max_length = config_.max_payload_length - rtp_header_length - 1;
rtp_timestamp_ = timestamp;
@@ -109,7 +111,8 @@ void RtpPacketizer::Cast(bool is_key,
size_t payload_length = (data.size() + num_packets) / num_packets;
DCHECK_LE(payload_length, max_length) << "Invalid argument";
- PacketList packets;
+ SendPacketVector packets;
+ PacketList packets_for_logging;
size_t remaining_size = data.size();
std::string::const_iterator data_iter = data.begin();
@@ -139,22 +142,27 @@ void RtpPacketizer::Cast(bool is_key,
data_iter,
data_iter + payload_length);
+ PacketKey key = PacedPacketSender::MakePacketKey(capture_time,
+ config_.ssrc,
+ packet_id_);
+
// Store packet.
- packet_storage_->StorePacket(frame_id, packet_id_, packet);
+ packet_storage_->StorePacket(frame_id, packet_id_, key, packet);
++packet_id_;
data_iter += payload_length;
// Update stats.
++send_packets_count_;
send_octet_count_ += payload_length;
- packets.push_back(packet);
+ packets.push_back(make_pair(key, packet));
+ packets_for_logging.push_back(packet);
}
DCHECK(packet_id_ == num_packets) << "Invalid state";
logging_->InsertPacketListEvent(
clock_->NowTicks(),
config_.audio ? kAudioPacketSentToPacer : kVideoPacketSentToPacer,
- packets);
+ packets_for_logging);
// Send to network.
transport_->SendPackets(packets);
« no previous file with comments | « media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.h ('k') | media/cast/transport/rtp_sender/rtp_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698