-
Notifications
You must be signed in to change notification settings - Fork 7.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature/jpeg_encoder' into 'master'
feat(jpge): Add basic support for jpeg encoder 🖼️ See merge request espressif/esp-idf!29411
- Loading branch information
Showing
37 changed files
with
1,885 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
[codespell] | ||
skip = build,*.yuv,components/fatfs/src/*,alice.txt | ||
skip = build,*.yuv,components/fatfs/src/*,alice.txt,*.rgb | ||
ignore-words-list = ser,dout,rsource,fram,inout | ||
write-changes = true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
103 changes: 103 additions & 0 deletions
103
components/esp_driver_jpeg/include/driver/jpeg_encode.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/* | ||
* 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 { | ||
uint32_t height; /*!< Number of pixels in the horizontal direction */ | ||
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 */ | ||
uint32_t image_quality; /*!< JPEG compressing quality, value from 1-100 */ | ||
} 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). */ | ||
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 */ | ||
} jpeg_encode_engine_cfg_t; | ||
|
||
/** | ||
* @brief JPEG encoder memory allocation config | ||
*/ | ||
typedef struct { | ||
jpeg_enc_buffer_alloc_direction_t buffer_direction; /*!< Buffer direction for jpeg decoder memory allocation */ | ||
} 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.