11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
22PROMEKI_NAMESPACE_BEGIN
135class HdrDynamic2094_40 {
137 PROMEKI_DATATYPE(HdrDynamic2094_40, DataTypeHdrDynamic2094_40, 1)
140 static constexpr uint8_t MaxWindows = 3;
143 static constexpr uint8_t MaxDistributionPercentiles = 15;
146 static constexpr uint8_t MaxBezierCurveAnchors = 15;
149 static constexpr uint8_t InfoFrameType = 0x81;
152 static constexpr uint8_t InfoFrameVersion = 1;
161 static constexpr uint32_t HdrPlusOui = 0x90848B;
172 uint16_t upperLeftCornerX = 0;
173 uint16_t upperLeftCornerY = 0;
174 uint16_t lowerRightCornerX = 0;
175 uint16_t lowerRightCornerY = 0;
176 uint16_t centerOfEllipseX = 0;
177 uint16_t centerOfEllipseY = 0;
178 uint8_t rotationAngle = 0;
179 uint16_t semimajorAxisInternalEllipse = 0;
180 uint16_t semimajorAxisExternalEllipse = 0;
181 uint16_t semiminorAxisExternalEllipse = 0;
182 bool overlapProcessOption =
false;
184 bool operator==(
const Window &o)
const;
185 bool operator!=(
const Window &o)
const {
return !(*
this == o); }
199 struct ActualPeakLuminance {
202 List<uint8_t> values;
205 bool isPresent()
const {
return numRows > 0 && numCols > 0; }
207 bool operator==(
const ActualPeakLuminance &o)
const;
208 bool operator!=(
const ActualPeakLuminance &o)
const {
return !(*
this == o); }
215 struct DistributionMaxRgb {
216 uint8_t percentage = 0;
217 uint32_t percentile = 0;
219 bool operator==(
const DistributionMaxRgb &o)
const {
220 return percentage == o.percentage && percentile == o.percentile;
222 bool operator!=(
const DistributionMaxRgb &o)
const {
return !(*
this == o); }
234 uint16_t kneePointX = 0;
235 uint16_t kneePointY = 0;
236 List<uint16_t> bezierCurveAnchors;
238 bool operator==(
const ToneMapping &o)
const;
239 bool operator!=(
const ToneMapping &o)
const {
return !(*
this == o); }
250 struct WindowProcessing {
251 uint32_t maxScl[3] = {0, 0, 0};
252 uint32_t averageMaxRgb = 0;
253 List<DistributionMaxRgb> distribution;
254 uint16_t fractionBrightPixels = 0;
256 bool hasToneMapping =
false;
257 ToneMapping toneMapping;
259 bool hasColorSaturationMapping =
false;
260 uint8_t colorSaturationWeight = 0;
262 bool operator==(
const WindowProcessing &o)
const;
263 bool operator!=(
const WindowProcessing &o)
const {
return !(*
this == o); }
272 uint8_t applicationVersion()
const {
return _applicationVersion; }
274 void setApplicationVersion(uint8_t v) { _applicationVersion = v; }
279 uint8_t numWindows()
const {
return _numWindows; }
288 void setNumWindows(uint8_t n);
297 const List<Window> &extraWindows()
const {
return _extraWindows; }
299 List<Window> &extraWindows() {
return _extraWindows; }
306 uint32_t targetedSystemDisplayMaximumLuminance()
const {
307 return _targetedSystemDisplayMaximumLuminance;
310 void setTargetedSystemDisplayMaximumLuminance(uint32_t v) {
311 _targetedSystemDisplayMaximumLuminance = v & 0x07FFFFFFu;
315 const ActualPeakLuminance &targetedSystemDisplayActualPeakLuminance()
const {
316 return _targetedSystemDisplayActualPeakLuminance;
319 ActualPeakLuminance &targetedSystemDisplayActualPeakLuminance() {
320 return _targetedSystemDisplayActualPeakLuminance;
324 const List<WindowProcessing> &windowProcessing()
const {
return _windowProcessing; }
326 List<WindowProcessing> &windowProcessing() {
return _windowProcessing; }
329 const ActualPeakLuminance &masteringDisplayActualPeakLuminance()
const {
330 return _masteringDisplayActualPeakLuminance;
333 ActualPeakLuminance &masteringDisplayActualPeakLuminance() {
334 return _masteringDisplayActualPeakLuminance;
350 Buffer toBuffer()
const;
366 static Result<HdrDynamic2094_40> fromBuffer(
const void *data,
size_t size);
369 static Result<HdrDynamic2094_40> fromBuffer(
const Buffer &buf);
383 JsonObject toJson()
const;
386 bool operator==(
const HdrDynamic2094_40 &o)
const;
388 bool operator!=(
const HdrDynamic2094_40 &o)
const {
return !(*
this == o); }
391 String toString()
const;
401 Error writeToStream(DataStream &s)
const;
407 template <u
int32_t V>
static Result<HdrDynamic2094_40> readFromStream(DataStream &s);
410 uint8_t _applicationVersion = 0;
411 uint8_t _numWindows = 1;
412 List<Window> _extraWindows;
413 uint32_t _targetedSystemDisplayMaximumLuminance = 0;
414 ActualPeakLuminance _targetedSystemDisplayActualPeakLuminance;
415 List<WindowProcessing> _windowProcessing;
416 ActualPeakLuminance _masteringDisplayActualPeakLuminance;