Files
prosperon/tests/camera_colorspace_convert.ce
2025-12-19 00:10:19 -06:00

106 lines
2.8 KiB
Plaintext

// Test camera capture with colorspace conversion
var camera = use('camera');
var surface = use('sdl/surface');
var json = use('json');
// Get first camera
var cameras = camera.list();
if (cameras.length == 0) {
log.console("No cameras found!");
$stop();
}
var cam_id = cameras[0];
log.console("Using camera:", camera.name(cam_id));
// Open camera with default settings
var cam = camera.open(cam_id);
if (!cam) {
log.console("Failed to open camera!");
$stop();
}
// Get the format being used
var format = cam.get_format();
log.console("\nCamera format:");
log.console(" Resolution:", format.width + "x" + format.height);
log.console(" Pixel format:", format.format);
log.console(" Colorspace:", format.colorspace);
// Handle camera approval
var approved = false;
$receiver(e => {
if (e.type == 'camera_device_approved') {
log.console("\nCamera approved!");
approved = true;
} else if (e.type == 'camera_device_denied') {
log.error("Camera access denied!");
$stop();
}
});
// Wait for approval then capture
function capture_test() {
if (!approved) {
$delay(capture_test, 0.1);
return;
}
log.console("\nCapturing frame...");
var surf = cam.capture();
if (!surf) {
log.console("No frame captured yet, retrying...");
$delay(capture_test, 0.1);
return;
}
log.console("\nCaptured surface:");
log.console(" Size:", surf.width + "x" + surf.height);
log.console(" Format:", surf.format);
// Test various colorspace conversions
log.console("\nTesting colorspace conversions:");
// Convert to sRGB if not already
if (format.colorspace != "srgb") {
try {
var srgb_surf = surf.convert(surf.format, "srgb");
log.console(" Converted to sRGB colorspace");
} catch(e) {
log.console(" sRGB conversion failed:", e.message);
}
}
// Convert to linear sRGB for processing
try {
var linear_surf = surf.convert("rgba8888", "srgb_linear");
log.console(" Converted to linear sRGB (RGBA8888) for processing");
} catch(e) {
log.console(" Linear sRGB conversion failed:", e.message);
}
// Convert to JPEG colorspace (common for compression)
try {
var jpeg_surf = surf.convert("rgb888", "jpeg");
log.console(" Converted to JPEG colorspace (RGB888) for compression");
} catch(e) {
log.console(" JPEG colorspace conversion failed:", e.message);
}
// If YUV format, try BT.709 (HD video standard)
if (surf.format.indexOf("yuv") != -1 || surf.format.indexOf("yuy") != -1) {
try {
var hd_surf = surf.convert(surf.format, "bt709_limited");
log.console(" Converted to BT.709 limited (HD video standard)");
} catch(e) {
log.console(" BT.709 conversion failed:", e.message);
}
}
log.console("\nTest complete!");
$stop();
}
// Start capture test after a short delay
$delay(capture_test, 0.5);