/*----------------------------------------------------------------------------*/ /* Copyright (c) 2016-2018 FIRST. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #include "cscore_c.h" // NOLINT(build/include_order) #include "c_util.h" #include "cscore_cpp.h" using namespace cs; extern "C" { CS_Source CS_CreateUsbCameraDev(const char* name, int dev, CS_Status* status) { return cs::CreateUsbCameraDev(name, dev, status); } CS_Source CS_CreateUsbCameraPath(const char* name, const char* path, CS_Status* status) { return cs::CreateUsbCameraPath(name, path, status); } char* CS_GetUsbCameraPath(CS_Source source, CS_Status* status) { return ConvertToC(cs::GetUsbCameraPath(source, status)); } CS_UsbCameraInfo* CS_EnumerateUsbCameras(int* count, CS_Status* status) { auto cameras = cs::EnumerateUsbCameras(status); CS_UsbCameraInfo* out = static_cast( wpi::CheckedMalloc(cameras.size() * sizeof(CS_UsbCameraInfo))); *count = cameras.size(); for (size_t i = 0; i < cameras.size(); ++i) { out[i].dev = cameras[i].dev; out[i].path = ConvertToC(cameras[i].path); out[i].name = ConvertToC(cameras[i].name); } return out; } void CS_FreeEnumeratedUsbCameras(CS_UsbCameraInfo* cameras, int count) { if (!cameras) return; for (int i = 0; i < count; ++i) { std::free(cameras[i].path); std::free(cameras[i].name); } std::free(cameras); } } // extern "C"