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);
jpeg_codec->codec_mutex = NULL;
}
#if CONFIG_PM_ENABLE
if (jpeg_codec->pm_lock) {
esp_pm_lock_delete(jpeg_codec->pm_lock);
}
#endif
PERIPH_RCC_ATOMIC() {
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;
#if CONFIG_PM_ENABLE
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");
}
#endif
xSemaphoreTake(decoder_engine->codec_base->codec_mutex, portMAX_DELAY);
/* 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);
#if CONFIG_PM_ENABLE
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");
}
#endif
return ESP_OK;
err1:
dma2d_force_end(decoder_engine->trans_desc, &need_yield);
err2:
xSemaphoreGive(decoder_engine->codec_base->codec_mutex);
#if CONFIG_PM_ENABLE
if (decoder_engine->codec_base->pm_lock) {
esp_pm_lock_release(decoder_engine->codec_base->pm_lock);
}
#endif
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;
#if CONFIG_PM_ENABLE
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");
}
#endif
jpeg_hal_context_t *hal = &encoder_engine->codec_base->hal;
uint8_t *raw_buffer = (uint8_t*)encode_inbuf;
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;
xSemaphoreGive(encoder_engine->codec_base->codec_mutex);
#if CONFIG_PM_ENABLE
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");
}
#endif
return ESP_OK;
err1:
dma2d_force_end(encoder_engine->trans_desc, &need_yield);
err2:
xSemaphoreGive(encoder_engine->codec_base->codec_mutex);
#if CONFIG_PM_ENABLE
if (encoder_engine->codec_base->pm_lock) {
esp_pm_lock_release(encoder_engine->codec_base->pm_lock);
}
#endif
return ret;
}

View File

@@ -52,7 +52,9 @@ struct jpeg_codec_t {
intr_handle_t intr_handle; // jpeg codec interrupt handler
int intr_priority; // jpeg codec interrupt priority
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
#endif
};
typedef enum {