| Index: media/cast/net/rtp/rtp_packetizer.cc
|
| diff --git a/media/cast/net/rtp/rtp_packetizer.cc b/media/cast/net/rtp/rtp_packetizer.cc
|
| index 81bc6ddaad6250abda542996f8c8863ce9a4b17a..247eae8034334eba8394fe49d93452a7d289d66c 100644
|
| --- a/media/cast/net/rtp/rtp_packetizer.cc
|
| +++ b/media/cast/net/rtp/rtp_packetizer.cc
|
| @@ -29,8 +29,6 @@ RtpPacketizer::RtpPacketizer(PacedSender* const transport,
|
| transport_(transport),
|
| packet_storage_(packet_storage),
|
| sequence_number_(config_.sequence_number),
|
| - rtp_timestamp_(0),
|
| - packet_id_(0),
|
| send_packet_count_(0),
|
| send_octet_count_(0) {
|
| DCHECK(transport) << "Invalid argument";
|
| @@ -46,7 +44,6 @@ uint16_t RtpPacketizer::NextSequenceNumber() {
|
| void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) {
|
| uint16_t rtp_header_length = kRtpHeaderLength + kCastHeaderLength;
|
| uint16_t max_length = config_.max_payload_length - rtp_header_length - 1;
|
| - rtp_timestamp_ = frame.rtp_timestamp;
|
|
|
| // Split the payload evenly (round number up).
|
| size_t num_packets = (frame.data.size() + max_length) / max_length;
|
| @@ -80,7 +77,8 @@ void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) {
|
| if (frame.dependency == EncodedFrame::KEY)
|
| byte0 |= kCastKeyFrameBitMask;
|
| // Extensions only go on the first packet of the frame
|
| - if (packet_id_ == 0)
|
| + const uint16_t packet_id = static_cast<uint16_t>(packets.size());
|
| + if (packet_id == 0)
|
| byte0 |= num_extensions;
|
| packet->data.push_back(byte0);
|
| packet->data.push_back(static_cast<uint8_t>(frame.frame_id));
|
| @@ -88,11 +86,11 @@ void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) {
|
| packet->data.resize(start_size + 4);
|
| base::BigEndianWriter big_endian_writer(
|
| reinterpret_cast<char*>(&(packet->data[start_size])), 4);
|
| - big_endian_writer.WriteU16(packet_id_);
|
| + big_endian_writer.WriteU16(packet_id);
|
| big_endian_writer.WriteU16(static_cast<uint16_t>(num_packets - 1));
|
| packet->data.push_back(static_cast<uint8_t>(frame.referenced_frame_id));
|
| // Add extension details only on the first packet of the frame
|
| - if (packet_id_ == 0 && frame.new_playout_delay_ms) {
|
| + if (packet_id == 0 && frame.new_playout_delay_ms) {
|
| packet->data.push_back(kCastRtpExtensionAdaptiveLatency << 2);
|
| packet->data.push_back(2); // 2 bytes
|
| packet->data.push_back(
|
| @@ -107,27 +105,24 @@ void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) {
|
| data_iter += payload_length;
|
|
|
| const PacketKey key = PacedPacketSender::MakePacketKey(
|
| - PacketKey::RTP, frame.frame_id, config_.ssrc, packet_id_++);
|
| + PacketKey::RTP, frame.frame_id, config_.ssrc, packet_id);
|
| packets.push_back(make_pair(key, packet));
|
|
|
| // Update stats.
|
| ++send_packet_count_;
|
| send_octet_count_ += payload_length;
|
| }
|
| - DCHECK(packet_id_ == num_packets) << "Invalid state";
|
| + DCHECK_EQ(num_packets, packets.size()) << "Invalid state";
|
|
|
| packet_storage_->StoreFrame(frame.frame_id, packets);
|
|
|
| // Send to network.
|
| transport_->SendPackets(packets);
|
| -
|
| - // Prepare for next frame.
|
| - packet_id_ = 0;
|
| }
|
|
|
| void RtpPacketizer::BuildCommonRTPheader(Packet* packet,
|
| bool marker_bit,
|
| - uint32_t time_stamp) {
|
| + RtpTimeTicks rtp_timestamp) {
|
| packet->push_back(0x80);
|
| packet->push_back(static_cast<uint8_t>(config_.payload_type) |
|
| (marker_bit ? kRtpMarkerBitMask : 0));
|
| @@ -136,7 +131,7 @@ void RtpPacketizer::BuildCommonRTPheader(Packet* packet,
|
| base::BigEndianWriter big_endian_writer(
|
| reinterpret_cast<char*>(&((*packet)[start_size])), 10);
|
| big_endian_writer.WriteU16(sequence_number_);
|
| - big_endian_writer.WriteU32(time_stamp);
|
| + big_endian_writer.WriteU32(rtp_timestamp.lower_32_bits());
|
| big_endian_writer.WriteU32(config_.ssrc);
|
| ++sequence_number_;
|
| }
|
|
|