#pragma once #include #include #include typedef struct Xorg_Viewer Xorg_Viewer; /* * How the frame is scaled to fit the window. * SCALE_STRETCH is the only implemented mode; others are reserved. */ typedef enum Xorg_Scale { XORG_SCALE_STRETCH, /* fill window, ignore aspect ratio (default) */ XORG_SCALE_FIT, /* largest rect that fits, preserve aspect, black bars */ XORG_SCALE_FILL, /* smallest rect that covers, preserve aspect, crop edges */ XORG_SCALE_1_1, /* native pixel size, no scaling */ } Xorg_Scale; /* * Where the frame is positioned within the window. * Used with XORG_SCALE_FIT, XORG_SCALE_FILL, and XORG_SCALE_1_1. */ typedef enum Xorg_Anchor { XORG_ANCHOR_CENTER, /* center frame in window (default) */ XORG_ANCHOR_TOP_LEFT, /* align frame to top-left corner */ } Xorg_Anchor; /* Returns false when compiled without HAVE_GLFW. */ bool xorg_available(void); /* * Open a viewer window at screen position (x, y) with the given size. * Returns NULL if xorg is unavailable or if window/context creation fails. */ Xorg_Viewer *xorg_viewer_open(int x, int y, int width, int height, const char *title); /* Push a YUV 4:2:0 planar frame for immediate display. */ bool xorg_viewer_push_yuv420(Xorg_Viewer *v, const uint8_t *y, const uint8_t *cb, const uint8_t *cr, int width, int height); /* Push a packed BGRA frame for immediate display. */ bool xorg_viewer_push_bgra(Xorg_Viewer *v, const uint8_t *data, int width, int height); /* * Push a MJPEG frame. Decoded via libjpeg-turbo to planar YUV before upload. * Returns false if compiled without HAVE_TURBOJPEG. */ bool xorg_viewer_push_mjpeg(Xorg_Viewer *v, const uint8_t *data, size_t size); /* Change scale/anchor at any time; takes effect on the next render. */ void xorg_viewer_set_scale(Xorg_Viewer *v, Xorg_Scale scale); void xorg_viewer_set_anchor(Xorg_Viewer *v, Xorg_Anchor anchor); /* * Process pending window events. * Returns false when the user has closed the window. * Must be called from the thread that created the viewer. */ bool xorg_viewer_poll(Xorg_Viewer *v); void xorg_viewer_close(Xorg_Viewer *v);