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

Side by Side Diff: webrtc/test/rtcp_packet_parser.cc

Issue 2070673002: Test RtcpParser rewritten to use rtcp packet classes (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Resolve name conflict Created 4 years, 3 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 | « webrtc/test/rtcp_packet_parser.h ('k') | webrtc/video/end_to_end_tests.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 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/base/checks.h"
12 #include "webrtc/base/logging.h"
11 #include "webrtc/test/rtcp_packet_parser.h" 13 #include "webrtc/test/rtcp_packet_parser.h"
12 14
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace webrtc { 15 namespace webrtc {
16 namespace test { 16 namespace test {
17 17
18 using namespace RTCPUtility; 18 RtcpPacketParser::RtcpPacketParser() = default;
19 RtcpPacketParser::~RtcpPacketParser() = default;
19 20
20 RtcpPacketParser::RtcpPacketParser() {} 21 bool RtcpPacketParser::Parse(const void* data, size_t length) {
21 22 const uint8_t* const buffer = static_cast<const uint8_t*>(data);
22 RtcpPacketParser::~RtcpPacketParser() {} 23 const uint8_t* const buffer_end = buffer + length;
23 24 rtcp::CommonHeader header;
24 void RtcpPacketParser::Parse(const void *data, size_t len) { 25 for (const uint8_t* next_packet = buffer; next_packet != buffer_end;
25 const uint8_t* packet = static_cast<const uint8_t*>(data); 26 next_packet = header.NextPacket()) {
26 RTCPUtility::RTCPParserV2 parser(packet, len, true); 27 RTC_DCHECK_GT(buffer_end - next_packet, 0);
27 EXPECT_TRUE(parser.IsValid()); 28 if (!header.Parse(next_packet, buffer_end - next_packet)) {
28 for (RTCPUtility::RTCPPacketTypes type = parser.Begin(); 29 LOG(LS_WARNING)
29 type != RTCPPacketTypes::kInvalid; type = parser.Iterate()) { 30 << "Invalid rtcp header or unaligned rtcp packet at position "
30 switch (type) { 31 << (next_packet - buffer);
31 case RTCPPacketTypes::kSr: 32 return false;
32 sender_report_.Set(parser.Packet().SR); 33 }
34 switch (header.type()) {
35 case rtcp::App::kPacketType:
36 app_.Parse(header);
33 break; 37 break;
34 case RTCPPacketTypes::kRr: 38 case rtcp::Bye::kPacketType:
35 receiver_report_.Set(parser.Packet().RR); 39 bye_.Parse(header);
36 break; 40 break;
37 case RTCPPacketTypes::kReportBlockItem: 41 case rtcp::ExtendedReports::kPacketType:
38 report_block_.Set(parser.Packet().ReportBlockItem); 42 xr_.Parse(header);
39 ++report_blocks_per_ssrc_[parser.Packet().ReportBlockItem.SSRC];
40 break; 43 break;
41 case RTCPPacketTypes::kSdes: 44 case rtcp::ExtendedJitterReport::kPacketType:
42 sdes_.Set(); 45 ij_.Parse(header);
43 break; 46 break;
44 case RTCPPacketTypes::kSdesChunk: 47 case rtcp::Psfb::kPacketType:
45 sdes_chunk_.Set(parser.Packet().CName); 48 switch (header.fmt()) {
49 case rtcp::Fir::kFeedbackMessageType:
50 fir_.Parse(header);
51 break;
52 case rtcp::Pli::kFeedbackMessageType:
53 pli_.Parse(header);
54 break;
55 case rtcp::Remb::kFeedbackMessageType:
56 remb_.Parse(header);
57 break;
58 case rtcp::Rpsi::kFeedbackMessageType:
59 rpsi_.Parse(header);
60 break;
61 case rtcp::Sli::kFeedbackMessageType:
62 sli_.Parse(header);
63 break;
64 default:
65 LOG(LS_WARNING) << "Unknown rtcp payload specific feedback type "
66 << header.fmt();
67 break;
68 }
46 break; 69 break;
47 case RTCPPacketTypes::kBye: 70 case rtcp::ReceiverReport::kPacketType:
48 bye_.Set(parser.Packet().BYE); 71 receiver_report_.Parse(header);
49 break; 72 break;
50 case RTCPPacketTypes::kApp: 73 case rtcp::Rtpfb::kPacketType:
51 app_.Set(parser.Packet().APP); 74 switch (header.fmt()) {
75 case rtcp::Nack::kFeedbackMessageType:
76 nack_.Parse(header);
77 break;
78 case rtcp::RapidResyncRequest::kFeedbackMessageType:
79 rrr_.Parse(header);
80 break;
81 case rtcp::Tmmbn::kFeedbackMessageType:
82 tmmbn_.Parse(header);
83 break;
84 case rtcp::Tmmbr::kFeedbackMessageType:
85 tmmbr_.Parse(header);
86 break;
87 case rtcp::TransportFeedback::kFeedbackMessageType:
88 transport_feedback_.Parse(header);
89 break;
90 default:
91 LOG(LS_WARNING) << "Unknown rtcp transport feedback type "
92 << header.fmt();
93 break;
94 }
52 break; 95 break;
53 case RTCPPacketTypes::kAppItem: 96 case rtcp::Sdes::kPacketType:
54 app_item_.Set(parser.Packet().APP); 97 sdes_.Parse(header);
55 break; 98 break;
56 case RTCPPacketTypes::kExtendedIj: 99 case rtcp::SenderReport::kPacketType:
57 ij_.Set(); 100 sender_report_.Parse(header);
58 break;
59 case RTCPPacketTypes::kExtendedIjItem:
60 ij_item_.Set(parser.Packet().ExtendedJitterReportItem);
61 break;
62 case RTCPPacketTypes::kPsfbPli:
63 pli_.Set(parser.Packet().PLI);
64 break;
65 case RTCPPacketTypes::kPsfbSli:
66 sli_.Set(parser.Packet().SLI);
67 break;
68 case RTCPPacketTypes::kPsfbSliItem:
69 sli_item_.Set(parser.Packet().SLIItem);
70 break;
71 case RTCPPacketTypes::kPsfbRpsiItem:
72 rpsi_.Set(parser.Packet().RPSI);
73 break;
74 case RTCPPacketTypes::kPsfbFir:
75 fir_.Set(parser.Packet().FIR);
76 break;
77 case RTCPPacketTypes::kPsfbFirItem:
78 fir_item_.Set(parser.Packet().FIRItem);
79 break;
80 case RTCPPacketTypes::kRtpfbNack:
81 nack_.Set(parser.Packet().NACK);
82 nack_item_.Clear();
83 break;
84 case RTCPPacketTypes::kRtpfbNackItem:
85 nack_item_.Set(parser.Packet().NACKItem);
86 break;
87 case RTCPPacketTypes::kPsfbApp:
88 psfb_app_.Set(parser.Packet().PSFBAPP);
89 break;
90 case RTCPPacketTypes::kPsfbRembItem:
91 remb_item_.Set(parser.Packet().REMBItem);
92 break;
93 case RTCPPacketTypes::kRtpfbTmmbr:
94 tmmbr_.Set(parser.Packet().TMMBR);
95 break;
96 case RTCPPacketTypes::kRtpfbTmmbrItem:
97 tmmbr_item_.Set(parser.Packet().TMMBRItem);
98 break;
99 case RTCPPacketTypes::kRtpfbTmmbn:
100 tmmbn_.Set(parser.Packet().TMMBN);
101 tmmbn_items_.Clear();
102 break;
103 case RTCPPacketTypes::kRtpfbTmmbnItem:
104 tmmbn_items_.Set(parser.Packet().TMMBNItem);
105 break;
106 case RTCPPacketTypes::kXrHeader:
107 xr_header_.Set(parser.Packet().XR);
108 dlrr_items_.Clear();
109 break;
110 case RTCPPacketTypes::kXrReceiverReferenceTime:
111 rrtr_.Set(parser.Packet().XRReceiverReferenceTimeItem);
112 break;
113 case RTCPPacketTypes::kXrDlrrReportBlock:
114 dlrr_.Set();
115 break;
116 case RTCPPacketTypes::kXrDlrrReportBlockItem:
117 dlrr_items_.Set(parser.Packet().XRDLRRReportBlockItem);
118 break;
119 case RTCPPacketTypes::kXrVoipMetric:
120 voip_metric_.Set(parser.Packet().XRVOIPMetricItem);
121 break; 101 break;
122 default: 102 default:
103 LOG(LS_WARNING) << "Unknown rtcp packet type " << header.type();
123 break; 104 break;
124 } 105 }
125 } 106 }
126 } 107 return true;
127
128 uint64_t Rpsi::PictureId() const {
129 assert(num_packets_ > 0);
130 uint16_t num_bytes = rpsi_.NumberOfValidBits / 8;
131 assert(num_bytes > 0);
132 uint64_t picture_id = 0;
133 for (uint16_t i = 0; i < num_bytes - 1; ++i) {
134 picture_id += (rpsi_.NativeBitString[i] & 0x7f);
135 picture_id <<= 7;
136 }
137 picture_id += (rpsi_.NativeBitString[num_bytes - 1] & 0x7f);
138 return picture_id;
139 } 108 }
140 109
141 } // namespace test 110 } // namespace test
142 } // namespace webrtc 111 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/test/rtcp_packet_parser.h ('k') | webrtc/video/end_to_end_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698