Cleanup rtp utils in media/base
Remove unused functions GetRtpHeader/GetRtpHeaderLength
Replace usage of SetRtpHeader with webrtc::RtpPacket
Move SetRtpSsrc next to the only place it is used.
Bug: None
Change-Id: I3ecc244b1a2bdb2d68e0dbdb34dd60160a3101f8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/225547
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34447}
diff --git a/media/base/fake_network_interface.h b/media/base/fake_network_interface.h
index 4023037..45b7aa0 100644
--- a/media/base/fake_network_interface.h
+++ b/media/base/fake_network_interface.h
@@ -18,6 +18,7 @@
#include "media/base/media_channel.h"
#include "media/base/rtp_utils.h"
#include "rtc_base/byte_order.h"
+#include "rtc_base/checks.h"
#include "rtc_base/copy_on_write_buffer.h"
#include "rtc_base/dscp.h"
#include "rtc_base/message_handler.h"
@@ -127,10 +128,7 @@
rtp_packets_.push_back(*packet);
if (conf_) {
for (size_t i = 0; i < conf_sent_ssrcs_.size(); ++i) {
- if (!SetRtpSsrc(packet->MutableData(), packet->size(),
- conf_sent_ssrcs_[i])) {
- return false;
- }
+ SetRtpSsrc(conf_sent_ssrcs_[i], *packet);
PostMessage(ST_RTP, *packet);
}
} else {
@@ -182,6 +180,11 @@
}
private:
+ void SetRtpSsrc(uint32_t ssrc, rtc::CopyOnWriteBuffer& buffer) {
+ RTC_CHECK_GE(buffer.size(), 12);
+ rtc::SetBE32(buffer.MutableData() + 8, ssrc);
+ }
+
void GetNumRtpBytesAndPackets(uint32_t ssrc, int* bytes, int* packets) {
if (bytes) {
*bytes = 0;
diff --git a/media/base/rtp_utils.cc b/media/base/rtp_utils.cc
index 3002e2d..9f90c46 100644
--- a/media/base/rtp_utils.cc
+++ b/media/base/rtp_utils.cc
@@ -25,8 +25,6 @@
namespace cricket {
-static const uint8_t kRtpVersion = 2;
-static const size_t kRtpFlagsOffset = 0;
static const size_t kRtpPayloadTypeOffset = 1;
static const size_t kRtpSeqNumOffset = 2;
static const size_t kRtpTimestampOffset = 4;
@@ -120,8 +118,6 @@
memcpy(auth_tag, output, tag_length);
}
-} // namespace
-
bool GetUint8(const void* data, size_t offset, int* value) {
if (!data || !value) {
return false;
@@ -147,36 +143,7 @@
return true;
}
-bool SetUint8(void* data, size_t offset, uint8_t value) {
- if (!data) {
- return false;
- }
- rtc::Set8(data, offset, value);
- return true;
-}
-
-bool SetUint16(void* data, size_t offset, uint16_t value) {
- if (!data) {
- return false;
- }
- rtc::SetBE16(static_cast<uint8_t*>(data) + offset, value);
- return true;
-}
-
-bool SetUint32(void* data, size_t offset, uint32_t value) {
- if (!data) {
- return false;
- }
- rtc::SetBE32(static_cast<uint8_t*>(data) + offset, value);
- return true;
-}
-
-bool GetRtpFlags(const void* data, size_t len, int* value) {
- if (len < kMinRtpPacketLen) {
- return false;
- }
- return GetUint8(data, kRtpFlagsOffset, value);
-}
+} // namespace
bool GetRtpPayloadType(const void* data, size_t len, int* value) {
if (len < kMinRtpPacketLen) {
@@ -210,34 +177,6 @@
return GetUint32(data, kRtpSsrcOffset, value);
}
-bool GetRtpHeaderLen(const void* data, size_t len, size_t* value) {
- if (!data || len < kMinRtpPacketLen || !value)
- return false;
- const uint8_t* header = static_cast<const uint8_t*>(data);
- // Get base header size + length of CSRCs (not counting extension yet).
- size_t header_size = kMinRtpPacketLen + (header[0] & 0xF) * sizeof(uint32_t);
- if (len < header_size)
- return false;
- // If there's an extension, read and add in the extension size.
- if (header[0] & 0x10) {
- if (len < header_size + sizeof(uint32_t))
- return false;
- header_size +=
- ((rtc::GetBE16(header + header_size + 2) + 1) * sizeof(uint32_t));
- if (len < header_size)
- return false;
- }
- *value = header_size;
- return true;
-}
-
-bool GetRtpHeader(const void* data, size_t len, RtpHeader* header) {
- return (GetRtpPayloadType(data, len, &(header->payload_type)) &&
- GetRtpSeqNum(data, len, &(header->seq_num)) &&
- GetRtpTimestamp(data, len, &(header->timestamp)) &&
- GetRtpSsrc(data, len, &(header->ssrc)));
-}
-
bool GetRtcpType(const void* data, size_t len, int* value) {
if (len < kMinRtcpPacketLen) {
return false;
@@ -262,24 +201,6 @@
return true;
}
-bool SetRtpSsrc(void* data, size_t len, uint32_t value) {
- return SetUint32(data, kRtpSsrcOffset, value);
-}
-
-// Assumes version 2, no padding, no extensions, no csrcs.
-bool SetRtpHeader(void* data, size_t len, const RtpHeader& header) {
- if (!IsValidRtpPayloadType(header.payload_type) || header.seq_num < 0 ||
- header.seq_num > static_cast<int>(UINT16_MAX)) {
- return false;
- }
- return (SetUint8(data, kRtpFlagsOffset, kRtpVersion << 6) &&
- SetUint8(data, kRtpPayloadTypeOffset, header.payload_type & 0x7F) &&
- SetUint16(data, kRtpSeqNumOffset,
- static_cast<uint16_t>(header.seq_num)) &&
- SetUint32(data, kRtpTimestampOffset, header.timestamp) &&
- SetRtpSsrc(data, len, header.ssrc));
-}
-
bool IsValidRtpPayloadType(int payload_type) {
return payload_type >= 0 && payload_type <= 127;
}
diff --git a/media/base/rtp_utils.h b/media/base/rtp_utils.h
index 7010248..f6b5dbc 100644
--- a/media/base/rtp_utils.h
+++ b/media/base/rtp_utils.h
@@ -26,13 +26,6 @@
const size_t kMaxRtpPacketLen = 2048;
const size_t kMinRtcpPacketLen = 4;
-struct RtpHeader {
- int payload_type;
- int seq_num;
- uint32_t timestamp;
- uint32_t ssrc;
-};
-
enum RtcpTypes {
kRtcpTypeSR = 200, // Sender report payload type.
kRtcpTypeRR = 201, // Receiver report payload type.
@@ -53,14 +46,9 @@
bool GetRtpSeqNum(const void* data, size_t len, int* value);
bool GetRtpTimestamp(const void* data, size_t len, uint32_t* value);
bool GetRtpSsrc(const void* data, size_t len, uint32_t* value);
-bool GetRtpHeaderLen(const void* data, size_t len, size_t* value);
+
bool GetRtcpType(const void* data, size_t len, int* value);
bool GetRtcpSsrc(const void* data, size_t len, uint32_t* value);
-bool GetRtpHeader(const void* data, size_t len, RtpHeader* header);
-
-bool SetRtpSsrc(void* data, size_t len, uint32_t value);
-// Assumes version 2, no padding, no extensions, no csrcs.
-bool SetRtpHeader(void* data, size_t len, const RtpHeader& header);
// Checks the packet header to determine if it can be an RTP or RTCP packet.
RtpPacketType InferRtpPacketType(rtc::ArrayView<const char> packet);
diff --git a/media/base/rtp_utils_unittest.cc b/media/base/rtp_utils_unittest.cc
index 5674d18..14599ab 100644
--- a/media/base/rtp_utils_unittest.cc
+++ b/media/base/rtp_utils_unittest.cc
@@ -23,24 +23,7 @@
static const uint8_t kRtpPacketWithMarker[] = {
0x80, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
-// 3 CSRCs (0x01020304, 0x12345678, 0xAABBCCDD)
-// Extension (0xBEDE, 0x1122334455667788)
-static const uint8_t kRtpPacketWithMarkerAndCsrcAndExtension[] = {
- 0x93, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x12, 0x34, 0x56, 0x78, 0xAA, 0xBB, 0xCC, 0xDD,
- 0xBE, 0xDE, 0x00, 0x02, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
static const uint8_t kInvalidPacket[] = {0x80, 0x00};
-static const uint8_t kInvalidPacketWithCsrc[] = {
- 0x83, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x12, 0x34, 0x56, 0x78, 0xAA, 0xBB, 0xCC};
-static const uint8_t kInvalidPacketWithCsrcAndExtension1[] = {
- 0x93, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x01, 0x02, 0x03, 0x04, 0x12, 0x34,
- 0x56, 0x78, 0xAA, 0xBB, 0xCC, 0xDD, 0xBE, 0xDE, 0x00};
-static const uint8_t kInvalidPacketWithCsrcAndExtension2[] = {
- 0x93, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x12, 0x34, 0x56, 0x78, 0xAA, 0xBB, 0xCC, 0xDD,
- 0xBE, 0xDE, 0x00, 0x02, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
// PT = 206, FMT = 1, Sender SSRC = 0x1111, Media SSRC = 0x1111
// No FCI information is needed for PLI.
@@ -121,59 +104,12 @@
EXPECT_TRUE(GetRtpSsrc(kPcmuFrame, sizeof(kPcmuFrame), &ssrc));
EXPECT_EQ(1u, ssrc);
- RtpHeader header;
- EXPECT_TRUE(GetRtpHeader(kPcmuFrame, sizeof(kPcmuFrame), &header));
- EXPECT_EQ(0, header.payload_type);
- EXPECT_EQ(1, header.seq_num);
- EXPECT_EQ(0u, header.timestamp);
- EXPECT_EQ(1u, header.ssrc);
-
EXPECT_FALSE(GetRtpPayloadType(kInvalidPacket, sizeof(kInvalidPacket), &pt));
EXPECT_FALSE(GetRtpSeqNum(kInvalidPacket, sizeof(kInvalidPacket), &seq_num));
EXPECT_FALSE(GetRtpTimestamp(kInvalidPacket, sizeof(kInvalidPacket), &ts));
EXPECT_FALSE(GetRtpSsrc(kInvalidPacket, sizeof(kInvalidPacket), &ssrc));
}
-TEST(RtpUtilsTest, SetRtpHeader) {
- uint8_t packet[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
- RtpHeader header = {9, 1111, 2222u, 3333u};
- EXPECT_TRUE(SetRtpHeader(packet, sizeof(packet), header));
-
- // Bits: 10 0 0 0000
- EXPECT_EQ(128u, packet[0]);
- size_t len;
- EXPECT_TRUE(GetRtpHeaderLen(packet, sizeof(packet), &len));
- EXPECT_EQ(12U, len);
- EXPECT_TRUE(GetRtpHeader(packet, sizeof(packet), &header));
- EXPECT_EQ(9, header.payload_type);
- EXPECT_EQ(1111, header.seq_num);
- EXPECT_EQ(2222u, header.timestamp);
- EXPECT_EQ(3333u, header.ssrc);
-}
-
-TEST(RtpUtilsTest, GetRtpHeaderLen) {
- size_t len;
- EXPECT_TRUE(GetRtpHeaderLen(kPcmuFrame, sizeof(kPcmuFrame), &len));
- EXPECT_EQ(12U, len);
-
- EXPECT_TRUE(GetRtpHeaderLen(kRtpPacketWithMarkerAndCsrcAndExtension,
- sizeof(kRtpPacketWithMarkerAndCsrcAndExtension),
- &len));
- EXPECT_EQ(sizeof(kRtpPacketWithMarkerAndCsrcAndExtension), len);
-
- EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacket, sizeof(kInvalidPacket), &len));
- EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacketWithCsrc,
- sizeof(kInvalidPacketWithCsrc), &len));
- EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacketWithCsrcAndExtension1,
- sizeof(kInvalidPacketWithCsrcAndExtension1),
- &len));
- EXPECT_FALSE(GetRtpHeaderLen(kInvalidPacketWithCsrcAndExtension2,
- sizeof(kInvalidPacketWithCsrcAndExtension2),
- &len));
-}
-
TEST(RtpUtilsTest, GetRtcp) {
int pt;
EXPECT_TRUE(GetRtcpType(kRtcpReport, sizeof(kRtcpReport), &pt));
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 1cad35a..d0745e3 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -7002,18 +7002,14 @@
channel_->SetDefaultSink(&renderer);
// Receive VP8 packet on first SSRC.
- uint8_t data[kMinRtpPacketLen];
- cricket::RtpHeader rtpHeader;
- rtpHeader.payload_type = GetEngineCodec("VP8").id;
- rtpHeader.seq_num = rtpHeader.timestamp = 0;
- rtpHeader.ssrc = kIncomingUnsignalledSsrc + 1;
- cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
- rtc::CopyOnWriteBuffer packet(data, sizeof(data));
- ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
+ webrtc::RtpPacket rtp_packet;
+ rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
+ rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 1);
+ ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
// VP8 packet should create default receive stream.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0];
- EXPECT_EQ(rtpHeader.ssrc, recv_stream->GetConfig().rtp.remote_ssrc);
+ EXPECT_EQ(rtp_packet.Ssrc(), recv_stream->GetConfig().rtp.remote_ssrc);
// Verify that the receive stream sinks to a renderer.
webrtc::VideoFrame video_frame =
webrtc::VideoFrame::Builder()
@@ -7026,15 +7022,13 @@
EXPECT_EQ(1, renderer.num_rendered_frames());
// Receive VP9 packet on second SSRC.
- rtpHeader.payload_type = GetEngineCodec("VP9").id;
- rtpHeader.ssrc = kIncomingUnsignalledSsrc + 2;
- cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
- rtc::CopyOnWriteBuffer packet2(data, sizeof(data));
- ReceivePacketAndAdvanceTime(packet2, /* packet_time_us */ -1);
+ rtp_packet.SetPayloadType(GetEngineCodec("VP9").id);
+ rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 2);
+ ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
// VP9 packet should replace the default receive SSRC.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
- EXPECT_EQ(rtpHeader.ssrc, recv_stream->GetConfig().rtp.remote_ssrc);
+ EXPECT_EQ(rtp_packet.Ssrc(), recv_stream->GetConfig().rtp.remote_ssrc);
// Verify that the receive stream sinks to a renderer.
webrtc::VideoFrame video_frame2 =
webrtc::VideoFrame::Builder()
@@ -7048,15 +7042,13 @@
#if defined(WEBRTC_USE_H264)
// Receive H264 packet on third SSRC.
- rtpHeader.payload_type = 126;
- rtpHeader.ssrc = kIncomingUnsignalledSsrc + 3;
- cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
- rtc::CopyOnWriteBuffer packet3(data, sizeof(data));
- ReceivePacketAndAdvanceTime(packet3, /* packet_time_us */ -1);
+ rtp_packet.SetPayloadType(126);
+ rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 3);
+ ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
// H264 packet should replace the default receive SSRC.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
- EXPECT_EQ(rtpHeader.ssrc, recv_stream->GetConfig().rtp.remote_ssrc);
+ EXPECT_EQ(rtp_packet.Ssrc(), recv_stream->GetConfig().rtp.remote_ssrc);
// Verify that the receive stream sinks to a renderer.
webrtc::VideoFrame video_frame3 =
webrtc::VideoFrame::Builder()
@@ -7084,14 +7076,10 @@
EXPECT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
// Receive packet on an unsignaled SSRC.
- uint8_t data[kMinRtpPacketLen];
- cricket::RtpHeader rtp_header;
- rtp_header.payload_type = GetEngineCodec("VP8").id;
- rtp_header.seq_num = rtp_header.timestamp = 0;
- rtp_header.ssrc = kSsrcs3[0];
- cricket::SetRtpHeader(data, sizeof(data), rtp_header);
- rtc::CopyOnWriteBuffer packet(data, sizeof(data));
- ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
+ webrtc::RtpPacket rtp_packet;
+ rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
+ rtp_packet.SetSsrc(kSsrcs3[0]);
+ ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
// Default receive stream should be created.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
FakeVideoReceiveStream* recv_stream0 =
@@ -7106,10 +7094,8 @@
EXPECT_EQ(kSsrcs3[0], recv_stream0->GetConfig().rtp.remote_ssrc);
// Receive packet on a different unsignaled SSRC.
- rtp_header.ssrc = kSsrcs3[1];
- cricket::SetRtpHeader(data, sizeof(data), rtp_header);
- packet.SetData(data, sizeof(data));
- ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
+ rtp_packet.SetSsrc(kSsrcs3[1]);
+ ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
// New default receive stream should be created, but old stream should remain.
ASSERT_EQ(2u, fake_call_->GetVideoReceiveStreams().size());
EXPECT_EQ(recv_stream0, fake_call_->GetVideoReceiveStreams()[0]);
@@ -8715,14 +8701,10 @@
EXPECT_FALSE(rtp_parameters.encodings[0].ssrc);
// Receive VP8 packet.
- uint8_t data[kMinRtpPacketLen];
- cricket::RtpHeader rtpHeader;
- rtpHeader.payload_type = GetEngineCodec("VP8").id;
- rtpHeader.seq_num = rtpHeader.timestamp = 0;
- rtpHeader.ssrc = kIncomingUnsignalledSsrc;
- cricket::SetRtpHeader(data, sizeof(data), rtpHeader);
- rtc::CopyOnWriteBuffer packet(data, sizeof(data));
- ReceivePacketAndAdvanceTime(packet, /* packet_time_us */ -1);
+ webrtc::RtpPacket rtp_packet;
+ rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
+ rtp_packet.SetSsrc(kIncomingUnsignalledSsrc);
+ ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
// The |ssrc| member should still be unset.
rtp_parameters = channel_->GetDefaultRtpReceiveParameters();