feat: add test_image module, xorg viewer sink, and feature flag build system
Feature flags (FEATURES= make variable):
glfw — GLFW + OpenGL viewer (libglfw3, libglew)
vulkan — future Vulkan renderer
turbojpeg — MJPEG decode/encode (libturbojpeg)
xorg — XRandR geometry + screen grab (libx11, libxrandr)
vaapi — VA-API hardware codec (libva)
Each flag injects -DHAVE_<FEATURE> and the relevant pkg-config flags.
Headless build: make (no FEATURES set).
test_image module (src/modules/test_image/):
Generates test frames in YUV420, YUV422, and BGRA.
Patterns: SMPTE 75% colour bars, greyscale ramp, white/black grid.
BT.601 limited-range RGB→YCbCr in write_pixel().
test_image_cli (dev/cli/):
Generates a frame and writes it as a PPM file for visual verification.
Usage: test_image_cli [--pattern bars|ramp|grid]
[--width N] [--height N]
[--format yuv420|yuv422|bgra]
--out FILE.ppm
xorg module (src/modules/xorg/):
xorg.c — full GLFW+OpenGL implementation (compiled with FEATURES=glfw)
xorg_stub.c — no-op stub (compiled otherwise; xorg_available() returns false)
Renderer: full-screen quad via gl_VertexID, three GL_R8 textures for YUV,
BT.601 matrix in fragment shader, GL_BGRA texture for packed frames.
MJPEG path: tjDecompressToYUVPlanes → planar YUV → upload (requires turbojpeg).
push_yuv420/push_bgra/push_mjpeg all usable independently.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
36
src/modules/xorg/xorg_stub.c
Normal file
36
src/modules/xorg/xorg_stub.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#include <stddef.h>
|
||||
#include "xorg.h"
|
||||
|
||||
bool xorg_available(void) { return false; }
|
||||
|
||||
Xorg_Viewer *xorg_viewer_open(int x, int y, int width, int height,
|
||||
const char *title)
|
||||
{
|
||||
(void)x; (void)y; (void)width; (void)height; (void)title;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool xorg_viewer_push_yuv420(Xorg_Viewer *v,
|
||||
const uint8_t *y, const uint8_t *cb, const uint8_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
(void)v; (void)y; (void)cb; (void)cr; (void)width; (void)height;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool xorg_viewer_push_bgra(Xorg_Viewer *v,
|
||||
const uint8_t *data, int width, int height)
|
||||
{
|
||||
(void)v; (void)data; (void)width; (void)height;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool xorg_viewer_push_mjpeg(Xorg_Viewer *v,
|
||||
const uint8_t *data, size_t size)
|
||||
{
|
||||
(void)v; (void)data; (void)size;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool xorg_viewer_poll(Xorg_Viewer *v) { (void)v; return false; }
|
||||
void xorg_viewer_close(Xorg_Viewer *v) { (void)v; }
|
||||
Reference in New Issue
Block a user