| Index: remoting/protocol/rtp_writer.cc
|
| diff --git a/remoting/protocol/rtp_writer.cc b/remoting/protocol/rtp_writer.cc
|
| index e1432224cbd738a1740540c8caa6820027e91992..f01576cbea74dd8bc7f20177d9b33067f4d538c2 100644
|
| --- a/remoting/protocol/rtp_writer.cc
|
| +++ b/remoting/protocol/rtp_writer.cc
|
| @@ -13,9 +13,8 @@ namespace remoting {
|
| namespace protocol {
|
|
|
| namespace {
|
| -const int kMtu = 1200;
|
| const uint8 kRtpPayloadTypePrivate = 96;
|
| -}
|
| +} // namespace
|
|
|
| RtpWriter::RtpWriter()
|
| : rtp_socket_(NULL),
|
| @@ -34,11 +33,14 @@ void RtpWriter::Init(net::Socket* rtp_socket, net::Socket* rtcp_socket) {
|
| rtcp_socket_ = rtcp_socket;
|
| }
|
|
|
| -void RtpWriter::SendPacket(const CompoundBuffer& payload, uint32 timestamp) {
|
| +void RtpWriter::SendPacket(uint32 timestamp, bool marker,
|
| + const Vp8Descriptor& vp8_descriptor,
|
| + const CompoundBuffer& payload) {
|
| RtpHeader header;
|
| header.padding = false;
|
| header.extension = false;
|
| header.sources = 0;
|
| + header.marker = marker;
|
| header.payload_type = kRtpPayloadTypePrivate;
|
| header.timestamp = timestamp;
|
|
|
| @@ -47,39 +49,32 @@ void RtpWriter::SendPacket(const CompoundBuffer& payload, uint32 timestamp) {
|
| // so SSRC isn't useful. Implement it in future if neccessary.
|
| header.sync_source_id = 0;
|
|
|
| - // TODO(sergeyu): Add VP8 payload header.
|
| -
|
| - int position = 0;
|
| - while (position < payload.total_bytes()) {
|
| - // Allocate buffer.
|
| - int size = std::min(kMtu, payload.total_bytes() - position);
|
| - int header_size = GetRtpHeaderSize(header.sources);
|
| - int total_size = size + header_size;
|
| - net::IOBufferWithSize* buffer = new net::IOBufferWithSize(total_size);
|
| -
|
| - // Set marker if this is the last frame.
|
| - header.marker = (position + size) == payload.total_bytes();
|
| + // TODO(sergeyu): Handle sequence number wrapping.
|
| + header.sequence_number = last_packet_number_;
|
| + ++last_packet_number_;
|
|
|
| - // TODO(sergeyu): Handle sequence number wrapping.
|
| - header.sequence_number = last_packet_number_;
|
| - ++last_packet_number_;
|
| + int header_size = GetRtpHeaderSize(header);
|
| + int vp8_descriptor_size = GetVp8DescriptorSize(vp8_descriptor);
|
| + int payload_size = payload.total_bytes();
|
| + int total_size = header_size + vp8_descriptor_size + payload_size;
|
|
|
| - // Generate header.
|
| - PackRtpHeader(reinterpret_cast<uint8*>(buffer->data()), buffer->size(),
|
| - header);
|
| + net::IOBufferWithSize* buffer = new net::IOBufferWithSize(total_size);
|
|
|
| - // Copy data to the buffer.
|
| - CompoundBuffer chunk;
|
| - chunk.CopyFrom(payload, position, position + size);
|
| - chunk.CopyTo(buffer->data() + header_size, size);
|
| + // Pack header.
|
| + PackRtpHeader(header, reinterpret_cast<uint8*>(buffer->data()),
|
| + header_size);
|
|
|
| - // Send it.
|
| - buffered_rtp_writer_->Write(buffer);
|
| + // Pack VP8 descriptor.
|
| + PackVp8Descriptor(vp8_descriptor,
|
| + reinterpret_cast<uint8*>(buffer->data()) + header_size,
|
| + vp8_descriptor_size);
|
|
|
| - position += size;
|
| - }
|
| + // Copy payload to the buffer.
|
| + payload.CopyTo(buffer->data() + header_size + vp8_descriptor_size,
|
| + payload_size);
|
|
|
| - DCHECK_EQ(position, payload.total_bytes());
|
| + // And write the packet.
|
| + buffered_rtp_writer_->Write(buffer);
|
| }
|
|
|
| int RtpWriter::GetPendingPackets() {
|
|
|