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

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

Issue 2911193002: Implement timing frames. (Closed)
Patch Set: Implement Holmer@ comments 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, kVideoTimingExtensionId));
470 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
471 auto packet = rtp_sender_->AllocatePacket();
472 packet->SetPayloadType(kPayload);
473 packet->SetMarker(true);
474 packet->SetTimestamp(kTimestamp);
475 packet->set_capture_time_ms(capture_time_ms);
476 const VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true};
477 packet->SetExtension<VideoTimingExtension>(kVideoTiming);
478 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
479 size_t packet_size = packet->size();
480 webrtc::RTPHeader rtp_header;
481
482 packet->GetHeader(&rtp_header);
483
484 const int kStoredTimeInMs = 100;
485 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
486
487 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
488 kAllowRetransmission,
489 RtpPacketSender::kNormalPriority));
490 EXPECT_EQ(1, transport_.packets_sent());
491 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
492
493 transport_.last_sent_packet().GetHeader(&rtp_header);
494 EXPECT_TRUE(rtp_header.extension.has_video_timing);
495 EXPECT_EQ(kStoredTimeInMs,
496 rtp_header.extension.video_timing.pacer_exit_delta_ms);
497
498 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
499 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false,
500 PacedPacketInfo());
501
502 EXPECT_EQ(2, transport_.packets_sent());
503 EXPECT_EQ(packet_size, transport_.last_sent_packet().size());
504
505 transport_.last_sent_packet().GetHeader(&rtp_header);
506 EXPECT_TRUE(rtp_header.extension.has_video_timing);
507 EXPECT_EQ(kStoredTimeInMs * 2,
508 rtp_header.extension.video_timing.pacer_exit_delta_ms);
509 }
510
463 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { 511 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) {
464 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 512 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
465 kSsrc, kSeqNum, _, _, _)); 513 kSsrc, kSeqNum, _, _, _));
466 EXPECT_CALL(mock_rtc_event_log_, 514 EXPECT_CALL(mock_rtc_event_log_,
467 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 515 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
468 516
469 rtp_sender_->SetStorePacketsStatus(true, 10); 517 rtp_sender_->SetStorePacketsStatus(true, 10);
470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 518 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
471 kRtpExtensionTransmissionTimeOffset, 519 kRtpExtensionTransmissionTimeOffset,
472 kTransmissionTimeOffsetExtensionId)); 520 kTransmissionTimeOffsetExtensionId));
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
1403 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1451 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1404 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, 1452 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr,
1405 &hdr); 1453 &hdr);
1406 1454
1407 VideoRotation rotation; 1455 VideoRotation rotation;
1408 EXPECT_TRUE( 1456 EXPECT_TRUE(
1409 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1457 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1410 EXPECT_EQ(kVideoRotation_0, rotation); 1458 EXPECT_EQ(kVideoRotation_0, rotation);
1411 } 1459 }
1412 1460
1461 TEST_P(RtpSenderVideoTest, TimingFrameHasPacketizationTimstampSet) {
1462 uint8_t kFrame[kMaxPacketLength];
1463 const int64_t kPacketizationTimeMs = 100;
1464 const int64_t kEncodeStartDeltaMs = 10;
1465 const int64_t kEncodeFinishDeltaMs = 50;
1466 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1467 kRtpExtensionVideoTiming, kVideoTimingExtensionId));
1468
1469 const int64_t kCaptureTimestamp = fake_clock_.TimeInMilliseconds();
1470
1471 RTPVideoHeader hdr = {0};
1472 hdr.video_timing.is_timing_frame = true;
1473 hdr.video_timing.encode_start_delta_ms = kEncodeStartDeltaMs;
1474 hdr.video_timing.encode_finish_delta_ms = kEncodeFinishDeltaMs;
1475
1476 fake_clock_.AdvanceTimeMilliseconds(kPacketizationTimeMs);
1477 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1478 kTimestamp, kCaptureTimestamp, kFrame,
1479 sizeof(kFrame), nullptr, &hdr);
1480 VideoTiming timing;
1481 EXPECT_TRUE(transport_.last_sent_packet().GetExtension<VideoTimingExtension>(
1482 &timing));
1483 EXPECT_EQ(kPacketizationTimeMs, timing.packetization_finish_delta_ms);
1484 EXPECT_EQ(kEncodeStartDeltaMs, timing.encode_start_delta_ms);
1485 EXPECT_EQ(kEncodeFinishDeltaMs, timing.encode_finish_delta_ms);
1486 }
1487
1413 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { 1488 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) {
1414 uint8_t kFrame[kMaxPacketLength]; 1489 uint8_t kFrame[kMaxPacketLength];
1415 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1490 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1416 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1491 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1417 1492
1418 RTPVideoHeader hdr = {0}; 1493 RTPVideoHeader hdr = {0};
1419 hdr.rotation = kVideoRotation_90; 1494 hdr.rotation = kVideoRotation_90;
1420 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, 1495 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey,
1421 kPayload, kTimestamp, 0, kFrame, 1496 kPayload, kTimestamp, 0, kFrame,
1422 sizeof(kFrame), nullptr, &hdr)); 1497 sizeof(kFrame), nullptr, &hdr));
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1616 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1542 RtpSenderTestWithoutPacer, 1617 RtpSenderTestWithoutPacer,
1543 ::testing::Bool()); 1618 ::testing::Bool());
1544 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1619 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1545 RtpSenderVideoTest, 1620 RtpSenderVideoTest,
1546 ::testing::Bool()); 1621 ::testing::Bool());
1547 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 1622 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1548 RtpSenderAudioTest, 1623 RtpSenderAudioTest,
1549 ::testing::Bool()); 1624 ::testing::Bool());
1550 } // namespace webrtc 1625 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698