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
62#define RDPGFX_CMDID_UNUSED_0000 0x0000
63#define RDPGFX_CMDID_WIRETOSURFACE_1 0x0001
64#define RDPGFX_CMDID_WIRETOSURFACE_2 0x0002
65#define RDPGFX_CMDID_DELETEENCODINGCONTEXT 0x0003
66#define RDPGFX_CMDID_SOLIDFILL 0x0004
67#define RDPGFX_CMDID_SURFACETOSURFACE 0x0005
68#define RDPGFX_CMDID_SURFACETOCACHE 0x0006
69#define RDPGFX_CMDID_CACHETOSURFACE 0x0007
70#define RDPGFX_CMDID_EVICTCACHEENTRY 0x0008
71#define RDPGFX_CMDID_CREATESURFACE 0x0009
72#define RDPGFX_CMDID_DELETESURFACE 0x000A
73#define RDPGFX_CMDID_STARTFRAME 0x000B
74#define RDPGFX_CMDID_ENDFRAME 0x000C
75#define RDPGFX_CMDID_FRAMEACKNOWLEDGE 0x000D
76#define RDPGFX_CMDID_RESETGRAPHICS 0x000E
77#define RDPGFX_CMDID_MAPSURFACETOOUTPUT 0x000F
78#define RDPGFX_CMDID_CACHEIMPORTOFFER 0x0010
79#define RDPGFX_CMDID_CACHEIMPORTREPLY 0x0011
80#define RDPGFX_CMDID_CAPSADVERTISE 0x0012
81#define RDPGFX_CMDID_CAPSCONFIRM 0x0013
82#define RDPGFX_CMDID_UNUSED_0014 0x0014
83#define RDPGFX_CMDID_MAPSURFACETOWINDOW 0x0015
84#define RDPGFX_CMDID_QOEFRAMEACKNOWLEDGE 0x0016
85#define RDPGFX_CMDID_MAPSURFACETOSCALEDOUTPUT 0x0017
86#define RDPGFX_CMDID_MAPSURFACETOSCALEDWINDOW 0x0018
87
88#define RDPGFX_HEADER_SIZE 8
89
90typedef struct
91{
92 UINT16 cmdId;
93 UINT16 flags;
94 UINT32 pduLength;
96
100#if defined(WITH_GFX_AV1)
101#define RDPGFX_CAPVERSION_FRDP_1 0x00010000 /* Custom capversion for FreeRDP extensions */
102#endif
103
104#define RDPGFX_CAPVERSION_8 0x00080004
105#define RDPGFX_CAPVERSION_81 0x00080105
106#define RDPGFX_CAPVERSION_10 0x000A0002
107#define RDPGFX_CAPVERSION_101 0x000A0100
108#define RDPGFX_CAPVERSION_102 0x000A0200
109#define RDPGFX_CAPVERSION_103 0x000A0301
110#define RDPGFX_CAPVERSION_104 0x000A0400
111#define RDPGFX_CAPVERSION_105 0x000A0502
112#define RDPGFX_CAPVERSION_106 \
113 0x000A0600
118#define RDPGFX_CAPVERSION_106_ERR 0x000A0601
119#define RDPGFX_CAPVERSION_107 0x000A0701
121#define RDPGFX_CAPSET_BASE_SIZE 8
122
123typedef struct
124{
125 UINT32 version;
126 UINT32 length;
127 UINT32 flags;
129
130#define RDPGFX_CAPS_FLAG_THINCLIENT 0x00000001U /* 8.0+ */
131#define RDPGFX_CAPS_FLAG_SMALL_CACHE 0x00000002U /* 8.0+ */
132#define RDPGFX_CAPS_FLAG_AVC420_ENABLED 0x00000010U /* 8.1+ */
133#define RDPGFX_CAPS_FLAG_AVC_DISABLED 0x00000020U /* 10.0+ */
134#define RDPGFX_CAPS_FLAG_AVC_THINCLIENT 0x00000040U /* 10.3+ */
135#define RDPGFX_CAPS_FLAG_SCALEDMAP_DISABLE 0x00000080U /* 10.7+ */
136
137#if defined(WITH_GFX_AV1)
138#define RDPGFX_CAPS_FLAG_AV1_I444_SUPPORTED \
1390x10000000U
141#define RDPGFX_CAPS_FLAG_AV1_I444_DISABLED \
1420x20000000U
144#endif
145typedef struct
146{
147 UINT32 version;
148 UINT32 capsDataLength;
149 UINT32 flags;
151
152typedef struct
153{
154 UINT32 version;
155 UINT32 capsDataLength;
156 UINT32 flags;
158
159typedef struct
160{
161 UINT32 version;
162 UINT32 capsDataLength;
163 UINT32 flags;
165
170#define RDPGFX_CODECID_UNCOMPRESSED 0x0000
171#if defined(WITH_GFX_AV1)
172#define RDPGFX_CODECID_AV1 \
1730x0001
174#endif
175#define RDPGFX_CODECID_CAVIDEO 0x0003
176#define RDPGFX_CODECID_CLEARCODEC 0x0008
177#define RDPGFX_CODECID_PLANAR 0x000A
178#define RDPGFX_CODECID_AVC420 0x000B
179#define RDPGFX_CODECID_ALPHA 0x000C
180#define RDPGFX_CODECID_AVC444 0x000E
181#define RDPGFX_CODECID_AVC444v2 0x000F
182
183#define RDPGFX_WIRE_TO_SURFACE_PDU_1_SIZE 17
184
185typedef struct
186{
187 UINT16 surfaceId;
188 UINT16 codecId;
189 RDPGFX_PIXELFORMAT pixelFormat;
190 RECTANGLE_16 destRect;
191 UINT32 bitmapDataLength;
192 BYTE* bitmapData;
194
195#define RDPGFX_CODECID_CAPROGRESSIVE 0x0009
196#define RDPGFX_CODECID_CAPROGRESSIVE_V2 0x000D
197
198#define RDPGFX_WIRE_TO_SURFACE_PDU_2_SIZE 13
199
200typedef struct
201{
202 UINT16 surfaceId;
203 UINT16 codecId;
204 UINT32 codecContextId;
205 RDPGFX_PIXELFORMAT pixelFormat;
206 UINT32 bitmapDataLength;
207 BYTE* bitmapData;
209
210typedef struct
211{
212 UINT32 surfaceId;
213 UINT32 codecId;
214 UINT32 contextId;
215 UINT32 format; /* FreeRDP color format. @see freerdp/codec/color.h */
216 UINT32 left;
217 UINT32 top;
218 UINT32 right;
219 UINT32 bottom;
220 UINT32 width;
221 UINT32 height;
222 UINT32 length;
223 BYTE* data;
224 void* extra;
226
227typedef struct
228{
229 UINT16 surfaceId;
230 UINT32 codecContextId;
232
233typedef struct
234{
235 UINT16 surfaceId;
236 RDPGFX_COLOR32 fillPixel;
237 UINT16 fillRectCount;
238 RECTANGLE_16* fillRects;
240
241typedef struct
242{
243 UINT16 surfaceIdSrc;
244 UINT16 surfaceIdDest;
245 RECTANGLE_16 rectSrc;
246 UINT16 destPtsCount;
247 RDPGFX_POINT16* destPts;
249
250typedef struct
251{
252 UINT16 surfaceId;
253 UINT64 cacheKey;
254 UINT16 cacheSlot;
255 RECTANGLE_16 rectSrc;
257
258typedef struct
259{
260 UINT16 cacheSlot;
261 UINT16 surfaceId;
262 UINT16 destPtsCount;
263 RDPGFX_POINT16* destPts;
265
266typedef struct
268 UINT16 cacheSlot;
270
271typedef struct
272{
273 UINT16 surfaceId;
274 UINT16 width;
275 UINT16 height;
276 RDPGFX_PIXELFORMAT pixelFormat;
278
279typedef struct
280{
281 UINT16 surfaceId;
283
284#define RDPGFX_START_FRAME_PDU_SIZE 8
285
286typedef struct
287{
288 UINT32 timestamp;
289 UINT32 frameId;
291
292#define RDPGFX_END_FRAME_PDU_SIZE 4
293
294typedef struct
295{
296 UINT32 frameId;
299#define QUEUE_DEPTH_UNAVAILABLE 0x00000000
300#define SUSPEND_FRAME_ACKNOWLEDGEMENT 0xFFFFFFFF
301
302typedef struct
303{
304 UINT32 queueDepth;
305 UINT32 frameId;
306 UINT32 totalFramesDecoded;
308
309typedef struct
310{
311 UINT32 width;
312 UINT32 height;
313 UINT32 monitorCount;
314 MONITOR_DEF* monitorDefArray;
316
317typedef struct
318{
319 UINT16 surfaceId;
320 UINT16 reserved;
321 UINT32 outputOriginX;
322 UINT32 outputOriginY;
324
325typedef struct
326{
327 UINT16 surfaceId;
328 UINT16 reserved;
329 UINT32 outputOriginX;
330 UINT32 outputOriginY;
331 UINT32 targetWidth;
332 UINT32 targetHeight;
334
335typedef struct
336{
337 UINT64 cacheKey;
338 UINT32 bitmapLength;
340
341#define RDPGFX_CACHE_ENTRY_MAX_COUNT 5462
342
343typedef struct
344{
345 UINT16 cacheEntriesCount;
346 RDPGFX_CACHE_ENTRY_METADATA cacheEntries[RDPGFX_CACHE_ENTRY_MAX_COUNT];
348
349typedef struct
350{
351 UINT16 importedEntriesCount;
352 UINT16 cacheSlots[RDPGFX_CACHE_ENTRY_MAX_COUNT];
354
355typedef struct
356{
357 UINT16 capsSetCount;
358 RDPGFX_CAPSET* capsSets;
360
361typedef struct
363 RDPGFX_CAPSET* capsSet;
365
366typedef struct
367{
368 UINT16 surfaceId;
369 UINT64 windowId;
370 UINT32 mappedWidth;
371 UINT32 mappedHeight;
373
374typedef struct
375{
376 UINT16 surfaceId;
377 UINT64 windowId;
378 UINT32 mappedWidth;
379 UINT32 mappedHeight;
380 UINT32 targetWidth;
381 UINT32 targetHeight;
383
384/* H264 */
385
386typedef struct
387{
388 BYTE qpVal;
389 BYTE qualityVal;
390
391 BYTE qp;
392 BYTE r;
393 BYTE p;
395
396typedef struct
397{
398 UINT32 numRegionRects;
399 RECTANGLE_16* regionRects;
400 RDPGFX_H264_QUANT_QUALITY* quantQualityVals;
402
403typedef struct
404{
406 UINT32 length;
407 BYTE* data;
409
410typedef struct
411{
412 UINT32 cbAvc420EncodedBitstream1;
413 BYTE LC;
414 RDPGFX_AVC420_BITMAP_STREAM bitstream[2];
416
417typedef struct
418{
419 UINT32 frameId;
420 UINT32 timestamp;
421 UINT16 timeDiffSE;
422 UINT16 timeDiffEDR;
424
425#ifdef __cplusplus
426}
427#endif
428#endif /* FREERDP_CHANNEL_RDPGFX_H */