initial commit

This commit is contained in:
klein panic
2025-04-13 02:27:22 -04:00
commit cf50b5a377
18 changed files with 1920 additions and 0 deletions

57
include/recorder.h Normal file
View File

@@ -0,0 +1,57 @@
#ifndef RECORDER_H
#define RECORDER_H
#include <X11/Xlib.h>
#include <stdint.h>
#include <X11/extensions/XShm.h>
/* Recorder context now supports both full-screen and window-based capture */
typedef struct {
Display *display;
Window root;
Window target; // Target window for capture (if any)
int screen;
int x, y; // Capture region origin
int width;
int height;
int is_capturing;
int is_window_capture; // Flag: if 1, capture only the target window
int use_shm; // Flag: 1 if XShm is used
XShmSegmentInfo shm_info; // For XShm
} RecorderContext;
/*
* Initializes recorder. If target is 0, captures the full screen;
* otherwise, uses the specified target windows geometry.
*/
RecorderContext* recorder_init(Window target);
/*
* Grabs the pointer and lets the user click on a window to capture.
* This function blocks until a window is selected.
* On return, *target, *x, *y, *width, *height are filled out.
*/
void recorder_select_window(Display *display, Window *target, int *x, int *y, int *width, int *height);
/* Begin capturing (sets a flag) */
int recorder_start(RecorderContext* ctx);
/* Stop capturing */
int recorder_stop(RecorderContext* ctx);
/* Free allocated recorder context */
void recorder_cleanup(RecorderContext* ctx);
/* Capture one frame from the screen or target window.
Returns a buffer in RGB24 format (caller must free).
'linesize' returns the number of bytes per row.
*/
uint8_t* recorder_capture_frame(RecorderContext* ctx, int *linesize);
/* Update window geometry dynamically for window capture.
Re-fetches attributes of the target window.
*/
int recorder_update_window_geometry(RecorderContext *ctx);
#endif // RECORDER_H