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

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

Issue 2871173008: Fix packetization logic to leave space for extensions in the last packet (Closed)
Patch Set: Implement 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
1 /* 1 /*
danilchap 2017/05/23 12:17:27 did you test single nalu with last packet reductio
ilnik 2017/05/23 12:37:59 Not needed, because it's just a single packet alwa
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 <memory> 11 #include <memory>
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 fragmentation->fragmentationOffset[0] = 0; 56 fragmentation->fragmentationOffset[0] = 0;
57 fragmentation->fragmentationLength[0] = 2; 57 fragmentation->fragmentationLength[0] = 2;
58 fragmentation->fragmentationOffset[1] = 2; 58 fragmentation->fragmentationOffset[1] = 2;
59 fragmentation->fragmentationLength[1] = 2; 59 fragmentation->fragmentationLength[1] = 2;
60 fragmentation->fragmentationOffset[2] = 4; 60 fragmentation->fragmentationOffset[2] = 4;
61 fragmentation->fragmentationLength[2] = 61 fragmentation->fragmentationLength[2] =
62 kNalHeaderSize + frameSize - payloadOffset; 62 kNalHeaderSize + frameSize - payloadOffset;
63 } 63 }
64 64
65 RtpPacketizer* CreateH264Packetizer(H264PacketizationMode mode, 65 RtpPacketizer* CreateH264Packetizer(H264PacketizationMode mode,
66 size_t max_payload_size) { 66 size_t max_payload_size,
67 size_t last_packet_reduction) {
67 RTPVideoTypeHeader type_header; 68 RTPVideoTypeHeader type_header;
68 type_header.H264.packetization_mode = mode; 69 type_header.H264.packetization_mode = mode;
69 return RtpPacketizer::Create(kRtpVideoH264, max_payload_size, &type_header, 70 return RtpPacketizer::Create(kRtpVideoH264, max_payload_size,
71 last_packet_reduction, &type_header,
70 kEmptyFrame); 72 kEmptyFrame);
71 } 73 }
72 74
73 void VerifyFua(size_t fua_index, 75 void VerifyFua(size_t fua_index,
74 const uint8_t* expected_payload, 76 const uint8_t* expected_payload,
75 int offset, 77 int offset,
76 rtc::ArrayView<const uint8_t> packet, 78 rtc::ArrayView<const uint8_t> packet,
77 const std::vector<size_t>& expected_sizes) { 79 const std::vector<size_t>& expected_sizes) {
78 ASSERT_EQ(expected_sizes[fua_index] + kFuAHeaderSize, packet.size()) 80 ASSERT_EQ(expected_sizes[fua_index] + kFuAHeaderSize, packet.size())
79 << "FUA index: " << fua_index; 81 << "FUA index: " << fua_index;
(...skipping 11 matching lines...) Expand all
91 std::vector<uint8_t> expected_packet_payload( 93 std::vector<uint8_t> expected_packet_payload(
92 &expected_payload[offset], 94 &expected_payload[offset],
93 &expected_payload[offset + expected_sizes[fua_index]]); 95 &expected_payload[offset + expected_sizes[fua_index]]);
94 EXPECT_THAT(expected_packet_payload, 96 EXPECT_THAT(expected_packet_payload,
95 ElementsAreArray(&packet[2], expected_sizes[fua_index])) 97 ElementsAreArray(&packet[2], expected_sizes[fua_index]))
96 << "FUA index: " << fua_index; 98 << "FUA index: " << fua_index;
97 } 99 }
98 100
99 void TestFua(size_t frame_size, 101 void TestFua(size_t frame_size,
100 size_t max_payload_size, 102 size_t max_payload_size,
103 size_t last_packet_reduction,
101 const std::vector<size_t>& expected_sizes) { 104 const std::vector<size_t>& expected_sizes) {
102 std::unique_ptr<uint8_t[]> frame; 105 std::unique_ptr<uint8_t[]> frame;
103 frame.reset(new uint8_t[frame_size]); 106 frame.reset(new uint8_t[frame_size]);
104 frame[0] = 0x05; // F=0, NRI=0, Type=5. 107 frame[0] = 0x05; // F=0, NRI=0, Type=5.
105 for (size_t i = 0; i < frame_size - kNalHeaderSize; ++i) { 108 for (size_t i = 0; i < frame_size - kNalHeaderSize; ++i) {
106 frame[i + kNalHeaderSize] = i; 109 frame[i + kNalHeaderSize] = i;
107 } 110 }
108 RTPFragmentationHeader fragmentation; 111 RTPFragmentationHeader fragmentation;
109 fragmentation.VerifyAndAllocateFragmentationHeader(1); 112 fragmentation.VerifyAndAllocateFragmentationHeader(1);
110 fragmentation.fragmentationOffset[0] = 0; 113 fragmentation.fragmentationOffset[0] = 0;
111 fragmentation.fragmentationLength[0] = frame_size; 114 fragmentation.fragmentationLength[0] = frame_size;
112 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer( 115 std::unique_ptr<RtpPacketizer> packetizer(
113 H264PacketizationMode::NonInterleaved, max_payload_size)); 116 CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
114 packetizer->SetPayloadData(frame.get(), frame_size, &fragmentation); 117 max_payload_size, last_packet_reduction));
118 EXPECT_EQ(
119 expected_sizes.size(),
120 packetizer->SetPayloadData(frame.get(), frame_size, &fragmentation));
115 121
116 RtpPacketToSend packet(kNoExtensions); 122 RtpPacketToSend packet(kNoExtensions);
117 ASSERT_LE(max_payload_size, packet.FreeCapacity()); 123 ASSERT_LE(max_payload_size, packet.FreeCapacity());
118 bool last = false;
119 size_t offset = kNalHeaderSize; 124 size_t offset = kNalHeaderSize;
120 for (size_t i = 0; i < expected_sizes.size(); ++i) { 125 for (size_t i = 0; i < expected_sizes.size(); ++i) {
121 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 126 ASSERT_TRUE(packetizer->NextPacket(&packet));
122 VerifyFua(i, frame.get(), offset, packet.payload(), expected_sizes); 127 VerifyFua(i, frame.get(), offset, packet.payload(), expected_sizes);
123 EXPECT_EQ(i == expected_sizes.size() - 1, last) << "FUA index: " << i;
124 offset += expected_sizes[i]; 128 offset += expected_sizes[i];
125 } 129 }
126 130
127 EXPECT_FALSE(packetizer->NextPacket(&packet, &last)); 131 EXPECT_FALSE(packetizer->NextPacket(&packet));
128 } 132 }
129 133
130 size_t GetExpectedNaluOffset(const RTPFragmentationHeader& fragmentation, 134 size_t GetExpectedNaluOffset(const RTPFragmentationHeader& fragmentation,
131 size_t start_index, 135 size_t start_index,
132 size_t nalu_index) { 136 size_t nalu_index) {
133 assert(nalu_index < fragmentation.fragmentationVectorSize); 137 assert(nalu_index < fragmentation.fragmentationVectorSize);
134 size_t expected_nalu_offset = kNalHeaderSize; // STAP-A header. 138 size_t expected_nalu_offset = kNalHeaderSize; // STAP-A header.
135 for (size_t i = start_index; i < nalu_index; ++i) { 139 for (size_t i = start_index; i < nalu_index; ++i) {
136 expected_nalu_offset += 140 expected_nalu_offset +=
137 kLengthFieldLength + fragmentation.fragmentationLength[i]; 141 kLengthFieldLength + fragmentation.fragmentationLength[i];
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 class RtpPacketizerH264ModeTest 179 class RtpPacketizerH264ModeTest
176 : public ::testing::TestWithParam<H264PacketizationMode> {}; 180 : public ::testing::TestWithParam<H264PacketizationMode> {};
177 181
178 TEST_P(RtpPacketizerH264ModeTest, TestSingleNalu) { 182 TEST_P(RtpPacketizerH264ModeTest, TestSingleNalu) {
179 const uint8_t frame[2] = {0x05, 0xFF}; // F=0, NRI=0, Type=5. 183 const uint8_t frame[2] = {0x05, 0xFF}; // F=0, NRI=0, Type=5.
180 RTPFragmentationHeader fragmentation; 184 RTPFragmentationHeader fragmentation;
181 fragmentation.VerifyAndAllocateFragmentationHeader(1); 185 fragmentation.VerifyAndAllocateFragmentationHeader(1);
182 fragmentation.fragmentationOffset[0] = 0; 186 fragmentation.fragmentationOffset[0] = 0;
183 fragmentation.fragmentationLength[0] = sizeof(frame); 187 fragmentation.fragmentationLength[0] = sizeof(frame);
184 std::unique_ptr<RtpPacketizer> packetizer( 188 std::unique_ptr<RtpPacketizer> packetizer(
185 CreateH264Packetizer(GetParam(), kMaxPayloadSize)); 189 CreateH264Packetizer(GetParam(), kMaxPayloadSize, 0));
186 packetizer->SetPayloadData(frame, sizeof(frame), &fragmentation); 190 ASSERT_EQ(1u,
191 packetizer->SetPayloadData(frame, sizeof(frame), &fragmentation));
187 RtpPacketToSend packet(kNoExtensions); 192 RtpPacketToSend packet(kNoExtensions);
188 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity()); 193 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity());
189 bool last = false; 194 ASSERT_TRUE(packetizer->NextPacket(&packet));
190 ASSERT_TRUE(packetizer->NextPacket(&packet, &last));
191 EXPECT_EQ(2u, packet.payload_size()); 195 EXPECT_EQ(2u, packet.payload_size());
192 EXPECT_TRUE(last);
193 VerifySingleNaluPayload(fragmentation, 0, frame, packet.payload()); 196 VerifySingleNaluPayload(fragmentation, 0, frame, packet.payload());
194 EXPECT_FALSE(packetizer->NextPacket(&packet, &last)); 197 EXPECT_FALSE(packetizer->NextPacket(&packet));
195 } 198 }
196 199
197 TEST_P(RtpPacketizerH264ModeTest, TestSingleNaluTwoPackets) { 200 TEST_P(RtpPacketizerH264ModeTest, TestSingleNaluTwoPackets) {
198 const size_t kFrameSize = kMaxPayloadSize + 100; 201 const size_t kFrameSize = kMaxPayloadSize + 100;
199 uint8_t frame[kFrameSize] = {0}; 202 uint8_t frame[kFrameSize] = {0};
200 for (size_t i = 0; i < kFrameSize; ++i) 203 for (size_t i = 0; i < kFrameSize; ++i)
201 frame[i] = i; 204 frame[i] = i;
202 RTPFragmentationHeader fragmentation; 205 RTPFragmentationHeader fragmentation;
203 fragmentation.VerifyAndAllocateFragmentationHeader(2); 206 fragmentation.VerifyAndAllocateFragmentationHeader(2);
204 fragmentation.fragmentationOffset[0] = 0; 207 fragmentation.fragmentationOffset[0] = 0;
205 fragmentation.fragmentationLength[0] = kMaxPayloadSize; 208 fragmentation.fragmentationLength[0] = kMaxPayloadSize;
206 fragmentation.fragmentationOffset[1] = kMaxPayloadSize; 209 fragmentation.fragmentationOffset[1] = kMaxPayloadSize;
207 fragmentation.fragmentationLength[1] = 100; 210 fragmentation.fragmentationLength[1] = 100;
208 // Set NAL headers. 211 // Set NAL headers.
209 frame[fragmentation.fragmentationOffset[0]] = 0x01; 212 frame[fragmentation.fragmentationOffset[0]] = 0x01;
210 frame[fragmentation.fragmentationOffset[1]] = 0x01; 213 frame[fragmentation.fragmentationOffset[1]] = 0x01;
211 214
212 std::unique_ptr<RtpPacketizer> packetizer( 215 std::unique_ptr<RtpPacketizer> packetizer(
213 CreateH264Packetizer(GetParam(), kMaxPayloadSize)); 216 CreateH264Packetizer(GetParam(), kMaxPayloadSize, 0));
214 packetizer->SetPayloadData(frame, kFrameSize, &fragmentation); 217 ASSERT_EQ(2u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
215 218
216 RtpPacketToSend packet(kNoExtensions); 219 RtpPacketToSend packet(kNoExtensions);
217 bool last = false; 220 ASSERT_TRUE(packetizer->NextPacket(&packet));
218 ASSERT_TRUE(packetizer->NextPacket(&packet, &last));
219 ASSERT_EQ(fragmentation.fragmentationOffset[1], packet.payload_size()); 221 ASSERT_EQ(fragmentation.fragmentationOffset[1], packet.payload_size());
220 VerifySingleNaluPayload(fragmentation, 0, frame, packet.payload()); 222 VerifySingleNaluPayload(fragmentation, 0, frame, packet.payload());
221 223
222 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 224 ASSERT_TRUE(packetizer->NextPacket(&packet));
223 ASSERT_EQ(fragmentation.fragmentationLength[1], packet.payload_size()); 225 ASSERT_EQ(fragmentation.fragmentationLength[1], packet.payload_size());
224 VerifySingleNaluPayload(fragmentation, 1, frame, packet.payload()); 226 VerifySingleNaluPayload(fragmentation, 1, frame, packet.payload());
225 EXPECT_TRUE(last);
226 227
227 EXPECT_FALSE(packetizer->NextPacket(&packet, &last)); 228 EXPECT_FALSE(packetizer->NextPacket(&packet));
228 } 229 }
229 230
230 INSTANTIATE_TEST_CASE_P( 231 INSTANTIATE_TEST_CASE_P(
231 PacketMode, 232 PacketMode,
232 RtpPacketizerH264ModeTest, 233 RtpPacketizerH264ModeTest,
233 ::testing::Values(H264PacketizationMode::SingleNalUnit, 234 ::testing::Values(H264PacketizationMode::SingleNalUnit,
234 H264PacketizationMode::NonInterleaved)); 235 H264PacketizationMode::NonInterleaved));
235 236
236 TEST(RtpPacketizerH264Test, TestStapA) { 237 TEST(RtpPacketizerH264Test, TestStapA) {
237 const size_t kFrameSize = 238 const size_t kFrameSize =
238 kMaxPayloadSize - 3 * kLengthFieldLength - kNalHeaderSize; 239 kMaxPayloadSize - 3 * kLengthFieldLength - kNalHeaderSize;
239 uint8_t frame[kFrameSize] = {0x07, 0xFF, // F=0, NRI=0, Type=7 (SPS). 240 uint8_t frame[kFrameSize] = {0x07, 0xFF, // F=0, NRI=0, Type=7 (SPS).
240 0x08, 0xFF, // F=0, NRI=0, Type=8 (PPS). 241 0x08, 0xFF, // F=0, NRI=0, Type=8 (PPS).
241 0x05}; // F=0, NRI=0, Type=5 (IDR). 242 0x05}; // F=0, NRI=0, Type=5 (IDR).
242 const size_t kPayloadOffset = 5; 243 const size_t kPayloadOffset = 5;
243 for (size_t i = 0; i < kFrameSize - kPayloadOffset; ++i) 244 for (size_t i = 0; i < kFrameSize - kPayloadOffset; ++i)
244 frame[i + kPayloadOffset] = i; 245 frame[i + kPayloadOffset] = i;
245 RTPFragmentationHeader fragmentation; 246 RTPFragmentationHeader fragmentation;
246 CreateThreeFragments(&fragmentation, kFrameSize, kPayloadOffset); 247 CreateThreeFragments(&fragmentation, kFrameSize, kPayloadOffset);
247 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer( 248 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
248 H264PacketizationMode::NonInterleaved, kMaxPayloadSize)); 249 H264PacketizationMode::NonInterleaved, kMaxPayloadSize, 0));
249 packetizer->SetPayloadData(frame, kFrameSize, &fragmentation); 250 ASSERT_EQ(1u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
250 251
251 RtpPacketToSend packet(kNoExtensions); 252 RtpPacketToSend packet(kNoExtensions);
252 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity()); 253 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity());
253 bool last = false; 254 ASSERT_TRUE(packetizer->NextPacket(&packet));
254 ASSERT_TRUE(packetizer->NextPacket(&packet, &last));
255 size_t expected_packet_size = 255 size_t expected_packet_size =
256 kNalHeaderSize + 3 * kLengthFieldLength + kFrameSize; 256 kNalHeaderSize + 3 * kLengthFieldLength + kFrameSize;
257 ASSERT_EQ(expected_packet_size, packet.payload_size()); 257 ASSERT_EQ(expected_packet_size, packet.payload_size());
258 EXPECT_TRUE(last); 258
259 for (size_t i = 0; i < fragmentation.fragmentationVectorSize; ++i) 259 for (size_t i = 0; i < fragmentation.fragmentationVectorSize; ++i)
260 VerifyStapAPayload(fragmentation, 0, i, frame, packet.payload()); 260 VerifyStapAPayload(fragmentation, 0, i, frame, packet.payload());
261 261
262 EXPECT_FALSE(packetizer->NextPacket(&packet, &last)); 262 EXPECT_FALSE(packetizer->NextPacket(&packet));
263 }
264
265 TEST(RtpPacketizerH264Test, TestStapARespectsPacketReduction) {
266 const size_t kLastPacketReduction = 100;
267 const size_t kFrameSize = kMaxPayloadSize - 1 - kLastPacketReduction;
268 uint8_t frame[kFrameSize] = {0x07, 0xFF, // F=0, NRI=0, Type=7.
269 0x08, 0xFF, // F=0, NRI=0, Type=8.
270 0x05}; // F=0, NRI=0, Type=5.
271 const size_t kPayloadOffset = 5;
272 for (size_t i = 0; i < kFrameSize - kPayloadOffset; ++i)
273 frame[i + kPayloadOffset] = i;
274 RTPFragmentationHeader fragmentation;
275 fragmentation.VerifyAndAllocateFragmentationHeader(3);
276 fragmentation.fragmentationOffset[0] = 0;
277 fragmentation.fragmentationLength[0] = 2;
278 fragmentation.fragmentationOffset[1] = 2;
279 fragmentation.fragmentationLength[1] = 2;
280 fragmentation.fragmentationOffset[2] = 4;
281 fragmentation.fragmentationLength[2] =
282 kNalHeaderSize + kFrameSize - kPayloadOffset;
283 std::unique_ptr<RtpPacketizer> packetizer(
284 CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
285 kMaxPayloadSize, kLastPacketReduction));
286 ASSERT_EQ(2u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
287
288 RtpPacketToSend packet(kNoExtensions);
289 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity());
290 ASSERT_TRUE(packetizer->NextPacket(&packet));
291 size_t expected_packet_size = kNalHeaderSize;
292 for (size_t i = 0; i < 2; ++i) {
293 expected_packet_size +=
294 kLengthFieldLength + fragmentation.fragmentationLength[i];
295 }
296 ASSERT_EQ(expected_packet_size, packet.payload_size());
297 for (size_t i = 0; i < 2; ++i)
298 VerifyStapAPayload(fragmentation, 0, i, frame, packet.payload());
299
300 ASSERT_TRUE(packetizer->NextPacket(&packet));
301 expected_packet_size = fragmentation.fragmentationLength[2];
302 ASSERT_EQ(expected_packet_size, packet.payload_size());
303 VerifySingleNaluPayload(fragmentation, 2, frame, packet.payload());
304
305 EXPECT_FALSE(packetizer->NextPacket(&packet));
263 } 306 }
264 307
265 TEST(RtpPacketizerH264Test, TestSingleNalUnitModeHasNoStapA) { 308 TEST(RtpPacketizerH264Test, TestSingleNalUnitModeHasNoStapA) {
266 // This is the same setup as for the TestStapA test. 309 // This is the same setup as for the TestStapA test.
267 const size_t kFrameSize = 310 const size_t kFrameSize =
268 kMaxPayloadSize - 3 * kLengthFieldLength - kNalHeaderSize; 311 kMaxPayloadSize - 3 * kLengthFieldLength - kNalHeaderSize;
269 uint8_t frame[kFrameSize] = {0x07, 0xFF, // F=0, NRI=0, Type=7 (SPS). 312 uint8_t frame[kFrameSize] = {0x07, 0xFF, // F=0, NRI=0, Type=7 (SPS).
270 0x08, 0xFF, // F=0, NRI=0, Type=8 (PPS). 313 0x08, 0xFF, // F=0, NRI=0, Type=8 (PPS).
271 0x05}; // F=0, NRI=0, Type=5 (IDR). 314 0x05}; // F=0, NRI=0, Type=5 (IDR).
272 const size_t kPayloadOffset = 5; 315 const size_t kPayloadOffset = 5;
273 for (size_t i = 0; i < kFrameSize - kPayloadOffset; ++i) 316 for (size_t i = 0; i < kFrameSize - kPayloadOffset; ++i)
274 frame[i + kPayloadOffset] = i; 317 frame[i + kPayloadOffset] = i;
275 RTPFragmentationHeader fragmentation; 318 RTPFragmentationHeader fragmentation;
276 CreateThreeFragments(&fragmentation, kFrameSize, kPayloadOffset); 319 CreateThreeFragments(&fragmentation, kFrameSize, kPayloadOffset);
277 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer( 320 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
278 H264PacketizationMode::SingleNalUnit, kMaxPayloadSize)); 321 H264PacketizationMode::SingleNalUnit, kMaxPayloadSize, 0));
279 packetizer->SetPayloadData(frame, kFrameSize, &fragmentation); 322 packetizer->SetPayloadData(frame, kFrameSize, &fragmentation);
280 323
281 RtpPacketToSend packet(kNoExtensions); 324 RtpPacketToSend packet(kNoExtensions);
282 bool last = false;
283 // The three fragments should be returned as three packets. 325 // The three fragments should be returned as three packets.
284 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 326 ASSERT_TRUE(packetizer->NextPacket(&packet));
285 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 327 ASSERT_TRUE(packetizer->NextPacket(&packet));
286 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 328 ASSERT_TRUE(packetizer->NextPacket(&packet));
287 EXPECT_FALSE(packetizer->NextPacket(&packet, &last)); 329 EXPECT_FALSE(packetizer->NextPacket(&packet));
288 } 330 }
289 331
290 TEST(RtpPacketizerH264Test, TestTooSmallForStapAHeaders) { 332 TEST(RtpPacketizerH264Test, TestTooSmallForStapAHeaders) {
291 const size_t kFrameSize = kMaxPayloadSize - 1; 333 const size_t kFrameSize = kMaxPayloadSize - 1;
292 uint8_t frame[kFrameSize] = {0x07, 0xFF, // F=0, NRI=0, Type=7. 334 uint8_t frame[kFrameSize] = {0x07, 0xFF, // F=0, NRI=0, Type=7.
293 0x08, 0xFF, // F=0, NRI=0, Type=8. 335 0x08, 0xFF, // F=0, NRI=0, Type=8.
294 0x05}; // F=0, NRI=0, Type=5. 336 0x05}; // F=0, NRI=0, Type=5.
295 const size_t kPayloadOffset = 5; 337 const size_t kPayloadOffset = 5;
296 for (size_t i = 0; i < kFrameSize - kPayloadOffset; ++i) 338 for (size_t i = 0; i < kFrameSize - kPayloadOffset; ++i)
297 frame[i + kPayloadOffset] = i; 339 frame[i + kPayloadOffset] = i;
298 RTPFragmentationHeader fragmentation; 340 RTPFragmentationHeader fragmentation;
299 fragmentation.VerifyAndAllocateFragmentationHeader(3); 341 fragmentation.VerifyAndAllocateFragmentationHeader(3);
300 fragmentation.fragmentationOffset[0] = 0; 342 fragmentation.fragmentationOffset[0] = 0;
301 fragmentation.fragmentationLength[0] = 2; 343 fragmentation.fragmentationLength[0] = 2;
302 fragmentation.fragmentationOffset[1] = 2; 344 fragmentation.fragmentationOffset[1] = 2;
303 fragmentation.fragmentationLength[1] = 2; 345 fragmentation.fragmentationLength[1] = 2;
304 fragmentation.fragmentationOffset[2] = 4; 346 fragmentation.fragmentationOffset[2] = 4;
305 fragmentation.fragmentationLength[2] = 347 fragmentation.fragmentationLength[2] =
306 kNalHeaderSize + kFrameSize - kPayloadOffset; 348 kNalHeaderSize + kFrameSize - kPayloadOffset;
307 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer( 349 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
308 H264PacketizationMode::NonInterleaved, kMaxPayloadSize)); 350 H264PacketizationMode::NonInterleaved, kMaxPayloadSize, 0));
309 packetizer->SetPayloadData(frame, kFrameSize, &fragmentation); 351 ASSERT_EQ(2u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
310 352
311 RtpPacketToSend packet(kNoExtensions); 353 RtpPacketToSend packet(kNoExtensions);
312 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity()); 354 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity());
313 bool last = false; 355 ASSERT_TRUE(packetizer->NextPacket(&packet));
314 ASSERT_TRUE(packetizer->NextPacket(&packet, &last));
315 size_t expected_packet_size = kNalHeaderSize; 356 size_t expected_packet_size = kNalHeaderSize;
316 for (size_t i = 0; i < 2; ++i) { 357 for (size_t i = 0; i < 2; ++i) {
317 expected_packet_size += 358 expected_packet_size +=
318 kLengthFieldLength + fragmentation.fragmentationLength[i]; 359 kLengthFieldLength + fragmentation.fragmentationLength[i];
319 } 360 }
320 ASSERT_EQ(expected_packet_size, packet.payload_size()); 361 ASSERT_EQ(expected_packet_size, packet.payload_size());
321 EXPECT_FALSE(last);
322 for (size_t i = 0; i < 2; ++i) 362 for (size_t i = 0; i < 2; ++i)
323 VerifyStapAPayload(fragmentation, 0, i, frame, packet.payload()); 363 VerifyStapAPayload(fragmentation, 0, i, frame, packet.payload());
324 364
325 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 365 ASSERT_TRUE(packetizer->NextPacket(&packet));
326 expected_packet_size = fragmentation.fragmentationLength[2]; 366 expected_packet_size = fragmentation.fragmentationLength[2];
327 ASSERT_EQ(expected_packet_size, packet.payload_size()); 367 ASSERT_EQ(expected_packet_size, packet.payload_size());
328 EXPECT_TRUE(last);
329 VerifySingleNaluPayload(fragmentation, 2, frame, packet.payload()); 368 VerifySingleNaluPayload(fragmentation, 2, frame, packet.payload());
330 369
331 EXPECT_FALSE(packetizer->NextPacket(&packet, &last)); 370 EXPECT_FALSE(packetizer->NextPacket(&packet));
332 } 371 }
333 372
334 TEST(RtpPacketizerH264Test, TestMixedStapA_FUA) { 373 TEST(RtpPacketizerH264Test, TestMixedStapA_FUA) {
335 const size_t kFuaNaluSize = 2 * (kMaxPayloadSize - 100); 374 const size_t kFuaNaluSize = 2 * (kMaxPayloadSize - 100);
336 const size_t kStapANaluSize = 100; 375 const size_t kStapANaluSize = 100;
337 RTPFragmentationHeader fragmentation; 376 RTPFragmentationHeader fragmentation;
338 fragmentation.VerifyAndAllocateFragmentationHeader(3); 377 fragmentation.VerifyAndAllocateFragmentationHeader(3);
339 fragmentation.fragmentationOffset[0] = 0; 378 fragmentation.fragmentationOffset[0] = 0;
340 fragmentation.fragmentationLength[0] = kFuaNaluSize; 379 fragmentation.fragmentationLength[0] = kFuaNaluSize;
341 fragmentation.fragmentationOffset[1] = kFuaNaluSize; 380 fragmentation.fragmentationOffset[1] = kFuaNaluSize;
342 fragmentation.fragmentationLength[1] = kStapANaluSize; 381 fragmentation.fragmentationLength[1] = kStapANaluSize;
343 fragmentation.fragmentationOffset[2] = kFuaNaluSize + kStapANaluSize; 382 fragmentation.fragmentationOffset[2] = kFuaNaluSize + kStapANaluSize;
344 fragmentation.fragmentationLength[2] = kStapANaluSize; 383 fragmentation.fragmentationLength[2] = kStapANaluSize;
345 const size_t kFrameSize = kFuaNaluSize + 2 * kStapANaluSize; 384 const size_t kFrameSize = kFuaNaluSize + 2 * kStapANaluSize;
346 uint8_t frame[kFrameSize]; 385 uint8_t frame[kFrameSize];
347 size_t nalu_offset = 0; 386 size_t nalu_offset = 0;
348 for (size_t i = 0; i < fragmentation.fragmentationVectorSize; ++i) { 387 for (size_t i = 0; i < fragmentation.fragmentationVectorSize; ++i) {
349 nalu_offset = fragmentation.fragmentationOffset[i]; 388 nalu_offset = fragmentation.fragmentationOffset[i];
350 frame[nalu_offset] = 0x05; // F=0, NRI=0, Type=5. 389 frame[nalu_offset] = 0x05; // F=0, NRI=0, Type=5.
351 for (size_t j = 1; j < fragmentation.fragmentationLength[i]; ++j) { 390 for (size_t j = 1; j < fragmentation.fragmentationLength[i]; ++j) {
352 frame[nalu_offset + j] = i + j; 391 frame[nalu_offset + j] = i + j;
353 } 392 }
354 } 393 }
355 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer( 394 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
356 H264PacketizationMode::NonInterleaved, kMaxPayloadSize)); 395 H264PacketizationMode::NonInterleaved, kMaxPayloadSize, 0));
357 packetizer->SetPayloadData(frame, kFrameSize, &fragmentation); 396 ASSERT_EQ(3u, packetizer->SetPayloadData(frame, kFrameSize, &fragmentation));
358 397
359 // First expecting two FU-A packets. 398 // First expecting two FU-A packets.
360 std::vector<size_t> fua_sizes; 399 std::vector<size_t> fua_sizes;
400 fua_sizes.push_back(1099);
361 fua_sizes.push_back(1100); 401 fua_sizes.push_back(1100);
362 fua_sizes.push_back(1099);
363 RtpPacketToSend packet(kNoExtensions); 402 RtpPacketToSend packet(kNoExtensions);
364 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity()); 403 ASSERT_LE(kMaxPayloadSize, packet.FreeCapacity());
365 bool last = false;
366 int fua_offset = kNalHeaderSize; 404 int fua_offset = kNalHeaderSize;
367 for (size_t i = 0; i < 2; ++i) { 405 for (size_t i = 0; i < 2; ++i) {
368 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 406 ASSERT_TRUE(packetizer->NextPacket(&packet));
369 VerifyFua(i, frame, fua_offset, packet.payload(), fua_sizes); 407 VerifyFua(i, frame, fua_offset, packet.payload(), fua_sizes);
370 EXPECT_FALSE(last);
371 fua_offset += fua_sizes[i]; 408 fua_offset += fua_sizes[i];
372 } 409 }
373 // Then expecting one STAP-A packet with two nal units. 410 // Then expecting one STAP-A packet with two nal units.
374 ASSERT_TRUE(packetizer->NextPacket(&packet, &last)); 411 ASSERT_TRUE(packetizer->NextPacket(&packet));
375 size_t expected_packet_size = 412 size_t expected_packet_size =
376 kNalHeaderSize + 2 * kLengthFieldLength + 2 * kStapANaluSize; 413 kNalHeaderSize + 2 * kLengthFieldLength + 2 * kStapANaluSize;
377 ASSERT_EQ(expected_packet_size, packet.payload_size()); 414 ASSERT_EQ(expected_packet_size, packet.payload_size());
378 EXPECT_TRUE(last);
379 for (size_t i = 1; i < fragmentation.fragmentationVectorSize; ++i) 415 for (size_t i = 1; i < fragmentation.fragmentationVectorSize; ++i)
380 VerifyStapAPayload(fragmentation, 1, i, frame, packet.payload()); 416 VerifyStapAPayload(fragmentation, 1, i, frame, packet.payload());
381 417
382 EXPECT_FALSE(packetizer->NextPacket(&packet, &last)); 418 EXPECT_FALSE(packetizer->NextPacket(&packet));
383 } 419 }
384 420
385 TEST(RtpPacketizerH264Test, TestFUAOddSize) { 421 TEST(RtpPacketizerH264Test, TestFUAOddSize) {
386 const size_t kExpectedPayloadSizes[2] = {600, 600}; 422 const size_t kExpectedPayloadSizes[2] = {600, 600};
387 TestFua( 423 TestFua(
388 kMaxPayloadSize + 1, 424 kMaxPayloadSize + 1, kMaxPayloadSize, 0,
389 kMaxPayloadSize, 425 std::vector<size_t>(kExpectedPayloadSizes,
426 kExpectedPayloadSizes +
427 sizeof(kExpectedPayloadSizes) / sizeof(size_t)));
428 }
429
430 TEST(RtpPacketizerH264Test, TestFUAWithLastPacketReduction) {
431 const size_t kExpectedPayloadSizes[2] = {601, 597};
432 TestFua(
433 kMaxPayloadSize - 1, kMaxPayloadSize, 4,
390 std::vector<size_t>(kExpectedPayloadSizes, 434 std::vector<size_t>(kExpectedPayloadSizes,
391 kExpectedPayloadSizes + 435 kExpectedPayloadSizes +
392 sizeof(kExpectedPayloadSizes) / sizeof(size_t))); 436 sizeof(kExpectedPayloadSizes) / sizeof(size_t)));
393 } 437 }
394 438
395 TEST(RtpPacketizerH264Test, TestFUAEvenSize) { 439 TEST(RtpPacketizerH264Test, TestFUAEvenSize) {
396 const size_t kExpectedPayloadSizes[2] = {601, 600}; 440 const size_t kExpectedPayloadSizes[2] = {600, 601};
397 TestFua( 441 TestFua(
398 kMaxPayloadSize + 2, 442 kMaxPayloadSize + 2, kMaxPayloadSize, 0,
399 kMaxPayloadSize,
400 std::vector<size_t>(kExpectedPayloadSizes, 443 std::vector<size_t>(kExpectedPayloadSizes,
401 kExpectedPayloadSizes + 444 kExpectedPayloadSizes +
402 sizeof(kExpectedPayloadSizes) / sizeof(size_t))); 445 sizeof(kExpectedPayloadSizes) / sizeof(size_t)));
403 } 446 }
404 447
405 TEST(RtpPacketizerH264Test, TestFUARounding) { 448 TEST(RtpPacketizerH264Test, TestFUARounding) {
406 const size_t kExpectedPayloadSizes[8] = {1266, 1266, 1266, 1266, 449 const size_t kExpectedPayloadSizes[8] = {1265, 1265, 1265, 1265,
407 1266, 1266, 1266, 1261}; 450 1265, 1266, 1266, 1266};
408 TestFua( 451 TestFua(
409 10124, 452 10124, 1448, 0,
410 1448,
411 std::vector<size_t>(kExpectedPayloadSizes, 453 std::vector<size_t>(kExpectedPayloadSizes,
412 kExpectedPayloadSizes + 454 kExpectedPayloadSizes +
413 sizeof(kExpectedPayloadSizes) / sizeof(size_t))); 455 sizeof(kExpectedPayloadSizes) / sizeof(size_t)));
414 } 456 }
415 457
416 TEST(RtpPacketizerH264Test, TestFUABig) { 458 TEST(RtpPacketizerH264Test, TestFUABig) {
417 const size_t kExpectedPayloadSizes[10] = {1198, 1198, 1198, 1198, 1198, 459 const size_t kExpectedPayloadSizes[10] = {1198, 1198, 1198, 1198, 1198,
418 1198, 1198, 1198, 1198, 1198}; 460 1198, 1198, 1198, 1198, 1198};
419 // Generate 10 full sized packets, leave room for FU-A headers minus the NALU 461 // Generate 10 full sized packets, leave room for FU-A headers minus the NALU
420 // header. 462 // header.
421 TestFua( 463 TestFua(
422 10 * (kMaxPayloadSize - kFuAHeaderSize) + kNalHeaderSize, 464 10 * (kMaxPayloadSize - kFuAHeaderSize) + kNalHeaderSize, kMaxPayloadSize,
423 kMaxPayloadSize, 465 0,
424 std::vector<size_t>(kExpectedPayloadSizes, 466 std::vector<size_t>(kExpectedPayloadSizes,
425 kExpectedPayloadSizes + 467 kExpectedPayloadSizes +
426 sizeof(kExpectedPayloadSizes) / sizeof(size_t))); 468 sizeof(kExpectedPayloadSizes) / sizeof(size_t)));
427 } 469 }
428 470
429 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) 471 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
430 472
431 TEST(RtpPacketizerH264DeathTest, SendOverlongDataInPacketizationMode0) { 473 TEST(RtpPacketizerH264DeathTest, SendOverlongDataInPacketizationMode0) {
432 const size_t kFrameSize = kMaxPayloadSize + 1; 474 const size_t kFrameSize = kMaxPayloadSize + 1;
433 uint8_t frame[kFrameSize] = {0}; 475 uint8_t frame[kFrameSize] = {0};
434 for (size_t i = 0; i < kFrameSize; ++i) 476 for (size_t i = 0; i < kFrameSize; ++i)
435 frame[i] = i; 477 frame[i] = i;
436 RTPFragmentationHeader fragmentation; 478 RTPFragmentationHeader fragmentation;
437 fragmentation.VerifyAndAllocateFragmentationHeader(1); 479 fragmentation.VerifyAndAllocateFragmentationHeader(1);
438 fragmentation.fragmentationOffset[0] = 0; 480 fragmentation.fragmentationOffset[0] = 0;
439 fragmentation.fragmentationLength[0] = kFrameSize; 481 fragmentation.fragmentationLength[0] = kFrameSize;
440 // Set NAL headers. 482 // Set NAL headers.
441 frame[fragmentation.fragmentationOffset[0]] = 0x01; 483 frame[fragmentation.fragmentationOffset[0]] = 0x01;
442 484
443 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer( 485 std::unique_ptr<RtpPacketizer> packetizer(CreateH264Packetizer(
444 H264PacketizationMode::SingleNalUnit, kMaxPayloadSize)); 486 H264PacketizationMode::SingleNalUnit, kMaxPayloadSize, 0));
445 EXPECT_DEATH(packetizer->SetPayloadData(frame, kFrameSize, &fragmentation), 487 EXPECT_DEATH(packetizer->SetPayloadData(frame, kFrameSize, &fragmentation),
446 "payload_size"); 488 "payload_size");
447 } 489 }
448 490
449 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) 491 #endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
450 492
451 namespace { 493 namespace {
452 const uint8_t kStartSequence[] = {0x00, 0x00, 0x00, 0x01}; 494 const uint8_t kStartSequence[] = {0x00, 0x00, 0x00, 0x01};
453 const uint8_t kOriginalSps[] = {kSps, 0x00, 0x00, 0x03, 0x03, 495 const uint8_t kOriginalSps[] = {kSps, 0x00, 0x00, 0x03, 0x03,
454 0xF4, 0x05, 0x03, 0xC7, 0xC0}; 496 0xF4, 0x05, 0x03, 0xC7, 0xC0};
(...skipping 28 matching lines...) Expand all
483 RTPFragmentationHeader fragmentation_header_; 525 RTPFragmentationHeader fragmentation_header_;
484 std::unique_ptr<RtpPacketizer> packetizer_; 526 std::unique_ptr<RtpPacketizer> packetizer_;
485 }; 527 };
486 528
487 TEST_F(RtpPacketizerH264TestSpsRewriting, FuASps) { 529 TEST_F(RtpPacketizerH264TestSpsRewriting, FuASps) {
488 const size_t kHeaderOverhead = kFuAHeaderSize + 1; 530 const size_t kHeaderOverhead = kFuAHeaderSize + 1;
489 531
490 // Set size to fragment SPS into two FU-A packets. 532 // Set size to fragment SPS into two FU-A packets.
491 packetizer_.reset( 533 packetizer_.reset(
492 CreateH264Packetizer(H264PacketizationMode::NonInterleaved, 534 CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
493 sizeof(kOriginalSps) - 2 + kHeaderOverhead)); 535 sizeof(kOriginalSps) - 2 + kHeaderOverhead, 0));
494 536
495 packetizer_->SetPayloadData(in_buffer_.data(), in_buffer_.size(), 537 packetizer_->SetPayloadData(in_buffer_.data(), in_buffer_.size(),
496 &fragmentation_header_); 538 &fragmentation_header_);
497 539
498 bool last_packet = true;
499 RtpPacketToSend packet(kNoExtensions); 540 RtpPacketToSend packet(kNoExtensions);
500 ASSERT_LE(sizeof(kOriginalSps) + kHeaderOverhead, packet.FreeCapacity()); 541 ASSERT_LE(sizeof(kOriginalSps) + kHeaderOverhead, packet.FreeCapacity());
501 542
502 EXPECT_TRUE(packetizer_->NextPacket(&packet, &last_packet)); 543 EXPECT_TRUE(packetizer_->NextPacket(&packet));
503 size_t offset = H264::kNaluTypeSize; 544 size_t offset = H264::kNaluTypeSize;
504 size_t length = packet.payload_size() - kFuAHeaderSize; 545 size_t length = packet.payload_size() - kFuAHeaderSize;
505 EXPECT_THAT(packet.payload().subview(kFuAHeaderSize), 546 EXPECT_THAT(packet.payload().subview(kFuAHeaderSize),
506 ElementsAreArray(&kRewrittenSps[offset], length)); 547 ElementsAreArray(&kRewrittenSps[offset], length));
507 offset += length; 548 offset += length;
508 549
509 EXPECT_TRUE(packetizer_->NextPacket(&packet, &last_packet)); 550 EXPECT_TRUE(packetizer_->NextPacket(&packet));
510 length = packet.payload_size() - kFuAHeaderSize; 551 length = packet.payload_size() - kFuAHeaderSize;
511 EXPECT_THAT(packet.payload().subview(kFuAHeaderSize), 552 EXPECT_THAT(packet.payload().subview(kFuAHeaderSize),
512 ElementsAreArray(&kRewrittenSps[offset], length)); 553 ElementsAreArray(&kRewrittenSps[offset], length));
513 offset += length; 554 offset += length;
514 555
515 EXPECT_EQ(offset, sizeof(kRewrittenSps)); 556 EXPECT_EQ(offset, sizeof(kRewrittenSps));
516 } 557 }
517 558
518 TEST_F(RtpPacketizerH264TestSpsRewriting, StapASps) { 559 TEST_F(RtpPacketizerH264TestSpsRewriting, StapASps) {
519 const size_t kHeaderOverhead = kFuAHeaderSize + 1; 560 const size_t kHeaderOverhead = kFuAHeaderSize + 1;
520 const size_t kExpectedTotalSize = H264::kNaluTypeSize + // Stap-A type. 561 const size_t kExpectedTotalSize = H264::kNaluTypeSize + // Stap-A type.
521 sizeof(kRewrittenSps) + sizeof(kIdrOne) + 562 sizeof(kRewrittenSps) + sizeof(kIdrOne) +
522 sizeof(kIdrTwo) + (kLengthFieldLength * 3); 563 sizeof(kIdrTwo) + (kLengthFieldLength * 3);
523 564
524 // Set size to include SPS and the rest of the packets in a Stap-A package. 565 // Set size to include SPS and the rest of the packets in a Stap-A package.
525 packetizer_.reset(CreateH264Packetizer(H264PacketizationMode::NonInterleaved, 566 packetizer_.reset(CreateH264Packetizer(H264PacketizationMode::NonInterleaved,
526 kExpectedTotalSize + kHeaderOverhead)); 567 kExpectedTotalSize + kHeaderOverhead,
568 0));
527 569
528 packetizer_->SetPayloadData(in_buffer_.data(), in_buffer_.size(), 570 packetizer_->SetPayloadData(in_buffer_.data(), in_buffer_.size(),
529 &fragmentation_header_); 571 &fragmentation_header_);
530 572
531 bool last_packet = true;
532 RtpPacketToSend packet(kNoExtensions); 573 RtpPacketToSend packet(kNoExtensions);
533 ASSERT_LE(kExpectedTotalSize + kHeaderOverhead, packet.FreeCapacity()); 574 ASSERT_LE(kExpectedTotalSize + kHeaderOverhead, packet.FreeCapacity());
534 575
535 EXPECT_TRUE(packetizer_->NextPacket(&packet, &last_packet)); 576 EXPECT_TRUE(packetizer_->NextPacket(&packet));
536 EXPECT_EQ(kExpectedTotalSize, packet.payload_size()); 577 EXPECT_EQ(kExpectedTotalSize, packet.payload_size());
537 EXPECT_THAT(packet.payload().subview(H264::kNaluTypeSize + kLengthFieldLength, 578 EXPECT_THAT(packet.payload().subview(H264::kNaluTypeSize + kLengthFieldLength,
538 sizeof(kRewrittenSps)), 579 sizeof(kRewrittenSps)),
539 ElementsAreArray(kRewrittenSps)); 580 ElementsAreArray(kRewrittenSps));
540 } 581 }
541 582
542 class RtpDepacketizerH264Test : public ::testing::Test { 583 class RtpDepacketizerH264Test : public ::testing::Test {
543 protected: 584 protected:
544 RtpDepacketizerH264Test() 585 RtpDepacketizerH264Test()
545 : depacketizer_(RtpDepacketizer::Create(kRtpVideoH264)) {} 586 : depacketizer_(RtpDepacketizer::Create(kRtpVideoH264)) {}
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 EXPECT_EQ(kVideoFrameDelta, payload.frame_type); 937 EXPECT_EQ(kVideoFrameDelta, payload.frame_type);
897 EXPECT_EQ(kH264SingleNalu, h264.packetization_type); 938 EXPECT_EQ(kH264SingleNalu, h264.packetization_type);
898 EXPECT_EQ(kSei, h264.nalu_type); 939 EXPECT_EQ(kSei, h264.nalu_type);
899 ASSERT_EQ(1u, h264.nalus_length); 940 ASSERT_EQ(1u, h264.nalus_length);
900 EXPECT_EQ(static_cast<H264::NaluType>(kSei), h264.nalus[0].type); 941 EXPECT_EQ(static_cast<H264::NaluType>(kSei), h264.nalus[0].type);
901 EXPECT_EQ(-1, h264.nalus[0].sps_id); 942 EXPECT_EQ(-1, h264.nalus[0].sps_id);
902 EXPECT_EQ(-1, h264.nalus[0].pps_id); 943 EXPECT_EQ(-1, h264.nalus[0].pps_id);
903 } 944 }
904 945
905 } // namespace webrtc 946 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698