Skip to content

Commit 95cbd2e

Browse files
refactor(example): Start using esp_new_jpeg
1 parent 3c3ee9e commit 95cbd2e

File tree

2 files changed

+54
-17
lines changed

2 files changed

+54
-17
lines changed

examples/display_audio_photo/main/app_disp_fs.c

Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -22,7 +22,7 @@
2222
#include "bsp/esp-bsp.h"
2323
#include "lvgl.h"
2424
#include "app_disp_fs.h"
25-
#include "jpeg_decoder.h"
25+
#include "esp_jpeg_dec.h"
2626

2727
/* SPIFFS mount root */
2828
#define FS_MNT_PATH BSP_SPIFFS_MOUNT_POINT
@@ -175,7 +175,7 @@ void app_audio_init(void)
175175
void app_disp_fs_init(void)
176176
{
177177
file_buffer_size = BSP_LCD_H_RES * BSP_LCD_V_RES * sizeof(lv_color_t);
178-
file_buffer = heap_caps_calloc(file_buffer_size, 1, MALLOC_CAP_DEFAULT);
178+
file_buffer = jpeg_calloc_align(file_buffer_size, 16);
179179
assert(file_buffer);
180180

181181
/* Initialize root path */
@@ -271,25 +271,62 @@ static void show_window(const char *path, app_file_type_t type)
271271
} else if (fs_img) {
272272
ESP_LOGI(TAG, "Decoding JPEG image...");
273273
/* JPEG decode */
274-
esp_jpeg_image_cfg_t jpeg_cfg = {
275-
.indata = (uint8_t *)file_buf,
276-
.indata_size = filesize,
274+
jpeg_dec_handle_t jpeg_dec = NULL;
275+
jpeg_dec_header_info_t out_info;
276+
jpeg_dec_io_t jpeg_io = {
277+
.inbuf = (uint8_t *)file_buf,
278+
.inbuf_len = (int)filesize,
277279
.outbuf = file_buffer,
278-
.outbuf_size = file_buffer_size,
279-
.out_format = JPEG_IMAGE_FORMAT_RGB565,
280-
.out_scale = JPEG_IMAGE_SCALE_0,
281-
.flags = {
280+
};
281+
jpeg_dec_config_t config = DEFAULT_JPEG_DEC_CONFIG();
282+
config.output_type = JPEG_PIXEL_FORMAT_RGB565_LE;
282283
#if CONFIG_LV_COLOR_16_SWAP
283-
.swap_color_bytes = 1,
284+
config.output_type = JPEG_PIXEL_FORMAT_RGB565_BE;
284285
#endif
285-
}
286-
};
287-
esp_jpeg_image_output_t outimg;
288-
esp_jpeg_decode(&jpeg_cfg, &outimg);
289286

290-
lv_canvas_set_buffer(fs_img, file_buffer, outimg.width, outimg.height, LV_COLOR_FORMAT_RGB565);
287+
jpeg_error_t ret = jpeg_dec_open(&config, &jpeg_dec);
288+
if (ret != JPEG_ERR_OK) {
289+
ESP_LOGE(TAG, "JPEG decoder open failed: %d", ret);
290+
lv_label_set_text(label, "JPEG decoder open failed!");
291+
goto jpeg_decode_cleanup;
292+
}
293+
294+
ret = jpeg_dec_parse_header(jpeg_dec, &jpeg_io, &out_info);
295+
if (ret != JPEG_ERR_OK) {
296+
ESP_LOGE(TAG, "JPEG header parse failed: %d", ret);
297+
lv_label_set_text(label, "JPEG header parse failed!");
298+
goto jpeg_decode_cleanup;
299+
}
300+
301+
int outbuf_len = 0;
302+
ret = jpeg_dec_get_outbuf_len(jpeg_dec, &outbuf_len);
303+
if (ret != JPEG_ERR_OK || outbuf_len <= 0) {
304+
ESP_LOGE(TAG, "JPEG out buffer size failed: %d", ret);
305+
lv_label_set_text(label, "JPEG buffer size error!");
306+
goto jpeg_decode_cleanup;
307+
}
308+
309+
if ((size_t)outbuf_len > file_buffer_size) {
310+
ESP_LOGE(TAG, "JPEG buffer too small: need %d, have %u", outbuf_len, (unsigned)file_buffer_size);
311+
lv_label_set_text(label, "JPEG image too large!");
312+
goto jpeg_decode_cleanup;
313+
}
314+
315+
ret = jpeg_dec_process(jpeg_dec, &jpeg_io);
316+
if (ret != JPEG_ERR_OK) {
317+
ESP_LOGE(TAG, "JPEG decode failed: %d", ret);
318+
lv_label_set_text(label, "JPEG decode failed!");
319+
goto jpeg_decode_cleanup;
320+
}
321+
322+
lv_canvas_set_buffer(fs_img, file_buffer, out_info.width, out_info.height, LV_COLOR_FORMAT_RGB565);
291323
lv_obj_center(fs_img);
292324
lv_obj_invalidate(fs_img);
325+
326+
jpeg_decode_cleanup:
327+
if (jpeg_dec) {
328+
jpeg_dec_close(jpeg_dec);
329+
}
293330
}
294331

295332
close(f);

examples/display_audio_photo/main/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ dependencies:
44
bsp_selector:
55
version: '*'
66
override_path: ../../../components/bsp_selector
7-
esp_jpeg: '*'
7+
esp_new_jpeg: '^1'

0 commit comments

Comments
 (0)