const std = @import("std"); pub const c = @import("c.zig").c; const pixels_api = @import("pixels.zig"); const surface_api = @import("surface.zig"); const properties_api = @import("properties.zig"); pub const PixelFormat = pixels_api.PixelFormat; pub const Surface = surface_api.Surface; pub const Colorspace = pixels_api.Colorspace; pub const PropertiesID = properties_api.PropertiesID; pub const CameraID = u32; pub const Camera = opaque { pub inline fn getCameraPermissionState(camera: *Camera) CameraPermissionState { return c.SDL_GetCameraPermissionState(@ptrCast(camera)); } pub inline fn getCameraID(camera: *Camera) CameraID { return c.SDL_GetCameraID(@ptrCast(camera)); } pub inline fn getCameraProperties(camera: *Camera) PropertiesID { return c.SDL_GetCameraProperties(@ptrCast(camera)); } pub inline fn getCameraFormat(camera: *Camera, spec: ?*CameraSpec) bool { return @bitCast(c.SDL_GetCameraFormat(@ptrCast(camera), @ptrCast(spec))); } pub inline fn acquireCameraFrame(camera: *Camera, timestampNS: *u64) ?*Surface { return @ptrCast(c.SDL_AcquireCameraFrame(@ptrCast(camera), @ptrCast(timestampNS))); } pub inline fn releaseCameraFrame(camera: *Camera, frame: ?*Surface) void { return c.SDL_ReleaseCameraFrame(@ptrCast(camera), @ptrCast(frame)); } pub inline fn closeCamera(camera: *Camera) void { return c.SDL_CloseCamera(@ptrCast(camera)); } }; pub const CameraSpec = extern struct { format: PixelFormat, // Frame format colorspace: Colorspace, // Frame colorspace width: c_int, // Frame width height: c_int, // Frame height framerate_numerator: c_int, // Frame rate numerator ((num / denom) == FPS, (denom / num) == duration in seconds) framerate_denominator: c_int, // Frame rate denominator ((num / denom) == FPS, (denom / num) == duration in seconds) }; pub const CameraPosition = enum(c_int) { cameraPositionUnknown, cameraPositionFrontFacing, cameraPositionBackFacing, }; pub const CameraPermissionState = enum(c_int) { cameraPermissionStatePending, cameraPermissionStateApproved, }; pub inline fn getNumCameraDrivers() c_int { return c.SDL_GetNumCameraDrivers(); } pub inline fn getCameraDriver(index: c_int) [*c]const u8 { return c.SDL_GetCameraDriver(index); } pub inline fn getCurrentCameraDriver() [*c]const u8 { return c.SDL_GetCurrentCameraDriver(); } pub inline fn getCameras(count: *c_int) ?*CameraID { return @ptrCast(c.SDL_GetCameras(@ptrCast(count))); } pub inline fn getCameraSupportedFormats(instance_id: CameraID, count: *c_int) [*c]?*CameraSpec { return c.SDL_GetCameraSupportedFormats(instance_id, @ptrCast(count)); } pub inline fn getCameraName(instance_id: CameraID) [*c]const u8 { return c.SDL_GetCameraName(instance_id); } pub inline fn getCameraPosition(instance_id: CameraID) CameraPosition { return c.SDL_GetCameraPosition(instance_id); } pub inline fn openCamera(instance_id: CameraID, spec: ?*const CameraSpec) ?*Camera { return @ptrCast(c.SDL_OpenCamera(instance_id, @ptrCast(spec))); }