shiguredo_libcamera 2026.1.0

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

void lc_request_destroy(lc_request_t* request) {
  delete request->request;
  delete request;
}

void lc_request_reuse(lc_request_t* request) {
  request->request->reuse(Request::ReuseBuffers);
}

int lc_request_add_buffer(lc_request_t* request,
                          lc_stream_t* stream,
                          lc_frame_buffer_t* buffer) {
  return request->request->addBuffer(stream->stream, buffer->fb);
}

lc_request_status_t lc_request_status(const lc_request_t* request) {
  switch (request->request->status()) {
    case Request::RequestPending:
      return LC_REQUEST_STATUS_PENDING;
    case Request::RequestComplete:
      return LC_REQUEST_STATUS_COMPLETE;
    case Request::RequestCancelled:
      return LC_REQUEST_STATUS_CANCELLED;
    default:
      return LC_REQUEST_STATUS_CANCELLED;
  }
}

uint64_t lc_request_cookie(const lc_request_t* request) {
  return request->request->cookie();
}

uint32_t lc_request_sequence(const lc_request_t* request) {
  return request->request->sequence();
}

lc_control_list_t* lc_request_controls(lc_request_t* request) {
  auto cl = new lc_control_list();
  cl->list = &request->request->controls();
  cl->owned = false;
  return cl;
}

lc_control_list_t* lc_request_metadata(const lc_request_t* request) {
  auto cl = new lc_control_list();
  cl->list = const_cast<ControlList*>(&request->request->metadata());
  cl->owned = false;
  return cl;
}

lc_frame_buffer_t* lc_request_find_buffer(const lc_request_t* request,
                                          lc_stream_t* stream) {
  auto* fb = request->request->findBuffer(stream->stream);
  if (!fb) {
    return nullptr;
  }
  auto lc_fb = new lc_frame_buffer();
  lc_fb->fb = fb;
  return lc_fb;
}