FreeRDP
Loading...
Searching...
No Matches
channels/gfxredir.h
1
20#ifndef FREERDP_CHANNEL_GFXREDIR_H
21#define FREERDP_CHANNEL_GFXREDIR_H
22
23#include <freerdp/api.h>
24#include <freerdp/types.h>
25
26#ifdef __cplusplus
27extern "C"
28{
29#endif
30
31#define GFXREDIR_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::RemoteAppGraphicsRedirection"
32
33/* GFXREDIR_LEGACY_CAPS_PDU.version */
34#define GFXREDIR_CHANNEL_VERSION_LEGACY 1
35
36#define GFXREDIR_CHANNEL_VERSION_MAJOR 2
37#define GFXREDIR_CHANNEL_VERSION_MINOR 0
38
39/* GFXREDIR_CAPS_VERSION1 */
40#define GFXREDIR_CMDID_LEGACY_CAPS 0x00000001
41#define GFXREDIR_CMDID_ERROR 0x00000006
42#define GFXREDIR_CMDID_CAPS_ADVERTISE 0x00000008
43#define GFXREDIR_CMDID_CAPS_CONFIRM 0x00000009
44/* GFXREDIR_CAPS_VERSION2_0 */
45#define GFXREDIR_CMDID_OPEN_POOL 0x0000000a
46#define GFXREDIR_CMDID_CLOSE_POOL 0x0000000b
47#define GFXREDIR_CMDID_CREATE_BUFFER 0x0000000c
48#define GFXREDIR_CMDID_DESTROY_BUFFER 0x0000000d
49#define GFXREDIR_CMDID_PRESENT_BUFFER 0x0000000e
50#define GFXREDIR_CMDID_PRESENT_BUFFER_ACK 0x0000000f
51
52/* GFXREDIR_HEADER */
53#define GFXREDIR_HEADER_SIZE 8
54
55/* GFXREDIR_CAPS_HEADER */
56#define GFXREDIR_CAPS_HEADER_SIZE 12
57/* GFXREDIR_CAPS_HEADER.signature */
58#define GFXREDIR_CAPS_SIGNATURE 0x53504143 /* = 'SPAC' */
59/* GFXREDIR_CAPS_HEADER.version */
60#define GFXREDIR_CAPS_VERSION1 0x1
61#define GFXREDIR_CAPS_VERSION2_0 0x2000
62
63/* GFXREDIR_CREATE_BUFFER_PDU.format */
64#define GFXREDIR_BUFFER_PIXEL_FORMAT_XRGB_8888 1
65#define GFXREDIR_BUFFER_PIXEL_FORMAT_ARGB_8888 2
66
67/* GFXREDIR_PRESENT_BUFFER_PDU.numOpaqueRects */
68#define GFXREDIR_MAX_OPAQUE_RECTS 0x10
69
70typedef struct
71{
72 UINT32 cmdId;
73 UINT32 length;
75
76typedef struct
77{
78 UINT16 version; // GFXREDIR_CHANNEL_VERSION_LEGACY
80
81typedef struct
82{
83 UINT32 signature; // GFXREDIR_CAPS_SIGNATURE
84 UINT32 version; // GFXREDIR_CAPS_VERSION
85 UINT32 length; // GFXREDIR_CAPS_HEADER_SIZE + size of capsData
87
88typedef struct
89{
91 UINT32 supportedFeatures; /* Reserved for future extensions */
93
94typedef struct
95{
96 UINT32 errorCode;
98
99typedef struct
100{
101 UINT32 length; // length of caps;
102 const BYTE* caps; // points variable length array of GFXREDIR_CAPS_HEADER.
104
105typedef struct
106{
107 UINT32 version; // confirmed version, must be one of advertised by client.
108 UINT32 length; // GFXREDIR_CAPS_HEADER_SIZE + size of capsData.
109 const BYTE* capsData; // confirmed capsData from selected GFXREDIR_CAPS_HEADER.capsData.
111
112typedef struct
113{
114 UINT64 poolId;
115 UINT64 poolSize;
116 UINT32 sectionNameLength; // number of characters, must include null terminated char.
117 const unsigned short* sectionName; // Windows-style 2 bytes wchar_t with null-terminated.
119
120typedef struct
121{
122 UINT64 poolId;
124
125typedef struct
126{
127 UINT64 poolId;
128 UINT64 bufferId;
129 UINT64 offset;
130 UINT32 stride;
131 UINT32 width;
132 UINT32 height;
133 UINT32 format; // GFXREDIR_BUFFER_PIXEL_FORMAT_
135
136typedef struct
137{
138 UINT64 bufferId;
140
141typedef struct
142{
143 UINT64 timestamp;
144 UINT64 presentId;
145 UINT64 windowId;
146 UINT64 bufferId;
147 UINT32 orientation; // 0, 90, 180 or 270.
148 UINT32 targetWidth;
149 UINT32 targetHeight;
150 RECTANGLE_32 dirtyRect;
151 UINT32 numOpaqueRects;
152 RECTANGLE_32* opaqueRects;
154
155typedef struct
156{
157 UINT64 windowId;
158 UINT64 presentId;
160
161#ifdef __cplusplus
162}
163#endif
164
165#endif /* FREERDP_CHANNEL_GFXREDIR_H */