mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-04 13:14:32 +02:00
fix(jpeg): only call esp_pm APIs when CONFIG_PM_ENABLE is enabled
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user