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

Side by Side Diff: media/cast/net/rtp/rtp_packet_builder.cc

Issue 1377273003: cast: cleanup rtp header and parsing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « media/cast/net/rtp/rtp_packet_builder.h ('k') | media/cast/net/rtp/rtp_packetizer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/cast/net/rtp/rtp_packet_builder.h" 5 #include "media/cast/net/rtp/rtp_packet_builder.h"
6 6
7 #include "base/big_endian.h" 7 #include "base/big_endian.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 9
10 namespace media { 10 namespace media {
11 namespace cast { 11 namespace cast {
12 12
13 const uint32 kCastRtpHeaderLength = 7;
14 const uint32 kGenericRtpHeaderLength = 12;
15 static const uint8 kRtpMarkerBitMask = 0x80;
16
17 RtpPacketBuilder::RtpPacketBuilder() 13 RtpPacketBuilder::RtpPacketBuilder()
18 : is_key_(false), 14 : is_key_(false),
19 frame_id_(0), 15 frame_id_(0),
20 packet_id_(0), 16 packet_id_(0),
21 max_packet_id_(0), 17 max_packet_id_(0),
22 reference_frame_id_(0), 18 reference_frame_id_(0),
23 timestamp_(0), 19 timestamp_(0),
24 sequence_number_(0), 20 sequence_number_(0),
25 marker_(false), 21 marker_(false),
26 payload_type_(0), 22 payload_type_(0),
(...skipping 23 matching lines...) Expand all
50 void RtpPacketBuilder::SetMarkerBit(bool marker) { marker_ = marker; } 46 void RtpPacketBuilder::SetMarkerBit(bool marker) { marker_ = marker; }
51 47
52 void RtpPacketBuilder::SetPayloadType(int payload_type) { 48 void RtpPacketBuilder::SetPayloadType(int payload_type) {
53 payload_type_ = payload_type; 49 payload_type_ = payload_type;
54 } 50 }
55 51
56 void RtpPacketBuilder::SetSsrc(uint32 ssrc) { ssrc_ = ssrc; } 52 void RtpPacketBuilder::SetSsrc(uint32 ssrc) { ssrc_ = ssrc; }
57 53
58 void RtpPacketBuilder::BuildHeader(uint8* data, uint32 data_length) { 54 void RtpPacketBuilder::BuildHeader(uint8* data, uint32 data_length) {
59 BuildCommonHeader(data, data_length); 55 BuildCommonHeader(data, data_length);
60 BuildCastHeader(data + kGenericRtpHeaderLength, 56 BuildCastHeader(data + kRtpHeaderLength, data_length - kRtpHeaderLength);
61 data_length - kGenericRtpHeaderLength);
62 } 57 }
63 58
64 void RtpPacketBuilder::BuildCastHeader(uint8* data, uint32 data_length) { 59 void RtpPacketBuilder::BuildCastHeader(uint8* data, uint32 data_length) {
65 // Build header. 60 // Build header.
66 DCHECK_LE(kCastRtpHeaderLength, data_length); 61 DCHECK_LE(kCastHeaderLength, data_length);
67 // Set the first 7 bytes to 0. 62 // Set the first 7 bytes to 0.
68 memset(data, 0, kCastRtpHeaderLength); 63 memset(data, 0, kCastHeaderLength);
69 base::BigEndianWriter big_endian_writer(reinterpret_cast<char*>(data), 56); 64 base::BigEndianWriter big_endian_writer(reinterpret_cast<char*>(data), 56);
70 const bool includes_specific_frame_reference = 65 const bool includes_specific_frame_reference =
71 (is_key_ && (reference_frame_id_ != frame_id_)) || 66 (is_key_ && (reference_frame_id_ != frame_id_)) ||
72 (!is_key_ && (reference_frame_id_ != (frame_id_ - 1))); 67 (!is_key_ && (reference_frame_id_ != (frame_id_ - 1)));
73 big_endian_writer.WriteU8((is_key_ ? 0x80 : 0) | 68 big_endian_writer.WriteU8((is_key_ ? 0x80 : 0) |
74 (includes_specific_frame_reference ? 0x40 : 0)); 69 (includes_specific_frame_reference ? 0x40 : 0));
75 big_endian_writer.WriteU8(frame_id_); 70 big_endian_writer.WriteU8(frame_id_);
76 big_endian_writer.WriteU16(packet_id_); 71 big_endian_writer.WriteU16(packet_id_);
77 big_endian_writer.WriteU16(max_packet_id_); 72 big_endian_writer.WriteU16(max_packet_id_);
78 if (includes_specific_frame_reference) { 73 if (includes_specific_frame_reference) {
79 big_endian_writer.WriteU8(reference_frame_id_); 74 big_endian_writer.WriteU8(reference_frame_id_);
80 } 75 }
81 } 76 }
82 77
83 void RtpPacketBuilder::BuildCommonHeader(uint8* data, uint32 data_length) { 78 void RtpPacketBuilder::BuildCommonHeader(uint8* data, uint32 data_length) {
84 DCHECK_LE(kGenericRtpHeaderLength, data_length); 79 DCHECK_LE(kRtpHeaderLength, data_length);
85 base::BigEndianWriter big_endian_writer(reinterpret_cast<char*>(data), 96); 80 base::BigEndianWriter big_endian_writer(reinterpret_cast<char*>(data), 96);
86 big_endian_writer.WriteU8(0x80); 81 big_endian_writer.WriteU8(0x80);
87 big_endian_writer.WriteU8(payload_type_ | (marker_ ? kRtpMarkerBitMask : 0)); 82 big_endian_writer.WriteU8(payload_type_ | (marker_ ? kRtpMarkerBitMask : 0));
88 big_endian_writer.WriteU16(sequence_number_); 83 big_endian_writer.WriteU16(sequence_number_);
89 big_endian_writer.WriteU32(timestamp_); 84 big_endian_writer.WriteU32(timestamp_);
90 big_endian_writer.WriteU32(ssrc_); 85 big_endian_writer.WriteU32(ssrc_);
91 } 86 }
92 87
93 } // namespace cast 88 } // namespace cast
94 } // namespace media 89 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/net/rtp/rtp_packet_builder.h ('k') | media/cast/net/rtp/rtp_packetizer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698