|
1 | 1 | /* |
2 | | - * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD |
| 2 | + * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD |
3 | 3 | * |
4 | 4 | * SPDX-License-Identifier: Apache-2.0 |
5 | 5 | */ |
|
22 | 22 | #include "bsp/esp-bsp.h" |
23 | 23 | #include "lvgl.h" |
24 | 24 | #include "app_disp_fs.h" |
25 | | -#include "jpeg_decoder.h" |
| 25 | +#include "esp_jpeg_dec.h" |
26 | 26 |
|
27 | 27 | /* SPIFFS mount root */ |
28 | 28 | #define FS_MNT_PATH BSP_SPIFFS_MOUNT_POINT |
@@ -175,7 +175,7 @@ void app_audio_init(void) |
175 | 175 | void app_disp_fs_init(void) |
176 | 176 | { |
177 | 177 | 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); |
179 | 179 | assert(file_buffer); |
180 | 180 |
|
181 | 181 | /* Initialize root path */ |
@@ -271,25 +271,62 @@ static void show_window(const char *path, app_file_type_t type) |
271 | 271 | } else if (fs_img) { |
272 | 272 | ESP_LOGI(TAG, "Decoding JPEG image..."); |
273 | 273 | /* 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, |
277 | 279 | .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; |
282 | 283 | #if CONFIG_LV_COLOR_16_SWAP |
283 | | - .swap_color_bytes = 1, |
| 284 | + config.output_type = JPEG_PIXEL_FORMAT_RGB565_BE; |
284 | 285 | #endif |
285 | | - } |
286 | | - }; |
287 | | - esp_jpeg_image_output_t outimg; |
288 | | - esp_jpeg_decode(&jpeg_cfg, &outimg); |
289 | 286 |
|
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); |
291 | 323 | lv_obj_center(fs_img); |
292 | 324 | lv_obj_invalidate(fs_img); |
| 325 | + |
| 326 | +jpeg_decode_cleanup: |
| 327 | + if (jpeg_dec) { |
| 328 | + jpeg_dec_close(jpeg_dec); |
| 329 | + } |
293 | 330 | } |
294 | 331 |
|
295 | 332 | close(f); |
|
0 commit comments