diff --git a/DEPS b/DEPS index 18eeb9205b..fe28211943 100644 --- a/DEPS +++ b/DEPS @@ -745,4 +745,5 @@ include_rules = [ # Abseil whitelist. "+absl/types/optional.h", + "+absl/types/variant.h", ] diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn index f19b32869b..40f794699e 100644 --- a/modules/rtp_rtcp/BUILD.gn +++ b/modules/rtp_rtcp/BUILD.gn @@ -98,6 +98,7 @@ rtc_source_set("rtp_rtcp_format") { "../../rtc_base:rtc_base_approved", "../../system_wrappers", "//third_party/abseil-cpp/absl/types:optional", + "//third_party/abseil-cpp/absl/types:variant", ] } diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc index d9b082bd90..ad9bd45c78 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc @@ -33,10 +33,8 @@ void StreamId::Set(const char* data, size_t size) { // and thus assume trivial destructibility. static_assert(std::is_trivially_destructible::value, ""); -PayloadUnion::PayloadUnion(const AudioPayload& payload) - : audio_payload_(payload) {} -PayloadUnion::PayloadUnion(const VideoPayload& payload) - : video_payload_(payload) {} +PayloadUnion::PayloadUnion(const AudioPayload& payload) : payload_(payload) {} +PayloadUnion::PayloadUnion(const VideoPayload& payload) : payload_(payload) {} PayloadUnion::PayloadUnion(const PayloadUnion&) = default; PayloadUnion::PayloadUnion(PayloadUnion&&) = default; PayloadUnion::~PayloadUnion() = default; diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h index d3515f6fa6..36686a1e49 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h @@ -15,6 +15,7 @@ #include #include +#include "absl/types/variant.h" #include "api/audio_codecs/audio_format.h" #include "api/rtp_headers.h" #include "common_types.h" // NOLINT(build/include) @@ -71,28 +72,23 @@ class PayloadUnion { PayloadUnion& operator=(const PayloadUnion&); PayloadUnion& operator=(PayloadUnion&&); - bool is_audio() const { return audio_payload_.has_value(); } - bool is_video() const { return video_payload_.has_value(); } + bool is_audio() const { + return absl::holds_alternative(payload_); + } + bool is_video() const { + return absl::holds_alternative(payload_); + } const AudioPayload& audio_payload() const { - RTC_DCHECK(audio_payload_); - return *audio_payload_; + return absl::get(payload_); } const VideoPayload& video_payload() const { - RTC_DCHECK(video_payload_); - return *video_payload_; - } - AudioPayload& audio_payload() { - RTC_DCHECK(audio_payload_); - return *audio_payload_; - } - VideoPayload& video_payload() { - RTC_DCHECK(video_payload_); - return *video_payload_; + return absl::get(payload_); } + AudioPayload& audio_payload() { return absl::get(payload_); } + VideoPayload& video_payload() { return absl::get(payload_); } private: - absl::optional audio_payload_; - absl::optional video_payload_; + absl::variant payload_; }; enum RTPAliveType { kRtpDead = 0, kRtpNoRtp = 1, kRtpAlive = 2 };