FreeRDP
Loading...
Searching...
No Matches
channels/rdpecam.h
1
20#ifndef FREERDP_CHANNEL_RDPECAM_H
21#define FREERDP_CHANNEL_RDPECAM_H
22
23#include <freerdp/api.h>
24#include <freerdp/dvc.h>
25#include <freerdp/types.h>
26
31#define RDPECAM_CHANNEL_NAME "rdpecam"
32#define RDPECAM_DVC_CHANNEL_NAME "rdpecam"
33#define RDPECAM_CONTROL_DVC_CHANNEL_NAME "RDCamera_Device_Enumerator"
34
35#ifdef __cplusplus
36extern "C"
37{
38#endif
39
40 typedef enum
41 {
42 CAM_MSG_ID_Invalid = 0x00,
43 CAM_MSG_ID_SuccessResponse = 0x01,
44 CAM_MSG_ID_ErrorResponse = 0x02,
45 CAM_MSG_ID_SelectVersionRequest = 0x03,
46 CAM_MSG_ID_SelectVersionResponse = 0x04,
47 CAM_MSG_ID_DeviceAddedNotification = 0x05,
48 CAM_MSG_ID_DeviceRemovedNotification = 0x06,
49 CAM_MSG_ID_ActivateDeviceRequest = 0x07,
50 CAM_MSG_ID_DeactivateDeviceRequest = 0x08,
51 CAM_MSG_ID_StreamListRequest = 0x09,
52 CAM_MSG_ID_StreamListResponse = 0x0A,
53 CAM_MSG_ID_MediaTypeListRequest = 0x0B,
54 CAM_MSG_ID_MediaTypeListResponse = 0x0C,
55 CAM_MSG_ID_CurrentMediaTypeRequest = 0x0D,
56 CAM_MSG_ID_CurrentMediaTypeResponse = 0x0E,
57 CAM_MSG_ID_StartStreamsRequest = 0x0F,
58 CAM_MSG_ID_StopStreamsRequest = 0x10,
59 CAM_MSG_ID_SampleRequest = 0x11,
60 CAM_MSG_ID_SampleResponse = 0x12,
61 CAM_MSG_ID_SampleErrorResponse = 0x13,
62 CAM_MSG_ID_PropertyListRequest = 0x14,
63 CAM_MSG_ID_PropertyListResponse = 0x15,
64 CAM_MSG_ID_PropertyValueRequest = 0x16,
65 CAM_MSG_ID_PropertyValueResponse = 0x17,
66 CAM_MSG_ID_SetPropertyValueRequest = 0x18,
67 } CAM_MSG_ID;
68
69#define CAM_HEADER_SIZE 2
70
71typedef struct
72{
73 BYTE Version;
74 CAM_MSG_ID MessageId;
76
77/* Messages Exchanged on the Device Enumeration Channel (2.2.2) */
78
79typedef struct
80{
83
84typedef struct
85{
88
89typedef struct
90{
92 WCHAR* DeviceName;
93 char* VirtualChannelName;
95
96typedef struct
97{
99 char* VirtualChannelName;
101
102/* Messages Exchanged on Device Channels (2.2.3) */
103
104typedef struct
105{
108
109typedef enum
110{
111 CAM_ERROR_CODE_None = 0x00000000,
112 CAM_ERROR_CODE_UnexpectedError = 0x00000001,
113 CAM_ERROR_CODE_InvalidMessage = 0x00000002,
114 CAM_ERROR_CODE_NotInitialized = 0x00000003,
115 CAM_ERROR_CODE_InvalidRequest = 0x00000004,
116 CAM_ERROR_CODE_InvalidStreamNumber = 0x00000005,
117 CAM_ERROR_CODE_InvalidMediaType = 0x00000006,
118 CAM_ERROR_CODE_OutOfMemory = 0x00000007,
119 CAM_ERROR_CODE_ItemNotFound = 0x00000008,
120 CAM_ERROR_CODE_SetNotFound = 0x00000009,
121 CAM_ERROR_CODE_OperationNotSupported = 0x0000000A,
122} CAM_ERROR_CODE;
123
124typedef struct
125{
127 CAM_ERROR_CODE ErrorCode;
129
130typedef struct
131{
134
135typedef struct
136{
139
140typedef struct
141{
144
145typedef enum
146{
147 CAM_STREAM_FRAME_SOURCE_TYPE_Color = 0x0001,
148 CAM_STREAM_FRAME_SOURCE_TYPE_Infrared = 0x0002,
149 CAM_STREAM_FRAME_SOURCE_TYPE_Custom = 0x0008,
150} CAM_STREAM_FRAME_SOURCE_TYPES;
151
152typedef enum
153{
154 CAM_STREAM_CATEGORY_Capture = 0x01,
155} CAM_STREAM_CATEGORY;
156
157typedef struct
158{
159 CAM_STREAM_FRAME_SOURCE_TYPES FrameSourceTypes;
160 CAM_STREAM_CATEGORY StreamCategory;
161 BYTE Selected;
162 BYTE CanBeShared;
164
165typedef struct
166{
168 BYTE N_Descriptions;
169 CAM_STREAM_DESCRIPTION StreamDescriptions[255];
171
172typedef struct
173{
175 BYTE StreamIndex;
177
178typedef enum
179{
180 CAM_MEDIA_FORMAT_INVALID = 0x00,
181 CAM_MEDIA_FORMAT_H264 = 0x01,
182 CAM_MEDIA_FORMAT_MJPG = 0x02,
183 CAM_MEDIA_FORMAT_YUY2 = 0x03,
184 CAM_MEDIA_FORMAT_NV12 = 0x04,
185 CAM_MEDIA_FORMAT_I420 = 0x05,
186 CAM_MEDIA_FORMAT_RGB24 = 0x06,
187 CAM_MEDIA_FORMAT_RGB32 = 0x07,
188} CAM_MEDIA_FORMAT;
189
190typedef enum
191{
192 AM_MEDIA_TYPE_DESCRIPTION_FLAG_Invalid = 0x00,
193 CAM_MEDIA_TYPE_DESCRIPTION_FLAG_DecodingRequired = 0x01,
194 CAM_MEDIA_TYPE_DESCRIPTION_FLAG_BottomUpImage = 0x02,
195} CAM_MEDIA_TYPE_DESCRIPTION_FLAGS;
196
197typedef struct
198{
199 CAM_MEDIA_FORMAT Format;
200 UINT32 Width;
201 UINT32 Height;
202 UINT32 FrameRateNumerator;
203 UINT32 FrameRateDenominator;
204 UINT32 PixelAspectRatioNumerator;
205 UINT32 PixelAspectRatioDenominator;
206 CAM_MEDIA_TYPE_DESCRIPTION_FLAGS Flags;
208
209typedef struct
210{
212 size_t N_Descriptions;
213 CAM_MEDIA_TYPE_DESCRIPTION* MediaTypeDescriptions;
215
216typedef struct
217{
219 BYTE StreamIndex;
221
222typedef struct
223{
225 CAM_MEDIA_TYPE_DESCRIPTION MediaTypeDescription;
227
228typedef struct
229{
230 BYTE StreamIndex;
231 CAM_MEDIA_TYPE_DESCRIPTION MediaTypeDescription;
233
234typedef struct
235{
237 BYTE N_Infos;
238 CAM_START_STREAM_INFO StartStreamsInfo[255];
240
241typedef struct
242{
245
246typedef struct
247{
249 BYTE StreamIndex;
251
252typedef struct
253{
255 BYTE StreamIndex;
256 size_t SampleSize;
257 BYTE* Sample;
259
260typedef struct
261{
263 BYTE StreamIndex;
264 CAM_ERROR_CODE ErrorCode;
266
267typedef struct
268{
271
272typedef enum
273{
274 CAM_PROPERTY_SET_CameraControl = 0x01,
275 CAM_PROPERTY_SET_VideoProcAmp = 0x02
276} CAM_PROPERTY_SET;
277
278/* CameraControl properties */
279typedef enum
280{
281 CAM_PROPERTY_ID_CAMERA_CONTROL_Exposure = 0x01,
282 CAM_PROPERTY_ID_CAMERA_CONTROL_Focus = 0x02,
283 CAM_PROPERTY_ID_CAMERA_CONTROL_Pan = 0x03,
284 CAM_PROPERTY_ID_CAMERA_CONTROL_Roll = 0x04,
285 CAM_PROPERTY_ID_CAMERA_CONTROL_Tilt = 0x05,
286 CAM_PROPERTY_ID_CAMERA_CONTROL_Zoom = 0x06
287} CAM_PROPERTY_ID;
288
289/* VideoProcAmp properties */
290typedef enum
291{
292 CAM_PROPERTY_ID_VIDEO_PROC_AMP_BacklightCompensation = 0x01,
293 CAM_PROPERTY_ID_VIDEO_PROC_AMP_Brightness = 0x02,
294 CAM_PROPERTY_ID_VIDEO_PROC_AMP_Contrast = 0x03,
295 CAM_PROPERTY_ID_VIDEO_PROC_AMP_Hue = 0x04,
296 CAM_PROPERTY_ID_VIDEO_PROC_AMP_WhiteBalance = 0x05
297} CAM_PROPERTY_ID_VIDEO;
298
299typedef enum
300{
301 CAM_PROPERTY_CAPABILITY_Manual = 0x01u,
302 CAM_PROPERTY_CAPABILITY_Auto = 0x02u
303} CAM_PROPERTY_CAPABILITIES;
304
305typedef struct
306{
307 CAM_PROPERTY_SET PropertySet;
308 BYTE PropertyId;
309 UINT32 Capabilities;
310 INT32 MinValue;
311 INT32 MaxValue;
312 INT32 Step;
313 INT32 DefaultValue;
315
316typedef struct
317{
319 size_t N_Properties;
320 CAM_PROPERTY_DESCRIPTION* Properties;
322
323typedef struct
324{
326 CAM_PROPERTY_SET PropertySet;
327 BYTE PropertyId;
329
330typedef enum
331{
332 CAM_PROPERTY_MODE_Manual = 0x01,
333 CAM_PROPERTY_MODE_Auto = 0x02,
334} CAM_PROPERTY_MODE;
335
336typedef struct
337{
338 CAM_PROPERTY_MODE Mode;
339 INT32 Value;
341
342typedef struct
343{
345 CAM_PROPERTY_VALUE PropertyValue;
347
348typedef struct
349{
351 CAM_PROPERTY_SET PropertySet;
352 BYTE PropertyId;
353 CAM_PROPERTY_VALUE PropertyValue;
355
356#ifdef __cplusplus
357}
358#endif
359#endif /* FREERDP_CHANNEL_RDPECAM_H */