Add RtpPacket::GetRawExtension function
to extract byte representation of a built extension without rebuilding it. Bug: webrtc:9361 Change-Id: I5e2a5caeb8ff28dcb58dc25d53407c449c86df44 Reviewed-on: https://webrtc-review.googlesource.com/102940 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24925}
This commit is contained in:

committed by
Commit Bot

parent
73d117f64e
commit
e19953bdcb
@ -97,6 +97,10 @@ class RtpPacket {
|
|||||||
template <typename Extension, typename... Values>
|
template <typename Extension, typename... Values>
|
||||||
bool GetExtension(Values...) const;
|
bool GetExtension(Values...) const;
|
||||||
|
|
||||||
|
// Returns view of the raw extension or empty view on failure.
|
||||||
|
template <typename Extension>
|
||||||
|
rtc::ArrayView<const uint8_t> GetRawExtension() const;
|
||||||
|
|
||||||
template <typename Extension, typename... Values>
|
template <typename Extension, typename... Values>
|
||||||
bool SetExtension(Values...);
|
bool SetExtension(Values...);
|
||||||
|
|
||||||
@ -175,6 +179,11 @@ bool RtpPacket::GetExtension(Values... values) const {
|
|||||||
return Extension::Parse(raw, values...);
|
return Extension::Parse(raw, values...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Extension>
|
||||||
|
rtc::ArrayView<const uint8_t> RtpPacket::GetRawExtension() const {
|
||||||
|
return FindExtension(Extension::kId);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Extension, typename... Values>
|
template <typename Extension, typename... Values>
|
||||||
bool RtpPacket::SetExtension(Values... values) {
|
bool RtpPacket::SetExtension(Values... values) {
|
||||||
const size_t value_size = Extension::ValueSize(values...);
|
const size_t value_size = Extension::ValueSize(values...);
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
using ::testing::ElementsAre;
|
||||||
using ::testing::ElementsAreArray;
|
using ::testing::ElementsAreArray;
|
||||||
using ::testing::IsEmpty;
|
using ::testing::IsEmpty;
|
||||||
using ::testing::make_tuple;
|
using ::testing::make_tuple;
|
||||||
@ -357,6 +359,38 @@ TEST(RtpPacketTest, ParseWithExtension) {
|
|||||||
EXPECT_EQ(0u, packet.padding_size());
|
EXPECT_EQ(0u, packet.padding_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(RtpPacketTest, GetRawExtensionWhenPresent) {
|
||||||
|
constexpr uint8_t kRawPacket[] = {
|
||||||
|
// comment for clang-format to align kRawPacket nicer.
|
||||||
|
0x90, 100, 0x5e, 0x04, //
|
||||||
|
0x65, 0x43, 0x12, 0x78, // Timestamp.
|
||||||
|
0x12, 0x34, 0x56, 0x78, // Ssrc
|
||||||
|
0xbe, 0xde, 0x00, 0x01, // Extension header
|
||||||
|
0x12, 'm', 'i', 'd', // 3-byte extension with id=1.
|
||||||
|
'p', 'a', 'y', 'l', 'o', 'a', 'd'};
|
||||||
|
RtpPacketToSend::ExtensionManager extensions;
|
||||||
|
extensions.Register<RtpMid>(1);
|
||||||
|
RtpPacket packet(&extensions);
|
||||||
|
ASSERT_TRUE(packet.Parse(kRawPacket, sizeof(kRawPacket)));
|
||||||
|
EXPECT_THAT(packet.GetRawExtension<RtpMid>(), ElementsAre('m', 'i', 'd'));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(RtpPacketTest, GetRawExtensionWhenAbsent) {
|
||||||
|
constexpr uint8_t kRawPacket[] = {
|
||||||
|
// comment for clang-format to align kRawPacket nicer.
|
||||||
|
0x90, 100, 0x5e, 0x04, //
|
||||||
|
0x65, 0x43, 0x12, 0x78, // Timestamp.
|
||||||
|
0x12, 0x34, 0x56, 0x78, // Ssrc
|
||||||
|
0xbe, 0xde, 0x00, 0x01, // Extension header
|
||||||
|
0x12, 'm', 'i', 'd', // 3-byte extension with id=1.
|
||||||
|
'p', 'a', 'y', 'l', 'o', 'a', 'd'};
|
||||||
|
RtpPacketToSend::ExtensionManager extensions;
|
||||||
|
extensions.Register<RtpMid>(2);
|
||||||
|
RtpPacket packet(&extensions);
|
||||||
|
ASSERT_TRUE(packet.Parse(kRawPacket, sizeof(kRawPacket)));
|
||||||
|
EXPECT_THAT(packet.GetRawExtension<RtpMid>(), IsEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
TEST(RtpPacketTest, ParseWithInvalidSizedExtension) {
|
TEST(RtpPacketTest, ParseWithInvalidSizedExtension) {
|
||||||
RtpPacketToSend::ExtensionManager extensions;
|
RtpPacketToSend::ExtensionManager extensions;
|
||||||
extensions.Register(kRtpExtensionTransmissionTimeOffset,
|
extensions.Register(kRtpExtensionTransmissionTimeOffset,
|
||||||
|
Reference in New Issue
Block a user