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

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

Issue 2871173008: Fix packetization logic to leave space for extensions in the last packet (Closed)
Patch Set: Impelemented Danilchap@ comments Created 3 years, 7 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
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2017 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
11 #include <algorithm>
12 #include <limits>
13 #include <memory>
14 #include <vector>
15
16 #include "webrtc/base/array_view.h"
17 #include "webrtc/modules/include/module_common_types.h"
18 #include "webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h"
19 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
20 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h"
21 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
22 #include "webrtc/test/gmock.h"
23 #include "webrtc/test/gtest.h"
24
25 namespace webrtc {
26 namespace {
27
28 using ::testing::ElementsAreArray;
29 using ::testing::Le;
30 using ::testing::SizeIs;
31 using ::testing::Each;
32
33 const size_t kMaxPayloadSize = 1200;
34
35 uint8_t kTestPayload[kMaxPayloadSize];
36
37 std::vector<size_t> NextPacketFillPayloadSizes(
38 RtpPacketizerGeneric* packetizer) {
39 RtpPacketToSend packet(nullptr);
40 std::vector<size_t> result;
41 while (packetizer->NextPacket(&packet)) {
42 result.push_back(packet.payload_size());
43 }
44 return result;
45 }
46
47 size_t GetEffectivePacketsSizeDifference(std::vector<size_t>* payload_sizes,
48 size_t last_packet_reduction_len) {
49 // Account for larger last packet header.
50 payload_sizes->back() += last_packet_reduction_len;
51 auto minmax =
52 std::minmax_element(payload_sizes->begin(), payload_sizes->end());
53 // MAX-MIN
54 auto difference = *minmax.second - *minmax.first;
danilchap 2017/05/16 10:25:11 using size_t here instead of auto likely better. h
ilnik 2017/05/16 12:24:07 Done.
55 // Revert temporary changes.
56 payload_sizes->back() -= last_packet_reduction_len;
57 return difference;
58 }
59
60 } // namespace
61
62 TEST(RtpPacketizerVideoGeneric, AllPacketsMayBeEqual_RespectsMaxPayloadSize) {
63 const size_t max_payload_length = 6;
64 const size_t last_packet_reduction_len = 2;
65 const size_t payload_size = 13;
66 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
67 last_packet_reduction_len);
68 size_t num_packets =
69 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
70 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
71 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
72
73 EXPECT_THAT(payload_sizes, Each(Le(max_payload_length)));
74 }
75
76 TEST(RtpPacketizerVideoGeneric,
77 AllPacketsMayBeEqual_RespectsLastPacketReductionLength) {
78 const size_t max_payload_length = 6;
79 const size_t last_packet_reduction_len = 2;
80 const size_t payload_size = 13;
81 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
82 last_packet_reduction_len);
83 size_t num_packets =
84 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
85 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
86 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
87
88 EXPECT_LE(payload_sizes.back(),
89 max_payload_length - last_packet_reduction_len);
90 }
91
92 TEST(RtpPacketizerVideoGeneric,
93 AllPacketsMayBeEqual_MakesPacketsAlmostEqualInSize) {
94 const size_t max_payload_length = 6;
95 const size_t last_packet_reduction_len = 2;
96 const size_t payload_size = 13;
97 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
98 last_packet_reduction_len);
99 size_t num_packets =
100 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
101 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
102 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
103
104 size_t sizes_difference = GetEffectivePacketsSizeDifference(
105 &payload_sizes, last_packet_reduction_len);
106 EXPECT_LE(sizes_difference, 1u);
107 }
108
109 TEST(RtpPacketizerVideoGeneric,
110 AllPacketsMayBeEqual_GeneratesMinimumNumberOfPackets) {
111 const size_t max_payload_length = 6;
112 const size_t last_packet_reduction_len = 3;
113 const size_t payload_size = 13;
114 const size_t min_num_packets = 4; // Computed by hand.
danilchap 2017/05/16 10:25:11 may be extend the comment how it was computed: min
ilnik 2017/05/16 12:24:07 Now there's a comment about how exactly it was cal
115 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
116 last_packet_reduction_len);
117 size_t num_packets =
118 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
119 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
120 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
121
122 EXPECT_EQ(num_packets, min_num_packets);
123 }
124
125 TEST(RtpPacketizerVideoGeneric, SomePacketsAreSmaller_RespectsMaxPayloadSize) {
126 const size_t max_payload_length = 8;
127 const size_t last_packet_reduction_len = 5;
128 const size_t payload_size = 28;
129 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
130 last_packet_reduction_len);
131 size_t num_packets =
132 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
133 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
134 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
135
136 EXPECT_THAT(payload_sizes, Each(Le(max_payload_length)));
137 }
138
139 TEST(RtpPacketizerVideoGeneric,
140 SomePacketsAreSmaller_RespectsLastPacketReductionLength) {
141 const size_t max_payload_length = 8;
142 const size_t last_packet_reduction_len = 5;
143 const size_t payload_size = 28;
144 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
145 last_packet_reduction_len);
146 size_t num_packets =
147 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
148 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
149 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
150
151 EXPECT_LE(payload_sizes.back(),
152 max_payload_length - last_packet_reduction_len);
153 }
154
155 TEST(RtpPacketizerVideoGeneric,
156 SomePacketsAreSmaller_MakesPacketsAlmostEqualInSize) {
157 const size_t max_payload_length = 8;
158 const size_t last_packet_reduction_len = 5;
159 const size_t payload_size = 28;
160 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
161 last_packet_reduction_len);
162 size_t num_packets =
163 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
164 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
165 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
166
167 size_t sizes_difference = GetEffectivePacketsSizeDifference(
168 &payload_sizes, last_packet_reduction_len);
169 EXPECT_LE(sizes_difference, 1u);
170 }
171
172 TEST(RtpPacketizerVideoGeneric,
173 SomePacketsAreSmaller_GeneratesMinimumNumberOfPackets) {
174 const size_t max_payload_length = 8;
175 const size_t last_packet_reduction_len = 5;
176 const size_t payload_size = 28;
177 const size_t min_num_packets = 5; // Computed by hand.
178 RtpPacketizerGeneric packetizer(kVideoFrameKey, max_payload_length,
179 last_packet_reduction_len);
180 size_t num_packets =
181 packetizer.SetPayloadData(kTestPayload, payload_size, nullptr);
182 auto payload_sizes = NextPacketFillPayloadSizes(&packetizer);
183 EXPECT_THAT(payload_sizes, SizeIs(num_packets));
184
185 EXPECT_EQ(num_packets, min_num_packets);
186 }
187
188 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698