107 lines
3.1 KiB
C
107 lines
3.1 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "esp_err.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief Scale of output image
|
|
*
|
|
*/
|
|
typedef enum {
|
|
JPEG_IMAGE_SCALE_0 = 0, /*!< No scale */
|
|
JPEG_IMAGE_SCALE_1_2, /*!< Scale 1:2 */
|
|
JPEG_IMAGE_SCALE_1_4, /*!< Scale 1:4 */
|
|
JPEG_IMAGE_SCALE_1_8, /*!< Scale 1:8 */
|
|
} esp_jpeg_image_scale_t;
|
|
|
|
/**
|
|
* @brief Format of output image
|
|
*
|
|
*/
|
|
typedef enum {
|
|
JPEG_IMAGE_FORMAT_RGB888 = 0, /*!< Format RGB888 */
|
|
JPEG_IMAGE_FORMAT_RGB565, /*!< Format RGB565 */
|
|
} esp_jpeg_image_format_t;
|
|
|
|
/**
|
|
* @brief JPEG Configuration Type
|
|
*
|
|
*/
|
|
typedef struct esp_jpeg_image_cfg_s {
|
|
uint8_t *indata; /*!< Input JPEG image */
|
|
uint32_t indata_size; /*!< Size of input image */
|
|
uint8_t *outbuf; /*!< Output buffer */
|
|
uint32_t outbuf_size; /*!< Output buffer size */
|
|
esp_jpeg_image_format_t out_format; /*!< Output image format */
|
|
esp_jpeg_image_scale_t out_scale; /*!< Output scale */
|
|
|
|
struct {
|
|
uint8_t swap_color_bytes: 1; /*!< Swap first and last color bytes */
|
|
} flags;
|
|
|
|
struct {
|
|
void *working_buffer; /*!< If set to NULL, a working buffer will be allocated in esp_jpeg_decode().
|
|
Tjpgd does not use dynamic allocation, se we pass this buffer to Tjpgd that uses it as scratchpad */
|
|
size_t working_buffer_size; /*!< Size of the working buffer. Must be set it working_buffer != NULL.
|
|
Default size is 3.1kB or 65kB if JD_FASTDECODE == 2 */
|
|
} advanced;
|
|
|
|
struct {
|
|
uint32_t read; /*!< Internal count of read bytes */
|
|
} priv;
|
|
} esp_jpeg_image_cfg_t;
|
|
|
|
/**
|
|
* @brief JPEG output info
|
|
*/
|
|
typedef struct esp_jpeg_image_output_s {
|
|
uint16_t width; /*!< Width of the output image */
|
|
uint16_t height; /*!< Height of the output image */
|
|
size_t output_len; /*!< Length of the output image in bytes */
|
|
} esp_jpeg_image_output_t;
|
|
|
|
/**
|
|
* @brief Decode JPEG image
|
|
*
|
|
* @note This function is blocking.
|
|
*
|
|
* @param[in] cfg: Configuration structure
|
|
* @param[out] img: Output image info
|
|
*
|
|
* @return
|
|
* - ESP_OK on success
|
|
* - ESP_ERR_NO_MEM if there is no memory for allocating main structure
|
|
* - ESP_FAIL if there is an error in decoding JPEG
|
|
*/
|
|
esp_err_t esp_jpeg_decode(esp_jpeg_image_cfg_t *cfg, esp_jpeg_image_output_t *img);
|
|
|
|
/**
|
|
* @brief Get information about the JPEG image
|
|
*
|
|
* Use this function to get the size of the JPEG image without decoding it.
|
|
* Allocate a buffer of size img->output_len to store the decoded image.
|
|
*
|
|
* @note cfg->outbuf and cfg->outbuf_size are not used in this function.
|
|
* @param[in] cfg: Configuration structure
|
|
* @param[out] img: Output image info
|
|
*
|
|
* @return
|
|
* - ESP_OK on success
|
|
* - ESP_ERR_INVALID_ARG if cfg or img is NULL
|
|
* - ESP_FAIL if there is an error in decoding JPEG
|
|
*/
|
|
esp_err_t esp_jpeg_get_image_info(esp_jpeg_image_cfg_t *cfg, esp_jpeg_image_output_t *img);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|