[x265] [PATCH] Add ambient viewing enviroment sei.

Damiano Galassi damiog at gmail.com
Mon May 27 16:23:42 UTC 2024


Ping

On Fri, Dec 1, 2023 at 10:10 AM Damiano Galassi <damiog at gmail.com> wrote:

> ---
>  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)
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20240527/e757c6ba/attachment.htm>


More information about the x265-devel mailing list