shiguredo_libcamera 2026.1.0

Rust bindings for libcamera
#include "camera_manager.h"
#include "internal.h"

lc_camera_manager_t* lc_camera_manager_create(void) {
  auto mgr = new lc_camera_manager();
  mgr->cm = std::make_unique<CameraManager>();
  return mgr;
}

void lc_camera_manager_destroy(lc_camera_manager_t* mgr) {
  delete mgr;
}

int lc_camera_manager_start(lc_camera_manager_t* mgr) {
  return mgr->cm->start();
}

void lc_camera_manager_stop(lc_camera_manager_t* mgr) {
  mgr->cm->stop();
}

size_t lc_camera_manager_cameras_count(const lc_camera_manager_t* mgr) {
  return mgr->cm->cameras().size();
}

lc_camera_t* lc_camera_manager_get_camera(lc_camera_manager_t* mgr,
                                          size_t index) {
  auto cameras = mgr->cm->cameras();
  if (index >= cameras.size()) {
    return nullptr;
  }
  auto cam = new lc_camera();
  cam->camera = cameras[index];
  return cam;
}

lc_camera_t* lc_camera_manager_get_camera_by_id(lc_camera_manager_t* mgr,
                                                const char* id) {
  auto camera = mgr->cm->get(id);
  if (!camera) {
    return nullptr;
  }
  auto cam = new lc_camera();
  cam->camera = camera;
  return cam;
}