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;
|
||||
|
||||
template <typename Extension, typename... Values>
|
||||
bool SetExtension(Values...);
|
||||
bool SetExtension(const Values&...);
|
||||
|
||||
template <typename Extension>
|
||||
bool ReserveExtension();
|
||||
@ -226,7 +226,7 @@ rtc::ArrayView<const uint8_t> RtpPacket::GetRawExtension() const {
|
||||
}
|
||||
|
||||
template <typename Extension, typename... Values>
|
||||
bool RtpPacket::SetExtension(Values... values) {
|
||||
bool RtpPacket::SetExtension(const Values&... values) {
|
||||
const size_t value_size = Extension::ValueSize(values...);
|
||||
auto buffer = AllocateExtension(Extension::kId, value_size);
|
||||
if (buffer.empty())
|
||||
|
||||
@ -201,7 +201,6 @@ void TestCreateAndParseColorSpaceExtension(bool with_hdr_metadata) {
|
||||
EXPECT_TRUE(parsed.GetExtension<ColorSpaceExtension>(&parsed_color_space));
|
||||
EXPECT_EQ(kColorSpace, parsed_color_space);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
TEST(RtpPacketTest, CreateMinimum) {
|
||||
RtpPacketToSend packet(nullptr);
|
||||
@ -751,6 +750,48 @@ TEST(RtpPacketTest, ParseWithMid) {
|
||||
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) {
|
||||
// Create a packet with video frame timing extension populated.
|
||||
RtpPacketToSend::ExtensionManager send_extensions;
|
||||
@ -1100,4 +1141,5 @@ TEST(RtpPacketTest, RemoveExtensionFailure) {
|
||||
EXPECT_THAT(kPacketWithTO, ElementsAreArray(packet.data(), packet.size()));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user