feat(cam): add camera buffer alloc function

This commit is contained in:
gaoxu
2025-07-07 11:23:07 +08:00
parent b9c224215e
commit ee3de247e2
13 changed files with 166 additions and 35 deletions
@@ -51,6 +51,7 @@ static esp_err_t s_ctlr_csi_start(esp_cam_ctlr_handle_t handle);
static esp_err_t s_ctlr_csi_stop(esp_cam_ctlr_handle_t handle);
static esp_err_t s_csi_ctlr_disable(esp_cam_ctlr_handle_t ctlr);
static esp_err_t s_ctlr_csi_receive(esp_cam_ctlr_handle_t handle, esp_cam_ctlr_trans_t *trans, uint32_t timeout_ms);
static void *s_csi_ctlr_alloc_buffer(esp_cam_ctlr_t *handle, size_t size, uint32_t buf_caps);
static esp_err_t s_csi_claim_controller(csi_controller_t *controller)
{
@@ -225,6 +226,7 @@ esp_err_t esp_cam_new_csi_ctlr(const esp_cam_ctlr_csi_config_t *config, esp_cam_
ctlr->base.register_event_callbacks = s_register_event_callbacks;
ctlr->base.get_internal_buffer = s_csi_ctlr_get_internal_buffer;
ctlr->base.get_buffer_len = s_csi_ctlr_get_buffer_length;
ctlr->base.alloc_buffer = s_csi_ctlr_alloc_buffer;
*ret_handle = &(ctlr->base);
@@ -538,3 +540,23 @@ esp_err_t s_ctlr_csi_receive(esp_cam_ctlr_handle_t handle, esp_cam_ctlr_trans_t
return ESP_OK;
}
static void *s_csi_ctlr_alloc_buffer(esp_cam_ctlr_t *handle, size_t size, uint32_t buf_caps)
{
csi_controller_t *ctlr = __containerof(handle, csi_controller_t, base);
if (!ctlr) {
ESP_LOGE(TAG, "invalid argument: handle is null");
return NULL;
}
void *buffer = heap_caps_calloc(1, size, buf_caps);
if (!buffer) {
ESP_LOGE(TAG, "failed to allocate buffer");
return NULL;
}
ESP_LOGD(TAG, "Allocated camera buffer: %p, size: %zu", buffer, size);
return buffer;
}