fix(jpeg): only call esp_pm APIs when CONFIG_PM_ENABLE is enabled

This commit is contained in:
Chen Jichang
2025-05-16 19:17:37 +08:00
parent 8555b6c837
commit 90050df641
4 changed files with 16 additions and 0 deletions

View File

@@ -95,9 +95,11 @@ esp_err_t jpeg_release_codec_handle(jpeg_codec_handle_t jpeg_codec)
vSemaphoreDeleteWithCaps(jpeg_codec->codec_mutex); vSemaphoreDeleteWithCaps(jpeg_codec->codec_mutex);
jpeg_codec->codec_mutex = NULL; jpeg_codec->codec_mutex = NULL;
} }
#if CONFIG_PM_ENABLE
if (jpeg_codec->pm_lock) { if (jpeg_codec->pm_lock) {
esp_pm_lock_delete(jpeg_codec->pm_lock); esp_pm_lock_delete(jpeg_codec->pm_lock);
} }
#endif
PERIPH_RCC_ATOMIC() { PERIPH_RCC_ATOMIC() {
jpeg_ll_enable_bus_clock(false); jpeg_ll_enable_bus_clock(false);
} }

View File

@@ -212,9 +212,11 @@ esp_err_t jpeg_decoder_process(jpeg_decoder_handle_t decoder_engine, const jpeg_
esp_err_t ret = ESP_OK; esp_err_t ret = ESP_OK;
#if CONFIG_PM_ENABLE
if (decoder_engine->codec_base->pm_lock) { if (decoder_engine->codec_base->pm_lock) {
ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(decoder_engine->codec_base->pm_lock), TAG, "acquire pm_lock failed"); ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(decoder_engine->codec_base->pm_lock), TAG, "acquire pm_lock failed");
} }
#endif
xSemaphoreTake(decoder_engine->codec_base->codec_mutex, portMAX_DELAY); xSemaphoreTake(decoder_engine->codec_base->codec_mutex, portMAX_DELAY);
/* Reset queue */ /* Reset queue */
@@ -269,18 +271,22 @@ esp_err_t jpeg_decoder_process(jpeg_decoder_handle_t decoder_engine, const jpeg_
} }
xSemaphoreGive(decoder_engine->codec_base->codec_mutex); xSemaphoreGive(decoder_engine->codec_base->codec_mutex);
#if CONFIG_PM_ENABLE
if (decoder_engine->codec_base->pm_lock) { if (decoder_engine->codec_base->pm_lock) {
ESP_RETURN_ON_ERROR(esp_pm_lock_release(decoder_engine->codec_base->pm_lock), TAG, "release pm_lock failed"); ESP_RETURN_ON_ERROR(esp_pm_lock_release(decoder_engine->codec_base->pm_lock), TAG, "release pm_lock failed");
} }
#endif
return ESP_OK; return ESP_OK;
err1: err1:
dma2d_force_end(decoder_engine->trans_desc, &need_yield); dma2d_force_end(decoder_engine->trans_desc, &need_yield);
err2: err2:
xSemaphoreGive(decoder_engine->codec_base->codec_mutex); xSemaphoreGive(decoder_engine->codec_base->codec_mutex);
#if CONFIG_PM_ENABLE
if (decoder_engine->codec_base->pm_lock) { if (decoder_engine->codec_base->pm_lock) {
esp_pm_lock_release(decoder_engine->codec_base->pm_lock); esp_pm_lock_release(decoder_engine->codec_base->pm_lock);
} }
#endif
return ret; return ret;
} }

View File

@@ -148,9 +148,11 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_
esp_err_t ret = ESP_OK; esp_err_t ret = ESP_OK;
#if CONFIG_PM_ENABLE
if (encoder_engine->codec_base->pm_lock) { if (encoder_engine->codec_base->pm_lock) {
ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(encoder_engine->codec_base->pm_lock), TAG, "acquire pm_lock failed"); ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(encoder_engine->codec_base->pm_lock), TAG, "acquire pm_lock failed");
} }
#endif
jpeg_hal_context_t *hal = &encoder_engine->codec_base->hal; jpeg_hal_context_t *hal = &encoder_engine->codec_base->hal;
uint8_t *raw_buffer = (uint8_t*)encode_inbuf; uint8_t *raw_buffer = (uint8_t*)encode_inbuf;
uint32_t compressed_size; uint32_t compressed_size;
@@ -280,18 +282,22 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_
*out_size = compressed_size; *out_size = compressed_size;
xSemaphoreGive(encoder_engine->codec_base->codec_mutex); xSemaphoreGive(encoder_engine->codec_base->codec_mutex);
#if CONFIG_PM_ENABLE
if (encoder_engine->codec_base->pm_lock) { if (encoder_engine->codec_base->pm_lock) {
ESP_RETURN_ON_ERROR(esp_pm_lock_release(encoder_engine->codec_base->pm_lock), TAG, "release pm_lock failed"); ESP_RETURN_ON_ERROR(esp_pm_lock_release(encoder_engine->codec_base->pm_lock), TAG, "release pm_lock failed");
} }
#endif
return ESP_OK; return ESP_OK;
err1: err1:
dma2d_force_end(encoder_engine->trans_desc, &need_yield); dma2d_force_end(encoder_engine->trans_desc, &need_yield);
err2: err2:
xSemaphoreGive(encoder_engine->codec_base->codec_mutex); xSemaphoreGive(encoder_engine->codec_base->codec_mutex);
#if CONFIG_PM_ENABLE
if (encoder_engine->codec_base->pm_lock) { if (encoder_engine->codec_base->pm_lock) {
esp_pm_lock_release(encoder_engine->codec_base->pm_lock); esp_pm_lock_release(encoder_engine->codec_base->pm_lock);
} }
#endif
return ret; return ret;
} }

View File

@@ -52,7 +52,9 @@ struct jpeg_codec_t {
intr_handle_t intr_handle; // jpeg codec interrupt handler intr_handle_t intr_handle; // jpeg codec interrupt handler
int intr_priority; // jpeg codec interrupt priority int intr_priority; // jpeg codec interrupt priority
SLIST_HEAD(jpeg_isr_handler_list_, jpeg_isr_handler_) jpeg_isr_handler_list; // List for jpeg interrupt. SLIST_HEAD(jpeg_isr_handler_list_, jpeg_isr_handler_) jpeg_isr_handler_list; // List for jpeg interrupt.
#if CONFIG_PM_ENABLE
esp_pm_lock_handle_t pm_lock; // power manage lock esp_pm_lock_handle_t pm_lock; // power manage lock
#endif
}; };
typedef enum { typedef enum {