Skip to content

Commit 6b0a815

Browse files
committed
fix(jpeg): Fix several issues reported recently,
1. Fix decode images with dri marker failed, 2. Fix encode sometimes get length error
1 parent bf415f5 commit 6b0a815

File tree

4 files changed

+6
-5
lines changed

4 files changed

+6
-5
lines changed

components/esp_driver_jpeg/jpeg_decode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,6 @@ esp_err_t jpeg_decoder_process(jpeg_decoder_handle_t decoder_engine, const jpeg_
271271
esp_err_t jpeg_del_decoder_engine(jpeg_decoder_handle_t decoder_engine)
272272
{
273273
ESP_RETURN_ON_FALSE(decoder_engine, ESP_ERR_INVALID_ARG, TAG, "jpeg decode handle is null");
274-
ESP_RETURN_ON_ERROR(jpeg_release_codec_handle(decoder_engine->codec_base), TAG, "release codec failed");
275274

276275
if (decoder_engine) {
277276
if (decoder_engine->rxlink) {
@@ -295,6 +294,7 @@ esp_err_t jpeg_del_decoder_engine(jpeg_decoder_handle_t decoder_engine)
295294
if (decoder_engine->intr_handle) {
296295
jpeg_isr_deregister(decoder_engine->codec_base, decoder_engine->intr_handle);
297296
}
297+
ESP_RETURN_ON_ERROR(jpeg_release_codec_handle(decoder_engine->codec_base), TAG, "release codec failed");
298298
free(decoder_engine);
299299
}
300300
return ESP_OK;

components/esp_driver_jpeg/jpeg_encode.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_
262262
}
263263

264264
if (s_rcv_event.dma_evt & JPEG_DMA2D_RX_EOF) {
265+
ESP_GOTO_ON_ERROR(esp_cache_msync((void*)encoder_engine->rxlink, encoder_engine->dma_desc_size, ESP_CACHE_MSYNC_FLAG_DIR_M2C), err, TAG, "sync memory to cache failed");
265266
compressed_size = s_dma_desc_get_len(encoder_engine->rxlink);
266267
uint32_t _compressed_size = JPEG_ALIGN_UP(compressed_size, cache_hal_get_cache_line_size(CACHE_LL_LEVEL_EXT_MEM, CACHE_TYPE_DATA));
267268
ESP_GOTO_ON_ERROR(esp_cache_msync((void*)(bit_stream + encoder_engine->header_info->header_len), _compressed_size, ESP_CACHE_MSYNC_FLAG_DIR_M2C), err, TAG, "sync memory to cache failed");
@@ -283,7 +284,6 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_
283284
esp_err_t jpeg_del_encoder_engine(jpeg_encoder_handle_t encoder_engine)
284285
{
285286
ESP_RETURN_ON_FALSE(encoder_engine, ESP_ERR_INVALID_ARG, TAG, "jpeg encoder handle is null");
286-
ESP_RETURN_ON_ERROR(jpeg_release_codec_handle(encoder_engine->codec_base), TAG, "release codec failed");
287287

288288
if (encoder_engine) {
289289
if (encoder_engine->rxlink) {
@@ -307,6 +307,7 @@ esp_err_t jpeg_del_encoder_engine(jpeg_encoder_handle_t encoder_engine)
307307
if (encoder_engine->intr_handle) {
308308
jpeg_isr_deregister(encoder_engine->codec_base, encoder_engine->intr_handle);
309309
}
310+
ESP_RETURN_ON_ERROR(jpeg_release_codec_handle(encoder_engine->codec_base), TAG, "release codec failed");
310311
free(encoder_engine);
311312
}
312313
return ESP_OK;

components/esp_driver_jpeg/jpeg_parse_marker.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ esp_err_t jpeg_parse_sof_marker(jpeg_dec_header_info_t *header_info)
130130

131131
// The vertical and horizontal in process must be divided by mcu block.
132132
if (header_info->origin_v % header_info->mcuy != 0) {
133-
header_info->process_v = (ceil(header_info->origin_v / header_info->mcuy) + 1) * header_info->mcuy;
133+
header_info->process_v = (uint32_t)(ceil(header_info->origin_v / header_info->mcuy) + 1) * header_info->mcuy;
134134
}
135135
if (header_info->origin_h % header_info->mcux != 0) {
136-
header_info->process_h = (ceil(header_info->origin_h / header_info->mcux) + 1) * header_info->mcux;
136+
header_info->process_h = (uint32_t)(ceil(header_info->origin_h / header_info->mcux) + 1) * header_info->mcux;
137137
}
138138

139139
return ESP_OK;

components/esp_driver_jpeg/jpeg_private.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ typedef struct {
8787
uint8_t huffcode[2][2][JPEG_HUFFMAN_AC_VALUE_TABLE_LEN]; // Huffman decoded data tables [id][dcac]
8888
uint32_t tmp_huff[JPEG_HUFFMAN_AC_VALUE_TABLE_LEN]; // temp buffer to store huffman code
8989
bool dri_marker; // If we have dri marker in table
90-
uint8_t ri; // Restart interval
90+
uint16_t ri; // Restart interval
9191
} jpeg_dec_header_info_t;
9292

9393
struct jpeg_decoder_t {

0 commit comments

Comments
 (0)