feat(jpeg_encoder): Add yuv444 and yuv420 jpeg encoder format on esp32p4 eco5

This commit is contained in:
C.S.M
2025-10-29 11:47:47 +08:00
parent 265a32acc3
commit a87dd8986d
8 changed files with 69 additions and 1488 deletions
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -8,6 +8,8 @@
#include <stdint.h>
#include "hal/color_types.h"
#include "sdkconfig.h"
#include "soc/soc_caps.h"
#ifdef __cplusplus
extern "C" {
@@ -57,6 +59,10 @@ typedef enum {
JPEG_ENCODE_IN_FORMAT_RGB565 = COLOR_TYPE_ID(COLOR_SPACE_RGB, COLOR_PIXEL_RGB565), /*!< input RGB565 format */
JPEG_ENCODE_IN_FORMAT_GRAY = COLOR_TYPE_ID(COLOR_SPACE_GRAY, COLOR_PIXEL_GRAY8), /*!< input GRAY format */
JPEG_ENCODE_IN_FORMAT_YUV422 = COLOR_TYPE_ID(COLOR_SPACE_YUV, COLOR_PIXEL_YUV422), /*!< input YUV422 format */
#if !(CONFIG_ESP_REV_MIN_FULL < 300 && SOC_IS(ESP32P4)) // Invisible for unsupported chips
JPEG_ENCODE_IN_FORMAT_YUV444 = COLOR_TYPE_ID(COLOR_SPACE_YUV, COLOR_PIXEL_YUV444), /*!< input YUV444 format */
JPEG_ENCODE_IN_FORMAT_YUV420 = COLOR_TYPE_ID(COLOR_SPACE_YUV, COLOR_PIXEL_YUV420), /*!< input YUV420 format */
#endif
} jpeg_enc_input_format_t;
/**
+10
View File
@@ -183,6 +183,16 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_
encoder_engine->color_space = JPEG_ENC_SRC_YUV422;
best_hb_idx = JPEG_ENC_SRC_YUV422_HB;
break;
#if !(CONFIG_ESP_REV_MIN_FULL < 300 && SOC_IS(ESP32P4))
case JPEG_ENCODE_IN_FORMAT_YUV444:
encoder_engine->color_space = JPEG_ENC_SRC_YUV444;
best_hb_idx = JPEG_ENC_SRC_YUV444_HB;
break;
case JPEG_ENCODE_IN_FORMAT_YUV420:
encoder_engine->color_space = JPEG_ENC_SRC_YUV420;
best_hb_idx = JPEG_ENC_SRC_YUV420_HB;
break;
#endif
default:
ESP_LOGE(TAG, "wrong, we don't support encode from such format.");
ret = ESP_ERR_NOT_SUPPORTED;
+3 -1
View File
@@ -57,7 +57,9 @@ const uint32_t enc_hb_tbl[JPEG_ENC_BEST_HB_MAX][JPEG_DOWN_SAMPLING_NUM] = {
{40, 32, 32, 0},
{0, 64, 0, 0},
{64, 64, 48, 0},
{0, 0, 0, 128}
{0, 0, 0, 128},
{40, 0, 0, 0},
{0, 0, 48, 0},
};
/**
@@ -131,6 +131,8 @@ typedef enum {
JPEG_ENC_SRC_YUV422_HB = 1, // Input YUV422 format
JPEG_ENC_SRC_RGB565_HB = 2, // Input RGB565 format
JPEG_ENC_SRC_GRAY_HB = 3, // Input GRAY format
JPEG_ENC_SRC_YUV444_HB = 4, // Input YUV444 format
JPEG_ENC_SRC_YUV420_HB = 5, // Input YUV420 format
JPEG_ENC_BEST_HB_MAX,
} jpeg_enc_format_hb_t;