summaryrefslogtreecommitdiff
path: root/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.cc')
-rw-r--r--media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.cc24
1 files changed, 11 insertions, 13 deletions
diff --git a/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.cc b/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.cc
index 3fdbefec92..6c5141d604 100644
--- a/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.cc
+++ b/media/cast/rtp_sender/rtp_packetizer/rtp_packetizer.cc
@@ -25,7 +25,6 @@ RtpPacketizer::RtpPacketizer(PacedPacketSender* transport,
packet_storage_(packet_storage),
sequence_number_(config_.sequence_number),
rtp_timestamp_(config_.rtp_timestamp),
- frame_id_(0),
packet_id_(0),
send_packets_count_(0),
send_octet_count_(0) {
@@ -40,14 +39,12 @@ void RtpPacketizer::IncomingEncodedVideoFrame(
DCHECK(!config_.audio) << "Invalid state";
if (config_.audio) return;
- base::TimeTicks zero_time;
- base::TimeDelta capture_delta = capture_time - zero_time;
-
// Timestamp is in 90 KHz for video.
- rtp_timestamp_ = static_cast<uint32>(capture_delta.InMilliseconds() * 90);
+ rtp_timestamp_ = GetVideoRtpTimestamp(capture_time);
time_last_sent_rtp_timestamp_ = capture_time;
Cast(video_frame->key_frame,
+ video_frame->frame_id,
video_frame->last_referenced_frame_id,
rtp_timestamp_,
video_frame->data);
@@ -61,7 +58,7 @@ void RtpPacketizer::IncomingEncodedAudioFrame(
rtp_timestamp_ += audio_frame->samples; // Timestamp is in samples for audio.
time_last_sent_rtp_timestamp_ = recorded_time;
- Cast(true, 0, rtp_timestamp_, audio_frame->data);
+ Cast(true, audio_frame->frame_id, 0, rtp_timestamp_, audio_frame->data);
}
uint16 RtpPacketizer::NextSequenceNumber() {
@@ -78,10 +75,12 @@ bool RtpPacketizer::LastSentTimestamp(base::TimeTicks* time_sent,
return true;
}
+// TODO(mikhal): Switch to pass data with a const_ref.
void RtpPacketizer::Cast(bool is_key,
- uint8 reference_frame_id,
+ uint32 frame_id,
+ uint32 reference_frame_id,
uint32 timestamp,
- Packet data) {
+ const std::string& data) {
uint16 rtp_header_length = kCommonRtpHeaderLength + kCastRtpHeaderLength;
uint16 max_length = config_.max_payload_length - rtp_header_length - 1;
@@ -93,7 +92,7 @@ void RtpPacketizer::Cast(bool is_key,
PacketList packets;
size_t remaining_size = data.size();
- Packet::iterator data_iter = data.begin();
+ std::string::const_iterator data_iter = data.begin();
while (remaining_size > 0) {
Packet packet;
@@ -106,19 +105,19 @@ void RtpPacketizer::Cast(bool is_key,
// Build Cast header.
packet.push_back(
(is_key ? kCastKeyFrameBitMask : 0) | kCastReferenceFrameIdBitMask);
- packet.push_back(frame_id_);
+ packet.push_back(frame_id);
size_t start_size = packet.size();
packet.resize(start_size + 4);
net::BigEndianWriter big_endian_writer(&(packet[start_size]), 4);
big_endian_writer.WriteU16(packet_id_);
big_endian_writer.WriteU16(static_cast<uint16>(num_packets - 1));
- packet.push_back(reference_frame_id);
+ packet.push_back(static_cast<uint8>(reference_frame_id));
// Copy payload data.
packet.insert(packet.end(), data_iter, data_iter + payload_length);
// Store packet.
- packet_storage_->StorePacket(frame_id_, packet_id_, &packet);
+ packet_storage_->StorePacket(frame_id, packet_id_, &packet);
++packet_id_;
data_iter += payload_length;
@@ -134,7 +133,6 @@ void RtpPacketizer::Cast(bool is_key,
// Prepare for next frame.
packet_id_ = 0;
- frame_id_ = static_cast<uint8>(frame_id_ + 1);
}
void RtpPacketizer::BuildCommonRTPheader(