in RtpPacket packet pass rtp header extension value by const&
to allow writing DependencyDescriptor value that is not copiable. and avoid copying RtpGenericFrameDescriptor Bug: webrtc:10342 Change-Id: I6eefa9d06b90d7e858f224443ba6769975b556fe Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/166171 Reviewed-by: Markus Handell <handellm@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30322}
This commit is contained in:
committed by
Commit Bot
parent
7356a5666d
commit
cea929923b
@ -123,7 +123,7 @@ class RtpPacket {
|
|||||||
rtc::ArrayView<const uint8_t> GetRawExtension() const;
|
rtc::ArrayView<const uint8_t> GetRawExtension() const;
|
||||||
|
|
||||||
template <typename Extension, typename... Values>
|
template <typename Extension, typename... Values>
|
||||||
bool SetExtension(Values...);
|
bool SetExtension(const Values&...);
|
||||||
|
|
||||||
template <typename Extension>
|
template <typename Extension>
|
||||||
bool ReserveExtension();
|
bool ReserveExtension();
|
||||||
@ -226,7 +226,7 @@ rtc::ArrayView<const uint8_t> RtpPacket::GetRawExtension() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Extension, typename... Values>
|
template <typename Extension, typename... Values>
|
||||||
bool RtpPacket::SetExtension(Values... values) {
|
bool RtpPacket::SetExtension(const Values&... values) {
|
||||||
const size_t value_size = Extension::ValueSize(values...);
|
const size_t value_size = Extension::ValueSize(values...);
|
||||||
auto buffer = AllocateExtension(Extension::kId, value_size);
|
auto buffer = AllocateExtension(Extension::kId, value_size);
|
||||||
if (buffer.empty())
|
if (buffer.empty())
|
||||||
|
|||||||
@ -201,7 +201,6 @@ void TestCreateAndParseColorSpaceExtension(bool with_hdr_metadata) {
|
|||||||
EXPECT_TRUE(parsed.GetExtension<ColorSpaceExtension>(&parsed_color_space));
|
EXPECT_TRUE(parsed.GetExtension<ColorSpaceExtension>(&parsed_color_space));
|
||||||
EXPECT_EQ(kColorSpace, parsed_color_space);
|
EXPECT_EQ(kColorSpace, parsed_color_space);
|
||||||
}
|
}
|
||||||
} // namespace
|
|
||||||
|
|
||||||
TEST(RtpPacketTest, CreateMinimum) {
|
TEST(RtpPacketTest, CreateMinimum) {
|
||||||
RtpPacketToSend packet(nullptr);
|
RtpPacketToSend packet(nullptr);
|
||||||
@ -751,6 +750,48 @@ TEST(RtpPacketTest, ParseWithMid) {
|
|||||||
EXPECT_EQ(mid, kMid);
|
EXPECT_EQ(mid, kMid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct UncopyableValue {
|
||||||
|
UncopyableValue() = default;
|
||||||
|
UncopyableValue(const UncopyableValue&) = delete;
|
||||||
|
UncopyableValue& operator=(const UncopyableValue&) = delete;
|
||||||
|
};
|
||||||
|
struct UncopyableExtension {
|
||||||
|
static constexpr RTPExtensionType kId = kRtpExtensionGenericFrameDescriptor02;
|
||||||
|
static constexpr char kUri[] = "uri";
|
||||||
|
|
||||||
|
static size_t ValueSize(const UncopyableValue& value) { return 1; }
|
||||||
|
static bool Write(rtc::ArrayView<uint8_t> data,
|
||||||
|
const UncopyableValue& value) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
static bool Parse(rtc::ArrayView<const uint8_t> data,
|
||||||
|
UncopyableValue* value) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
constexpr RTPExtensionType UncopyableExtension::kId;
|
||||||
|
constexpr char UncopyableExtension::kUri[];
|
||||||
|
|
||||||
|
TEST(RtpPacketTest, SetUncopyableExtension) {
|
||||||
|
RtpPacket::ExtensionManager extensions;
|
||||||
|
extensions.Register<UncopyableExtension>(1);
|
||||||
|
RtpPacket rtp_packet(&extensions);
|
||||||
|
|
||||||
|
UncopyableValue value;
|
||||||
|
EXPECT_TRUE(rtp_packet.SetExtension<UncopyableExtension>(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(RtpPacketTest, GetUncopyableExtension) {
|
||||||
|
RtpPacket::ExtensionManager extensions;
|
||||||
|
extensions.Register<UncopyableExtension>(1);
|
||||||
|
RtpPacket rtp_packet(&extensions);
|
||||||
|
UncopyableValue value;
|
||||||
|
rtp_packet.SetExtension<UncopyableExtension>(value);
|
||||||
|
|
||||||
|
UncopyableValue value2;
|
||||||
|
EXPECT_TRUE(rtp_packet.GetExtension<UncopyableExtension>(&value2));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(RtpPacketTest, CreateAndParseTimingFrameExtension) {
|
TEST(RtpPacketTest, CreateAndParseTimingFrameExtension) {
|
||||||
// Create a packet with video frame timing extension populated.
|
// Create a packet with video frame timing extension populated.
|
||||||
RtpPacketToSend::ExtensionManager send_extensions;
|
RtpPacketToSend::ExtensionManager send_extensions;
|
||||||
@ -1100,4 +1141,5 @@ TEST(RtpPacketTest, RemoveExtensionFailure) {
|
|||||||
EXPECT_THAT(kPacketWithTO, ElementsAreArray(packet.data(), packet.size()));
|
EXPECT_THAT(kPacketWithTO, ElementsAreArray(packet.data(), packet.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
Reference in New Issue
Block a user