aboutsummaryrefslogtreecommitdiff
path: root/ultrahdr_api.h
diff options
context:
space:
mode:
Diffstat (limited to 'ultrahdr_api.h')
-rw-r--r--ultrahdr_api.h515
1 files changed, 515 insertions, 0 deletions
diff --git a/ultrahdr_api.h b/ultrahdr_api.h
new file mode 100644
index 0000000..889877f
--- /dev/null
+++ b/ultrahdr_api.h
@@ -0,0 +1,515 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** \file ultrahdr_api.h
+ *
+ * \brief
+ * Describes the encoder or decoder algorithm interface to applications.
+ */
+
+#ifndef ULTRAHDR_API_H
+#define ULTRAHDR_API_H
+
+#ifdef __cplusplus
+#define UHDR_EXTERN extern "C"
+#else
+#define UHDR_EXTERN extern
+#endif
+
+// ===============================================================================================
+// Enum Definitions
+// ===============================================================================================
+
+/*!\brief List of supported image formats */
+typedef enum uhdr_img_fmt {
+ UHDR_IMG_FMT_UNSPECIFIED = -1, /**< Unspecified */
+ UHDR_IMG_FMT_24bppYCbCrP010, /**< 10-bit-per component 4:2:0 YCbCr semiplanar format.
+ Each chroma and luma component has 16 allocated bits in
+ little-endian configuration with 10 MSB of actual data.*/
+ UHDR_IMG_FMT_12bppYCbCr420, /**< 8-bit-per component 4:2:0 YCbCr planar format */
+ UHDR_IMG_FMT_8bppYCbCr400, /**< 8-bit-per component Monochrome format */
+ UHDR_IMG_FMT_32bppRGBA8888, /**< 32 bits per pixel RGBA color format, with 8-bit red, green, blue
+ and alpha components. Using 32-bit little-endian representation,
+ colors stored as Red 7:0, Green 15:8, Blue 23:16, Alpha 31:24. */
+ UHDR_IMG_FMT_64bppRGBAHalfFloat, /**< 64 bits per pixel RGBA color format, with 16-bit signed
+ floating point red, green, blue, and alpha components */
+ UHDR_IMG_FMT_32bppRGBA1010102, /**< 32 bits per pixel RGBA color format, with 10-bit red, green,
+ blue, and 2-bit alpha components. Using 32-bit little-endian
+ representation, colors stored as Red 9:0, Green 19:10, Blue
+ 29:20, and Alpha 31:30. */
+} uhdr_img_fmt_t; /**< alias for enum uhdr_img_fmt */
+
+/*!\brief List of supported color gamuts */
+typedef enum uhdr_color_gamut {
+ UHDR_CG_UNSPECIFIED = -1, /**< Unspecified */
+ UHDR_CG_BT_709, /**< BT.709 */
+ UHDR_CG_DISPLAY_P3, /**< Display P3 */
+ UHDR_CG_BT_2100, /**< BT.2100 */
+} uhdr_color_gamut_t; /**< alias for enum uhdr_color_gamut */
+
+/*!\brief List of supported color transfers */
+typedef enum uhdr_color_transfer {
+ UHDR_CT_UNSPECIFIED = -1, /**< Unspecified */
+ UHDR_CT_LINEAR, /**< Linear */
+ UHDR_CT_HLG, /**< Hybrid log gamma */
+ UHDR_CT_PQ, /**< Perceptual Quantizer */
+ UHDR_CT_SRGB, /**< Gamma */
+} uhdr_color_transfer_t; /**< alias for enum uhdr_color_transfer */
+
+/*!\brief List of supported color ranges */
+typedef enum uhdr_color_range {
+ UHDR_CR_UNSPECIFIED = -1, /**< Unspecified */
+ UHDR_CR_LIMITED_RANGE, /**< Y {[16..235], UV [16..240]} * pow(2, (bpc - 8)) */
+ UHDR_CR_FULL_RANGE, /**< YUV/RGB {[0..255]} * pow(2, (bpc - 8)) */
+} uhdr_color_range_t; /**< alias for enum uhdr_color_range */
+
+/*!\brief List of supported codecs */
+typedef enum uhdr_codec {
+ UHDR_CODEC_JPG, /**< Compress {Hdr, Sdr rendition} to an {Sdr rendition + Gain Map} using
+ jpeg */
+} uhdr_codec_t; /**< alias for enum uhdr_codec */
+
+/*!\brief Image identifiers in gain map technology */
+typedef enum uhdr_img_label {
+ UHDR_HDR_IMG, /**< Hdr rendition image */
+ UHDR_SDR_IMG, /**< Sdr rendition image */
+ UHDR_BASE_IMG, /**< Base rendition image */
+ UHDR_GAIN_MAP_IMG, /**< Gain map image */
+} uhdr_img_label_t; /**< alias for enum uhdr_img_label */
+
+/*!\brief Algorithm return codes */
+typedef enum uhdr_codec_err {
+
+ /*!\brief Operation completed without error */
+ UHDR_CODEC_OK,
+
+ /*!\brief Unspecified error */
+ UHDR_CODEC_UNKNOWN_ERROR,
+
+ /*!\brief An application-supplied parameter is not valid. */
+ UHDR_CODEC_INVALID_PARAM,
+
+ /*!\brief Memory operation failed */
+ UHDR_CODEC_MEM_ERROR,
+
+ /*!\brief An application-invoked operation is not valid. */
+ UHDR_CODEC_INVALID_OPERATION,
+
+ /*!\brief The library does not implement a feature required for the operation */
+ UHDR_CODEC_UNSUPPORTED_FEATURE,
+
+ /*!\brief An iterator reached the end of list. */
+ UHDR_CODEC_LIST_END,
+
+} uhdr_codec_err_t; /**< alias for enum uhdr_codec_err */
+
+// ===============================================================================================
+// Structure Definitions
+// ===============================================================================================
+
+/*!\brief Detailed return status */
+typedef struct uhdr_error_info {
+ uhdr_codec_err_t error_code;
+ int has_detail;
+ char detail[128];
+} uhdr_error_info_t; /**< alias for struct uhdr_error_info */
+
+/**\brief Raw Image Descriptor */
+typedef struct uhdr_raw_image {
+ /* Color model, primaries, transfer, range */
+ uhdr_img_fmt_t fmt; /**< Image Format */
+ uhdr_color_gamut_t cg; /**< Color Gamut */
+ uhdr_color_transfer_t ct; /**< Color Transfer */
+ uhdr_color_range_t range; /**< Color Range */
+
+ /* Image storage dimensions */
+ unsigned int w; /**< Stored image width */
+ unsigned int h; /**< Stored image height */
+
+ /* Image data pointers. */
+#define UHDR_PLANE_PACKED 0 /**< To be used for all packed formats */
+#define UHDR_PLANE_Y 0 /**< Y (Luminance) plane */
+#define UHDR_PLANE_U 1 /**< U (Chroma) plane */
+#define UHDR_PLANE_UV 1 /**< UV (Chroma plane interleaved) To be used for semi planar format */
+#define UHDR_PLANE_V 2 /**< V (Chroma) plane */
+ void* planes[3]; /**< pointer to the top left pixel for each plane */
+ unsigned int stride[3]; /**< stride in pixels between rows for each plane */
+} uhdr_raw_image_t; /**< alias for struct uhdr_raw_image */
+
+/**\brief Compressed Image Descriptor */
+typedef struct uhdr_compressed_image {
+ void* data; /**< Pointer to a block of data to decode */
+ unsigned int data_sz; /**< size of the data buffer */
+ unsigned int capacity; /**< maximum size of the data buffer */
+ uhdr_color_gamut_t cg; /**< Color Gamut */
+ uhdr_color_transfer_t ct; /**< Color Transfer */
+ uhdr_color_range_t range; /**< Color Range */
+} uhdr_compressed_image_t; /**< alias for struct uhdr_compressed_image */
+
+/**\brief Buffer Descriptor */
+typedef struct uhdr_mem_block {
+ void* data; /**< Pointer to a block of data to decode */
+ unsigned int data_sz; /**< size of the data buffer */
+ unsigned int capacity; /**< maximum size of the data buffer */
+} uhdr_mem_block_t; /**< alias for struct uhdr_mem_block */
+
+/**\brief Gain map metadata.
+ * Note: all values stored in linear space. This differs from the metadata encoded in XMP, where
+ * max_content_boost (aka gainMapMax), min_content_boost (aka gainMapMin), hdr_capacity_min, and
+ * hdr_capacity_max are stored in log2 space.
+ */
+typedef struct uhdr_gainmap_metadata {
+ float max_content_boost; /**< Max Content Boost for the map */
+ float min_content_boost; /**< Min Content Boost for the map */
+ float gamma; /**< Gamma of the map data */
+ float offset_sdr; /**< Offset for SDR data in map calculations */
+ float offset_hdr; /**< Offset for HDR data in map calculations */
+ float hdr_capacity_min; /**< Min HDR capacity values for interpolating the Gain Map */
+ float hdr_capacity_max; /**< Max HDR capacity value for interpolating the Gain Map */
+} uhdr_gainmap_metadata_t; /**< alias for struct uhdr_gainmap_metadata */
+
+/**\brief ultrahdr codec context opaque descriptor */
+typedef struct uhdr_codec_private uhdr_codec_private_t;
+
+// ===============================================================================================
+// Function Declarations
+// ===============================================================================================
+
+// ===============================================================================================
+// Encoder APIs
+// ===============================================================================================
+
+/*!\brief Create a new encoder instance. The instance is initialized with default settings.
+ * To override the settings use uhdr_enc_set_*()
+ *
+ * \return nullptr if there was an error allocating memory else a fresh opaque encoder handle
+ */
+UHDR_EXTERN uhdr_codec_private_t* uhdr_create_encoder(void);
+
+/*!\brief Release encoder instance.
+ * Frees all allocated storage associated with encoder instance.
+ *
+ * \param[in] enc encoder instance.
+ *
+ * \return none
+ */
+UHDR_EXTERN void uhdr_release_encoder(uhdr_codec_private_t* enc);
+
+/*!\brief Add raw image descriptor to encoder context. The function goes through all the fields of
+ * the image descriptor and checks for their sanity. If no anomalies are seen then the image is
+ * added to internal list. Repeated calls to this function will replace the old entry with the
+ * current.
+ *
+ * \param[in] enc encoder instance.
+ * \param[in] img image descriptor.
+ * \param[in] intent UHDR_HDR_IMG for hdr intent and UHDR_SDR_IMG for sdr intent.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_enc_set_raw_image(uhdr_codec_private_t* enc,
+ uhdr_raw_image_t* img,
+ uhdr_img_label_t intent);
+
+/*!\brief Add compressed image descriptor to encoder context. The function goes through all the
+ * fields of the image descriptor and checks for their sanity. If no anomalies are seen then the
+ * image is added to internal list. Repeated calls to this function will replace the old entry with
+ * the current.
+ *
+ * If both uhdr_enc_add_raw_image() and uhdr_enc_add_compressed_image() are called during a session
+ * for the same intent, it is assumed that raw image descriptor and compressed image descriptor are
+ * relatable via compress <-> decompress process.
+ *
+ * \param[in] enc encoder instance.
+ * \param[in] img image descriptor.
+ * \param[in] intent UHDR_HDR_IMG for hdr intent,
+ * UHDR_SDR_IMG for sdr intent,
+ * UHDR_BASE_IMG for base image intent
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_enc_set_compressed_image(uhdr_codec_private_t* enc,
+ uhdr_compressed_image_t* img,
+ uhdr_img_label_t intent);
+
+/*!\brief Add gain map image descriptor and gainmap metadata info to encoder context. The function
+ * internally goes through all the fields of the image descriptor and checks for their sanity. If no
+ * anomalies are seen then the image is added to internal list. Repeated calls to this function will
+ * replace the old entry with the current.
+ *
+ * \param[in] enc encoder instance.
+ * \param[in] img gain map image desciptor.
+ * \param[in] metadata gainmap metadata descriptor
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+uhdr_error_info_t uhdr_enc_set_gainmap_image(uhdr_codec_private_t* enc,
+ uhdr_compressed_image_t* img,
+ uhdr_gainmap_metadata_t* metadata);
+
+/*!\brief Set quality for compression
+ *
+ * \param[in] enc encoder instance.
+ * \param[in] quality quality factor.
+ * \param[in] intent UHDR_BASE_IMG for base image and UHDR_GAIN_MAP_IMG for gain map image.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_enc_set_quality(uhdr_codec_private_t* enc, int quality,
+ uhdr_img_label_t intent);
+
+/*!\brief Set Exif data that needs to be inserted in the output compressed stream
+ *
+ * \param[in] enc encoder instance.
+ * \param[in] img exif data descriptor.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_enc_set_exif_data(uhdr_codec_private_t* enc,
+ uhdr_mem_block_t* exif);
+
+/*!\brief Set output image compression format.
+ *
+ * \param[in] enc encoder instance.
+ * \param[in] media_type output image compression format.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_enc_set_output_format(uhdr_codec_private_t* enc,
+ uhdr_codec_t media_type);
+
+/*!\brief Encode process call
+ * After initializing the encoder context, call to this function will submit data for encoding. If
+ * the call is successful, the encoded output is stored internally and is accessible via
+ * uhdr_get_encoded_stream().
+ *
+ * The basic usage of uhdr encoder is as follows:
+ * - The program creates an instance of an encoder using,
+ * - uhdr_create_encoder().
+ * - The program registers input images to the encoder using,
+ * - uhdr_enc_set_raw_image(ctxt, img, UHDR_HDR_IMG)
+ * - uhdr_enc_set_raw_image(ctxt, img, UHDR_SDR_IMG)
+ * - The program overrides the default settings using uhdr_enc_set_*() functions
+ * - If the application wants to control the compression level
+ * - uhdr_enc_set_quality()
+ * - If the application wants to insert exif data
+ * - uhdr_enc_set_exif_data()
+ * - If the application wants to control target compression format
+ * - uhdr_enc_set_output_format()
+ * - The program calls uhdr_encode() to encode data. This call would initiate the process of
+ * computing gain map from hdr intent and sdr intent. The sdr intent and gain map image are
+ * compressed at the set quality using the codec of choice.
+ * - On success, the program can access the encoded output with uhdr_get_encoded_stream().
+ * - The program finishes the encoding with uhdr_release_encoder().
+ *
+ * The library allows setting Hdr and/or Sdr intent in compressed format,
+ * - uhdr_enc_set_compressed_image(ctxt, img, UHDR_HDR_IMG)
+ * - uhdr_enc_set_compressed_image(ctxt, img, UHDR_SDR_IMG)
+ * In this mode, the compressed image(s) are first decoded to raw image(s). These raw image(s) go
+ * through the aforth mentioned gain map computation and encoding process. In this case, the usage
+ * shall be like this:
+ * - uhdr_create_encoder()
+ * - uhdr_enc_set_compressed_image(ctxt, img, UHDR_HDR_IMG)
+ * - uhdr_enc_set_compressed_image(ctxt, img, UHDR_SDR_IMG)
+ * - uhdr_encode()
+ * - uhdr_get_encoded_stream()
+ * - uhdr_release_encoder()
+ * If the set compressed image media type of intent UHDR_SDR_IMG and output media type are
+ * identical, then this image is directly used for primary image. No re-encode of raw image is done.
+ * This implies base image quality setting is un-used. Only gain map image is encoded at the set
+ * quality using codec of choice. On the other hand, if the set compressed image media type and
+ * output media type are different, then transcoding is done.
+ *
+ * The library also allows directly setting base and gain map image in compressed format,
+ * - uhdr_enc_set_compressed_image(ctxt, img, UHDR_BASE_IMG)
+ * - uhdr_enc_set_gainmap_image(ctxt, img, metadata)
+ * In this mode, gain map computation is by-passed. The input images are transcoded (if necessary),
+ * combined and sent back.
+ *
+ * It is possible to create a uhdr image solely from Hdr intent. In this case, the usage shall look
+ * like this:
+ * - uhdr_create_encoder()
+ * - uhdr_enc_set_raw_image(ctxt, img, UHDR_HDR_IMG)
+ * - uhdr_enc_set_quality() // optional
+ * - uhdr_enc_set_exif_data() // optional
+ * - uhdr_enc_set_output_format() // optional
+ * - uhdr_encode()
+ * - uhdr_get_encoded_stream()
+ * - uhdr_release_encoder()
+ * In this mode, the Sdr rendition is created from Hdr intent by tone-mapping. The tone-mapped sdr
+ * image and hdr image go through the aforth mentioned gain map computation and encoding process to
+ * create uhdr image.
+ *
+ * In all modes, Exif data is inserted if requested.
+ *
+ * \param[in] enc encoder instance.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds, uhdr_codec_err_t otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_encode(uhdr_codec_private_t* enc);
+
+/*!\brief Get encoded ultra hdr stream
+ *
+ * \param[in] enc encoder instance.
+ *
+ * \return nullptr if encode process call is unsuccessful, uhdr image descriptor otherwise
+ */
+UHDR_EXTERN uhdr_compressed_image_t* uhdr_get_encoded_stream(uhdr_codec_private_t* enc);
+
+/*!\brief Reset encoder instance.
+ * Clears all previous settings and resets to default state and ready for re-initialization
+ *
+ * \param[in] enc encoder instance.
+ *
+ * \return none
+ */
+UHDR_EXTERN void uhdr_reset_encoder(uhdr_codec_private_t* enc);
+
+// ===============================================================================================
+// Decoder APIs
+// ===============================================================================================
+
+/*!\brief Create a new decoder instance. The instance is initialized with default settings.
+ * To override the settings use uhdr_dec_set_*()
+ *
+ * \return nullptr if there was an error allocating memory else a fresh opaque decoder handle
+ */
+UHDR_EXTERN uhdr_codec_private_t* uhdr_create_decoder(void);
+
+/*!\brief Release decoder instance.
+ * Frees all allocated storage associated with decoder instance.
+ *
+ * \param[in] dec decoder instance.
+ *
+ * \return none
+ */
+UHDR_EXTERN void uhdr_release_decoder(uhdr_codec_private_t* dec);
+
+/*!\brief Add compressed image descriptor to decoder context. The function goes through all the
+ * fields of the image descriptor and checks for their sanity. If no anomalies are seen then the
+ * image is added to internal list. Repeated calls to this function will replace the old entry with
+ * the current.
+ *
+ * \param[in] dec decoder instance.
+ * \param[in] img image descriptor.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_dec_set_image(uhdr_codec_private_t* dec,
+ uhdr_compressed_image_t* img);
+
+/*!\brief Set output image format
+ *
+ * \param[in] dec decoder instance.
+ * \param[in] fmt output image format.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_dec_set_out_img_format(uhdr_codec_private_t* dec,
+ uhdr_img_fmt_t fmt);
+
+/*!\brief Set output color transfer
+ *
+ * \param[in] dec decoder instance.
+ * \param[in] ct output color transfer
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_dec_set_out_color_transfer(uhdr_codec_private_t* dec,
+ uhdr_color_transfer_t ct);
+
+/*!\brief Set output max display boost
+ *
+ * \param[in] dec decoder instance.
+ * \param[in] display_boost max display boost
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds,
+ * #UHDR_CODEC_INVALID_PARAM otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_dec_set_out_max_display_boost(uhdr_codec_private_t* dec,
+ float display_boost);
+
+/*!\brief Decode process call
+ * After initializing the decoder context, call to this function will submit data for decoding. If
+ * the call is successful, the decoded output is stored internally and is accessible via
+ * uhdr_get_decoded_image().
+ *
+ * The basic usage of uhdr decoder is as follows:
+ * - The program creates an instance of a decoder using,
+ * - uhdr_create_decoder().
+ * - The program registers input images to the decoder using,
+ * - uhdr_dec_set_image(ctxt, img)
+ * - The program overrides the default settings using uhdr_dec_set_*() functions.
+ * - If the application wants to control the output image format,
+ * - uhdr_dec_set_out_img_format()
+ * - If the application wants to control the output transfer characteristics,
+ * - uhdr_dec_set_out_color_transfer()
+ * - If the application wants to control the output display boost,
+ * - uhdr_dec_set_out_max_display_boost()
+ * - The program calls uhdr_decompress() to decode uhdr stream. This call would initiate the process
+ * of decoding base image and gain map image. These two are combined to give the final rendition
+ * image.
+ * - The program can access the decoded output with uhdr_get_decoded_image().
+ * - The program finishes the decoding with uhdr_release_decoder().
+ *
+ * \param[in] dec decoder instance.
+ *
+ * \return uhdr_error_info_t #UHDR_CODEC_OK if operation succeeds, uhdr_codec_err_t otherwise.
+ */
+UHDR_EXTERN uhdr_error_info_t uhdr_decode(uhdr_codec_private_t* dec);
+
+/*!\brief Get final rendition image
+ *
+ * \param[in] dec decoder instance.
+ *
+ * \return nullptr if decoded process call is unsuccessful, raw image descriptor otherwise
+ */
+UHDR_EXTERN uhdr_raw_image_t* uhdr_get_decoded_image(uhdr_codec_private_t* dec);
+
+/*!\brief Get gain map image
+ *
+ * \param[in] dec decoder instance.
+ *
+ * \return nullptr if decoded process call is unsuccessful, raw image descriptor otherwise
+ */
+UHDR_EXTERN uhdr_raw_image_t* uhdr_get_gain_map_image(uhdr_codec_private_t* dec);
+
+/*!\brief Get gain map metadata
+ *
+ * \param[in] dec decoder instance.
+ *
+ * \return nullptr if decoded process call is unsuccessful, gainmap metadata descriptor otherwise
+ */
+UHDR_EXTERN uhdr_gainmap_metadata_t* uhdr_get_gain_map_metadata(uhdr_codec_private_t* dec);
+
+/*!\brief Reset decoder instance.
+ * Clears all previous settings and resets to default state and ready for re-initialization
+ *
+ * \param[in] dec decoder instance.
+ *
+ * \return none
+ */
+UHDR_EXTERN void uhdr_reset_decoder(uhdr_codec_private_t* dec);
+
+#endif // ULTRAHDR_API_H