src.nth.io/

summaryrefslogtreecommitdiff
path: root/main/jpeg_decoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/jpeg_decoder.c')
-rw-r--r--main/jpeg_decoder.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/main/jpeg_decoder.c b/main/jpeg_decoder.c
index cbb98d8..7fee771 100644
--- a/main/jpeg_decoder.c
+++ b/main/jpeg_decoder.c
@@ -54,14 +54,26 @@ void jpeg_decoder_unlock(void)
void *jpeg_decoder_input_buffer(void) { return s_in_buf; }
-esp_err_t jpeg_decoder_decode(size_t jpeg_len,
+void *jpeg_decoder_alloc_input_buffer(size_t *out_cap)
+{
+ jpeg_decode_memory_alloc_cfg_t in_cfg = { .buffer_direction = JPEG_DEC_ALLOC_INPUT_BUFFER };
+ size_t cap = 0;
+ void *buf = jpeg_alloc_decoder_mem(JPEG_DECODER_MAX_INPUT_BYTES, &in_cfg, &cap);
+ if (out_cap) *out_cap = buf ? cap : 0;
+ return buf;
+}
+
+esp_err_t jpeg_decoder_decode(void *in_buf,
+ size_t jpeg_len,
void *out_buf,
size_t out_cap,
uint16_t *out_width,
uint16_t *out_height)
{
- if (jpeg_len == 0 || jpeg_len > s_in_cap) return ESP_ERR_INVALID_SIZE;
- if (!out_buf || out_cap == 0) return ESP_ERR_INVALID_ARG;
+ if (!in_buf) return ESP_ERR_INVALID_ARG;
+ if (jpeg_len == 0 ||
+ jpeg_len > JPEG_DECODER_MAX_INPUT_BYTES) return ESP_ERR_INVALID_SIZE;
+ if (!out_buf || out_cap == 0) return ESP_ERR_INVALID_ARG;
// Hardware decode directly into the caller's BGR888 buffer (the
// panel back-framebuffer in the /frame path). _BGR rgb_order swaps
@@ -75,7 +87,7 @@ esp_err_t jpeg_decoder_decode(size_t jpeg_len,
};
jpeg_decode_picture_info_t info = {0};
- esp_err_t err = jpeg_decoder_get_info(s_in_buf, jpeg_len, &info);
+ esp_err_t err = jpeg_decoder_get_info(in_buf, jpeg_len, &info);
if (err != ESP_OK) {
ESP_LOGW(TAG, "jpeg_decoder_get_info: %s", esp_err_to_name(err));
return err;
@@ -83,8 +95,8 @@ esp_err_t jpeg_decoder_decode(size_t jpeg_len,
uint32_t out_size = 0;
err = jpeg_decoder_process(s_engine, &dec_cfg,
- s_in_buf, jpeg_len,
- out_buf, out_cap, &out_size);
+ in_buf, jpeg_len,
+ out_buf, out_cap, &out_size);
if (err != ESP_OK) {
ESP_LOGW(TAG, "jpeg_decoder_process: %s", esp_err_to_name(err));
return err;