Chromium Code Reviews| 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 dcfcc8bba45e4d4b4478e537116f4057791cfe66..3c282fcfc2dace8e38b7af89c7b4cd9119b280ab 100644 |
| --- a/media/cast/net/rtp/rtp_packetizer.cc |
| +++ b/media/cast/net/rtp/rtp_packetizer.cc |
| @@ -7,16 +7,11 @@ |
| #include "base/big_endian.h" |
| #include "base/logging.h" |
| #include "media/cast/net/pacing/paced_sender.h" |
| +#include "media/cast/net/rtp/rtp_defines.h" |
| namespace media { |
| namespace cast { |
| -static const uint16 kCommonRtpHeaderLength = 12; |
| -static const uint16 kCastRtpHeaderLength = 7; |
| -static const uint8 kCastKeyFrameBitMask = 0x80; |
| -static const uint8 kCastReferenceFrameIdBitMask = 0x40; |
| -static const uint8 kRtpMarkerBitMask = 0x80; |
| - |
| RtpPacketizerConfig::RtpPacketizerConfig() |
| : payload_type(-1), |
| max_payload_length(kMaxIpPacketSize - 28), // Default is IP-v4/UDP. |
| @@ -47,7 +42,7 @@ uint16 RtpPacketizer::NextSequenceNumber() { |
| } |
| void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) { |
| - uint16 rtp_header_length = kCommonRtpHeaderLength + kCastRtpHeaderLength; |
| + uint16 rtp_header_length = kRtpHeaderLength + kCastHeaderLength; |
| uint16 max_length = config_.max_payload_length - rtp_header_length - 1; |
| rtp_timestamp_ = frame.rtp_timestamp; |
| @@ -73,9 +68,14 @@ void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) { |
| // Build Cast header. |
| // TODO(miu): Should we always set the ref frame bit and the ref_frame_id? |
| DCHECK_NE(frame.dependency, EncodedFrame::UNKNOWN_DEPENDENCY); |
| - packet->data.push_back( |
| - ((frame.dependency == EncodedFrame::KEY) ? kCastKeyFrameBitMask : 0) | |
| - kCastReferenceFrameIdBitMask); |
| + uint8 byte0 = kCastReferenceFrameIdBitMask; |
| + if (frame.dependency == EncodedFrame::KEY) |
| + byte0 |= kCastKeyFrameBitMask; |
| + if (frame.new_playout_delay_ms) { |
| + // One extension block. |
| + byte0 |= 1; |
|
Alpha Left Google
2014/08/20 20:17:06
I suggest having an additional counter for the num
hubbe
2014/08/20 21:42:02
Total overkill, but ok.
|
| + } |
| + packet->data.push_back(byte0); |
| packet->data.push_back(static_cast<uint8>(frame.frame_id)); |
| size_t start_size = packet->data.size(); |
| packet->data.resize(start_size + 4); |
| @@ -84,6 +84,12 @@ void RtpPacketizer::SendFrameAsPackets(const EncodedFrame& frame) { |
| big_endian_writer.WriteU16(packet_id_); |
| big_endian_writer.WriteU16(static_cast<uint16>(num_packets - 1)); |
| packet->data.push_back(static_cast<uint8>(frame.referenced_frame_id)); |
| + if (frame.new_playout_delay_ms) { |
| + packet->data.push_back(kCastRTPExtensionAdaptiveLatency << 2); |
| + packet->data.push_back(2); // 2 bytes |
| + packet->data.push_back(frame.new_playout_delay_ms >> 8); |
| + packet->data.push_back(frame.new_playout_delay_ms); |
| + } |
| // Copy payload data. |
| packet->data.insert(packet->data.end(), |