Skip to content

Commit e4f1c01

Browse files
committed
fix(csi): fixed wrong assert when there's new transaction
1 parent 2ed780b commit e4f1c01

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

components/esp_driver_cam/csi/src/esp_cam_ctlr_csi.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ static bool csi_dma_trans_done_callback(dw_gdma_channel_handle_t chan, const dw_
300300
bool need_yield = false;
301301
BaseType_t high_task_woken = pdFALSE;
302302
csi_controller_t *ctlr = (csi_controller_t *)user_data;
303+
bool has_new_trans = false;
303304
bool use_backup = false;
304305

305306
dw_gdma_block_transfer_config_t csi_dma_transfer_config = {};
@@ -328,12 +329,14 @@ static bool csi_dma_trans_done_callback(dw_gdma_channel_handle_t chan, const dw_
328329
use_backup = true;
329330
} else {
330331
csi_dma_transfer_config.dst.addr = (uint32_t)(new_trans.buffer);
332+
has_new_trans = true;
331333
}
332334
} else if (xQueueReceiveFromISR(ctlr->trans_que, &new_trans, &high_task_woken) == pdTRUE) {
333335
if (!(new_trans.buffer) || new_trans.buflen < ctlr->fb_size_in_bytes) {
334336
use_backup = true;
335337
} else {
336338
csi_dma_transfer_config.dst.addr = (uint32_t)(new_trans.buffer);
339+
has_new_trans = true;
337340
}
338341
} else if (!ctlr->bk_buffer_dis) {
339342
use_backup = true;
@@ -344,7 +347,9 @@ static bool csi_dma_trans_done_callback(dw_gdma_channel_handle_t chan, const dw_
344347
new_trans.buflen = ctlr->fb_size_in_bytes;
345348
ESP_EARLY_LOGD(TAG, "no new buffer or no long enough new buffer, use driver internal buffer");
346349
csi_dma_transfer_config.dst.addr = (uint32_t)ctlr->backup_buffer;
347-
} else {
350+
}
351+
352+
if (!has_new_trans) {
348353
assert(false && "no new buffer, and no driver internal buffer");
349354
}
350355

0 commit comments

Comments
 (0)