xref: /aosp_15_r20/external/webrtc/modules/rtp_rtcp/source/rtp_header_extension_size_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3  *
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
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 #include "modules/rtp_rtcp/source/rtp_header_extension_size.h"
11 
12 #include "modules/rtp_rtcp/source/rtp_header_extensions.h"
13 #include "test/gtest.h"
14 
15 namespace {
16 
17 using ::webrtc::RtpExtensionSize;
18 using ::webrtc::RtpHeaderExtensionMap;
19 using ::webrtc::RtpHeaderExtensionSize;
20 using ::webrtc::RtpMid;
21 using ::webrtc::RtpStreamId;
22 
23 // id for 1-byte header extension. actual value is irrelevant for these tests.
24 constexpr int kId = 1;
25 // id that forces to use 2-byte header extension.
26 constexpr int kIdForceTwoByteHeader = 15;
27 
TEST(RtpHeaderExtensionSizeTest,ReturnsZeroIfNoExtensionsAreRegistered)28 TEST(RtpHeaderExtensionSizeTest, ReturnsZeroIfNoExtensionsAreRegistered) {
29   constexpr RtpExtensionSize kExtensionSizes[] = {{RtpMid::kId, 3}};
30   // Register different extension than ask size for.
31   RtpHeaderExtensionMap registered;
32   registered.Register<RtpStreamId>(kId);
33 
34   EXPECT_EQ(RtpHeaderExtensionSize(kExtensionSizes, registered), 0);
35 }
36 
TEST(RtpHeaderExtensionSizeTest,IncludesSizeOfExtensionHeaders)37 TEST(RtpHeaderExtensionSizeTest, IncludesSizeOfExtensionHeaders) {
38   constexpr RtpExtensionSize kExtensionSizes[] = {{RtpMid::kId, 3}};
39   RtpHeaderExtensionMap registered;
40   registered.Register<RtpMid>(kId);
41 
42   // 4 bytes for extension block header + 1 byte for individual extension header
43   // + 3 bytes for the value.
44   EXPECT_EQ(RtpHeaderExtensionSize(kExtensionSizes, registered), 8);
45 }
46 
TEST(RtpHeaderExtensionSizeTest,RoundsUpTo32bitAlignmant)47 TEST(RtpHeaderExtensionSizeTest, RoundsUpTo32bitAlignmant) {
48   constexpr RtpExtensionSize kExtensionSizes[] = {{RtpMid::kId, 5}};
49   RtpHeaderExtensionMap registered;
50   registered.Register<RtpMid>(kId);
51 
52   // 10 bytes of data including headers + 2 bytes of padding.
53   EXPECT_EQ(RtpHeaderExtensionSize(kExtensionSizes, registered), 12);
54 }
55 
TEST(RtpHeaderExtensionSizeTest,SumsSeveralExtensions)56 TEST(RtpHeaderExtensionSizeTest, SumsSeveralExtensions) {
57   constexpr RtpExtensionSize kExtensionSizes[] = {{RtpMid::kId, 16},
58                                                   {RtpStreamId::kId, 2}};
59   RtpHeaderExtensionMap registered;
60   registered.Register<RtpMid>(kId);
61   registered.Register<RtpStreamId>(14);
62 
63   // 4 bytes for extension block header + 18 bytes of value +
64   // 2 bytes for two headers
65   EXPECT_EQ(RtpHeaderExtensionSize(kExtensionSizes, registered), 24);
66 }
67 
TEST(RtpHeaderExtensionSizeTest,LargeIdForce2BytesHeader)68 TEST(RtpHeaderExtensionSizeTest, LargeIdForce2BytesHeader) {
69   constexpr RtpExtensionSize kExtensionSizes[] = {{RtpMid::kId, 3},
70                                                   {RtpStreamId::kId, 2}};
71   RtpHeaderExtensionMap registered;
72   registered.Register<RtpMid>(kId);
73   registered.Register<RtpStreamId>(kIdForceTwoByteHeader);
74 
75   // 4 bytes for extension block header + 5 bytes of value +
76   // 2*2 bytes for two headers + 3 bytes of padding.
77   EXPECT_EQ(RtpHeaderExtensionSize(kExtensionSizes, registered), 16);
78 }
79 
TEST(RtpHeaderExtensionSizeTest,LargeValueForce2BytesHeader)80 TEST(RtpHeaderExtensionSizeTest, LargeValueForce2BytesHeader) {
81   constexpr RtpExtensionSize kExtensionSizes[] = {{RtpMid::kId, 17},
82                                                   {RtpStreamId::kId, 4}};
83   RtpHeaderExtensionMap registered;
84   registered.Register<RtpMid>(1);
85   registered.Register<RtpStreamId>(2);
86 
87   // 4 bytes for extension block header + 21 bytes of value +
88   // 2*2 bytes for two headers + 3 byte of padding.
89   EXPECT_EQ(RtpHeaderExtensionSize(kExtensionSizes, registered), 32);
90 }
91 
92 }  // namespace
93