FreeRDP
Loading...
Searching...
No Matches
shadow_encoder.h
1
19#ifndef FREERDP_SERVER_SHADOW_ENCODER_H
20#define FREERDP_SERVER_SHADOW_ENCODER_H
21
22#include <winpr/crt.h>
23#include <winpr/stream.h>
24
25#include <freerdp/freerdp.h>
26#include <freerdp/codecs.h>
27
28#include <freerdp/server/shadow.h>
29
31{
32 rdpShadowClient* client;
33 rdpShadowServer* server;
34
35 UINT32 width;
36 UINT32 height;
37 UINT32 codecs;
38
39 BYTE** grid;
40 UINT32 gridWidth;
41 UINT32 gridHeight;
42 BYTE* gridBuffer;
43 UINT32 maxTileWidth;
44 UINT32 maxTileHeight;
45
46 wStream* bs;
47
48 RFX_CONTEXT* rfx;
49 NSC_CONTEXT* nsc;
50 BITMAP_PLANAR_CONTEXT* planar;
51 BITMAP_INTERLEAVED_CONTEXT* interleaved;
52 H264_CONTEXT* h264;
53 PROGRESSIVE_CONTEXT* progressive;
54#if defined(WITH_GFX_AV1)
55 FREERDP_AV1_CONTEXT* av1;
56#endif
57 UINT32 fps;
58 UINT32 maxFps;
59 BOOL frameAck;
60 UINT32 frameId;
61 UINT32 lastAckframeId;
62 UINT32 queueDepth;
63
64 /* GFX RFX dirty tile skipping (shadow_rfx_dirty.c): snapshot of the last
65 * encoded content (BGRX copy sharing the surface geometry) plus per tile
66 * encoded flags. Only used by the GFX RFX path; a missing or mismatching
67 * snapshot encodes the frame in full. */
68 BYTE* gfxSnapshot;
69 BOOL* gfxTileEncoded;
70 UINT32 gfxSnapshotWidth;
71 UINT32 gfxSnapshotHeight;
72 UINT32 gfxSnapshotStep;
73 BOOL gfxSnapshotValid;
74};
75
76#ifdef __cplusplus
77extern "C"
78{
79#endif
80
81 WINPR_ATTR_NODISCARD int shadow_encoder_reset(rdpShadowEncoder* encoder);
82 WINPR_ATTR_NODISCARD int shadow_encoder_prepare(rdpShadowEncoder* encoder, UINT32 codecs);
83 WINPR_ATTR_NODISCARD UINT32 shadow_encoder_create_frame_id(rdpShadowEncoder* encoder);
84
85 void shadow_encoder_free(rdpShadowEncoder* encoder);
86
87 WINPR_ATTR_MALLOC(shadow_encoder_free, 1)
88 rdpShadowEncoder* shadow_encoder_new(rdpShadowClient* client);
89
90#ifdef __cplusplus
91}
92#endif
93
94#endif /* FREERDP_SERVER_SHADOW_ENCODER_H */