Add chroma siting to color space RTP extension
- Add chroma siting to color space RTP extension.
- Use 16 bits for max/min luminance.
- Change denominator of chromaticity and luminance.
- Add RTC_DCHECKs to protect against overflows.
Bug: webrtc:8651
Change-Id: If8b95bad6241381224eaba9c5bccce06a65a9195
Reviewed-on: https://webrtc-review.googlesource.com/c/113804
Commit-Queue: Johannes Kron <kron@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25990}
diff --git a/modules/rtp_rtcp/source/rtp_header_extensions.h b/modules/rtp_rtcp/source/rtp_header_extensions.h
index c1eaf8c..9f4a28b 100644
--- a/modules/rtp_rtcp/source/rtp_header_extensions.h
+++ b/modules/rtp_rtcp/source/rtp_header_extensions.h
@@ -186,7 +186,7 @@
public:
using value_type = ColorSpace;
static constexpr RTPExtensionType kId = kRtpExtensionColorSpace;
- static constexpr uint8_t kValueSizeBytes = 30;
+ static constexpr uint8_t kValueSizeBytes = 28;
static constexpr uint8_t kValueSizeBytesWithoutHdrMetadata = 4;
static constexpr const char kUri[] =
"http://www.webrtc.org/experiments/rtp-hdrext/color-space";
@@ -201,12 +201,21 @@
const ColorSpace& color_space);
private:
- static constexpr int kChromaticityDenominator = 10000; // 0.0001 resolution.
- static constexpr int kLuminanceMaxDenominator = 100; // 0.01 resolution.
+ static constexpr int kChromaticityDenominator = 50000; // 0.00002 resolution.
+ static constexpr int kLuminanceMaxDenominator = 1; // 1 resolution.
static constexpr int kLuminanceMinDenominator = 10000; // 0.0001 resolution.
+
+ static uint8_t CombineRangeAndChromaSiting(
+ ColorSpace::RangeID range,
+ ColorSpace::ChromaSiting chroma_siting_horizontal,
+ ColorSpace::ChromaSiting chroma_siting_vertical);
+ static size_t ParseHdrMetadata(rtc::ArrayView<const uint8_t> data,
+ HdrMetadata* hdr_metadata);
static size_t ParseChromaticity(const uint8_t* data,
HdrMasteringMetadata::Chromaticity* p);
static size_t ParseLuminance(const uint8_t* data, float* f, int denominator);
+ static size_t WriteHdrMetadata(rtc::ArrayView<uint8_t> data,
+ const HdrMetadata& hdr_metadata);
static size_t WriteChromaticity(uint8_t* data,
const HdrMasteringMetadata::Chromaticity& p);
static size_t WriteLuminance(uint8_t* data, float f, int denominator);