libcamera-sys 0.7.0

Low-level unsafe bindings to libcamera
#include "stream.h"

#include <libcamera/libcamera.h>
#include <vector>
#include <cstring>

extern "C" {

struct libcamera_stream_set {
    std::vector<libcamera::Stream *> streams;
};

libcamera_pixel_formats_t *libcamera_stream_formats_pixel_formats(const libcamera_stream_formats_t* formats) {
    return new libcamera_pixel_formats_t(std::move(formats->pixelformats()));
}

libcamera_sizes_t *libcamera_stream_formats_sizes(const libcamera_stream_formats_t* formats, const libcamera_pixel_format_t *pixel_format) {
    return new libcamera_sizes_t(std::move(formats->sizes(*pixel_format)));
}

libcamera_size_range_t libcamera_stream_formats_range(const libcamera_stream_formats_t* formats, const libcamera_pixel_format_t *pixel_format) {
    return formats->range(*pixel_format);
}

const libcamera_stream_formats_t *libcamera_stream_configuration_formats(const libcamera_stream_configuration_t *config) {
    return &config->formats();
}

libcamera_stream_t *libcamera_stream_configuration_stream(const libcamera_stream_configuration_t *config) {
    return config->stream();
}

bool libcamera_stream_configuration_has_color_space(const libcamera_stream_configuration_t *config) {
    return config->colorSpace.has_value();
}

libcamera_color_space_t libcamera_stream_configuration_get_color_space(const libcamera_stream_configuration_t *config) {
    return config->colorSpace.value_or(libcamera::ColorSpace::Raw);
}

void libcamera_stream_configuration_set_color_space(libcamera_stream_configuration_t *config, const libcamera_color_space_t *color_space) {
    if (color_space) {
        config->colorSpace = *color_space;
    } else {
        config->colorSpace.reset();
    }
}

char *libcamera_stream_configuration_to_string(const libcamera_stream_configuration_t *config) {
    return ::strdup(config->toString().c_str());
}

const libcamera_stream_configuration_t *libcamera_stream_get_configuration(const libcamera_stream_t *stream) {
    if (!stream)
        return nullptr;
    return &stream->configuration();
}

size_t libcamera_stream_set_size(const libcamera_stream_set_t *set) {
    return set->streams.size();
}

libcamera_stream_t *libcamera_stream_set_get(const libcamera_stream_set_t *set, size_t index) {
    if (index >= set->streams.size())
        return nullptr;
    return set->streams.at(index);
}

void libcamera_stream_set_destroy(libcamera_stream_set_t *set) {
    delete set;
}

}