FreeRDP
Loading...
Searching...
No Matches
channels/rdpgfx.h
1
20#ifndef FREERDP_CHANNEL_RDPGFX_H
21#define FREERDP_CHANNEL_RDPGFX_H
22
23#include <freerdp/api.h>
24#include <freerdp/dvc.h>
25#include <freerdp/types.h>
26#include <freerdp/config.h>
27
32#define RDPGFX_CHANNEL_NAME "rdpgfx"
33#define RDPGFX_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::Graphics"
34
35#ifdef __cplusplus
36extern "C"
37{
38#endif
43 typedef struct
44 {
45 UINT16 x;
46 UINT16 y;
48
49 typedef struct
50 {
51 BYTE B;
52 BYTE G;
53 BYTE R;
54 BYTE XA;
56
57#define GFX_PIXEL_FORMAT_XRGB_8888 0x20
58#define GFX_PIXEL_FORMAT_ARGB_8888 0x21
59
60typedef BYTE RDPGFX_PIXELFORMAT;
61
62typedef enum
63{
64 RDPGFX_CMDID_UNUSED_0000 = 0x0000u,
65 RDPGFX_CMDID_WIRETOSURFACE_1 = 0x0001u,
66 RDPGFX_CMDID_WIRETOSURFACE_2 = 0x0002u,
67 RDPGFX_CMDID_DELETEENCODINGCONTEXT = 0x0003u,
68 RDPGFX_CMDID_SOLIDFILL = 0x0004u,
69 RDPGFX_CMDID_SURFACETOSURFACE = 0x0005u,
70 RDPGFX_CMDID_SURFACETOCACHE = 0x0006u,
71 RDPGFX_CMDID_CACHETOSURFACE = 0x0007u,
72 RDPGFX_CMDID_EVICTCACHEENTRY = 0x0008u,
73 RDPGFX_CMDID_CREATESURFACE = 0x0009u,
74 RDPGFX_CMDID_DELETESURFACE = 0x000Au,
75 RDPGFX_CMDID_STARTFRAME = 0x000Bu,
76 RDPGFX_CMDID_ENDFRAME = 0x000Cu,
77 RDPGFX_CMDID_FRAMEACKNOWLEDGE = 0x000Du,
78 RDPGFX_CMDID_RESETGRAPHICS = 0x000Eu,
79 RDPGFX_CMDID_MAPSURFACETOOUTPUT = 0x000Fu,
80 RDPGFX_CMDID_CACHEIMPORTOFFER = 0x0010u,
81 RDPGFX_CMDID_CACHEIMPORTREPLY = 0x0011u,
82 RDPGFX_CMDID_CAPSADVERTISE = 0x0012u,
83 RDPGFX_CMDID_CAPSCONFIRM = 0x0013u,
84 RDPGFX_CMDID_UNUSED_0014 = 0x0014u,
85 RDPGFX_CMDID_MAPSURFACETOWINDOW = 0x0015u,
86 RDPGFX_CMDID_QOEFRAMEACKNOWLEDGE = 0x0016u,
87 RDPGFX_CMDID_MAPSURFACETOSCALEDOUTPUT = 0x0017u,
88 RDPGFX_CMDID_MAPSURFACETOSCALEDWINDOW = 0x0018u,
89 RDPGFX_CMDID_PROTECT_SURFACE = 0x0019u,
90 RDPGFX_CMDID_WATERMARK = 0x001Au,
91 RDPGFX_CMDID_MAX = 0x001Bu
92} RDPGFX_CMDID;
93
94#define RDPGFX_HEADER_SIZE 8
95
96typedef struct
97{
98 UINT16 cmdId;
99 UINT16 flags;
100 UINT32 pduLength;
102
106typedef enum WINPR_C23_ENUM_TYPE(uint32_t)
107{
108#if defined(WITH_GFX_AV1)
109 RDPGFX_CAPVERSION_FRDP_1 = 0x00010000u,
110#endif
111 RDPGFX_CAPVERSION_8 = 0x00080004u,
112 RDPGFX_CAPVERSION_81 = 0x00080105u,
113 RDPGFX_CAPVERSION_10 = 0x000A0002u,
114 RDPGFX_CAPVERSION_101 = 0x000A0100u,
115 RDPGFX_CAPVERSION_102 = 0x000A0200u,
116 RDPGFX_CAPVERSION_103 = 0x000A0301u,
117 RDPGFX_CAPVERSION_104 = 0x000A0400u,
118 RDPGFX_CAPVERSION_105 = 0x000A0502u,
119 RDPGFX_CAPVERSION_106 =
120 0x000A0600u,
125 RDPGFX_CAPVERSION_106_ERR = 0x000A0601u,
126 RDPGFX_CAPVERSION_107 = 0x000A0701u,
127#if defined(WITH_GFX_AZURE)
128 RDPGFX_CAPVERSION_111 = 0x000b0101u,
129 RDPGFX_CAPVERSION_112 = 0x000b0200u,
130 RDPGFX_CAPVERSION_113 = 0x000b0300u,
131 RDPGFX_CAPVERSION_115 = 0x000b0500u
132#endif
133} RDPGFX_CAPVERSION;
134
135#define RDPGFX_CAPSET_BASE_SIZE 8
136
137typedef struct
138{
139 UINT32 version;
140 UINT32 length;
141 UINT32 flags;
143
144typedef enum WINPR_C23_ENUM_TYPE(uint32_t)
145{
146 RDPGFX_CAPS_FLAG_THINCLIENT = 0x00000001U, /* 8.0+ */
147 RDPGFX_CAPS_FLAG_SMALL_CACHE = 0x00000002U, /* 8.0+ */
148 RDPGFX_CAPS_FLAG_AVC420_ENABLED = 0x00000010U, /* 8.1+ */
149 RDPGFX_CAPS_FLAG_AVC_DISABLED = 0x00000020U, /* 10.0+ */
150 RDPGFX_CAPS_FLAG_AVC_THINCLIENT = 0x00000040U, /* 10.3+ */
151 RDPGFX_CAPS_FLAG_SCALEDMAP_DISABLE = 0x00000080U /* 10.7+ */
152#if defined(WITH_GFX_AZURE)
153 ,
154 RDPGFX_CAPS_FLAG_SCP_DISABLE = 0x00000100 /* 11.0+, undocumented, Azure only */
155#endif
156#if defined(WITH_GFX_AV1)
157 ,
158 RDPGFX_CAPS_FLAG_AV1_I444_SUPPORTED = 0x10000000U,
160 RDPGFX_CAPS_FLAG_AV1_I444_DISABLED =
161 0x20000000U
163#endif
164} RDPGFX_CAPS_FLAG;
165
166typedef struct
167{
168 UINT32 version;
169 UINT32 capsDataLength;
170 UINT32 flags;
172
173typedef struct
174{
175 UINT32 version;
176 UINT32 capsDataLength;
177 UINT32 flags;
179
180typedef struct
181{
182 UINT32 version;
183 UINT32 capsDataLength;
184 UINT32 flags;
186
190typedef enum WINPR_C23_ENUM_TYPE(uint16_t)
191{
192 RDPGFX_CODECID_UNCOMPRESSED = 0x0000u,
193#if defined(WITH_GFX_AV1)
194 RDPGFX_CODECID_AV1 =
195 0x0001u,
196#endif
197 RDPGFX_CODECID_CAVIDEO = 0x0003u,
198 RDPGFX_CODECID_CLEARCODEC = 0x0008u,
199 RDPGFX_CODECID_CAPROGRESSIVE = 0x0009u,
200 RDPGFX_CODECID_PLANAR = 0x000Au,
201 RDPGFX_CODECID_AVC420 = 0x000Bu,
202 RDPGFX_CODECID_ALPHA = 0x000Cu,
203 RDPGFX_CODECID_CAPROGRESSIVE_V2 = 0x000Du,
204 RDPGFX_CODECID_AVC444 = 0x000Eu,
205 RDPGFX_CODECID_AVC444v2 = 0x000Fu,
206 RDPGFX_CODECID_MAX = 0x0010u
207} RDPGFX_CODECID;
208
209#define RDPGFX_WIRE_TO_SURFACE_PDU_1_SIZE 17
210
211typedef struct
212{
213 UINT16 surfaceId;
214 UINT16 codecId;
215 RDPGFX_PIXELFORMAT pixelFormat;
216 RECTANGLE_16 destRect;
217 UINT32 bitmapDataLength;
218 BYTE* bitmapData;
220
221#define RDPGFX_WIRE_TO_SURFACE_PDU_2_SIZE 13
222
223typedef struct
224{
225 UINT16 surfaceId;
226 UINT16 codecId;
227 UINT32 codecContextId;
228 RDPGFX_PIXELFORMAT pixelFormat;
229 UINT32 bitmapDataLength;
230 BYTE* bitmapData;
232
233typedef struct
234{
235 UINT32 surfaceId;
236 UINT32 codecId;
237 UINT32 contextId;
238 UINT32 format; /* FreeRDP color format. @see freerdp/codec/color.h */
239 UINT32 left;
240 UINT32 top;
241 UINT32 right;
242 UINT32 bottom;
243 UINT32 width;
244 UINT32 height;
245 UINT32 length;
246 BYTE* data;
247 void* extra;
249
250typedef struct
251{
252 UINT16 surfaceId;
253 UINT32 codecContextId;
255
256typedef struct
257{
258 UINT16 surfaceId;
259 RDPGFX_COLOR32 fillPixel;
260 UINT16 fillRectCount;
261 RECTANGLE_16* fillRects;
263
264typedef struct
265{
266 UINT16 surfaceIdSrc;
267 UINT16 surfaceIdDest;
268 RECTANGLE_16 rectSrc;
269 UINT16 destPtsCount;
270 RDPGFX_POINT16* destPts;
272
273typedef struct
274{
275 UINT16 surfaceId;
276 UINT64 cacheKey;
277 UINT16 cacheSlot;
278 RECTANGLE_16 rectSrc;
280
281typedef struct
282{
283 UINT16 cacheSlot;
284 UINT16 surfaceId;
285 UINT16 destPtsCount;
286 RDPGFX_POINT16* destPts;
288
289typedef struct
290{
291 UINT16 cacheSlot;
293
294typedef struct
295{
296 UINT16 surfaceId;
297 UINT16 width;
298 UINT16 height;
299 RDPGFX_PIXELFORMAT pixelFormat;
301
302typedef struct
303{
304 UINT16 surfaceId;
306
307#define RDPGFX_START_FRAME_PDU_SIZE 8
308
309typedef struct
310{
311 UINT32 timestamp;
312 UINT32 frameId;
314
315#define RDPGFX_END_FRAME_PDU_SIZE 4
316
317typedef struct
318{
319 UINT32 frameId;
321
322#define QUEUE_DEPTH_UNAVAILABLE 0x00000000
323#define SUSPEND_FRAME_ACKNOWLEDGEMENT 0xFFFFFFFF
324
325typedef struct
326{
327 UINT32 queueDepth;
328 UINT32 frameId;
329 UINT32 totalFramesDecoded;
331
332typedef struct
333{
334 UINT32 width;
335 UINT32 height;
336 UINT32 monitorCount;
337 MONITOR_DEF* monitorDefArray;
339
340typedef struct
341{
342 UINT16 surfaceId;
343 UINT16 reserved;
344 UINT32 outputOriginX;
345 UINT32 outputOriginY;
347
348typedef struct
349{
350 UINT16 surfaceId;
351 UINT16 reserved;
352 UINT32 outputOriginX;
353 UINT32 outputOriginY;
354 UINT32 targetWidth;
355 UINT32 targetHeight;
357
358typedef struct
359{
360 UINT64 cacheKey;
361 UINT32 bitmapLength;
363
364#define RDPGFX_CACHE_ENTRY_MAX_COUNT 5462
365
366typedef struct
367{
368 UINT16 cacheEntriesCount;
369 RDPGFX_CACHE_ENTRY_METADATA cacheEntries[RDPGFX_CACHE_ENTRY_MAX_COUNT];
371
372typedef struct
373{
374 UINT16 importedEntriesCount;
375 UINT16 cacheSlots[RDPGFX_CACHE_ENTRY_MAX_COUNT];
377
378typedef struct
379{
380 UINT16 capsSetCount;
381 RDPGFX_CAPSET* capsSets;
383
384typedef struct
385{
386 RDPGFX_CAPSET* capsSet;
388
389typedef struct
390{
391 UINT16 surfaceId;
392 UINT64 windowId;
393 UINT32 mappedWidth;
394 UINT32 mappedHeight;
396
397typedef struct
398{
399 UINT16 surfaceId;
400 UINT64 windowId;
401 UINT32 mappedWidth;
402 UINT32 mappedHeight;
403 UINT32 targetWidth;
404 UINT32 targetHeight;
406
407/* H264 */
408
409typedef struct
410{
411 BYTE qpVal;
412 BYTE qualityVal;
413
414 BYTE qp;
415 BYTE r;
416 BYTE p;
418
419typedef struct
420{
421 UINT32 numRegionRects;
422 RECTANGLE_16* regionRects;
423 RDPGFX_H264_QUANT_QUALITY* quantQualityVals;
425
426typedef struct
427{
429 UINT32 length;
430 BYTE* data;
432
433typedef struct
434{
435 UINT32 cbAvc420EncodedBitstream1;
436 BYTE LC;
437 RDPGFX_AVC420_BITMAP_STREAM bitstream[2];
439
440typedef struct
441{
442 UINT32 frameId;
443 UINT32 timestamp;
444 UINT16 timeDiffSE;
445 UINT16 timeDiffEDR;
447
448#ifdef __cplusplus
449}
450#endif
451#endif /* FREERDP_CHANNEL_RDPGFX_H */