2024-02-28 02:11:32 -05:00
/*
* SPDX - FileCopyrightText : 2024 Espressif Systems ( Shanghai ) CO LTD
*
* SPDX - License - Identifier : Apache - 2.0
*/
# pragma once
# include <stdint.h>
# include "esp_err.h"
# include "jpeg_types.h"
2024-04-17 02:38:12 -04:00
# include "hal/jpeg_types.h"
2024-02-28 02:11:32 -05:00
# ifdef __cplusplus
extern " C " {
# endif
/**
* @ brief Configuration parameters for a JPEG decoder image process .
*/
typedef struct {
jpeg_dec_output_format_t output_format ; /*!< JPEG decoder output format */
2024-04-17 02:38:12 -04:00
jpeg_dec_rgb_element_order_t rgb_order ; /*!< JPEG decoder output order */
2024-02-28 02:11:32 -05:00
jpeg_yuv_rgb_conv_std_t conv_std ; /*!< JPEG decoder yuv->rgb standard */
} jpeg_decode_cfg_t ;
/**
* @ brief Configuration parameters for the JPEG decoder engine .
*/
typedef struct {
int intr_priority ; /*!< JPEG interrupt priority, if set to 0, driver will select the default priority (1,2,3). */
2024-02-28 02:16:57 -05:00
int timeout_ms ; /*!< JPEG timeout threshold for handling a picture, should larger than valid decode time in ms. For example, for 30fps decode, this value must larger than 34. -1 means wait forever */
2024-02-28 02:11:32 -05:00
} jpeg_decode_engine_cfg_t ;
/**
2024-03-25 02:11:33 -04:00
* @ brief Structure for jpeg decode header
2024-02-28 02:11:32 -05:00
*/
typedef struct {
uint32_t width ; /*!< Number of pixels in the horizontal direction */
uint32_t height ; /*!< Number of pixels in the vertical direction */
2024-04-17 02:38:12 -04:00
jpeg_down_sampling_type_t sample_method ; /*!< compressed JPEG picture sampling method */
2024-02-28 02:11:32 -05:00
} jpeg_decode_picture_info_t ;
2024-03-15 07:17:26 -04:00
/**
* @ brief JPEG decoder memory allocation config
*/
typedef struct {
jpeg_dec_buffer_alloc_direction_t buffer_direction ; /*!< Buffer direction for jpeg decoder memory allocation */
} jpeg_decode_memory_alloc_cfg_t ;
2024-02-28 02:11:32 -05:00
/**
* @ brief Acquire a JPEG decode engine with the specified configuration .
*
* This function acquires a JPEG decode engine with the specified configuration . The configuration
* parameters are provided through the ` dec_eng_cfg ` structure , and the resulting JPEG decoder handle
2024-02-28 02:16:57 -05:00
* is returned through the ` ret_decoder ` pointer .
2024-02-28 02:11:32 -05:00
*
* @ param [ in ] dec_eng_cfg Pointer to the JPEG decode engine configuration .
2024-02-28 02:16:57 -05:00
* @ param [ out ] ret_decoder Pointer to a variable that will receive the JPEG decoder handle .
2024-02-28 02:11:32 -05:00
* @ return
* - ESP_OK : JPEG decoder initialized successfully .
* - ESP_ERR_INVALID_ARG : JPEG decoder initialization failed because of invalid argument .
* - ESP_ERR_NO_MEM : Create JPEG decoder failed because of out of memory .
*/
2024-02-28 02:16:57 -05:00
esp_err_t jpeg_new_decoder_engine ( const jpeg_decode_engine_cfg_t * dec_eng_cfg , jpeg_decoder_handle_t * ret_decoder ) ;
2024-02-28 02:11:32 -05:00
/**
* @ brief Helper function for getting information about a JPEG image .
*
* This function analyzes the provided JPEG image data and retrieves information about the image ,
* such as its width , height . The image data is specified by the ` bit_stream ` pointer and the ` stream_size ` parameter .
* The resulting image information is returned through the ` picture_info ` structure .
*
* @ note This function doesn ' t depend on any jpeg hardware , it helps user to know jpeg information from jpeg header . For example ,
* user can get picture width and height via this function and malloc a reasonable size buffer for jpeg engine process .
*
* @ param [ in ] bit_stream Pointer to the buffer containing the JPEG image data .
2024-02-28 02:16:57 -05:00
* @ param [ in ] stream_size Size of the JPEG image data in bytes . Note that parse beginning partial of picture also works , but the beginning partial should be enough given .
2024-02-28 02:11:32 -05:00
* @ param [ out ] picture_info Pointer to the structure that will receive the image information .
* @ return
* - ESP_OK : JPEG decoder get jpg image header successfully .
* - ESP_ERR_INVALID_ARG : JPEG decoder get header info failed because of invalid argument .
*/
esp_err_t jpeg_decoder_get_info ( const uint8_t * bit_stream , uint32_t stream_size , jpeg_decode_picture_info_t * picture_info ) ;
/**
* @ brief Process a JPEG image with the specified decoder instance .
*
* This function processes the provided JPEG image data using the specified JPEG decoder instance . The input
* JPEG image data is specified by the ` bit_stream ` pointer and the ` stream_size ` parameter . The resulting
* decoded image data is written to the ` decode_outbuf ` buffer , and the length of the output image data is
* returned through the ` out_size ` pointer .
*
2024-03-15 07:17:26 -04:00
* @ note 1. Please make sure that the content of ` bit_stream ` pointer cannot be modified until this function returns .
* 2. Please note that the output size of image is always the multiple of 16 depends on protocol of JPEG .
2024-02-28 02:11:32 -05:00
*
* @ param [ in ] decoder_engine Handle of the JPEG decoder instance to use for processing .
* @ param [ in ] decode_cfg Config structure of decoder .
* @ param [ in ] bit_stream Pointer to the buffer containing the input JPEG image data .
* @ param [ in ] stream_size Size of the input JPEG image data in bytes .
2024-03-15 07:17:26 -04:00
* @ param [ in ] decode_outbuf Pointer to the buffer that will receive the decoded image data .
* @ param [ in ] outbuf_size The size of ` decode_outbuf `
2024-02-28 02:11:32 -05:00
* @ param [ out ] out_size Pointer to a variable that will receive the length of the output image data .
* @ return
* - ESP_OK : JPEG decoder process successfully .
* - ESP_ERR_INVALID_ARG : JPEG decoder process failed because of invalid argument .
*/
2024-03-15 07:17:26 -04:00
esp_err_t jpeg_decoder_process ( jpeg_decoder_handle_t decoder_engine , const jpeg_decode_cfg_t * decode_cfg , const uint8_t * bit_stream , uint32_t stream_size , uint8_t * decode_outbuf , uint32_t outbuf_size , uint32_t * out_size ) ;
2024-02-28 02:11:32 -05:00
/**
* @ brief Release resources used by a JPEG decoder instance .
*
* This function releases the resources used by the specified JPEG decoder instance . The decoder instance is
* specified by the ` decoder_engine ` parameter .
*
* @ param decoder_engine Handle of the JPEG decoder instance to release resources for .
* @ return
* - ESP_OK : Delete JPEG decoder successfully .
* - ESP_ERR_INVALID_ARG : Delete JPEG decoder failed because of invalid argument .
*/
esp_err_t jpeg_del_decoder_engine ( jpeg_decoder_handle_t decoder_engine ) ;
/**
* @ brief A helper function to allocate memory space for JPEG decoder .
*
2024-03-15 07:17:26 -04:00
* @ param [ in ] size The size of memory to allocate .
* @ param [ in ] mem_cfg Memory configuration for memory allocation
* @ param [ out ] allocated_size Actual allocated buffer size .
2024-02-28 02:11:32 -05:00
* @ return Pointer to the allocated memory space , or NULL if allocation fails .
*/
2024-04-01 07:58:07 -04:00
void * jpeg_alloc_decoder_mem ( size_t size , const jpeg_decode_memory_alloc_cfg_t * mem_cfg , size_t * allocated_size ) ;
2024-02-28 02:11:32 -05:00
# ifdef __cplusplus
}
# endif