2023-04-27 19:35:18 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <rfb/rfb.h>
|
|
|
|
#include <xkbcommon/xkbcommon.h>
|
|
|
|
|
|
|
|
#include <xf86drm.h>
|
|
|
|
#include <i915_drm.h>
|
|
|
|
#include <amdgpu_drm.h>
|
|
|
|
#include <xf86drmMode.h>
|
|
|
|
#include <linux/dma-buf.h>
|
2023-04-29 02:05:13 +08:00
|
|
|
#include <va/va.h>
|
2023-04-27 19:35:18 +08:00
|
|
|
|
|
|
|
|
|
|
|
#define BYTES_PER_PIXEL 4
|
|
|
|
|
|
|
|
struct vnc_opt
|
|
|
|
{
|
|
|
|
int port;
|
|
|
|
struct in_addr *bind;
|
|
|
|
char *bind6;
|
|
|
|
char disable_ipv6;
|
|
|
|
int sleep_ns;
|
2023-04-28 14:13:46 +08:00
|
|
|
char always_shared;
|
|
|
|
char disable_cmpfb;
|
2023-04-27 19:35:18 +08:00
|
|
|
char *desktop_name;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct kmsvnc_data
|
|
|
|
{
|
2023-04-28 14:13:46 +08:00
|
|
|
char *debug_capture_fb;
|
2023-04-27 19:35:18 +08:00
|
|
|
char *card;
|
|
|
|
char *force_driver;
|
|
|
|
struct vnc_opt *vnc_opt;
|
|
|
|
char disable_input;
|
2023-04-29 15:17:06 +08:00
|
|
|
int va_derive_enabled;
|
2023-04-28 14:13:46 +08:00
|
|
|
int source_plane;
|
|
|
|
int source_crtc;
|
2023-04-27 19:35:18 +08:00
|
|
|
struct kmsvnc_drm_data *drm;
|
|
|
|
struct kmsvnc_input_data *input;
|
|
|
|
struct kmsvnc_keymap_data *keymap;
|
2023-04-29 02:05:13 +08:00
|
|
|
struct kmsvnc_va_data *va;
|
2023-04-27 19:35:18 +08:00
|
|
|
rfbScreenInfoPtr server;
|
|
|
|
char shutdown;
|
|
|
|
char *buf;
|
|
|
|
char *buf1;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct key_iter_search
|
|
|
|
{
|
|
|
|
xkb_keysym_t keysym;
|
|
|
|
|
|
|
|
xkb_keycode_t keycode;
|
|
|
|
xkb_level_index_t level;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct kmsvnc_keymap_data
|
|
|
|
{
|
|
|
|
struct xkb_context *ctx;
|
|
|
|
struct xkb_keymap *map;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct kmsvnc_input_data {
|
|
|
|
int uinput_fd;
|
|
|
|
char *keystate;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct kmsvnc_drm_funcs
|
|
|
|
{
|
|
|
|
void (*sync_start)(int);
|
|
|
|
void (*sync_end)(int);
|
|
|
|
void (*convert)(const char *, int, int, char *);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct kmsvnc_drm_data
|
|
|
|
{
|
|
|
|
int drm_fd;
|
|
|
|
drmVersionPtr drm_ver;
|
|
|
|
int prime_fd;
|
|
|
|
drmModePlane *plane;
|
|
|
|
drmModePlaneRes *plane_res;
|
2023-04-27 23:42:41 +08:00
|
|
|
drmModeFB2 *mfb;
|
2023-04-27 19:35:18 +08:00
|
|
|
u_int32_t plane_id;
|
|
|
|
int mmap_fd;
|
|
|
|
size_t mmap_size;
|
|
|
|
off_t mmap_offset;
|
|
|
|
char *mapped;
|
2023-04-29 15:17:06 +08:00
|
|
|
char skip_map;
|
2023-04-27 19:35:18 +08:00
|
|
|
struct kmsvnc_drm_funcs *funcs;
|
2023-04-29 02:05:13 +08:00
|
|
|
char *pixfmt_name;
|
|
|
|
char *mod_vendor;
|
|
|
|
char *mod_name;
|
2023-04-27 19:35:18 +08:00
|
|
|
};
|
|
|
|
|
2023-04-29 02:05:13 +08:00
|
|
|
struct kmsvnc_va_data
|
|
|
|
{
|
|
|
|
VADisplay dpy;
|
|
|
|
int render_node_fd;
|
|
|
|
VASurfaceID surface_id;
|
|
|
|
VAImage *image;
|
|
|
|
char *imgbuf;
|
2023-04-29 15:17:06 +08:00
|
|
|
char is_bgr; // bgr -> rgb
|
|
|
|
char is_xrgb; // shift 8
|
|
|
|
char derive_enabled;
|
2023-04-29 02:05:13 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
#define KMSVNC_FATAL(...) do{ fprintf(stderr, __VA_ARGS__); return 1; } while(0)
|
|
|
|
#define KMSVNC_ARRAY_ELEMENTS(x) (sizeof(x) / sizeof(x[0]))
|
|
|
|
#define KMSVNC_FOURCC_TO_INT(a,b,c,d) (((a) << 0) + ((b) << 8) + ((c) << 16) + ((d) << 24))
|