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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc

Issue 2805023002: Add read support of RtpStreamId/RepairedRtpStreamId header extensions. (Closed)
Patch Set: +one more comment Created 3 years, 8 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/modules/rtp_rtcp/source/rtp_utility.cc ('k') | webrtc/test/fuzzers/rtp_header_fuzzer.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) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket)); 141 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket));
142 RTPHeader header; 142 RTPHeader header;
143 143
144 EXPECT_TRUE(parser.Parse(&header, &extensions)); 144 EXPECT_TRUE(parser.Parse(&header, &extensions));
145 145
146 // Parse should ignore extension. 146 // Parse should ignore extension.
147 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); 147 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset);
148 EXPECT_EQ(sizeof(kPacket), header.headerLength); 148 EXPECT_EQ(sizeof(kPacket), header.headerLength);
149 } 149 }
150 150
151 TEST(RtpHeaderParser, ParseAll6Extensions) { 151 TEST(RtpHeaderParser, ParseAll8Extensions) {
152 const uint8_t kAudioLevel = 0x5a; 152 const uint8_t kAudioLevel = 0x5a;
153 // clang-format off 153 // clang-format off
154 const uint8_t kPacket[] = { 154 const uint8_t kPacket[] = {
155 0x90, kPayloadType, 0x00, kSeqNum, 155 0x90, kPayloadType, 0x00, kSeqNum,
156 0x65, 0x43, 0x12, 0x78, // kTimestamp. 156 0x65, 0x43, 0x12, 0x78, // kTimestamp.
157 0x12, 0x34, 0x56, 0x78, // kSsrc. 157 0x12, 0x34, 0x56, 0x78, // kSsrc.
158 0xbe, 0xde, 0x00, 0x05, // Extension of size 5x32bit word. 158 0xbe, 0xde, 0x00, 0x08, // Extension of size 8x32bit words.
159 0x40, 0x80|kAudioLevel, // AudioLevel. 159 0x40, 0x80|kAudioLevel, // AudioLevel.
160 0x22, 0x01, 0x56, 0xce, // TransmissionOffset. 160 0x22, 0x01, 0x56, 0xce, // TransmissionOffset.
161 0x62, 0x12, 0x34, 0x56, // AbsoluteSendTime. 161 0x62, 0x12, 0x34, 0x56, // AbsoluteSendTime.
162 0x81, 0xce, 0xab, // TransportSequenceNumber. 162 0x81, 0xce, 0xab, // TransportSequenceNumber.
163 0xa0, 0x03, // VideoRotation. 163 0xa0, 0x03, // VideoRotation.
164 0xb2, 0x12, 0x48, 0x76, // PlayoutDelayLimits. 164 0xb2, 0x12, 0x48, 0x76, // PlayoutDelayLimits.
165 0x00, // Padding to 32bit boundary. 165 0xc2, 'r', 't', 'x', // RtpStreamId
166 0xd5, 's', 't', 'r', 'e', 'a', 'm', // RepairedRtpStreamId
167 0x00, 0x00, // Padding to 32bit boundary.
166 }; 168 };
167 // clang-format on 169 // clang-format on
168 ASSERT_EQ(sizeof(kPacket) % 4, 0u); 170 ASSERT_EQ(sizeof(kPacket) % 4, 0u);
169 171
170 RtpHeaderExtensionMap extensions; 172 RtpHeaderExtensionMap extensions;
171 extensions.Register<TransmissionOffset>(2); 173 extensions.Register<TransmissionOffset>(2);
172 extensions.Register<AudioLevel>(4); 174 extensions.Register<AudioLevel>(4);
173 extensions.Register<AbsoluteSendTime>(6); 175 extensions.Register<AbsoluteSendTime>(6);
174 extensions.Register<TransportSequenceNumber>(8); 176 extensions.Register<TransportSequenceNumber>(8);
175 extensions.Register<VideoOrientation>(0xa); 177 extensions.Register<VideoOrientation>(0xa);
176 extensions.Register<PlayoutDelayLimits>(0xb); 178 extensions.Register<PlayoutDelayLimits>(0xb);
179 extensions.Register<RtpStreamId>(0xc);
180 extensions.Register<RepairedRtpStreamId>(0xd);
177 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket)); 181 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket));
178 RTPHeader header; 182 RTPHeader header;
179 183
180 EXPECT_TRUE(parser.Parse(&header, &extensions)); 184 EXPECT_TRUE(parser.Parse(&header, &extensions));
181 185
182 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); 186 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset);
183 EXPECT_EQ(0x156ce, header.extension.transmissionTimeOffset); 187 EXPECT_EQ(0x156ce, header.extension.transmissionTimeOffset);
184 188
185 EXPECT_TRUE(header.extension.hasAudioLevel); 189 EXPECT_TRUE(header.extension.hasAudioLevel);
186 EXPECT_TRUE(header.extension.voiceActivity); 190 EXPECT_TRUE(header.extension.voiceActivity);
187 EXPECT_EQ(kAudioLevel, header.extension.audioLevel); 191 EXPECT_EQ(kAudioLevel, header.extension.audioLevel);
188 192
189 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); 193 EXPECT_TRUE(header.extension.hasAbsoluteSendTime);
190 EXPECT_EQ(0x123456U, header.extension.absoluteSendTime); 194 EXPECT_EQ(0x123456U, header.extension.absoluteSendTime);
191 195
192 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); 196 EXPECT_TRUE(header.extension.hasTransportSequenceNumber);
193 EXPECT_EQ(0xceab, header.extension.transportSequenceNumber); 197 EXPECT_EQ(0xceab, header.extension.transportSequenceNumber);
194 198
195 EXPECT_TRUE(header.extension.hasVideoRotation); 199 EXPECT_TRUE(header.extension.hasVideoRotation);
196 EXPECT_EQ(kVideoRotation_270, header.extension.videoRotation); 200 EXPECT_EQ(kVideoRotation_270, header.extension.videoRotation);
197 201
198 EXPECT_EQ(0x124 * PlayoutDelayLimits::kGranularityMs, 202 EXPECT_EQ(0x124 * PlayoutDelayLimits::kGranularityMs,
199 header.extension.playout_delay.min_ms); 203 header.extension.playout_delay.min_ms);
200 EXPECT_EQ(0x876 * PlayoutDelayLimits::kGranularityMs, 204 EXPECT_EQ(0x876 * PlayoutDelayLimits::kGranularityMs,
201 header.extension.playout_delay.max_ms); 205 header.extension.playout_delay.max_ms);
206 EXPECT_EQ(header.extension.stream_id, StreamId("rtx"));
207 EXPECT_EQ(header.extension.repaired_stream_id, StreamId("stream"));
208 }
209
210 TEST(RtpHeaderParser, ParseMalformedRsidExtensions) {
211 // clang-format off
212 const uint8_t kPacket[] = {
213 0x90, kPayloadType, 0x00, kSeqNum,
214 0x65, 0x43, 0x12, 0x78, // kTimestamp.
215 0x12, 0x34, 0x56, 0x78, // kSsrc.
216 0xbe, 0xde, 0x00, 0x03, // Extension of size 3x32bit words.
217 0xc2, '\0', 't', 'x', // empty RtpStreamId
218 0xd5, 's', 't', 'r', '\0', 'a', 'm', // RepairedRtpStreamId
219 0x00, // Padding to 32bit boundary.
220 };
221 // clang-format on
222 ASSERT_EQ(sizeof(kPacket) % 4, 0u);
223
224 RtpHeaderExtensionMap extensions;
225 extensions.Register<RtpStreamId>(0xc);
226 extensions.Register<RepairedRtpStreamId>(0xd);
227 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket));
228 RTPHeader header;
229
230 EXPECT_TRUE(parser.Parse(&header, &extensions));
231 EXPECT_TRUE(header.extension.stream_id.empty());
232 EXPECT_EQ(header.extension.repaired_stream_id, StreamId("str"));
202 } 233 }
203 234
204 TEST(RtpHeaderParser, ParseWithCsrcsExtensionAndPadding) { 235 TEST(RtpHeaderParser, ParseWithCsrcsExtensionAndPadding) {
205 const uint8_t kPacketPaddingSize = 8; 236 const uint8_t kPacketPaddingSize = 8;
206 const uint32_t kCsrcs[] = {0x34567890, 0x32435465}; 237 const uint32_t kCsrcs[] = {0x34567890, 0x32435465};
207 const size_t kPayloadSize = 7; 238 const size_t kPayloadSize = 7;
208 // clang-format off 239 // clang-format off
209 const uint8_t kPacket[] = { 240 const uint8_t kPacket[] = {
210 0xb2, kPayloadType, 0x00, kSeqNum, 241 0xb2, kPayloadType, 0x00, kSeqNum,
211 0x65, 0x43, 0x12, 0x78, // kTimestamp. 242 0x65, 0x43, 0x12, 0x78, // kTimestamp.
(...skipping 19 matching lines...) Expand all
231 EXPECT_THAT(make_tuple(header.arrOfCSRCs, header.numCSRCs), 262 EXPECT_THAT(make_tuple(header.arrOfCSRCs, header.numCSRCs),
232 ElementsAreArray(kCsrcs)); 263 ElementsAreArray(kCsrcs));
233 EXPECT_EQ(kPacketPaddingSize, header.paddingLength); 264 EXPECT_EQ(kPacketPaddingSize, header.paddingLength);
234 EXPECT_THAT(sizeof(kPacket) - kPayloadSize - kPacketPaddingSize, 265 EXPECT_THAT(sizeof(kPacket) - kPayloadSize - kPacketPaddingSize,
235 header.headerLength); 266 header.headerLength);
236 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); 267 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset);
237 EXPECT_EQ(0x56ce, header.extension.transmissionTimeOffset); 268 EXPECT_EQ(0x56ce, header.extension.transmissionTimeOffset);
238 } 269 }
239 270
240 } // namespace webrtc 271 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_utility.cc ('k') | webrtc/test/fuzzers/rtp_header_fuzzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698