11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
24PROMEKI_NAMESPACE_BEGIN
118class HdrStaticMetadata {
120 PROMEKI_DATATYPE(HdrStaticMetadata, DataTypeHdrStaticMetadata, 1)
123 static constexpr uint8_t InfoFrameType = 0x87;
126 static constexpr uint8_t InfoFrameVersion = 1;
129 static constexpr uint8_t DescriptorIdType1 = 0;
135 enum WireEotf : uint8_t {
143 static constexpr size_t Type1BodySize = 26;
159 : _md(CIEPoint(0.0, 0.0), CIEPoint(0.0, 0.0), CIEPoint(0.0, 0.0), CIEPoint(0.0, 0.0),
170 HdrStaticMetadata(TransferCharacteristics eotf, MasteringDisplay md, ContentLightLevel cll)
171 : _eotf(eotf), _md(std::move(md)), _cll(std::move(cll)) {}
174 TransferCharacteristics eotf()
const {
return _eotf; }
177 void setEotf(TransferCharacteristics v) { _eotf = v; }
180 const MasteringDisplay &masteringDisplay()
const {
return _md; }
183 void setMasteringDisplay(
const MasteringDisplay &v) { _md = v; }
186 const ContentLightLevel &contentLightLevel()
const {
return _cll; }
189 void setContentLightLevel(
const ContentLightLevel &v) { _cll = v; }
200 static uint8_t wireEotfFor(TransferCharacteristics tc);
211 static TransferCharacteristics transferFromWireEotf(uint8_t wire);
226 Buffer toBuffer()
const;
241 static Result<HdrStaticMetadata> fromBuffer(
const void *data,
size_t size);
244 static Result<HdrStaticMetadata> fromBuffer(
const Buffer &buf);
271 JsonObject toJson()
const;
274 bool operator==(
const HdrStaticMetadata &o)
const;
277 bool operator!=(
const HdrStaticMetadata &o)
const {
return !(*
this == o); }
280 String toString()
const;
290 Error writeToStream(DataStream &s)
const;
296 template <u
int32_t V>
static Result<HdrStaticMetadata> readFromStream(DataStream &s);
299 TransferCharacteristics _eotf = TransferCharacteristics::Unspecified;
300 MasteringDisplay _md;
301 ContentLightLevel _cll;