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

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

Issue 2911193002: Implement timing frames. (Closed)
Patch Set: Implement Asapersson@ comments and foolproof generic encoder to be used in tests Created 3 years, 6 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 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 20 matching lines...) Expand all
31 #include "webrtc/test/gtest.h" 31 #include "webrtc/test/gtest.h"
32 #include "webrtc/test/mock_transport.h" 32 #include "webrtc/test/mock_transport.h"
33 #include "webrtc/typedefs.h" 33 #include "webrtc/typedefs.h"
34 34
35 namespace webrtc { 35 namespace webrtc {
36 36
37 namespace { 37 namespace {
38 const int kTransmissionTimeOffsetExtensionId = 1; 38 const int kTransmissionTimeOffsetExtensionId = 1;
39 const int kAbsoluteSendTimeExtensionId = 14; 39 const int kAbsoluteSendTimeExtensionId = 14;
40 const int kTransportSequenceNumberExtensionId = 13; 40 const int kTransportSequenceNumberExtensionId = 13;
41 const int kVideoTimingExtensionId = 12;
41 const int kPayload = 100; 42 const int kPayload = 100;
42 const int kRtxPayload = 98; 43 const int kRtxPayload = 98;
43 const uint32_t kTimestamp = 10; 44 const uint32_t kTimestamp = 10;
44 const uint16_t kSeqNum = 33; 45 const uint16_t kSeqNum = 33;
45 const uint32_t kSsrc = 725242; 46 const uint32_t kSsrc = 725242;
46 const int kMaxPacketLength = 1500; 47 const int kMaxPacketLength = 1500;
47 const uint8_t kAudioLevel = 0x5a; 48 const uint8_t kAudioLevel = 0x5a;
48 const uint16_t kTransportSequenceNumber = 0xaabbu; 49 const uint16_t kTransportSequenceNumber = 0xaabbu;
49 const uint8_t kAudioLevelExtensionId = 9; 50 const uint8_t kAudioLevelExtensionId = 9;
50 const int kAudioPayload = 103; 51 const int kAudioPayload = 103;
(...skipping 16 matching lines...) Expand all
67 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset, 68 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset,
68 kTransmissionTimeOffsetExtensionId); 69 kTransmissionTimeOffsetExtensionId);
69 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime, 70 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime,
70 kAbsoluteSendTimeExtensionId); 71 kAbsoluteSendTimeExtensionId);
71 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber, 72 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber,
72 kTransportSequenceNumberExtensionId); 73 kTransportSequenceNumberExtensionId);
73 receivers_extensions_.Register(kRtpExtensionVideoRotation, 74 receivers_extensions_.Register(kRtpExtensionVideoRotation,
74 kVideoRotationExtensionId); 75 kVideoRotationExtensionId);
75 receivers_extensions_.Register(kRtpExtensionAudioLevel, 76 receivers_extensions_.Register(kRtpExtensionAudioLevel,
76 kAudioLevelExtensionId); 77 kAudioLevelExtensionId);
78 receivers_extensions_.Register(kRtpExtensionVideoTiming,
79 kVideoTimingExtensionId);
77 } 80 }
78 81
79 bool SendRtp(const uint8_t* data, 82 bool SendRtp(const uint8_t* data,
80 size_t len, 83 size_t len,
81 const PacketOptions& options) override { 84 const PacketOptions& options) override {
82 last_packet_id_ = options.packet_id; 85 last_packet_id_ = options.packet_id;
83 total_bytes_sent_ += len; 86 total_bytes_sent_ += len;
84 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_)); 87 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_));
85 EXPECT_TRUE(sent_packets_.back().Parse(data, len)); 88 EXPECT_TRUE(sent_packets_.back().Parse(data, len));
86 return true; 89 return true;
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 fake_clock_.TimeInMilliseconds(), false, 456 fake_clock_.TimeInMilliseconds(), false,
454 PacedPacketInfo()); 457 PacedPacketInfo());
455 458
456 const auto& packet = transport_.last_sent_packet(); 459 const auto& packet = transport_.last_sent_packet();
457 uint16_t transport_seq_no; 460 uint16_t transport_seq_no;
458 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); 461 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
459 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); 462 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
460 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); 463 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
461 } 464 }
462 465
466 TEST_P(RtpSenderTestWithoutPacer, WritesTimestampToTimingExtension) {
467 rtp_sender_->SetStorePacketsStatus(true, 10);
468 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
469 kRtpExtensionVideoTiming,
470 kVideoTimingExtensionId));
471 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
472 auto packet = rtp_sender_->AllocatePacket();
473 packet->SetPayloadType(kPayload);
474 packet->SetMarker(true);
475 packet->SetTimestamp(kTimestamp);
476 packet->set_capture_time_ms(capture_time_ms);
477 const VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true};
478 packet->SetExtension<VideoTimingExtension>(kVideoTiming);
479 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
480 size_t packet_size = packet->size();
481 webrtc::RTPHeader rtp_header;
482
483 packet->GetHeader(&rtp_header);
484
485 const int kStoredTimeInMs = 100;
486 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
487
488 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
489 kAllowRetransmission,
490 RtpPacketSender::kNormalPriority));
491 EXPECT_EQ(1, transport_.packets_sent());
492 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
493
494 transport_.last_sent_packet().GetHeader(&rtp_header);
495 EXPECT_TRUE(rtp_header.extension.hasVideoTiming);
496 EXPECT_EQ(kStoredTimeInMs,
497 rtp_header.extension.videoTiming.pacer_exit_ms_delta);
498
499 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
500 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false,
501 PacedPacketInfo());
502
503 EXPECT_EQ(2, transport_.packets_sent());
504 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
505
506 transport_.last_sent_packet().GetHeader(&rtp_header);
507 EXPECT_TRUE(rtp_header.extension.hasVideoTiming);
508 EXPECT_EQ(kStoredTimeInMs * 2,
509 rtp_header.extension.videoTiming.pacer_exit_ms_delta);
510 }
511
463 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { 512 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) {
464 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 513 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
465 kSsrc, kSeqNum, _, _, _)); 514 kSsrc, kSeqNum, _, _, _));
466 EXPECT_CALL(mock_rtc_event_log_, 515 EXPECT_CALL(mock_rtc_event_log_,
467 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 516 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
468 517
469 rtp_sender_->SetStorePacketsStatus(true, 10); 518 rtp_sender_->SetStorePacketsStatus(true, 10);
470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 519 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
471 kRtpExtensionTransmissionTimeOffset, 520 kRtpExtensionTransmissionTimeOffset,
472 kTransmissionTimeOffsetExtensionId)); 521 kTransmissionTimeOffsetExtensionId));
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
1403 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1452 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1404 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, 1453 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr,
1405 &hdr); 1454 &hdr);
1406 1455
1407 VideoRotation rotation; 1456 VideoRotation rotation;
1408 EXPECT_TRUE( 1457 EXPECT_TRUE(
1409 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1458 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1410 EXPECT_EQ(kVideoRotation_0, rotation); 1459 EXPECT_EQ(kVideoRotation_0, rotation);
1411 } 1460 }
1412 1461
1462 TEST_P(RtpSenderVideoTest, TimingFrameHasPacketizationTimstampSet) {
1463 uint8_t kFrame[kMaxPacketLength];
1464 const int64_t kPacketizationTimeMs = 100;
1465 const int64_t kEncodeStartDeltaMs = 10;
1466 const int64_t kEncodeFinishDeltaMs = 50;
1467 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1468 kRtpExtensionVideoTiming, kVideoTimingExtensionId));
1469
1470 const int64_t kCaptureTimestamp = fake_clock_.TimeInMilliseconds();
1471
1472 RTPVideoHeader hdr = {0};
1473 hdr.video_timing.is_timing_frame = true;
1474 hdr.video_timing.encode_start_ms_delta = kEncodeStartDeltaMs;
1475 hdr.video_timing.encode_finish_ms_delta = kEncodeFinishDeltaMs;
1476
1477 fake_clock_.AdvanceTimeMilliseconds(kPacketizationTimeMs);
1478 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1479 kTimestamp, kCaptureTimestamp, kFrame,
1480 sizeof(kFrame), nullptr, &hdr);
1481 VideoTiming timing;
1482 EXPECT_TRUE(
1483 transport_.last_sent_packet().GetExtension<VideoTimingExtension>(
1484 &timing));
1485 EXPECT_EQ(kPacketizationTimeMs, timing.packetization_finish_ms_delta);
1486 EXPECT_EQ(kEncodeStartDeltaMs, timing.encode_start_ms_delta);
1487 EXPECT_EQ(kEncodeFinishDeltaMs, timing.encode_finish_ms_delta);
1488 }
1489
1490
1413 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { 1491 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) {
1414 uint8_t kFrame[kMaxPacketLength]; 1492 uint8_t kFrame[kMaxPacketLength];
1415 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1493 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1416 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1494 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1417 1495
1418 RTPVideoHeader hdr = {0}; 1496 RTPVideoHeader hdr = {0};
1419 hdr.rotation = kVideoRotation_90; 1497 hdr.rotation = kVideoRotation_90;
1420 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, 1498 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey,
1421 kPayload, kTimestamp, 0, kFrame, 1499 kPayload, kTimestamp, 0, kFrame,
1422 sizeof(kFrame), nullptr, &hdr)); 1500 sizeof(kFrame), nullptr, &hdr));
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1619 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1542 RtpSenderTestWithoutPacer, 1620 RtpSenderTestWithoutPacer,
1543 ::testing::Bool()); 1621 ::testing::Bool());
1544 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1622 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1545 RtpSenderVideoTest, 1623 RtpSenderVideoTest,
1546 ::testing::Bool()); 1624 ::testing::Bool());
1547 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1625 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1548 RtpSenderAudioTest, 1626 RtpSenderAudioTest,
1549 ::testing::Bool()); 1627 ::testing::Bool());
1550 } // namespace webrtc 1628 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698