[x265] [PATCH] Add ambient viewing enviroment sei.
Damiano Galassi
damiog at gmail.com
Fri Dec 1 09:10:34 UTC 2023
---
source/common/param.cpp | 6 ++++++
source/encoder/encoder.cpp | 9 +++++++++
source/encoder/sei.h | 19 +++++++++++++++++++
source/x265.h | 9 +++++++++
4 files changed, 43 insertions(+)
diff --git a/source/common/param.cpp b/source/common/param.cpp
index 1a4df4cdc..d63c36786 100755
--- a/source/common/param.cpp
+++ b/source/common/param.cpp
@@ -378,6 +378,7 @@ void x265_param_default(x265_param* param)
param->preferredTransferCharacteristics = -1;
param->pictureStructure = -1;
param->bEmitCLL = 1;
+ param->bEmitAmbientViewingEnvironment = 0;
param->bEnableFrameDuplication = 0;
param->dupThreshold = 70;
@@ -1880,6 +1881,7 @@ int x265_check_params(x265_param* param)
|| param->bEmitIDRRecoverySEI
|| !!param->interlaceMode
|| param->preferredTransferCharacteristics > 1
+ || param->bEmitAmbientViewingEnvironment
|| param->toneMapFile
|| param->naluFile);
@@ -2768,6 +2770,10 @@ void x265_copy_params(x265_param* dst, x265_param* src)
dst->bEmitCLL = src->bEmitCLL;
dst->maxCLL = src->maxCLL;
dst->maxFALL = src->maxFALL;
+ dst->ambientIlluminance = src->ambientIlluminance;
+ dst->ambientLightX = src->ambientLightX;
+ dst->ambientLightY = src->ambientLightY;
+ dst->bEmitAmbientViewingEnvironment = src->bEmitAmbientViewingEnvironment;
dst->log2MaxPocLsb = src->log2MaxPocLsb;
dst->bEmitVUIHRDInfo = src->bEmitVUIHRDInfo;
dst->bEmitVUITimingInfo = src->bEmitVUITimingInfo;
diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp
index 8ec01bebe..c5043341e 100644
--- a/source/encoder/encoder.cpp
+++ b/source/encoder/encoder.cpp
@@ -3276,6 +3276,15 @@ void Encoder::getStreamHeaders(NALList& list, Entropy& sbacCoder, Bitstream& bs)
}
}
+ if (m_param->bEmitAmbientViewingEnvironment)
+ {
+ SEIAmbientViewingEnvironment ambientsei;
+ ambientsei.ambientIlluminance = m_param->ambientIlluminance;
+ ambientsei.ambientLightX = m_param->ambientLightX;
+ ambientsei.ambientLightY = m_param->ambientLightY;
+ ambientsei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI, list, m_param->bSingleSeiNal);
+ }
+
if (m_param->bEmitInfoSEI)
{
char *opts = x265_param2string(m_param, m_sps.conformanceWindow.rightOffset, m_sps.conformanceWindow.bottomOffset);
diff --git a/source/encoder/sei.h b/source/encoder/sei.h
index 03e210639..712e4efb4 100644
--- a/source/encoder/sei.h
+++ b/source/encoder/sei.h
@@ -242,6 +242,25 @@ public:
}
};
+class SEIAmbientViewingEnvironment : public SEI
+{
+public:
+ SEIAmbientViewingEnvironment()
+ {
+ m_payloadType = AMBIENT_VIEWING_ENVIRONMENT;
+ m_payloadSize = 8;
+ }
+ uint32_t ambientIlluminance;
+ uint16_t ambientLightX;
+ uint16_t ambientLightY;
+ void writeSEI(const SPS&)
+ {
+ WRITE_CODE(ambientIlluminance, 32, "ambient_illuminance");
+ WRITE_CODE(ambientLightX, 16, "ambient_light_x");
+ WRITE_CODE(ambientLightY, 16, "ambient_light_y");
+ }
+};
+
class SEIDecodedPictureHash : public SEI
{
public:
diff --git a/source/x265.h b/source/x265.h
index fb1a5dca7..86d68bd7a 100644
--- a/source/x265.h
+++ b/source/x265.h
@@ -371,6 +371,7 @@ typedef enum
MASTERING_DISPLAY_INFO = 137,
CONTENT_LIGHT_LEVEL_INFO = 144,
ALTERNATIVE_TRANSFER_CHARACTERISTICS = 147,
+ AMBIENT_VIEWING_ENVIRONMENT = 148,
} SEIPayloadType;
typedef struct x265_sei_payload
@@ -1906,6 +1907,11 @@ typedef struct x265_param
* value to that value. */
uint16_t maxLuma;
+ /* ISO/IEC 23008-2:2017, D.2.39 ambient viewing environment SEI message */
+ uint32_t ambientIlluminance;
+ uint16_t ambientLightX;
+ uint16_t ambientLightY;
+
/* Maximum of the picture order count */
int log2MaxPocLsb;
@@ -2117,6 +2123,9 @@ typedef struct x265_param
/*Emit content light level info SEI*/
int bEmitCLL;
+ /* Emit ambient viewing environment SEI */
+ int bEmitAmbientViewingEnvironment;
+
/*
* Signals picture structure SEI timing message for every frame
* picture structure 7 is signalled for frame doubling
--
2.39.3 (Apple Git-145)
More information about the x265-devel
mailing list