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

Side by Side Diff: webrtc/modules/video_coding/rtp_frame_reference_finder_unittest.cc

Issue 2480293002: New jitter buffer experiment. (Closed)
Patch Set: Nit fix. Created 4 years, 1 month 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 /*
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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 void InsertVp9Gof(uint16_t seq_num_start, 115 void InsertVp9Gof(uint16_t seq_num_start,
116 uint16_t seq_num_end, 116 uint16_t seq_num_end,
117 bool keyframe, 117 bool keyframe,
118 int32_t pid = kNoPictureId, 118 int32_t pid = kNoPictureId,
119 uint8_t sid = kNoSpatialIdx, 119 uint8_t sid = kNoSpatialIdx,
120 uint8_t tid = kNoTemporalIdx, 120 uint8_t tid = kNoTemporalIdx,
121 int32_t tl0 = kNoTl0PicIdx, 121 int32_t tl0 = kNoTl0PicIdx,
122 bool up_switch = false, 122 bool up_switch = false,
123 GofInfoVP9* ss = nullptr) { 123 GofInfoVP9* ss = nullptr) {
124 VCMPacket packet; 124 VCMPacket packet;
125 packet.timestamp = pid;
125 packet.codec = kVideoCodecVP9; 126 packet.codec = kVideoCodecVP9;
126 packet.seqNum = seq_num_start; 127 packet.seqNum = seq_num_start;
127 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 128 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
128 packet.video_header.codecHeader.VP9.flexible_mode = false; 129 packet.video_header.codecHeader.VP9.flexible_mode = false;
129 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15); 130 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15);
130 packet.video_header.codecHeader.VP9.temporal_idx = tid; 131 packet.video_header.codecHeader.VP9.temporal_idx = tid;
131 packet.video_header.codecHeader.VP9.spatial_idx = sid; 132 packet.video_header.codecHeader.VP9.spatial_idx = sid;
132 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0; 133 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0;
133 packet.video_header.codecHeader.VP9.temporal_up_switch = up_switch; 134 packet.video_header.codecHeader.VP9.temporal_up_switch = up_switch;
134 if (ss != nullptr) { 135 if (ss != nullptr) {
(...skipping 10 matching lines...) Expand all
145 void InsertVp9Flex(uint16_t seq_num_start, 146 void InsertVp9Flex(uint16_t seq_num_start,
146 uint16_t seq_num_end, 147 uint16_t seq_num_end,
147 bool keyframe, 148 bool keyframe,
148 int32_t pid = kNoPictureId, 149 int32_t pid = kNoPictureId,
149 uint8_t sid = kNoSpatialIdx, 150 uint8_t sid = kNoSpatialIdx,
150 uint8_t tid = kNoTemporalIdx, 151 uint8_t tid = kNoTemporalIdx,
151 int32_t tl0 = kNoTl0PicIdx, 152 int32_t tl0 = kNoTl0PicIdx,
152 bool inter = false, 153 bool inter = false,
153 std::vector<uint8_t> refs = std::vector<uint8_t>()) { 154 std::vector<uint8_t> refs = std::vector<uint8_t>()) {
154 VCMPacket packet; 155 VCMPacket packet;
156 packet.timestamp = pid;
155 packet.codec = kVideoCodecVP9; 157 packet.codec = kVideoCodecVP9;
156 packet.seqNum = seq_num_start; 158 packet.seqNum = seq_num_start;
157 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 159 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
158 packet.video_header.codecHeader.VP9.inter_layer_predicted = inter; 160 packet.video_header.codecHeader.VP9.inter_layer_predicted = inter;
159 packet.video_header.codecHeader.VP9.flexible_mode = true; 161 packet.video_header.codecHeader.VP9.flexible_mode = true;
160 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15); 162 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15);
161 packet.video_header.codecHeader.VP9.temporal_idx = tid; 163 packet.video_header.codecHeader.VP9.temporal_idx = tid;
162 packet.video_header.codecHeader.VP9.spatial_idx = sid; 164 packet.video_header.codecHeader.VP9.spatial_idx = sid;
163 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0; 165 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0;
164 packet.video_header.codecHeader.VP9.num_ref_pics = refs.size(); 166 packet.video_header.codecHeader.VP9.num_ref_pics = refs.size();
(...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 CheckReferencesVp9(pid + 4, 0, pid + 2); 1216 CheckReferencesVp9(pid + 4, 0, pid + 2);
1215 CheckReferencesVp9(pid + 4, 1, pid + 3); 1217 CheckReferencesVp9(pid + 4, 1, pid + 3);
1216 CheckReferencesVp9(pid + 5, 1, pid + 4); 1218 CheckReferencesVp9(pid + 5, 1, pid + 4);
1217 CheckReferencesVp9(pid + 6, 0, pid + 4); 1219 CheckReferencesVp9(pid + 6, 0, pid + 4);
1218 CheckReferencesVp9(pid + 6, 1, pid + 5); 1220 CheckReferencesVp9(pid + 6, 1, pid + 5);
1219 CheckReferencesVp9(pid + 7, 1, pid + 6); 1221 CheckReferencesVp9(pid + 7, 1, pid + 6);
1220 CheckReferencesVp9(pid + 8, 0, pid + 6); 1222 CheckReferencesVp9(pid + 8, 0, pid + 6);
1221 CheckReferencesVp9(pid + 8, 1, pid + 7); 1223 CheckReferencesVp9(pid + 8, 1, pid + 7);
1222 } 1224 }
1223 1225
1226 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1227 // around M59).
1228 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidJumpsBackwardThenForward) {
1229 GofInfoVP9 ss;
1230 ss.SetGofInfoVP9(kTemporalStructureMode1);
1231
1232 VCMPacket packet;
1233 packet.timestamp = 0;
1234 packet.codec = kVideoCodecVP9;
1235 packet.frameType = kVideoFrameKey;
1236 packet.video_header.codecHeader.VP9.flexible_mode = false;
1237 packet.video_header.codecHeader.VP9.picture_id = 1;
1238 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1239 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1240 packet.video_header.codecHeader.VP9.tl0_pic_idx = 0;
1241 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1242 packet.video_header.codecHeader.VP9.ss_data_available = true;
1243 packet.video_header.codecHeader.VP9.gof = ss;
1244
1245 {
1246 ref_packet_buffer_->InsertPacket(packet);
1247 std::unique_ptr<RtpFrameObject> frame(
1248 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1249 reference_finder_->ManageFrame(std::move(frame));
1250 }
1251
1252 // Timestamp goes forward but pid goes backwards.
1253 packet.timestamp = 1;
1254 packet.video_header.codecHeader.VP9.picture_id = 0;
1255
1256 {
1257 ref_packet_buffer_->InsertPacket(packet);
1258 std::unique_ptr<RtpFrameObject> frame(
1259 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1260 reference_finder_->ManageFrame(std::move(frame));
1261 }
1262
1263 packet.timestamp = 2;
1264 packet.video_header.codecHeader.VP9.picture_id = 5000;
1265
1266 {
1267 ref_packet_buffer_->InsertPacket(packet);
1268 std::unique_ptr<RtpFrameObject> frame(
1269 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1270 reference_finder_->ManageFrame(std::move(frame));
1271 }
1272
1273 ASSERT_EQ(3UL, frames_from_callback_.size());
1274 CheckReferencesVp9(1, 0);
1275 CheckReferencesVp9(129, 0);
1276 CheckReferencesVp9(257, 0);
1277 }
1278
1279 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1280 // around M59).
1281 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_Tl0JumpsBackwardThenForward) {
1282 GofInfoVP9 ss;
1283 ss.SetGofInfoVP9(kTemporalStructureMode1);
1284
1285 VCMPacket packet;
1286 packet.timestamp = 0;
1287 packet.codec = kVideoCodecVP9;
1288 packet.frameType = kVideoFrameKey;
1289 packet.video_header.codecHeader.VP9.flexible_mode = false;
1290 packet.video_header.codecHeader.VP9.picture_id = 0;
1291 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1292 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1293 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1;
1294 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1295 packet.video_header.codecHeader.VP9.ss_data_available = true;
1296 packet.video_header.codecHeader.VP9.gof = ss;
1297 {
1298 ref_packet_buffer_->InsertPacket(packet);
1299 std::unique_ptr<RtpFrameObject> frame(
1300 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1301 reference_finder_->ManageFrame(std::move(frame));
1302 }
1303
1304 packet.timestamp = 1;
1305 packet.video_header.codecHeader.VP9.picture_id = 1;
1306 packet.video_header.codecHeader.VP9.tl0_pic_idx = 0;
1307 {
1308 ref_packet_buffer_->InsertPacket(packet);
1309 std::unique_ptr<RtpFrameObject> frame(
1310 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1311 reference_finder_->ManageFrame(std::move(frame));
1312 }
1313
1314 packet.timestamp = 2;
1315 packet.frameType = kVideoFrameDelta;
1316 packet.video_header.codecHeader.VP9.picture_id = 2;
1317 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2;
1318 {
1319 ref_packet_buffer_->InsertPacket(packet);
1320 std::unique_ptr<RtpFrameObject> frame(
1321 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1322 reference_finder_->ManageFrame(std::move(frame));
1323 }
1324
1325 packet.timestamp = 3;
1326 packet.frameType = kVideoFrameKey;
1327 packet.video_header.codecHeader.VP9.ss_data_available = true;
1328 packet.video_header.codecHeader.VP9.picture_id = 3;
1329 packet.video_header.codecHeader.VP9.tl0_pic_idx = 129;
1330 {
1331 ref_packet_buffer_->InsertPacket(packet);
1332 std::unique_ptr<RtpFrameObject> frame(
1333 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1334 reference_finder_->ManageFrame(std::move(frame));
1335 }
1336
1337 ASSERT_EQ(4UL, frames_from_callback_.size());
1338 CheckReferencesVp9(0, 0);
1339 CheckReferencesVp9(128, 0);
1340 CheckReferencesVp9(129, 0, 128);
1341 CheckReferencesVp9(257, 0);
1342 }
1343
1344 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1345 // around M59).
1346 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidSmallJumpForward) {
1347 GofInfoVP9 ss;
1348 ss.SetGofInfoVP9(kTemporalStructureMode1);
1349
1350 VCMPacket packet;
1351 packet.timestamp = 0;
1352 packet.codec = kVideoCodecVP9;
1353 packet.frameType = kVideoFrameKey;
1354 packet.video_header.codecHeader.VP9.flexible_mode = false;
1355 packet.video_header.codecHeader.VP9.picture_id = 1;
1356 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1357 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1358 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1;
1359 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1360 packet.video_header.codecHeader.VP9.ss_data_available = true;
1361 packet.video_header.codecHeader.VP9.gof = ss;
1362 {
1363 ref_packet_buffer_->InsertPacket(packet);
1364 std::unique_ptr<RtpFrameObject> frame(
1365 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1366 reference_finder_->ManageFrame(std::move(frame));
1367 }
1368
1369 packet.timestamp = 1;
1370 packet.video_header.codecHeader.VP9.picture_id = 2;
1371 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2;
1372 {
1373 ref_packet_buffer_->InsertPacket(packet);
1374 std::unique_ptr<RtpFrameObject> frame(
1375 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1376 reference_finder_->ManageFrame(std::move(frame));
1377 }
1378
1379 packet.timestamp = 2;
1380 packet.video_header.codecHeader.VP9.picture_id = 3;
1381 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2;
1382 {
1383 ref_packet_buffer_->InsertPacket(packet);
1384 std::unique_ptr<RtpFrameObject> frame(
1385 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1386 reference_finder_->ManageFrame(std::move(frame));
1387 }
1388
1389 packet.timestamp = 2;
1390 packet.video_header.codecHeader.VP9.picture_id = 4;
1391 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1;
1392 {
1393 ref_packet_buffer_->InsertPacket(packet);
1394 std::unique_ptr<RtpFrameObject> frame(
1395 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1396 reference_finder_->ManageFrame(std::move(frame));
1397 }
1398
1399 ASSERT_EQ(4UL, frames_from_callback_.size());
1400 CheckReferencesVp9(1, 0);
1401 CheckReferencesVp9(2, 0);
1402 CheckReferencesVp9(3, 0);
1403 CheckReferencesVp9(131, 0);
1404 }
1405
1406 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1407 // around M59).
1408 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_DropOldFrame) {
1409 GofInfoVP9 ss;
1410 ss.SetGofInfoVP9(kTemporalStructureMode1);
1411
1412 VCMPacket packet;
1413 packet.timestamp = 0;
1414 packet.codec = kVideoCodecVP9;
1415 packet.frameType = kVideoFrameKey;
1416 packet.video_header.codecHeader.VP9.flexible_mode = false;
1417 packet.video_header.codecHeader.VP9.picture_id = 1;
1418 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1419 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1420 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1;
1421 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1422 packet.video_header.codecHeader.VP9.ss_data_available = true;
1423 packet.video_header.codecHeader.VP9.gof = ss;
1424 {
1425 ref_packet_buffer_->InsertPacket(packet);
1426 std::unique_ptr<RtpFrameObject> frame(
1427 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1428 reference_finder_->ManageFrame(std::move(frame));
1429 }
1430
1431 packet.timestamp = 1;
1432 packet.video_header.codecHeader.VP9.picture_id = 0;
1433 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2;
1434 {
1435 ref_packet_buffer_->InsertPacket(packet);
1436 std::unique_ptr<RtpFrameObject> frame(
1437 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1438 reference_finder_->ManageFrame(std::move(frame));
1439 }
1440
1441 packet.timestamp = 0;
1442 packet.video_header.codecHeader.VP9.picture_id = 3;
1443 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2;
1444 {
1445 ref_packet_buffer_->InsertPacket(packet);
1446 std::unique_ptr<RtpFrameObject> frame(
1447 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0));
1448 reference_finder_->ManageFrame(std::move(frame));
1449 }
1450
1451 ASSERT_EQ(2UL, frames_from_callback_.size());
1452 CheckReferencesVp9(1, 0);
1453 CheckReferencesVp9(129, 0);
1454 }
1455
1224 } // namespace video_coding 1456 } // namespace video_coding
1225 } // namespace webrtc 1457 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698