20#ifndef FREERDP_CHANNEL_RDPGFX_H
21#define FREERDP_CHANNEL_RDPGFX_H
23#include <freerdp/api.h>
24#include <freerdp/dvc.h>
25#include <freerdp/types.h>
26#include <freerdp/config.h>
32#define RDPGFX_CHANNEL_NAME "rdpgfx"
33#define RDPGFX_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::Graphics"
57#define GFX_PIXEL_FORMAT_XRGB_8888 0x20
58#define GFX_PIXEL_FORMAT_ARGB_8888 0x21
60typedef BYTE RDPGFX_PIXELFORMAT;
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
94#define RDPGFX_HEADER_SIZE 8
106typedef enum WINPR_C23_ENUM_TYPE(uint32_t)
108#if defined(WITH_GFX_AV1)
109 RDPGFX_CAPVERSION_FRDP_1 = 0x00010000u,
111#if defined(WITH_GFX_AV2)
112 RDPGFX_CAPVERSION_FRDP_2 = 0x00020000u,
115 RDPGFX_CAPVERSION_8 = 0x00080004u,
116 RDPGFX_CAPVERSION_81 = 0x00080105u,
117 RDPGFX_CAPVERSION_10 = 0x000A0002u,
118 RDPGFX_CAPVERSION_101 = 0x000A0100u,
119 RDPGFX_CAPVERSION_102 = 0x000A0200u,
120 RDPGFX_CAPVERSION_103 = 0x000A0301u,
121 RDPGFX_CAPVERSION_104 = 0x000A0400u,
122 RDPGFX_CAPVERSION_105 = 0x000A0502u,
123 RDPGFX_CAPVERSION_106 =
129 RDPGFX_CAPVERSION_106_ERR = 0x000A0601u,
130 RDPGFX_CAPVERSION_107 = 0x000A0701u,
131#if defined(WITH_GFX_AZURE)
132 RDPGFX_CAPVERSION_111 = 0x000b0101u,
133 RDPGFX_CAPVERSION_112 = 0x000b0200u,
134 RDPGFX_CAPVERSION_113 = 0x000b0300u,
135 RDPGFX_CAPVERSION_115 = 0x000b0500u
139#define RDPGFX_CAPSET_BASE_SIZE 8
148typedef enum WINPR_C23_ENUM_TYPE(uint32_t)
150 RDPGFX_CAPS_FLAG_THINCLIENT = 0x00000001U,
151 RDPGFX_CAPS_FLAG_SMALL_CACHE = 0x00000002U,
152 RDPGFX_CAPS_FLAG_AVC420_ENABLED = 0x00000010U,
153 RDPGFX_CAPS_FLAG_AVC_DISABLED = 0x00000020U,
154 RDPGFX_CAPS_FLAG_AVC_THINCLIENT = 0x00000040U,
155 RDPGFX_CAPS_FLAG_SCALEDMAP_DISABLE = 0x00000080U
156#if defined(WITH_GFX_AZURE)
158 RDPGFX_CAPS_FLAG_SCP_DISABLE = 0x00000100,
159 RDPGFX_CAPS_FLAG_HEVC_ENABLE = 0x00000400,
160 RDPGFX_CAPS_FLAG_HEVC_I444 = 0x00002000
162#if defined(WITH_GFX_AV1) || defined(WITH_GFX_AV2)
166 RDPGFX_CAPS_FLAG_AV1_I444_SUPPORTED = 0x10000000U,
167 RDPGFX_CAPS_FLAG_AV1_I444_DISABLED = 0x20000000U
174 UINT32 capsDataLength;
181 UINT32 capsDataLength;
188 UINT32 capsDataLength;
195typedef enum WINPR_C23_ENUM_TYPE(uint16_t)
197 RDPGFX_CODECID_UNCOMPRESSED = 0x0000u,
198#if defined(WITH_GFX_AV1) || defined(WITH_GFX_AV2)
199 RDPGFX_CODECID_AV1 = 0x0001u,
202 RDPGFX_CODECID_CAVIDEO = 0x0003u,
203 RDPGFX_CODECID_CLEARCODEC = 0x0008u,
204 RDPGFX_CODECID_CAPROGRESSIVE = 0x0009u,
205 RDPGFX_CODECID_PLANAR = 0x000Au,
206 RDPGFX_CODECID_AVC420 = 0x000Bu,
207 RDPGFX_CODECID_ALPHA = 0x000Cu,
208 RDPGFX_CODECID_CAPROGRESSIVE_V2 = 0x000Du,
209 RDPGFX_CODECID_AVC444 = 0x000Eu,
210 RDPGFX_CODECID_AVC444v2 = 0x000Fu,
211#if defined(WITH_GFX_AZURE)
212 RDPGFX_CODECID_HEVC420 = 0x0010u,
214 RDPGFX_CODECID_HEVC444 =
217 RDPGFX_CODECID_MAX = 0x0012u
219 RDPGFX_CODECID_MAX = 0x0010u
223#define RDPGFX_WIRE_TO_SURFACE_PDU_1_SIZE 17
229 RDPGFX_PIXELFORMAT pixelFormat;
231 UINT32 bitmapDataLength;
235#define RDPGFX_WIRE_TO_SURFACE_PDU_2_SIZE 13
241 UINT32 codecContextId;
242 RDPGFX_PIXELFORMAT pixelFormat;
243 UINT32 bitmapDataLength;
267 UINT32 codecContextId;
274 UINT16 fillRectCount;
281 UINT16 surfaceIdDest;
313 RDPGFX_PIXELFORMAT pixelFormat;
321#define RDPGFX_START_FRAME_PDU_SIZE 8
329#define RDPGFX_END_FRAME_PDU_SIZE 4
336#define QUEUE_DEPTH_UNAVAILABLE 0x00000000
337#define SUSPEND_FRAME_ACKNOWLEDGEMENT 0xFFFFFFFF
343 UINT32 totalFramesDecoded;
358 UINT32 outputOriginX;
359 UINT32 outputOriginY;
366 UINT32 outputOriginX;
367 UINT32 outputOriginY;
378#define RDPGFX_CACHE_ENTRY_MAX_COUNT 5462
382 UINT16 cacheEntriesCount;
388 UINT16 importedEntriesCount;
389 UINT16 cacheSlots[RDPGFX_CACHE_ENTRY_MAX_COUNT];
435 UINT32 numRegionRects;
449 UINT32 cbAvc420EncodedBitstream1;
459 INT16 frameAttributes;