| OLD | NEW |
| 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 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1276 CheckReferencesVp9(pid + 4, 0, pid + 2); | 1276 CheckReferencesVp9(pid + 4, 0, pid + 2); |
| 1277 CheckReferencesVp9(pid + 4, 1, pid + 3); | 1277 CheckReferencesVp9(pid + 4, 1, pid + 3); |
| 1278 CheckReferencesVp9(pid + 5, 1, pid + 4); | 1278 CheckReferencesVp9(pid + 5, 1, pid + 4); |
| 1279 CheckReferencesVp9(pid + 6, 0, pid + 4); | 1279 CheckReferencesVp9(pid + 6, 0, pid + 4); |
| 1280 CheckReferencesVp9(pid + 6, 1, pid + 5); | 1280 CheckReferencesVp9(pid + 6, 1, pid + 5); |
| 1281 CheckReferencesVp9(pid + 7, 1, pid + 6); | 1281 CheckReferencesVp9(pid + 7, 1, pid + 6); |
| 1282 CheckReferencesVp9(pid + 8, 0, pid + 6); | 1282 CheckReferencesVp9(pid + 8, 0, pid + 6); |
| 1283 CheckReferencesVp9(pid + 8, 1, pid + 7); | 1283 CheckReferencesVp9(pid + 8, 1, pid + 7); |
| 1284 } | 1284 } |
| 1285 | 1285 |
| 1286 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be | |
| 1287 // around M59). | |
| 1288 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidJumpsForwardNoTl0PicIdx) { | |
| 1289 GofInfoVP9 ss; | |
| 1290 ss.SetGofInfoVP9(kTemporalStructureMode1); | |
| 1291 | |
| 1292 VCMPacket packet; | |
| 1293 packet.timestamp = 0; | |
| 1294 packet.codec = kVideoCodecVP9; | |
| 1295 packet.frameType = kVideoFrameKey; | |
| 1296 packet.markerBit = true; | |
| 1297 packet.video_header.codecHeader.VP9.flexible_mode = false; | |
| 1298 packet.video_header.codecHeader.VP9.picture_id = 0; | |
| 1299 packet.video_header.codecHeader.VP9.temporal_idx = kNoTemporalIdx; | |
| 1300 packet.video_header.codecHeader.VP9.spatial_idx = kNoSpatialIdx; | |
| 1301 packet.video_header.codecHeader.VP9.tl0_pic_idx = kNoTl0PicIdx; | |
| 1302 packet.video_header.codecHeader.VP9.temporal_up_switch = true; | |
| 1303 packet.video_header.codecHeader.VP9.ss_data_available = true; | |
| 1304 packet.video_header.codecHeader.VP9.gof = ss; | |
| 1305 | |
| 1306 ref_packet_buffer_->InsertPacket(&packet); | |
| 1307 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1308 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1309 | |
| 1310 packet.timestamp = 1; | |
| 1311 packet.video_header.codecHeader.VP9.picture_id = 5000; | |
| 1312 | |
| 1313 ref_packet_buffer_->InsertPacket(&packet); | |
| 1314 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1315 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1316 | |
| 1317 ASSERT_EQ(2UL, frames_from_callback_.size()); | |
| 1318 CheckReferencesVp9(0, 0); | |
| 1319 CheckReferencesVp9(128, 0); | |
| 1320 } | |
| 1321 | |
| 1322 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be | |
| 1323 // around M59). | |
| 1324 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidJumpsBackwardThenForward) { | |
| 1325 GofInfoVP9 ss; | |
| 1326 ss.SetGofInfoVP9(kTemporalStructureMode1); | |
| 1327 | |
| 1328 VCMPacket packet; | |
| 1329 packet.timestamp = 0; | |
| 1330 packet.codec = kVideoCodecVP9; | |
| 1331 packet.frameType = kVideoFrameKey; | |
| 1332 packet.markerBit = true; | |
| 1333 packet.video_header.codecHeader.VP9.flexible_mode = false; | |
| 1334 packet.video_header.codecHeader.VP9.picture_id = 1; | |
| 1335 packet.video_header.codecHeader.VP9.temporal_idx = 0; | |
| 1336 packet.video_header.codecHeader.VP9.spatial_idx = 0; | |
| 1337 packet.video_header.codecHeader.VP9.tl0_pic_idx = 0; | |
| 1338 packet.video_header.codecHeader.VP9.temporal_up_switch = true; | |
| 1339 packet.video_header.codecHeader.VP9.ss_data_available = true; | |
| 1340 packet.video_header.codecHeader.VP9.gof = ss; | |
| 1341 | |
| 1342 ref_packet_buffer_->InsertPacket(&packet); | |
| 1343 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1344 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1345 | |
| 1346 // Timestamp goes forward but pid goes backwards. | |
| 1347 packet.timestamp = 1; | |
| 1348 packet.video_header.codecHeader.VP9.picture_id = 0; | |
| 1349 | |
| 1350 ref_packet_buffer_->InsertPacket(&packet); | |
| 1351 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1352 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1353 | |
| 1354 packet.timestamp = 2; | |
| 1355 packet.video_header.codecHeader.VP9.picture_id = 5000; | |
| 1356 | |
| 1357 ref_packet_buffer_->InsertPacket(&packet); | |
| 1358 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1359 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1360 | |
| 1361 ASSERT_EQ(3UL, frames_from_callback_.size()); | |
| 1362 CheckReferencesVp9(1, 0); | |
| 1363 CheckReferencesVp9(129, 0); | |
| 1364 CheckReferencesVp9(257, 0); | |
| 1365 } | |
| 1366 | |
| 1367 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be | |
| 1368 // around M59). | |
| 1369 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_Tl0JumpsBackwardThenForward) { | |
| 1370 GofInfoVP9 ss; | |
| 1371 ss.SetGofInfoVP9(kTemporalStructureMode1); | |
| 1372 | |
| 1373 VCMPacket packet; | |
| 1374 packet.timestamp = 0; | |
| 1375 packet.codec = kVideoCodecVP9; | |
| 1376 packet.frameType = kVideoFrameKey; | |
| 1377 packet.markerBit = true; | |
| 1378 packet.video_header.codecHeader.VP9.flexible_mode = false; | |
| 1379 packet.video_header.codecHeader.VP9.picture_id = 0; | |
| 1380 packet.video_header.codecHeader.VP9.temporal_idx = 0; | |
| 1381 packet.video_header.codecHeader.VP9.spatial_idx = 0; | |
| 1382 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1; | |
| 1383 packet.video_header.codecHeader.VP9.temporal_up_switch = true; | |
| 1384 packet.video_header.codecHeader.VP9.ss_data_available = true; | |
| 1385 packet.video_header.codecHeader.VP9.gof = ss; | |
| 1386 ref_packet_buffer_->InsertPacket(&packet); | |
| 1387 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1388 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1389 | |
| 1390 packet.timestamp = 1; | |
| 1391 packet.video_header.codecHeader.VP9.picture_id = 1; | |
| 1392 packet.video_header.codecHeader.VP9.tl0_pic_idx = 0; | |
| 1393 ref_packet_buffer_->InsertPacket(&packet); | |
| 1394 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1395 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1396 | |
| 1397 packet.timestamp = 2; | |
| 1398 packet.frameType = kVideoFrameDelta; | |
| 1399 packet.video_header.codecHeader.VP9.picture_id = 2; | |
| 1400 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2; | |
| 1401 ref_packet_buffer_->InsertPacket(&packet); | |
| 1402 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1403 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1404 | |
| 1405 packet.timestamp = 3; | |
| 1406 packet.frameType = kVideoFrameKey; | |
| 1407 packet.video_header.codecHeader.VP9.ss_data_available = true; | |
| 1408 packet.video_header.codecHeader.VP9.picture_id = 3; | |
| 1409 packet.video_header.codecHeader.VP9.tl0_pic_idx = 129; | |
| 1410 ref_packet_buffer_->InsertPacket(&packet); | |
| 1411 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1412 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1413 | |
| 1414 ASSERT_EQ(4UL, frames_from_callback_.size()); | |
| 1415 CheckReferencesVp9(0, 0); | |
| 1416 CheckReferencesVp9(128, 0); | |
| 1417 CheckReferencesVp9(129, 0, 128); | |
| 1418 CheckReferencesVp9(257, 0); | |
| 1419 } | |
| 1420 | |
| 1421 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be | |
| 1422 // around M59). | |
| 1423 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidSmallJumpForward) { | |
| 1424 GofInfoVP9 ss; | |
| 1425 ss.SetGofInfoVP9(kTemporalStructureMode1); | |
| 1426 | |
| 1427 VCMPacket packet; | |
| 1428 packet.timestamp = 0; | |
| 1429 packet.codec = kVideoCodecVP9; | |
| 1430 packet.frameType = kVideoFrameKey; | |
| 1431 packet.markerBit = true; | |
| 1432 packet.video_header.codecHeader.VP9.flexible_mode = false; | |
| 1433 packet.video_header.codecHeader.VP9.picture_id = 1; | |
| 1434 packet.video_header.codecHeader.VP9.temporal_idx = 0; | |
| 1435 packet.video_header.codecHeader.VP9.spatial_idx = 0; | |
| 1436 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1; | |
| 1437 packet.video_header.codecHeader.VP9.temporal_up_switch = true; | |
| 1438 packet.video_header.codecHeader.VP9.ss_data_available = true; | |
| 1439 packet.video_header.codecHeader.VP9.gof = ss; | |
| 1440 ref_packet_buffer_->InsertPacket(&packet); | |
| 1441 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1442 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1443 | |
| 1444 packet.timestamp = 1; | |
| 1445 packet.video_header.codecHeader.VP9.picture_id = 2; | |
| 1446 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2; | |
| 1447 ref_packet_buffer_->InsertPacket(&packet); | |
| 1448 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1449 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1450 | |
| 1451 packet.timestamp = 2; | |
| 1452 packet.video_header.codecHeader.VP9.picture_id = 3; | |
| 1453 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2; | |
| 1454 ref_packet_buffer_->InsertPacket(&packet); | |
| 1455 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1456 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1457 | |
| 1458 packet.timestamp = 2; | |
| 1459 packet.video_header.codecHeader.VP9.picture_id = 4; | |
| 1460 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1; | |
| 1461 ref_packet_buffer_->InsertPacket(&packet); | |
| 1462 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1463 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1464 | |
| 1465 ASSERT_EQ(4UL, frames_from_callback_.size()); | |
| 1466 CheckReferencesVp9(1, 0); | |
| 1467 CheckReferencesVp9(2, 0); | |
| 1468 CheckReferencesVp9(3, 0); | |
| 1469 CheckReferencesVp9(131, 0); | |
| 1470 } | |
| 1471 | |
| 1472 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be | |
| 1473 // around M59). | |
| 1474 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_DropOldFrame) { | |
| 1475 GofInfoVP9 ss; | |
| 1476 ss.SetGofInfoVP9(kTemporalStructureMode1); | |
| 1477 | |
| 1478 VCMPacket packet; | |
| 1479 packet.timestamp = 0; | |
| 1480 packet.codec = kVideoCodecVP9; | |
| 1481 packet.frameType = kVideoFrameKey; | |
| 1482 packet.markerBit = true; | |
| 1483 packet.video_header.codecHeader.VP9.flexible_mode = false; | |
| 1484 packet.video_header.codecHeader.VP9.picture_id = 1; | |
| 1485 packet.video_header.codecHeader.VP9.temporal_idx = 0; | |
| 1486 packet.video_header.codecHeader.VP9.spatial_idx = 0; | |
| 1487 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1; | |
| 1488 packet.video_header.codecHeader.VP9.temporal_up_switch = true; | |
| 1489 packet.video_header.codecHeader.VP9.ss_data_available = true; | |
| 1490 packet.video_header.codecHeader.VP9.gof = ss; | |
| 1491 ref_packet_buffer_->InsertPacket(&packet); | |
| 1492 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1493 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1494 | |
| 1495 packet.timestamp = 1; | |
| 1496 packet.video_header.codecHeader.VP9.picture_id = 0; | |
| 1497 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2; | |
| 1498 ref_packet_buffer_->InsertPacket(&packet); | |
| 1499 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1500 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1501 | |
| 1502 packet.timestamp = 0; | |
| 1503 packet.video_header.codecHeader.VP9.picture_id = 3; | |
| 1504 packet.video_header.codecHeader.VP9.tl0_pic_idx = 2; | |
| 1505 ref_packet_buffer_->InsertPacket(&packet); | |
| 1506 reference_finder_->ManageFrame(std::unique_ptr<RtpFrameObject>( | |
| 1507 new RtpFrameObject(ref_packet_buffer_, 0, 0, 0, 0, 0))); | |
| 1508 | |
| 1509 ASSERT_EQ(2UL, frames_from_callback_.size()); | |
| 1510 CheckReferencesVp9(1, 0); | |
| 1511 CheckReferencesVp9(129, 0); | |
| 1512 } | |
| 1513 | |
| 1514 } // namespace video_coding | 1286 } // namespace video_coding |
| 1515 } // namespace webrtc | 1287 } // namespace webrtc |
| OLD | NEW |