FreeRDP
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
36 extern "C"
37 {
38 #endif
39 
40  typedef enum
41  {
42  CAM_MSG_ID_SuccessResponse = 0x01,
43  CAM_MSG_ID_ErrorResponse = 0x02,
44  CAM_MSG_ID_SelectVersionRequest = 0x03,
45  CAM_MSG_ID_SelectVersionResponse = 0x04,
46  CAM_MSG_ID_DeviceAddedNotification = 0x05,
47  CAM_MSG_ID_DeviceRemovedNotification = 0x06,
48  CAM_MSG_ID_ActivateDeviceRequest = 0x07,
49  CAM_MSG_ID_DeactivateDeviceRequest = 0x08,
50  CAM_MSG_ID_StreamListRequest = 0x09,
51  CAM_MSG_ID_StreamListResponse = 0x0A,
52  CAM_MSG_ID_MediaTypeListRequest = 0x0B,
53  CAM_MSG_ID_MediaTypeListResponse = 0x0C,
54  CAM_MSG_ID_CurrentMediaTypeRequest = 0x0D,
55  CAM_MSG_ID_CurrentMediaTypeResponse = 0x0E,
56  CAM_MSG_ID_StartStreamsRequest = 0x0F,
57  CAM_MSG_ID_StopStreamsRequest = 0x10,
58  CAM_MSG_ID_SampleRequest = 0x11,
59  CAM_MSG_ID_SampleResponse = 0x12,
60  CAM_MSG_ID_SampleErrorResponse = 0x13,
61  CAM_MSG_ID_PropertyListRequest = 0x14,
62  CAM_MSG_ID_PropertyListResponse = 0x15,
63  CAM_MSG_ID_PropertyValueRequest = 0x16,
64  CAM_MSG_ID_PropertyValueResponse = 0x17,
65  CAM_MSG_ID_SetPropertyValueRequest = 0x18,
66  } CAM_MSG_ID;
67 
68 #define CAM_HEADER_SIZE 2
69 
70 typedef struct
71 {
72  BYTE Version;
73  CAM_MSG_ID MessageId;
75 
76 /* Messages Exchanged on the Device Enumeration Channel (2.2.2) */
77 
78 typedef struct
79 {
80  CAM_SHARED_MSG_HEADER Header;
82 
83 typedef struct
84 {
85  CAM_SHARED_MSG_HEADER Header;
87 
88 typedef struct
89 {
90  CAM_SHARED_MSG_HEADER Header;
91  WCHAR* DeviceName;
92  char* VirtualChannelName;
94 
95 typedef struct
96 {
97  CAM_SHARED_MSG_HEADER Header;
98  char* VirtualChannelName;
100 
101 /* Messages Exchanged on Device Channels (2.2.3) */
102 
103 typedef struct
104 {
105  CAM_SHARED_MSG_HEADER Header;
107 
108 typedef enum
109 {
110  CAM_ERROR_CODE_UnexpectedError = 0x00000001,
111  CAM_ERROR_CODE_InvalidMessage = 0x00000002,
112  CAM_ERROR_CODE_NotInitialized = 0x00000003,
113  CAM_ERROR_CODE_InvalidRequest = 0x00000004,
114  CAM_ERROR_CODE_InvalidStreamNumber = 0x00000005,
115  CAM_ERROR_CODE_InvalidMediaType = 0x00000006,
116  CAM_ERROR_CODE_OutOfMemory = 0x00000007,
117  CAM_ERROR_CODE_ItemNotFound = 0x00000008,
118  CAM_ERROR_CODE_SetNotFound = 0x00000009,
119  CAM_ERROR_CODE_OperationNotSupported = 0x0000000A,
120 } CAM_ERROR_CODE;
121 
122 typedef struct
123 {
124  CAM_SHARED_MSG_HEADER Header;
125  CAM_ERROR_CODE ErrorCode;
127 
128 typedef struct
129 {
130  CAM_SHARED_MSG_HEADER Header;
132 
133 typedef struct
134 {
135  CAM_SHARED_MSG_HEADER Header;
137 
138 typedef struct
139 {
140  CAM_SHARED_MSG_HEADER Header;
142 
143 typedef enum
144 {
145  CAM_STREAM_FRAME_SOURCE_TYPE_Color = 0x0001,
146  CAM_STREAM_FRAME_SOURCE_TYPE_Infrared = 0x0002,
147  CAM_STREAM_FRAME_SOURCE_TYPE_Custom = 0x0008,
148 } CAM_STREAM_FRAME_SOURCE_TYPES;
149 
150 typedef enum
151 {
152  CAM_STREAM_CATEGORY_Capture = 0x01,
153 } CAM_STREAM_CATEGORY;
154 
155 typedef struct
156 {
157  CAM_STREAM_FRAME_SOURCE_TYPES FrameSourceTypes;
158  CAM_STREAM_CATEGORY StreamCategory;
159  BYTE Selected;
160  BYTE CanBeShared;
162 
163 typedef struct
164 {
165  CAM_SHARED_MSG_HEADER Header;
166  BYTE N_Descriptions;
167  CAM_STREAM_DESCRIPTION StreamDescriptions[255];
169 
170 typedef struct
171 {
172  CAM_SHARED_MSG_HEADER Header;
173  BYTE StreamIndex;
175 
176 typedef enum
177 {
178  CAM_MEDIA_FORMAT_H264 = 0x01,
179  CAM_MEDIA_FORMAT_MJPG = 0x02,
180  CAM_MEDIA_FORMAT_YUY2 = 0x03,
181  CAM_MEDIA_FORMAT_NV12 = 0x04,
182  CAM_MEDIA_FORMAT_I420 = 0x05,
183  CAM_MEDIA_FORMAT_RGB24 = 0x06,
184  CAM_MEDIA_FORMAT_RGB32 = 0x07,
185 } CAM_MEDIA_FORMAT;
186 
187 typedef enum
188 {
189  CAM_MEDIA_TYPE_DESCRIPTION_FLAG_DecodingRequired = 0x01,
190  CAM_MEDIA_TYPE_DESCRIPTION_FLAG_BottomUpImage = 0x02,
191 } CAM_MEDIA_TYPE_DESCRIPTION_FLAGS;
192 
193 typedef struct
194 {
195  CAM_MEDIA_FORMAT Format;
196  UINT32 Width;
197  UINT32 Height;
198  UINT32 FrameRateNumerator;
199  UINT32 FrameRateDenominator;
200  UINT32 PixelAspectRatioNumerator;
201  UINT32 PixelAspectRatioDenominator;
202  CAM_MEDIA_TYPE_DESCRIPTION_FLAGS Flags;
204 
205 typedef struct
206 {
207  CAM_SHARED_MSG_HEADER Header;
208  size_t N_Descriptions;
209  CAM_MEDIA_TYPE_DESCRIPTION* MediaTypeDescriptions;
211 
212 typedef struct
213 {
214  CAM_SHARED_MSG_HEADER Header;
215  BYTE StreamIndex;
217 
218 typedef struct
219 {
220  CAM_SHARED_MSG_HEADER Header;
221  CAM_MEDIA_TYPE_DESCRIPTION MediaTypeDescription;
223 
224 typedef struct
225 {
226  BYTE StreamIndex;
227  CAM_MEDIA_TYPE_DESCRIPTION MediaTypeDescription;
229 
230 typedef struct
231 {
232  CAM_SHARED_MSG_HEADER Header;
233  BYTE N_Infos;
234  CAM_START_STREAM_INFO StartStreamsInfo[255];
236 
237 typedef struct
238 {
239  CAM_SHARED_MSG_HEADER Header;
241 
242 typedef struct
243 {
244  CAM_SHARED_MSG_HEADER Header;
245  BYTE StreamIndex;
247 
248 typedef struct
249 {
250  CAM_SHARED_MSG_HEADER Header;
251  BYTE StreamIndex;
252  size_t SampleSize;
253  BYTE* Sample;
255 
256 typedef struct
257 {
258  CAM_SHARED_MSG_HEADER Header;
259  BYTE StreamIndex;
260  CAM_ERROR_CODE ErrorCode;
262 
263 typedef struct
264 {
265  CAM_SHARED_MSG_HEADER Header;
267 
268 typedef enum
269 {
270  CAM_PROPERTY_SET_CameraControl = 0x01,
271  CAM_PROPERTY_SET_VideoProcAmp = 0x02,
272 } CAM_PROPERTY_SET;
273 
274 /* CameraControl properties */
275 #define CAM_PROPERTY_ID_CAMERA_CONTROL_Exposure 0x01
276 #define CAM_PROPERTY_ID_CAMERA_CONTROL_Focus 0x02
277 #define CAM_PROPERTY_ID_CAMERA_CONTROL_Pan 0x03
278 #define CAM_PROPERTY_ID_CAMERA_CONTROL_Roll 0x04
279 #define CAM_PROPERTY_ID_CAMERA_CONTROL_Tilt 0x05
280 #define CAM_PROPERTY_ID_CAMERA_CONTROL_Zoom 0x06
281 
282 /* VideoProcAmp properties */
283 #define CAM_PROPERTY_ID_VIDEO_PROC_AMP_BacklightCompensation 0x01
284 #define CAM_PROPERTY_ID_VIDEO_PROC_AMP_Brightness 0x02
285 #define CAM_PROPERTY_ID_VIDEO_PROC_AMP_Contrast 0x03
286 #define CAM_PROPERTY_ID_VIDEO_PROC_AMP_Hue 0x04
287 #define CAM_PROPERTY_ID_VIDEO_PROC_AMP_WhiteBalance 0x05
288 
289 typedef enum
290 {
291  CAM_PROPERTY_CAPABILITY_Manual = 0x01,
292  CAM_PROPERTY_CAPABILITY_Auto = 0x02,
293 } CAM_PROPERTY_CAPABILITIES;
294 
295 typedef struct
296 {
297  CAM_PROPERTY_SET PropertySet;
298  BYTE PropertyId;
299  CAM_PROPERTY_CAPABILITIES Capabilities;
300  INT32 MinValue;
301  INT32 MaxValue;
302  INT32 Step;
303  INT32 DefaultValue;
305 
306 typedef struct
307 {
308  CAM_SHARED_MSG_HEADER Header;
309  size_t N_Properties;
310  CAM_PROPERTY_DESCRIPTION* Properties;
312 
313 typedef struct
314 {
315  CAM_SHARED_MSG_HEADER Header;
316  CAM_PROPERTY_SET PropertySet;
317  BYTE PropertyId;
319 
320 typedef enum
321 {
322  CAM_PROPERTY_MODE_Manual = 0x01,
323  CAM_PROPERTY_MODE_Auto = 0x02,
324 } CAM_PROPERTY_MODE;
325 
326 typedef struct
327 {
328  CAM_PROPERTY_MODE Mode;
329  INT32 Value;
331 
332 typedef struct
333 {
334  CAM_SHARED_MSG_HEADER Header;
335  CAM_PROPERTY_VALUE PropertyValue;
337 
338 typedef struct
339 {
340  CAM_SHARED_MSG_HEADER Header;
341  CAM_PROPERTY_SET PropertySet;
342  BYTE PropertyId;
343  CAM_PROPERTY_VALUE PropertyValue;
345 
346 #ifdef __cplusplus
347 }
348 #endif
349 #endif /* FREERDP_CHANNEL_RDPECAM_H */