2024-04-01 19:58:07 +08: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"
# include "hal/jpeg_types.h"
# ifdef __cplusplus
extern " C " {
# endif
/**
* @brief JPEG encoder configure structure
*/
typedef struct {
2024-04-07 17:11:41 +08:00
uint32_t height ; /*!< Number of pixels in the horizontal direction */
2024-04-01 19:58:07 +08:00
uint32_t width ; /*!< Number of pixels in the vertical direction */
jpeg_enc_input_format_t src_type ; /*!< Source type of raw image to be encoded, see `jpeg_enc_src_type_t` */
jpeg_down_sampling_type_t sub_sample ; /*!< JPEG subsampling method */
2024-04-07 17:11:41 +08:00
uint32_t image_quality ; /*!< JPEG compressing quality, value from 1-100, higher value means higher quality */
2024-04-01 19:58:07 +08:00
} jpeg_encode_cfg_t ;
/**
* @brief Configuration parameters for the JPEG encode engine.
*/
typedef struct {
int intr_priority ; /*!< JPEG interrupt priority, if set to 0, driver will select the default priority (1,2,3). */
2024-04-07 17:11:41 +08:00
int timeout_ms ; /*!< JPEG timeout threshold for handling a picture, should larger than valid encode time in ms. For example, for 30fps encode, this value must larger than 34. -1 means wait forever */
2024-04-01 19:58:07 +08:00
} jpeg_encode_engine_cfg_t ;
/**
* @brief JPEG encoder memory allocation config
*/
typedef struct {
2024-04-07 17:11:41 +08:00
jpeg_enc_buffer_alloc_direction_t buffer_direction ; /*!< Buffer direction for jpeg encoder memory allocation */
2024-04-01 19:58:07 +08:00
} jpeg_encode_memory_alloc_cfg_t ;
/**
* @brief Allocate JPEG encoder
*
* @param[in] enc_eng_cfg config for jpeg encoder
* @param[out] ret_encoder handle for jpeg encoder
* @return
* - ESP_OK: JPEG encoder initialized successfully.
* - ESP_ERR_INVALID_ARG: JPEG encoder initialization failed because of invalid argument.
* - ESP_ERR_NO_MEM: Create JPEG encoder failed because of out of memory.
*/
esp_err_t jpeg_new_encoder_engine ( const jpeg_encode_engine_cfg_t * enc_eng_cfg , jpeg_encoder_handle_t * ret_encoder ) ;
/**
* @brief Process encoding of JPEG data using the specified encoder engine.
*
* This function processes the encoding of JPEG data using the provided encoder engine
* and configuration. It takes an input buffer containing the raw image data, performs
* encoding based on the configuration settings, and outputs the compressed bitstream.
*
* @param[in] encoder_engine Handle to the JPEG encoder engine to be used for encoding.
* @param[in] encode_cfg Pointer to the configuration structure for the JPEG encoding process.
* @param[in] encode_inbuf Pointer to the input buffer containing the raw image data.
* @param[in] inbuf_size Size of the input buffer in bytes.
* @param[in] encode_outbuf Pointer to the output buffer where the compressed bitstream will be stored.
* @param[in] outbuf_size The size of output buffer.
* @param[out] out_size Pointer to a variable where the size of the output bitstream will be stored.
*
* @return
* - ESP_OK: JPEG encoder process successfully.
* - ESP_ERR_INVALID_ARG: JPEG encoder process failed because of invalid argument.
* - ESP_ERR_TIMEOUT: JPEG encoder process timeout.
*/
esp_err_t jpeg_encoder_process ( jpeg_encoder_handle_t encoder_engine , const jpeg_encode_cfg_t * encode_cfg , const uint8_t * encode_inbuf , uint32_t inbuf_size , uint8_t * encode_outbuf , uint32_t outbuf_size , uint32_t * out_size ) ;
/**
* @brief Release resources used by a JPEG encoder instance.
*
* This function releases the resources used by the specified JPEG encoder instance. The encoder instance is
* specified by the `encoder_engine` parameter.
*
* @param[in] encoder_engine Handle of the JPEG encoder instance to release resources for.
* @return
* - ESP_OK: Delete JPEG encoder successfully.
* - ESP_ERR_INVALID_ARG: Delete JPEG encoder failed because of invalid argument.
*/
esp_err_t jpeg_del_encoder_engine ( jpeg_encoder_handle_t encoder_engine ) ;
/**
* @brief A helper function to allocate memory space for JPEG encoder.
*
* @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.
* @return Pointer to the allocated memory space, or NULL if allocation fails.
*/
void * jpeg_alloc_encoder_mem ( size_t size , const jpeg_encode_memory_alloc_cfg_t * mem_cfg , size_t * allocated_size ) ;
# ifdef __cplusplus
}
# endif